<?php /** * Elgg administration plugin screen * * Shows a list of plugins that can be sorted and filtered. * * @package Elgg.Core * @subpackage Admin.Plugins */ elgg_load_js('lightbox'); elgg_load_css('lightbox'); elgg_generate_plugin_entities(); $installed_plugins = elgg_get_plugins('any'); $show_category = get_input('category', 'all'); $sort = get_input('sort', 'priority'); // Get a list of the all categories // and trim down the plugin list if we're not viewing all categories. // @todo this could be cached somewhere after have the manifest loaded $categories = array(); foreach ($installed_plugins as $id => $plugin) { if (!$plugin->isValid()) { if ($plugin->isActive()) { // force disable and warn elgg_add_admin_notice('invalid_and_deactivated_' . $plugin->getID(), elgg_echo('ElggPlugin:InvalidAndDeactivated', array($plugin->getId()))); $plugin->deactivate(); } continue; } $plugin_categories = $plugin->getManifest()->getCategories(); // handle plugins that don't declare categories // unset them here because this is the list we foreach switch ($show_category) { case 'all': break; case 'active': if (!$plugin->isActive()) { unset($installed_plugins[$id]); } break; case 'inactive': if ($plugin->isActive()) { unset($installed_plugins[$id]); } break; case 'nonbundled': if (in_array('bundled', $plugin_categories)) { unset($installed_plugins[$id]); } break; default: if (!in_array($show_category, $plugin_categories)) { unset($installed_plugins[$id]); } break; } if (isset($plugin_categories)) { foreach ($plugin_categories as $category) { if (!array_key_exists($category, $categories)) { // if localization string not defined, fall back to original category string $cat_raw_string = "admin:plugins:category:$category"; $cat_display_string = elgg_echo($cat_raw_string); if ($cat_display_string == $cat_raw_string) { $cat_display_string = ucwords($category); } $categories[$category] = $cat_display_string; } } } } $guids = array(); foreach ($installed_plugins as $plugin) { $guids[] = $plugin->getGUID(); } // sort plugins switch ($sort) { case 'date': $plugin_list = array(); foreach ($installed_plugins as $plugin) { $create_date = $plugin->getTimeCreated(); while (isset($plugin_list[$create_date])) { $create_date++; } $plugin_list[$create_date] = $plugin; } krsort($plugin_list); break; case 'alpha': $plugin_list = array(); foreach ($installed_plugins as $plugin) { $plugin_list[$plugin->getFriendlyName()] = $plugin; } ksort($plugin_list); break; case 'priority': default: $plugin_list = $installed_plugins; break; } asort($categories); // we want bundled/nonbundled pulled to be at the top of the list unset($categories['bundled']); unset($categories['nonbundled']); $common_categories = array( 'all' => elgg_echo('admin:plugins:category:all'), 'active' => elgg_echo('admin:plugins:category:active'), 'inactive' => elgg_echo('admin:plugins:category:inactive'), 'bundled' => elgg_echo('admin:plugins:category:bundled'), 'nonbundled' => elgg_echo('admin:plugins:category:nonbundled'), ); $categories = array_merge($common_categories, $categories); // security - only want a defined option if (!array_key_exists($show_category, $categories)) { $show_category = reset($categories); } $category_form = elgg_view_form('admin/plugins/filter', array( 'action' => 'admin/plugins', 'method' => 'get', 'disable_security' => true, ), array( 'category' => $show_category, 'category_options' => $categories, 'sort' => $sort, )); $sort_options = array( 'priority' => elgg_echo('admin:plugins:sort:priority'), 'alpha' => elgg_echo('admin:plugins:sort:alpha'), 'date' => elgg_echo('admin:plugins:sort:date'), ); // security - only want a defined option if (!array_key_exists($sort, $sort_options)) { $sort = reset($sort_options); } $sort_form = elgg_view_form('admin/plugins/sort', array( 'action' => 'admin/plugins', 'method' => 'get', 'disable_security' => true, ), array( 'sort' => $sort, 'sort_options' => $sort_options, 'category' => $show_category, )); $buttons = "<div class=\"clearfix mbm\">"; $buttons .= elgg_view_form('admin/plugins/change_state', array( 'action' => 'action/admin/plugins/activate_all', 'class' => 'float', ), array( 'guids' => $guids, 'action' => 'activate', )); $buttons .= elgg_view_form('admin/plugins/change_state', array( 'action' => 'action/admin/plugins/deactivate_all', 'class' => 'float', ), array( 'guids' => $guids, 'action' => 'deactivate', )); $buttons .= "</div>"; $buttons .= $category_form . $sort_form; // construct page header ?> <div id="content_header" class="mbm clearfix"> <div class="content-header-options"><?php echo $buttons ?></div> </div> <div id="elgg-plugin-list"> <?php $options = array( 'limit' => 0, 'full_view' => true, 'list_type_toggle' => false, 'pagination' => false, ); if ($show_category == 'all' && $sort == 'priority') { $options['display_reordering'] = true; } echo elgg_view_entity_list($plugin_list, $options); ?> </div>