function subsite_manager_runonce_elgg18() { $options = array("type" => "site", "subtype" => Subsite::SUBTYPE, "limit" => false); if ($subsites = elgg_get_entities($options)) { $global_plugins = subsite_manager_get_global_enabled_plugins(); foreach ($subsites as $subsite) { $subsite->setPrivateSetting('subsite_manager_plugins_activate', serialize($global_plugins)); } } }
/** * 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); }
/** * Change the display of the plugin action button (activate/deactivate) * * @param string $hook What hook is fired * @param string $type Of what type * @param string $returnvalue The default return value * @param array $params Provided parameters * @return string */ function subsite_manager_plugin_action_button_hook($hook, $type, $returnvalue, $params) { $result = $returnvalue; if (!empty($params) && is_array($params)) { $entity = elgg_extract("entity", $params); if (!empty($entity) && elgg_instanceof($entity, "object", "plugin")) { $global_enabled_plugins = subsite_manager_get_global_enabled_plugins(); if (!empty($global_enabled_plugins) && is_array($global_enabled_plugins) && in_array($entity->getID(), $global_enabled_plugins)) { $result = "<div style='width:20px;height:16px'></div>"; } } } return $result; }