<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
$CI = & get_instance();
if ( $post = mso_check_post(array('f_session_id')) )
{
mso_checkreferer();
// есть ли выбранные пункты?
if (isset($post['f_check_submit']))
{
// определяем действие
if (isset($post['f_activate_submit'])) $act = 'activate';
elseif (isset($post['f_deactivate_submit'])) $act = 'deactivate';
elseif (isset($post['f_uninstall_submit'])) $act = 'uninstall';
else $act = false;
if ($act)
{
$out = t('Выполнено:') . ' ';
foreach ($post['f_check_submit'] as $f_name=>$val)
{
if ($act == 'activate') mso_plugin_activate($f_name); # активация плагина
elseif ($act == 'deactivate') mso_plugin_deactivate($f_name); # деактивация плагина
elseif ($act == 'uninstall') mso_plugin_uninstall($f_name); # унинстал
$out .= ' • ' . $f_name;
}
mso_redirect('admin/plugins');
}
else
echo '<div class="error">' . t('Ошибка обновления') . '</div>';
}
else
echo '<div class="error">' . t('Отметьте необходимые плагины') . '</div>';
}
?>
<h1><?= t('Плагины') ?></h1>
<p class="info"><?= t('Плагины расширяют стандартные возможности сайта. Здесь вы можете включить или отключить плагины. Если вы деинсталируете плагин, то это удаляет его настройки, что позволяет избежать «замусоривания» базы данных.') ?></p>
<?php
// для вывода будем использовать html-таблицу
$CI->load->library('table');
$tmpl = array (
'table_open' => '<table class="page active-plugins" id="pagetable">',
'row_alt_start' => '<tr>',
'cell_alt_start' => '<td>',
);
$CI->table->set_template($tmpl); // шаблон таблицы
// заголовки
$CI->table->set_heading(' ', t('Каталог'), ' ', t('Название'), t('Описание'));
// проходимся по каталогу плагинов и выводим информацию о них
// выводим две таблицы - верхняя - активные плагины, внизу неактивные
// поэтому загоняем цикл вывода в отдельную функцию _create_table
$flag_present_plugins = _create_table(true, $opt_url);
if ($flag_present_plugins)
{
$table1 = $CI->table->generate(); // вывод подготовленной таблицы
# добавим строчку для дополнительного действия
$table1 .= '<p><button type="submit" name="f_deactivate_submit" class="button i-chain-broken">' . t('Выключить') . '</button> <button type="submit" name="f_uninstall_submit" class="button i-remove">' . t('Деинсталировать') . '</button></p>';
}
else $table1 = '';
// вторая таблица
$tmpl = array (
'table_open' => '<table class="page inactive-plugins" id="pagetable2">',
'row_alt_start' => '<tr>',
'cell_alt_start' => '<td>',
);
$CI->table->clear();
$CI->table->set_template($tmpl); // шаблон таблицы
// заголовки
$CI->table->set_heading(' ', t('Каталог'), ' ', t('Название'), t('Описание'));
$flag_present_plugins = _create_table(false, $temp);
if ($flag_present_plugins)
{
$table2 = $CI->table->generate(); // вывод подготовленной таблицы
// добавим строчку для дополнительного действия
$table2 .= '<p><button type="submit" name="f_activate_submit" class="button i-chain">' . t('Включить') . '</button></p>';
}
else
$table2 = '';
echo mso_load_jquery('jquery.cookie.js');
echo mso_load_script(getinfo('plugins_url'). 'tabs/tabs.js');
echo '<form method="post">' . mso_form_session('f_session_id') . '
<div class="mso-tabs_widget mso-tabs_widget_000"><div class="mso-tabs">
<ul class="mso-tabs-nav">
<li class="mso-tabs-elem mso-tabs-current active-plugins"><span class="i-bell-o">' . t('Активные плагины') . '</span></li>
<li class="mso-tabs-elem inactive-plugins"><span class="i-bell-slash-o">' . t('Неактивные плагины') . '</span></li>
<li class="mso-tabs-elem options-plugins"><span class="i-cog">' . t('Опции плагинов') . '</span></li>
</ul>
<div class="mso-tabs-box mso-tabs-visible">' . $table1 . '</div>
<div class="mso-tabs-box">' . $table2 . '</div>
<div class="mso-tabs-box tab-options-plugins"><p class="nav">' . trim(implode(' ', $opt_url)) .'</p></div>
</div></div></form>';
// формирование таблиц
function _create_table($active_plugins = true, &$opt_url = [])
{
global $MSO;
$CI = & get_instance();
$CI->load->helper('directory');
$plugins_dir = $MSO->config['plugins_dir'];
$opt_url = array();
// все каталоги в массиве $dirs
$dirs = directory_map($plugins_dir, true);
sort($dirs);
// пересортируем элементы масива так чтобы активные плагины из
// $MSO->active_plugins оказались вверху
$dirs = array_unique(array_merge($MSO->active_plugins, $dirs));
$flag_present_plugins = false; // признак, что пустая таблица
foreach ($dirs as $dir)
{
if (!is_dir($plugins_dir . $dir)) continue; // если не каталог ничего не делаем
if ($active_plugins and !in_array($dir, $MSO->active_plugins)) continue;
if (!$active_plugins and in_array($dir, $MSO->active_plugins)) continue;
$info_f = $plugins_dir . $dir . '/info.php';
if (file_exists($info_f))
{
require($info_f);
if (isset( $info ))
{
$name = $name_plu = isset($info['name']) ? mso_strip($info['name']) : '';
$version = isset($info['version']) ? $info['version'] : '';
$description = isset($info['description']) ? $info['description'] : '';
$author = isset($info['author']) ? mso_strip($info['author']) : '';
$author_url = isset($info['author_url']) ? $info['author_url'] : false;
$plugin_url = isset($info['plugin_url']) ? $info['plugin_url'] : false;
$help = isset($info['help']) ? $info['help'] : false;
$options_url = isset($info['options_url']) ? $info['options_url'] : false;
$group = isset($info['group']) ? $info['group'] : '';
$editors = isset($info['editors']) ? ' + ' . $info['editors'] : '';
if ($author_url) $author = '<a href="' . $author_url . '">' . $author . '</a>';
if ($plugin_url) $name = '<a href="' . $plugin_url . '">' . $name . '</a>';
$act = '<input type="checkbox" name="f_check_submit[' . $dir . ']" id="f_check_submit_' . $dir . '">';
$dir0 = $dir;
if (in_array($dir, $MSO->active_plugins))
{
if (function_exists($dir . '_mso_options'))
{
// есть опции
$status = '<a class="t120 i-cogs" title="' . t('Настройки плагина') . '" href="' . getinfo('site_admin_url') . 'plugin_options/' . $dir . '"></a>';
$opt_url[] = '<a href="' . getinfo('site_admin_url') . 'plugin_options/' . $dir . '" title="' .htmlspecialchars($name_plu) . '">' . $dir . '</a> ';
}
else
{
$status = ' ';
}
$dir = '<label for="f_check_submit_' . $dir . '"><span class="plugin_on">' . $dir . '</span></label>';
if ($options_url)
{
$status .= ' <a class="t120 i-cogs" href="' . $options_url . '" title="' . t('Настройки плагина') . '"></a>';
$opt_url[] = '<a href="' . $options_url . '" title="' .htmlspecialchars($name_plu) . '">' . $dir0 . '</a> ';
}
}
else
{
$dir = '<label for="f_check_submit_' . $dir . '">' . $dir . '</label>';
// формируем ссылку для включения плагина
$status = '<a class="i-chain-broken" title="' . t('Включить плагин') . '" href="" onclick="' . "$('#f_check_submit_" . $dir0 . "').attr('checked', 'checked'); $('form').prepend('<input type=hidden name=f_activate_submit value=1>'); $('form').submit(); return false; " . '"></a>';
}
if ($group) $group = '<div class="t80">' . $group . '</div>';
if ($help) $status .= ' <a class="t120 i-info-circle" href="' . $help . '" target="_blank" title="' . t('Помощь по плагину') . '"></a>';
$CI->table->add_row($act,
array('data' => $dir . ' <sup title="' . t('Версия') . '">' . $version . '</sup>', 'class' => 't-nowrap' ),
$status,
array('data' => $name . $group),
array('data' => $description . '<div>' . t('Автор') . ': ' . $author . $editors . '</div>', 'class' => 't90'));
$flag_present_plugins = true;
}
}
}
return $flag_present_plugins;
}
# end of file