public function activate_plugins()
{
// extract checked plugin IDs from $_POST
$plugin_ids = array();
foreach ($this->handler_vars as $id => $activate) {
if (preg_match('/plugin_([a-f0-9]{8})/u', $id, $matches) && $activate) {
$plugin_ids[] = $matches[1];
} elseif (preg_match('/plugin_(.+)/u', $id, $matches) && $activate) {
$plugin_ids[] = $matches[1];
}
}
if (count($plugin_ids) == 0) {
return;
}
// set the user_id in the session in case plugin activation methods need it
if (!($u = User::get_by_name($this->handler_vars['admin_username']))) {
// @todo die gracefully
die(_t('No admin user found'));
}
$u->remember();
// loop through all plugins to find matching plugin files
$plugin_files = Plugins::list_all();
foreach ($plugin_files as $file) {
if (in_array(basename($file), $plugin_ids)) {
Plugins::activate_plugin($file);
continue;
}
$id = Plugins::id_from_file($file);
if (in_array($id, $plugin_ids)) {
Plugins::activate_plugin($file);
}
}
// unset the user_id session variable
Session::clear_userid($_SESSION['user_id']);
unset($_SESSION['user_id']);
}