<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* MaxSite CMS
* (c) http://max-3000.com/
*/
# инициализация админки
function mso_admin_init($args = array())
{
global $admin_menu;
$admin_menu = array();
$menu = mso_hook('admin_menu');
if (!$menu) $menu = mso_hook('admin_menu_default');
mso_admin_plugins_default(); # дефолтные плагины
mso_hook('admin_init');
}
# добавляет пункт меню админки
function mso_admin_menu_add($group = '', $url = '', $name = '', $sort = 10)
{
global $admin_menu;
# группа - адрес - название ссылка - порядок в своей группе
if ( ($url > '') and ($sort == 0) ) $sort = 10;
$admin_menu[$group][$url] = $sort . '_' . $name;
natsort($admin_menu[$group]);
return $admin_menu;
}
# служебная функция
# удяляем из меню начальные цифры 10_меню -> меню
function _mso_del_menu_pod($text)
{
$pos = strstr($text, '_');
if ($pos !== false) $text = substr($pos, 1);
return $text;
}
# вывод меню в шаблоне админки
function mso_admin_menu()
{
$out = mso_hook('admin_menu', false);
if (!$out) $out = mso_hook('admin_menu_default');
return $out;
}
# вывод хидера в шаблоне админки
function mso_admin_header()
{
$out = mso_hook('admin_header', false);
if (!$out) $out = mso_hook('admin_header_default');
return $out;
}
# вывод подвала в шаблоне админки
function mso_admin_footer()
{
$out = mso_hook('admin_footer', false);
if (!$out) $out = mso_hook('admin_footer_default');
return $out;
}
# вывод контента в шаблоне админки
function mso_admin_content()
{
global $MSO;
$out = mso_hook('admin_content_do');
if ( count($MSO->data['uri_segment']) > 1 )
{
$url = $MSO->data['uri_segment'][2];
if ( mso_hook_present('admin_url_' . $url)) $out = mso_hook('admin_url_' . $url, $out);
else $out = mso_hook('admin_content_default', $out);
}
else
{
$out = mso_hook('admin_content_default', $out);
}
$out = mso_hook('admin_content', $out);
return $out;
}
# построение ссылки с учетом указанного 3-го сегмента
# admin / options / tri
# можно стоить меню в плагинах админки. Можно указать класс выбранной ссылки
# $class_add — дополнительный класс к ссылке
function mso_admin_link_segment_build($plu_url, $segment, $title, $class_link, $class_add = '')
{
global $MSO;
// определяем текущий сегмент
if ( count($MSO->data['uri_segment']) > 2 )
$seg = $MSO->data['uri_segment'][3];
else $seg = false;
$class = '';
// если сегменты совпадают, то ссылку выделяем классом
if ($seg == $segment)
{
$class = $class_link . ' ';
}
$class = trim($class . ' ' . $class_add);
if ($class) $class = ' class="' . $class . '"';
$out = '<a href="' . $plu_url .'/' . $segment . '"' . $class . '>' . $title . '</a>';
return $out;
}
# деактивация плагина
function mso_plugin_deactivate($f_name)
{
global $MSO;
// если плагин уже активен, то его удаляем из активных
if (in_array($f_name, $MSO->active_plugins))
{ // в массиве, значит активен - отключаем его
// выполним деактивацию в самом плагине, если есть
$f = $f_name . '_deactivate';
if (function_exists($f)) $f();
// удалим из глобального
$MSO->active_plugins = array_flip($MSO->active_plugins);
unset($MSO->active_plugins[$f_name]);
$MSO->active_plugins = array_flip($MSO->active_plugins);
// обновляем настройки
mso_add_option ('active_plugins', $MSO->active_plugins, 'general');
// return '<div class="update">Плагин <strong>' . $f_name . '</strong> выключен!</div>';
return true;
}
else return false;
}
# активация плагина
function mso_plugin_activate($f_name)
{
global $MSO;
// если плагин уже активен, то его удаляем из активных
if (!in_array($f_name, $MSO->active_plugins))
{ // неактивный плагин
mso_plugin_load($f_name);
$f = $f_name . '_activate';
if (function_exists($f)) $f();
mso_add_option ('active_plugins', $MSO->active_plugins, 'general');
return true;
}
else return false;
}
# uninstall плагина если он активный
function mso_plugin_uninstall($f_name)
{
global $MSO;
if (in_array($f_name, $MSO->active_plugins))
{ // в массиве, значит активен - отключаем его
// выполним деактивацию в самом плагине, если есть
$f = $f_name . '_deactivate';
if (function_exists($f)) $f();
$f = $f_name . '_uninstall';
if (function_exists($f)) $f();
// удалим из глобального
$MSO->active_plugins = array_flip($MSO->active_plugins);
unset($MSO->active_plugins[$f_name]);
$MSO->active_plugins = array_flip($MSO->active_plugins);
// обновляем настройки
mso_add_option ('active_plugins', $MSO->active_plugins, 'general');
// echo '<div class="update">Плагин <strong>' . $f_name . '</strong> деинсталирован!</div>';
return true;
}
else return false;
}
/**
* Пагинация для админки
* отдельной функцией, чтобы отвязаться от внешних плагинов
*/
function mso_admin_pagination($r)
{
// используем плагин pagination
if (!function_exists('pagination_go'))
require_once(getinfo('plugins_dir') . 'pagination/index.php');
// только со своими настройками, не зависимо от опций плагина
$r['format'] = array();
$r['format_first'] = '';
$r['format_prev'] = '';
$r['format_next'] = '';
$r['format_last'] = '';
$r['sep'] = '';
$r['sep2'] = '';
pagination_go($r);
}
# end of file