123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- <?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');
- // @todo this should occur in the controller code
- _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)) {
- $categories[$category] = ElggPluginManifest::getFriendlyCategory($category);
- }
- }
- }
- }
- $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('sort:priority'),
- 'alpha' => elgg_echo('sort:alpha'),
- 'date' => elgg_echo('sort:newest'),
- );
- // 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>
|