Jetpack::get_available_modules PHP Method

get_available_modules() public static method

Make sure to tuck away module "library" files in a sub-directory.
public static get_available_modules ( $min_version = false, $max_version = false )
    public static function get_available_modules($min_version = false, $max_version = false)
    {
        static $modules = null;
        if (!isset($modules)) {
            $available_modules_option = Jetpack_Options::get_option('available_modules', array());
            // Use the cache if we're on the front-end and it's available...
            if (!is_admin() && !empty($available_modules_option[JETPACK__VERSION])) {
                $modules = $available_modules_option[JETPACK__VERSION];
            } else {
                $files = Jetpack::glob_php(JETPACK__PLUGIN_DIR . 'modules');
                $modules = array();
                foreach ($files as $file) {
                    if (!($headers = Jetpack::get_module($file))) {
                        continue;
                    }
                    $modules[Jetpack::get_module_slug($file)] = $headers['introduced'];
                }
                Jetpack_Options::update_option('available_modules', array(JETPACK__VERSION => $modules));
            }
        }
        /**
         * Filters the array of modules available to be activated.
         *
         * @since 2.4.0
         *
         * @param array $modules Array of available modules.
         * @param string $min_version Minimum version number required to use modules.
         * @param string $max_version Maximum version number required to use modules.
         */
        $mods = apply_filters('jetpack_get_available_modules', $modules, $min_version, $max_version);
        if (!$min_version && !$max_version) {
            return array_keys($mods);
        }
        $r = array();
        foreach ($mods as $slug => $introduced) {
            if ($min_version && version_compare($min_version, $introduced, '>=')) {
                continue;
            }
            if ($max_version && version_compare($max_version, $introduced, '<')) {
                continue;
            }
            $r[] = $slug;
        }
        return $r;
    }

Usage Example

 function get_modules()
 {
     include_once JETPACK__PLUGIN_DIR . 'modules/module-info.php';
     $available_modules = $this->jetpack->get_available_modules();
     $active_modules = $this->jetpack->get_active_modules();
     $modules = array();
     $jetpack_active = Jetpack::is_active() || Jetpack::is_development_mode();
     foreach ($available_modules as $module) {
         if ($module_array = $this->jetpack->get_module($module)) {
             $short_desc = apply_filters('jetpack_short_module_description', $module_array['description'], $module);
             // Fix: correct multibyte strings truncate with checking for mbstring extension
             $short_desc_trunc = function_exists('mb_strlen') ? mb_strlen($short_desc) > 143 ? mb_substr($short_desc, 0, 140) . '...' : $short_desc : (strlen($short_desc) > 143 ? substr($short_desc, 0, 140) . '...' : $short_desc);
             $module_array['module'] = $module;
             $module_array['activated'] = $jetpack_active ? in_array($module, $active_modules) : false;
             $module_array['deactivate_nonce'] = wp_create_nonce('jetpack_deactivate-' . $module);
             $module_array['activate_nonce'] = wp_create_nonce('jetpack_activate-' . $module);
             $module_array['available'] = self::is_module_available($module_array);
             $module_array['short_description'] = $short_desc_trunc;
             $module_array['configure_url'] = Jetpack::module_configuration_url($module);
             ob_start();
             do_action('jetpack_learn_more_button_' . $module);
             $module_array['learn_more_button'] = ob_get_clean();
             ob_start();
             if (Jetpack::is_active() && has_action('jetpack_module_more_info_connected_' . $module)) {
                 do_action('jetpack_module_more_info_connected_' . $module);
             } else {
                 do_action('jetpack_module_more_info_' . $module);
             }
             $module_array['long_description'] = ob_get_clean();
             $module_array['configurable'] = false;
             if (current_user_can('manage_options') && apply_filters('jetpack_module_configurable_' . $module, false)) {
                 $module_array['configurable'] = sprintf('<a href="%1$s">%2$s</a>', esc_url(Jetpack::module_configuration_url($module)), __('Configure', 'jetpack'));
             }
             $modules[$module] = $module_array;
         }
     }
     uasort($modules, array($this->jetpack, 'sort_modules'));
     if (!Jetpack::is_active()) {
         uasort($modules, array(__CLASS__, 'sort_requires_connection_last'));
     }
     return $modules;
 }
All Usage Examples Of Jetpack::get_available_modules
Jetpack