/** * Sync the plugins for a specific subsite * * @param ElggSite $subsite * * @return array ($sorted, $activated) number of sorted and activated plugins. */ function subsite_manager_sync_plugins(Subsite $subsite) { $main_site = elgg_get_config('site'); $plugins_by_id_map = elgg_get_config('plugins_by_id_map'); $global_order = subsite_manager_get_main_plugin_order(); $global_plugins_active = subsite_manager_get_global_enabled_plugins(); // pretend to be on the subsite elgg_set_config('site', $subsite); elgg_set_config('site_guid', $subsite->guid); elgg_set_config('plugins_by_id_map', array()); // make sure all plugins exist in the database elgg_generate_plugin_entities(); // mark plugins to activate $private_setting = $subsite->getPrivateSetting('subsite_manager_plugins_activate'); if (isset($private_setting)) { $to_activate = unserialize($private_setting); } else { $to_activate = array(); } $sorted = 0; $activated = 0; // reorder plugins according to global order and activate global plugins $plugins = subsite_manager_get_plugins(); foreach ($plugins as $plugin) { $priority = array_search($plugin->getID(), $global_order) + 1; if ($priority === false) { $priority = 'last'; } $priority_name = elgg_namespace_plugin_private_setting('internal', 'priority'); if ($plugin->get($priority_name) != $priority) { $plugin->set($priority_name, $priority); $sorted++; } if (!$plugin->isActive() && in_array($plugin->getID(), $global_plugins_active)) { if (!in_array($plugin->getID(), $to_activate)) { $to_activate[] = $plugin->getID(); $activated++; } } } $subsite->setPrivateSetting('subsite_manager_plugins_activate', serialize($to_activate)); // clean the caches elgg_invalidate_simplecache(); elgg_reset_system_cache(); // restore original "main" site elgg_set_config('site', $main_site); elgg_set_config('site_guid', $main_site->guid); elgg_set_config('plugins_by_id_map', $plugins_by_id_map); return array($sorted, $activated); }
<?php // can only be viewed on main site if (subsite_manager_on_subsite()) { forward("admin"); } $plugins = subsite_manager_get_plugins(); $priority_name = elgg_namespace_plugin_private_setting('internal', 'priority'); // make sure all main plugins have an order foreach ($plugins as $plugin) { if (!$plugin->get($priority_name)) { $plugin->set($priority_name, 'last'); } } elgg_generate_plugin_entities(); $options = array('type' => 'site', 'subtype' => Subsite::SUBTYPE, 'limit' => false); $subsites = array(); $batch = new ElggBatch('elgg_get_entities', $options); foreach ($batch as $subsite) { $subsites[] = array('guid' => $subsite->guid, 'name' => $subsite->name); } echo '<p><div id="status">Klik op update</div><div id="result"></div></p>'; echo elgg_view("input/button", array('href' => '#', 'id' => 'subsite-manager-update-plugins', 'class' => 'elgg-button elgg-button-action', 'data-subsites' => json_encode($subsites), 'value' => 'Update plugins'));