예제 #1
0
/**
 * 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);
}
예제 #2
0
<?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'));