View file sys/inc/functions/ds-admin.php

File size: 22.59Kb
<?php 

function is_page_admin() {
    if (strpos($_SERVER['REQUEST_URI'], '/adm_panel/') !== false) {
        return true; 
    }
    return false; 
}

function get_admin_url($url) {
    if (preg_match('/^([A-z\-\_]+)$/m', $url)) {
        $url = 'index.php?admin=' . $url;
    }    
    return $url; 
}

/**
* Функция добавляет пункт меню в админку
*/ 

function add_menu_admin($menu_title, $url, $access = 'adm_info', $icon = '', $position = 10, $page_title = '', $callback = '')
{
    $admin_menu = ds_get('ds_admin_menu', array()); 
    $admin_menu[] = array(
        'title'      => $menu_title,  
        'page_title' => $page_title,  
        'position'   => $position, 
        'access'     => $access, 
        'icon'       => $icon,
        'url'        => get_admin_url($url), 
        'function'   => $callback, 
    ); 
    ds_set('ds_admin_menu', $admin_menu);
    
    $classesMenu = ds_get('ds_admin_menu_classes', array()); 
    $is_current_menu = strpos(get_current_url(), get_admin_url($url)); 

    if ($is_current_menu !== false && $is_current_menu > 0) {
        $classesMenu[get_admin_url($url)] = true; 
    }

    ds_set('ds_admin_menu_classes', $classesMenu);

    if (!empty($callback)) {
        $admin_pages = ds_get('ds_admin_pages', array()); 
        $admin_pages[get_admin_url($url)] = array(
            'title' => $page_title, 
            'access' => $access, 
            'function' => $callback,  
        ); 
        ds_set('ds_admin_pages', $admin_pages);
    }
}

/**
* Функция добавляет подпункт меню в админку
*/ 

function add_submenu_admin($menu_title, $url, $access = 'adm_info', $icon = '', $position = 10, $menu_parent = '', $page_title = '', $callback = '')
{
    $menu_parent = get_admin_url($menu_parent); 

    $admin_submenu = ds_get('ds_admin_submenu', array()); 
    $admin_submenu[$menu_parent][] = array(
        'title'      => $menu_title, 
        'page_title' => $page_title, 
        'position'   => $position,
        'access'     => $access, 
        'icon'       => $icon,
        'url'        => get_admin_url($url), 
        'function'   => $callback, 
        'parent'     => $menu_parent,
    ); 
    ds_set('ds_admin_submenu', $admin_submenu);

    $classesMenu = ds_get('ds_admin_menu_classes', array()); 

    $is_current_menu = strpos(get_current_url(), get_admin_url($url)); 
    if ($is_current_menu !== false) {
        $classesMenu[get_admin_url($url)] = true; 
        $classesMenu[$menu_parent] = true; 
    }

    ds_set('ds_admin_menu_classes', $classesMenu);


    if (!empty($callback)) {
        $admin_pages = ds_get('ds_admin_pages', array()); 
        $admin_pages[get_admin_url($url)] = array(
            'title' => $page_title, 
            'access' => $access, 
            'function' => $callback, 
        ); 
        ds_set('ds_admin_pages', $admin_pages);
    }
}

/**
* Возвращает меню админки 
*/ 
function get_admin_menu() 
{
    $menu = ds_get('ds_admin_menu', array()); 
    $submenu = ds_get('ds_admin_submenu', array()); 
    $classes = ds_get('ds_admin_menu_classes', array()); 

    foreach($menu AS $key => $item) {
        if (isset($classes[$item['url']])) {
            $menu[$key]['class'] = 'active'; 
        }
        if (!empty($submenu[$item['url']])) {
            $menu[$key]['submenu'] = $submenu[$item['url']]; 

            foreach($menu[$key]['submenu'] AS $s_key => $s_value) {
                if (isset($classes[$s_value['url']])) {
                    $menu[$key]['submenu'][$s_key]['class'] = 'active'; 
                }
            }
        }
    }

    return $menu; 
}

/**
* Функция возвращает зарегистрированную страницу админки
*/ 
function get_admin_page($page_name) 
{
    $admin_pages = ds_get('ds_admin_pages', array()); 

    if (isset($admin_pages[$page_name])) {
        return $admin_pages[$page_name]; 
    }

    return false; 
}

function ds_admin_menu_load() 
{
    add_menu_admin(__('Перейти на сайт'), ds_site_url(), 'adm_panel_show', 'fa-home', -1); 
    //add_menu_admin(__('Настройки'), 'settings_sys.php', 'adm_set_sys', 'fa-cog', 80); 
    //add_submenu_admin(__('Настройки BBcode'), 'settings_bbcode.php', 'adm_set_sys', ds_site_url() . '/style/icons/style.png', 23, 'settings_sys.php'); 
    //add_submenu_admin(__('Настройки форума'), 'settings_forum.php', 'adm_set_forum', ds_site_url() . '/style/icons/comments.png', 87, 'settings_sys.php'); 
    //add_submenu_admin(__('Настройки загрузок'), 'settings_loads.php', 'adm_set_loads', ds_site_url() . '/style/icons/folder_wrench.png', 80, 'settings_sys.php'); 
    //add_submenu_admin(__('Настройки чата'), 'settings_chat.php', 'adm_set_chat', ds_site_url() . '/style/icons/comment_edit.png', 40, 'settings_sys.php'); 
    //add_submenu_admin(__('Настройки фотогалереи'), 'settings_foto.php', 'adm_set_foto', ds_site_url() . '/style/icons/images.png', 80, 'settings_sys.php'); 
    //add_submenu_admin(__('Пользовательские настройки'), 'settings_user.php', 'adm_set_user', ds_site_url() . '/style/icons/group_edit.png', 80, 'settings_sys.php'); 
    add_menu_admin(__('Пользователи'), 'users.php', 'adm_set_sys', 'fa-users', 50); 
    add_menu_admin(__('Темы оформления'), 'themes.php', 'adm_set_sys', 'fa-paint-brush', 60); 
    add_menu_admin(__('Настройки'), 'settings.php?page=general', 'adm_set_sys', 'fa-cogs', 80); 
    add_submenu_admin(__('Группы пользователей'), 'accesses.php', 'adm_accesses', 'fa-sliders', 80, 'users.php');

    //add_menu_admin(__('Администрация'), 'administration.php', 'adm_show_adm', 'fa-user-md', 7); 
    //add_submenu_admin(__('Действия администрации'), 'adm_log.php', 'adm_log_read', ds_site_url() . '/style/icons/table_multiple.png', 80, 'administration.php'); 

    add_menu_admin(__('Плагины'), 'plugins.php', 'adm_set_sys', 'fa-plug', 80); 
    //add_menu_admin(__('Главное меню'), 'menu.php', 'adm_set_sys', 'fa-th-list', 34); 
    //add_menu_admin(__('MySQL запросы'), 'mysql.php', 'adm_mysql', 'fa-database', 80); 
    //add_menu_admin(__('Заливка таблиц'), 'tables.php', 'adm_mysql', 'fa-tasks', 80); 
    //add_menu_admin(__('Подарки'), '/user/gift/create.php', 'adm_set_sys', ds_site_url() . '/style/icons/ruby.png', 80); 
    //add_menu_admin(__('Смайлы'), 'smiles.php', 'adm_mysql', ds_site_url() . '/style/icons/emoticon_smile.png', 80); 
    //add_menu_admin(__('Список забаненых'), 'banlist.php', 'adm_banlist', ds_site_url() . '/style/icons/group_delete.png', 80); 
    //add_menu_admin(__('Синхронизация таблиц форума'), 'forum_sinc.php', 'adm_forum_sinc', ds_site_url() . '/style/icons/database_connect.png', 80); 
    //add_menu_admin(__('Бан по IP адресу (диапазону)'), 'ban_ip.php', 'adm_ban_ip', ds_site_url() . '/style/icons/zoom_out.png', 80); 
    //add_menu_admin(__('Редактирование IP операторов'), 'opsos.php', 'adm_ip_edit', ds_site_url() . '/style/icons/application_form_edit.png', 80); 

    add_submenu_admin(__('Рефералы'), 'referals.php', 'adm_ref', 'fa-line-chart', 80, 'info.php'); 
    add_submenu_admin(__('Статистика сайта'), 'statistic.php', 'adm_statistic', 'fa-bar-chart', 80, 'info.php'); 
    add_menu_admin(__('О системе'), 'info.php', 'adm_info', 'fa-life-ring', 99); 

    do_event('ds_admin_menu_load'); 
}

function ds_admin_menu() 
{
    $admin_menu = use_filters('ds_admin_menu', get_admin_menu()); 
    $Menu = new Menu(); 
    echo '<div class="admin-menu">';
    echo $Menu->get_template_menu($admin_menu); 
    echo '</div>';
}

/**
* Вывод сообщений в админке
*/ 
function ds_admin_messages() 
{
    do_event('pre_admin_output_messages');

    if (isset($_SESSION['message'])) {
        do_event('ds_admin_messages_output');
        echo use_filters('ds_admin_message_filter', '<div class="alert alert-message">' . $_SESSION['message'] . '</div>'); 
        $_SESSION['message'] = NULL; 
    }
}

/**
* Вывод сообщений ошибок в админке
*/ 
function ds_admin_errors() 
{
    $template = use_filters('ds_admin_template_error', '<div class="alert alert-error">%error</div>'); 

    do_event('pre_admin_output_errors');
    $errors = get_errors(); 
    
    foreach($errors AS $error) {
        echo str_replace('%error', $error, $template); 
    }
    do_event('ds_admin_errors_output');
}


function add_settings_section($page_id, $section_id, $args = array()) 
{
    $sections = ds_get('ds_admin_options_section', array()); 

    if (!isset($sections[$page_id][$section_id])) {
        $sections[$page_id][$section_id] = $args; 
    }

    ds_set('ds_admin_options_section', $sections);
}

function get_settings_sections($page_id) 
{
    $sections = ds_get('ds_admin_options_section', array()); 

    if (isset($sections[$page_id])) {
        return $sections[$page_id]; 
    }
}

function get_settings_fields($page_id, $section_id) 
{
    $fields = ds_get('ds_settings_fields', array()); 

    if (isset($fields[$page_id][$section_id])) {
        return $fields[$page_id][$section_id]; 
    }

    return array(); 
}

function add_settings_page($page_id, $page_title, $access = 'adm_set_sys', $callback = '', $menu_title = '', $parent_settings = true) 
{
    $set_pages = ds_get('ds_admin_settings_pages', array()); 

    if (!isset($set_pages[$page_id])) {
        $set_pages[$page_id] = array(
            'id' => $page_id, 
            'page_title' => $page_title, 
            'access' => $access, 
            'function' => $callback, 
            'menu_title' => $menu_title, 
        ); 

        if ($parent_settings === true) {
            add_submenu_admin($menu_title, 'settings.php?page=' . $page_id, $access, 'fa-cog', 10, 'settings.php?page=general'); 
        }
    }

    ds_set('ds_admin_settings_pages', $set_pages);
}

function get_settings_page($page_id) 
{
    $set_pages = ds_get('ds_admin_settings_pages', array()); 

    if (isset($set_pages[$page_id])) {
        return $set_pages[$page_id]; 
    }

    return false;
}

function do_settings_section($section_id) 
{
    global $page_id; 


}

function do_settings_fields($page_id) 
{
    do_event('do_settings_fields', $page_id); 

    $page = get_settings_page($page_id); 
    $sections = get_settings_sections($page_id); 

    if (!is_array($sections)) {
        return ;
    }

    $forms = new Forms(); 
    $forms->add_field(array(
        'field_name' => 'save_settings', 
        'field_value' => '1', 
        'field_type' => 'hidden', 
    )); 

    foreach($sections AS $section_id => $section) {
        $fields = get_settings_fields($page_id, $section_id);
        
        foreach($fields AS $field) {
            if ($field) {
                $forms->add_field(array_merge($field, array(
                    'field_value' => str_replace('%value', get_option($field['field_name']), $field['field_value']), 
                    'field_checked' => get_option($field['field_name'], '0') == '0' ? 0 : 1, 
                ))); 
                $forms->add_field(array_merge($field, array(
                    'field_name' => '_' . $field['field_name'], 
                    'field_value' => hash('sha256', $field['field_name'] . ':' . SALT_FORMS_FIELDS), 
                    'field_type' => 'hidden',
                ))); 
            }
        }
    }
    
    $forms->button(__('Сохранить'));
    echo $forms->display();
}

function add_settings_field($page_id, $section_id, $args = array()) 
{
    $default = array(
        'title'         => '', 
        'type'          => 'text', 
        'name'          => '', 
        'description'   => '', 
        'value'         => '%value', 
        'checked'       => '%value', 
        'after'         => '', 
        'before'        => '', 
        'placeholder'   => '', 
        'attr'          => array(), 
        'values'        => array(), 
    );

    $args = array_merge($default, $args); 

    $settings_fields = ds_get('ds_settings_fields', array());
    $settings_fields[$page_id][$section_id][] = array(
        'field_placeholder' => $args['placeholder'], 
        'field_before'      => $args['before'], 
        'field_title'       => $args['title'], 
        'field_value'       => $args['value'], 
        'field_name'        => $args['name'], 
        'field_type'        => $args['type'], 
        'field_desc'        => $args['description'], 
        'field_after'       => $args['after'], 
        'field_attr'        => $args['attr'], 
        'field_values'      => $args['values'], 
        'field_checked'     => $args['checked'], 
    );  

    ds_set('ds_settings_fields', $settings_fields);
}

add_event('ds_admin_init', 'my_plugin_settings'); 
function my_plugin_settings() {
    add_settings_page('my_plugin', 'Настройки моего плагина игры', 'adm_set_sys', 'my_callback_function', 'Настройки игры', true); 
}

add_event('save_my_plugin_settings', 'my_plugin_settings_save'); 
function my_plugin_settings_save($options) {
    foreach($options AS $key => $value) {
        update_option($key, $value); 
    }
}

function my_callback_function() 
{
    echo 'Текстовое поле<br /><input type="text" name="my_key" value="' . get_option('my_key') . '"><br />'; 
    echo '<input type="hidden" name="_my_key" value="' . hash('sha256', 'my_key:' . SALT_FORMS_FIELDS) . '">'; 
    
    echo 'Текстовое поле 2<br /><input type="text" name="my_key_2" value="' . get_option('my_key_2') . '"><br />'; 
    echo '<input type="hidden" name="_my_key_2" value="' . hash('sha256', 'my_key_2:' . SALT_FORMS_FIELDS) . '">'; 
    
    echo '<input type="hidden" name="save_settings" value="1">'; 
    echo '<button type="submit">OK</button>';
}

function ds_admin_settings_load() 
{
    add_settings_page('general', __('Основные настройки сайта'), 'adm_set_sys', '', '', false); 

    add_settings_section('general', 'settings_general', array(
        'option_type' => 'autoload', 
    )); 


    add_settings_field('general', 'settings_general', array(
        'title' => __('Название сайта'), 
        'name' => 'title', 
    )); 

    add_settings_field('general', 'settings_general', array(
        'title' => __('Пунктов на страницу'), 
        'name' => 'p_str', 
    )); 

    add_settings_field('general', 'settings_general', array(
        'title' => __('E-mail для BackUp'), 
        'name' => 'mail_backup', 
    )); 

    add_settings_field('general', 'settings_general', array(
        'title' => __('Ключевые слова (meta: keywords)'), 
        'name' => 'meta_keywords', 
        'type' => 'textarea', 
    )); 

    add_settings_field('general', 'settings_general', array(
        'title' => __('Описание (meta: description)'), 
        'name' => 'meta_description', 
        'type' => 'textarea', 
    )); 

    add_settings_field('general', 'settings_general', array(
        'title' => __('Антимат'), 
        'name' => 'antimat', 
        'type' => 'checkbox', 
        'value' => 1, 
        'checked' => '%value', 
    )); 

    add_settings_field('general', 'settings_general', array(
        'title' => __('Анти-Dos'), 
        'name' => 'antidos', 
        'type' => 'checkbox', 
        'value' => 1, 
        'checked' => '%value', 
        'description' => '* Анти-Dos - защита от частых запросов с одного IP-адреса', 
    )); 

    add_settings_field('general', 'settings_general', array(
        'title' => __('Ошибки интерпретатора'), 
        'name' => 'show_err_php', 
        'type' => 'select', 
        'values' => array(
            array(
                'title' => __('Показывать администрации'), 
                'value' => 1, 
            ), 
            array(
                'title' => __('Скрывать'), 
                'value' => 0, 
            ), 
        )
    )); 

    add_settings_field('general', 'settings_general', array(
        'title' => __('Регистрация пользователей'), 
        'name' => 'reg_select', 
        'type' => 'select', 
        'values' => array(
            array(
                'title' => __('Открыта'), 
                'value' => 'open', 
            ), 
            array(
                'title' => __('Открыта + E-Mail'), 
                'value' => 'open_mail', 
            ), 
            array(
                'title' => __('Закрыта'), 
                'value' => 'close', 
            ), 
        )
    )); 

    add_settings_field('general', 'settings_general', array(
        'title' => __('Доступ для гостей'), 
        'name' => 'guest_select', 
        'type' => 'select', 
        'description' => __('[!] В закрытом режиме, гостям доступна авторизация и регистрация'), 
        'values' => array(
            array(
                'title' => __('Открыто все'), 
                'value' => 0, 
            ), 
            array(
                'title' => __('Закрыто все'), 
                'value' => 1, 
            ), 
        )
    )); 

    add_settings_page('bbcode', __('Настройки тегов BBcode'), 'adm_set_sys', '', 'Настройки BBcode', true); 
    add_settings_section('bbcode', 'settings_bbcode', array(
        'option_type' => 'autoload', 
    )); 

    $fields = array(
        array(
            'title' => __('Курсив [i]'), 
            'name' => 'bb_i', 
        ), 
        array(
            'title' => __('Подчеркнутый [u]'), 
            'name' => 'bb_u',  
        ), 
        array(
            'title' => __('Жирный [b]'), 
            'name' => 'bb_b',  
        ), 
        array(
            'title' => __('Большой [big]'), 
            'name' => 'bb_big',  
        ), 
        array(
            'title' => __('Маленький [small]'), 
            'name' => 'bb_small',  
        ), 
        array(
            'title' => __('Маленький [small]'), 
            'name' => 'bb_small',  
        ), 
        array(
            'title' => __('Подсветка PHP-кода [code]'), 
            'name' => 'bb_code',  
        ), 
        array(
            'title' => __('Размер шрифта [size]'), 
            'name' => 'bb_size',  
        ), 
        array(
            'title' => __('Обработка ссылок'), 
            'name' => 'bb_http',  
        ), 
        array(
            'title' => __('Вставка ссылок'), 
            'name' => 'bb_url',  
        ), 
        array(
            'title' => __('Вставка изображений'), 
            'name' => 'bb_img',  
        ), 
    ); 

    foreach($fields AS $field) {
        add_settings_field('bbcode', 'settings_bbcode', array_merge(array(
            'type' => 'checkbox', 
            'value' => 1, 
            'checked' => '%value', 
        ), $field)); 
    }

    add_settings_page('foto_gallery', __('Настройки фотогалереи'), 'adm_set_sys', '', 'Настройки фото', true); 
    add_settings_section('foto_gallery', 'settings_foto_gallery', array(
        'option_type' => 'autoload', 
    )); 

    $fields = array(
        array(
            'title' => __('Ширина фото (max)'), 
            'name' => 'max_upload_foto_x', 
        ), 
        array(
            'title' => __('Высота фото (max)'), 
            'name' => 'max_upload_foto_y', 
        ), 
        array(
            'title' => __('Настройка превью (50px)'), 
            'name' => 'photo_size_50', 
        ), 
        array(
            'title' => __('Настройка превью (128px)'), 
            'name' => 'photo_size_128', 
        ), 
        array(
            'title' => __('Настройка превью (640px)'), 
            'name' => 'photo_size_640', 
        ), 
    ); 

    foreach($fields AS $field) {
        add_settings_field('foto_gallery', 'settings_foto_gallery', array_merge(array(
            'type' => 'text', 
            'value' => '%value', 
        ), $field)); 
    }

    add_settings_page('chat', __('Настройки чата'), 'adm_set_sys', '', 'Настройки чата', true); 
    add_settings_section('chat', 'settings_chat', array(
        'option_type' => 'autoload', 
    )); 

    $fields = array(
        array(
            'title' => __('Автообновление в чате (сек)'), 
            'name' => 'time_chat', 
        ), 
        array(
            'title' => __('Таймаут между вопросами (умник в чате)'), 
            'name' => 'umnik_new', 
        ), 
        array(
            'title' => __('Таймаут между подсказками (умник в чате)'), 
            'name' => 'umnik_help', 
        ), 
        array(
            'title' => __('Общее время ожидание ответа (умник в чате)'), 
            'name' => 'umnik_time', 
        ), 
        array(
            'title' => __('Таймаут между шутками (шутник в чате)'), 
            'name' => 'shutnik_new', 
        ), 
        array(
            'title' => __('Ник шутника'), 
            'name' => 'chat_shutnik', 
        ), 
        array(
            'title' => __('Ник умника'), 
            'name' => 'chat_umnik', 
        ), 
    ); 

    foreach($fields AS $field) {
        add_settings_field('chat', 'settings_chat', array_merge(array(
            'type' => 'text', 
            'value' => '%value', 
        ), $field)); 
    }

}

function get_validate_post($array) 
{
    $validate = array(); 
    if (is_array($array)) {
        foreach($array AS $key => $value) {
            if (isset($array['_' . $key]) && hash('sha256', $key . ':' . SALT_FORMS_FIELDS) === $array['_' . $key]) {
                $validate[$key] = $value; 
            }
        }
    }
    return $validate; 
}