Exemple #1
0
function _create_table($active_plugins = true)
{
    global $MSO;
    $CI =& get_instance();
    $CI->load->helper('directory');
    $plugins_dir = $MSO->config['plugins_dir'];
    // все каталоги в массиве $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] => Demo
                	[description] => Демонстрационный плагин
                	[version] => 1.0
                	[author] => Максим
                	[plugin_url] => http://maxsite.org/
                	[author_url] => http://maxsite.org/
                	[group] => template
                	[help] => ссылка на хелп
                	'options_url' => getinfo('site_admin_url') . 'plugin_XXX', // ссылка на страницу опций
                */
                $name = 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;
                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)) {
                    // $status = '<span style="color: green;"><strong>' . t('вкл') . '</strong></span>';
                    if (function_exists($dir . '_mso_options')) {
                        // есть опции
                        $status = '<a title="' . t('Настройки плагина') . '" href="' . getinfo('site_admin_url') . 'plugin_options/' . $dir . '">' . t('опции') . '</a>';
                    } else {
                        $status = ' ';
                    }
                    $dir = '<label for="f_check_submit_' . $dir . '"><span class="plugin_on">' . $dir . '</span></label>';
                    if ($options_url) {
                        $status .= ' <a href="' . $options_url . '" title="' . t('Настройки плагина') . '">' . t('опции') . '</a>';
                    }
                } else {
                    $dir = '<label for="f_check_submit_' . $dir . '">' . $dir . '</label>';
                    // формируем ссылку для включения плагина
                    $status = '<span class="gray"><a href="" onclick="' . "\r\n\t\t\t\t\t\t\t\$('#f_check_submit_" . $dir0 . "').attr('checked', 'checked'); \r\n\t\t\t\t\t\t\t\$('form').prepend('<input type=hidden name=f_activate_submit value=1>');\r\n\t\t\t\t\t\t\t\$('form').submit(); \r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t" . '">' . t('включить') . '</a></span>';
                    $description = '<span class="gray">' . $description . '</span>';
                    $dir = '<span class="gray">' . $dir . '</span>';
                    $version = '<span class="gray">' . $version . '</span>';
                    $name = '<span class="gray">' . $name . '</span>';
                    $author = '<span class="gray">' . $author . '</span>';
                }
                if ($help) {
                    $status .= ' <a href="' . $help . '" target="_blank" title="' . t('Помощь по плагину') . '">(?)</a>';
                }
                $CI->table->add_row($act, $dir, $status, $name, $version, $author, $description);
                $flag_present_plugins = true;
            }
        }
    }
    return $flag_present_plugins;
}
Exemple #2
0
function _mso_sql_build_search($r, &$pag)
{
    $CI =& get_instance();
    if ($r['slug']) {
        $search = $r['slug'];
    } else {
        $search = mso_segment(2);
    }
    // $search = mso_segment(2);
    $search = mso_strip(strip_tags($search));
    $offset = 0;
    if ($r['pagination']) {
        # пагинация
        # для неё нужно при том же запросе указываем общее кол-во записей и кол-во на страницу
        # сама пагинация выводится отдельным плагином
        # запрос один в один, кроме limit и юзеров
        $CI->db->select('SQL_BUFFER_RESULT ' . $CI->db->dbprefix('page') . '.`page_id`', false);
        $CI->db->from('page');
        if ($r['page_status']) {
            $CI->db->where('page_status', $r['page_status']);
        }
        if ($r['type']) {
            if (is_array($r['type'])) {
                $CI->db->where_in('page_type_name', $r['type']);
            } else {
                $CI->db->where('page_type_name', $r['type']);
            }
        }
        // if ($r['date_now']) $CI->db->where('page_date_publish < ', 'DATE_ADD(NOW(), INTERVAL "' . $r['time_zone'] . '" HOUR_MINUTE)', false);
        if ($r['date_now'] and $r['page_id_date_now']) {
            $CI->db->where_not_in('page.page_id', $r['page_id_date_now']);
        }
        if ($r['page_id_autor']) {
            $CI->db->where('page.page_id_autor', $r['page_id_autor']);
        }
        $CI->db->where('(`page_content` LIKE \'%' . $CI->db->escape_str($search) . '%\' OR `page_title` LIKE \'%' . $CI->db->escape_str($search) . '%\')', '', false);
        $CI->db->join('page_type', 'page_type.page_type_id = page.page_type_id');
        $CI->db->order_by($r['order'], $r['order_asc']);
        if ($function_add_custom_sql = $r['function_add_custom_sql']) {
            $function_add_custom_sql();
        }
        $query = $CI->db->get();
        $pag_row = $query->num_rows();
        if ($pag_row > 0) {
            $pag['maxcount'] = ceil($pag_row / $r['limit']);
            // всего станиц пагинации
            $pag['limit'] = $r['limit'];
            // записей на страницу
            $current_paged = mso_current_paged($r['pagination_next_url']);
            if ($current_paged > $pag['maxcount']) {
                $current_paged = $pag['maxcount'];
            }
            $offset = $current_paged * $pag['limit'] - $pag['limit'];
        } else {
            $pag = false;
        }
    } else {
        $pag = false;
    }
    // теперь сами страницы
    if (!$r['all_fields']) {
        $CI->db->select('page.page_id, page_type_name, page_slug, page_title, page_date_publish, page_status, users_nik, page_content, page_view_count, page_rating, page_rating_count, page_password, page_comment_allow, page_id_parent, users_avatar_url, page.page_id_autor, users_description, users_login');
    } else {
        $CI->db->select('page.*, page_type.*, users.*');
    }
    $CI->db->from('page');
    // if ($r['date_now']) $CI->db->where('page_date_publish < ', 'DATE_ADD(NOW(), INTERVAL "' . $r['time_zone'] . '" HOUR_MINUTE)', false);
    if ($r['date_now'] and $r['page_id_date_now']) {
        $CI->db->where_not_in('page.page_id', $r['page_id_date_now']);
    }
    if ($r['page_id_autor']) {
        $CI->db->where('page.page_id_autor', $r['page_id_autor']);
    }
    // like делаем свой
    $CI->db->where('(`page_content` LIKE \'%' . $CI->db->escape_str($search) . '%\' OR `page_title` LIKE \'%' . $CI->db->escape_str($search) . '%\')', '', false);
    if ($r['page_status']) {
        $CI->db->where('page_status', $r['page_status']);
    }
    if ($r['type']) {
        if (is_array($r['type'])) {
            $CI->db->where_in('page_type_name', $r['type']);
        } else {
            $CI->db->where('page_type_name', $r['type']);
        }
    }
    $CI->db->join('users', 'users.users_id = page.page_id_autor', 'left');
    $CI->db->join('page_type', 'page_type.page_type_id = page.page_type_id', 'left');
    $CI->db->order_by($r['order'], $r['order_asc']);
    $CI->db->group_by('page.page_id');
    if (!$r['no_limit']) {
        if ($pag and $offset) {
            $CI->db->limit($r['limit'], $offset);
        } else {
            $CI->db->limit($r['limit']);
        }
    }
    if ($function_add_custom_sql = $r['function_add_custom_sql']) {
        $function_add_custom_sql();
    }
}
Exemple #3
0
function mso_edit_comuser($data)
{
    global $MSO;
    $CI =& get_instance();
    $data = mso_xss_clean_data($data, array('user_login', 'password', 'comusers_email', 'comusers_new_password', 'comusers_nik', 'comusers_icq', 'comusers_url', 'comusers_msn', 'comusers_jaber', 'comusers_skype', 'comusers_avatar_url', 'comusers_description', 'comusers_date_birth_y', 'comusers_date_birth_m', 'comusers_date_birth_d', 'comusers_notify', 'comusers_language', 'comusers_activate_key', 'comusers_activate_string', 'comusers_admin_note'));
    if (isset($data['user_login'])) {
        $user_login = $data['user_login'];
    } else {
        $user_login = $MSO->data['session']['users_login'];
    }
    if (isset($data['password'])) {
        $password = $data['password'];
    } else {
        $password = $MSO->data['session']['users_password'];
    }
    # проверка можно ли редактировать этому пользователю с этим паролем и этим разрешением
    if (!mso_check_user_password($user_login, $password, 'admin_comusers')) {
        return array('result' => 0, 'description' => 'Login/password incorrect');
    }
    $comusers_id = isset($data['comusers_id']) ? (int) $data['comusers_id'] : 0;
    if ($comusers_id <= 0) {
        return array('result' => 0, 'description' => 'Comuser ID incorrect');
    }
    $comusers_email = isset($data['comusers_email']) ? $data['comusers_email'] : '';
    # нет email - ошибка
    if (!$comusers_email or !mso_valid_email($comusers_email)) {
        return array('result' => 0, 'description' => 'Email incorrect');
    }
    ### пароль
    $comusers_new_password = '';
    if (isset($data['comusers_new_password'])) {
        $comusers_new_password = mso_strip($data['comusers_new_password'], false);
        if ($comusers_new_password and strlen($comusers_new_password) > 6) {
            $comusers_new_password = mso_md5($comusers_new_password);
        } else {
            return array('result' => 0, 'description' => 'Password incorrect');
        }
    }
    $comusers_nik = isset($data['comusers_nik']) ? $data['comusers_nik'] : '';
    $comusers_icq = isset($data['comusers_icq']) ? $data['comusers_icq'] : '';
    $comusers_url = isset($data['comusers_url']) ? $data['comusers_url'] : '';
    $comusers_msn = isset($data['comusers_msn']) ? $data['comusers_msn'] : '';
    $comusers_jaber = isset($data['comusers_jaber']) ? $data['comusers_jaber'] : '';
    $comusers_skype = isset($data['comusers_skype']) ? $data['comusers_skype'] : '';
    $comusers_avatar_url = isset($data['comusers_avatar_url']) ? $data['comusers_avatar_url'] : '';
    $comusers_description = isset($data['comusers_description']) ? $data['comusers_description'] : '';
    $comusers_date_birth_y = isset($data['comusers_date_birth_y']) ? $data['comusers_date_birth_y'] : '1970';
    $comusers_date_birth_m = isset($data['comusers_date_birth_m']) ? $data['comusers_date_birth_m'] : '1';
    $comusers_date_birth_d = isset($data['comusers_date_birth_d']) ? $data['comusers_date_birth_d'] : '1';
    $comusers_notify = isset($data['comusers_notify']) ? $data['comusers_notify'] : '0';
    $comusers_language = isset($data['comusers_language']) ? $data['comusers_language'] : 'ru';
    $comusers_activate_key = isset($data['comusers_activate_key']) ? $data['comusers_activate_key'] : '';
    $comusers_activate_string = isset($data['comusers_activate_string']) ? $data['comusers_activate_string'] : '';
    $comusers_admin_note = isset($data['comusers_admin_note']) ? $data['comusers_admin_note'] : '';
    # дату в MySQL
    $comusers_date_birth = mso_date_convert_to_mysql($comusers_date_birth_y, $comusers_date_birth_m, $comusers_date_birth_d);
    $upd_data = array('comusers_nik' => $comusers_nik, 'comusers_admin_note' => $comusers_admin_note, 'comusers_email' => $comusers_email, 'comusers_icq' => $comusers_icq, 'comusers_url' => $comusers_url, 'comusers_msn' => $comusers_msn, 'comusers_jaber' => $comusers_jaber, 'comusers_skype' => $comusers_skype, 'comusers_avatar_url' => $comusers_avatar_url, 'comusers_description' => $comusers_description, 'comusers_date_birth' => $comusers_date_birth, 'comusers_notify' => $comusers_notify, 'comusers_language' => $comusers_language, 'comusers_activate_string' => $comusers_activate_string, 'comusers_activate_key' => $comusers_activate_key);
    if ($comusers_new_password) {
        $upd_data['comusers_password'] = $comusers_new_password;
    }
    // _pr($upd_data);
    $CI->db->where('comusers_id', $comusers_id);
    $res = $CI->db->update('comusers', $upd_data) ? '1' : '0';
    mso_flush_cache();
    // сбросим кэш
    $response = array('result' => $res, 'description' => 'Update');
    return $response;
}
Exemple #4
0
<?php

if (!defined('BASEPATH')) {
    exit('No direct script access allowed');
}
/**
 * MaxSite CMS
 * (c) http://max-3000.com/
 */
# подготовка данных
$min_search_chars = 2;
// минимальное кол-во симоволов при поиске
$search = mso_segment(2);
$search = mso_strip(strip_tags($search));
$searh_to_text = mb_strtolower($search, 'UTF8');
if ($f = mso_page_foreach('search-head-meta')) {
    require $f;
} else {
    mso_head_meta('title', $search);
}
$search_len = true;
// поисковая фраза более 2 символов
// параметры для получения страниц
if (!$search or $search_len = strlen(mso_slug($search)) < $min_search_chars) {
    $search = tf('Поиск');
    $pages = false;
    // нет страниц
    $categories = false;
    // нет рубрик
    $tags = false;
    // нет меток
Exemple #5
0
function parents_out_way_parents($page_id = 0)
{
    //рекурентная для parents_out_way_to
    $r = '';
    $CI =& get_instance();
    $CI->db->select('page_id, page_id_parent, page_title, page_slug');
    $CI->db->where('page_id', $page_id);
    $CI->db->order_by('page_menu_order');
    $query = $CI->db->get('page');
    $result = $query->result_array();
    global $MSO;
    if ($result) {
        foreach ($result as $key => $page2) {
            extract($page2);
            $page_link = '<a href="' . $MSO->config['site_url'] . $page_slug . '" title="' . mso_strip($page_title) . '">' . $page_title . '</a>';
            $r = $page_link;
            if ($page_id_parent > 0) {
                $parents = parents_out_way_parents($page_id_parent);
                $r = $parents . '->' . $page_link;
            }
        }
    }
    return $r;
}
Exemple #6
0
$CI->load->helper('string_helper');
$userpassword = random_string('alnum', 12);
// генератор пароля
$useremail = '';
$namesite = '';
$demoposts = 0;
$error = false;
if ($step == 3 and $_POST) {
    mso_checkreferer();
    // проверка на чужой реферер
    if ($_POST['mysubmit']) {
        $username = isset($_POST['username']) ? mso_strip($_POST['username'], true) : false;
        $userpassword = isset($_POST['userpassword']) ? mso_strip($_POST['userpassword'], true) : false;
        $useremail = $_POST['useremail'] ? mso_strip($_POST['useremail'], true) : false;
        $namesite = isset($_POST['namesite']) ? mso_strip($_POST['namesite'], true) : false;
        $demoposts = isset($_POST['demoposts']) ? (int) mso_strip($_POST['demoposts'], true) : 0;
        if (!mso_valid_email($useremail)) {
            $useremail = false;
        }
        if (strlen($userpassword) < 6) {
            $userpassword = false;
        }
        if (!$useremail or !$username or !$userpassword or !$namesite) {
            $step = 2;
            $error = '<h2 class="error">' . t('Ошибочные или неполные данные!', 'install') . '</h2>';
        }
        if ($step === 3) {
            require_once APPPATH . 'views/install/install-common.php';
            //require_once ('install-common.php');
            $res = mso_install_newsite(array('username' => $username, 'userpassword' => mso_md5($userpassword), 'userpassword_orig' => $userpassword, 'useremail' => $useremail, 'namesite' => $namesite, 'demoposts' => $demoposts, 'ip' => $_SERVER['REMOTE_ADDR']));
        }
Exemple #7
0
function mso_dispatcher()
{
    # тип данных
    $type = getinfo('type');
    # для rss используются отдельное подключение
    if (is_feed()) {
        // ищем файл в шаблоне или shared
        if ($f = mso_find_ts_file('type/feed/' . $type . '.php')) {
            return $f;
        } else {
            return mso_find_ts_file('type/feed/home.php');
        }
    }
    # в зависимости от типа данных подключаем нужный файл
    # на page_404 может быть свой хук. Тогда ничего не подключаем
    if ($type == 'page_404' and mso_hook_present('custom_page_404') and mso_hook('custom_page_404')) {
        return false;
    } elseif ($type == 'page_404') {
        $seg = mso_strip(mso_segment(1));
        $fn = 'type/' . $seg . '/' . $seg . '.php';
    } else {
        $fn = 'type/' . $type . '/' . $type . '.php';
    }
    if ($f = mso_find_ts_file($fn)) {
        return $f;
    } else {
        return mso_find_ts_file('type/page_404/page_404.php');
    }
}
Exemple #8
0
<h1><?php 
echo t('Группы пользователей');
?>
</h1>
<p class="info"><?php 
echo t('Здесь вы можете настроить группы пользователей. Вы не можете удалить группы <strong>«admins»</strong> и <strong>«users»</strong>. Группе <strong>«admins»</strong> разрешены все действия.');
?>
</p>

<?php 
$CI =& get_instance();
if ($post = mso_check_post(array('f_session_id', 'f_new_submit', 'f_new'))) {
    # добавление новой группы
    mso_checkreferer();
    $f_new = mso_strip($post['f_new']);
    if ($f_new) {
        $CI->db->select('groups_id');
        $CI->db->where(array('groups_name' => $f_new));
        $query = $CI->db->get('groups');
        if ($query->num_rows() == 0) {
            if ($CI->db->insert('groups', array('groups_name' => $f_new))) {
                echo '<div class="update">' . t('Новая группа добавлена!') . '</div>';
            } else {
                echo '<div class="error">' . t('Ошибка добавления!') . '</div>';
            }
        } else {
            echo '<div class="error">' . t('Такая группа уже существует!') . '</div>';
        }
    } else {
        echo '<div class="error">' . t('Ошибочное имя') . '</div>';
Exemple #9
0
function mso_comuser_edit($args = array())
{
    global $MSO;
    if (!isset($args['css_ok'])) {
        $args['css_ok'] = 'comment-ok';
    }
    if (!isset($args['css_error'])) {
        $args['css_error'] = 'comment-error';
    }
    # id комюзера, который в сессии
    if (isset($MSO->data['session']['comuser']) and $MSO->data['session']['comuser']) {
        $id_session = $MSO->data['session']['comuser']['comusers_id'];
    } else {
        $id_session = false;
    }
    if ($post = mso_check_post(array('f_session_id', 'f_submit', 'f_comusers_activate_key'))) {
        # защита рефера
        mso_checkreferer();
        # защита сессии - если не нужно закомментировать строчку!
        if ($MSO->data['session']['session_id'] != $post['f_session_id']) {
            mso_redirect();
        }
        // получаем номер юзера id из f_submit[]
        $id = (int) mso_array_get_key($post['f_submit']);
        if (!$id) {
            return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный номер пользователя') . '</div>';
        }
        # проверяем id в сессии с сабмитом
        // if ($id != $id_session)
        //	return '<div class="' . $args['css_error']. '">'. t('Ошибочный номер пользователя'). '</div>';
        $f_comusers_activate_key = trim($post['f_comusers_activate_key']);
        if (!$f_comusers_activate_key) {
            return '<div class="' . $args['css_error'] . '">' . tf('Неверный (пустой) ключ') . '</div>';
        }
        // нужно проверить если у указанного комюзера не равные ключи
        // если они равны, то ничего не делаем
        $CI =& get_instance();
        $CI->db->select('comusers_activate_string, comusers_activate_key');
        $CI->db->from('comusers');
        $CI->db->where('comusers_id', $id);
        $CI->db->limit(1);
        $query = $CI->db->get();
        if ($query->num_rows() > 0) {
            $comuser = $query->result_array();
            // данные комюзера
            if ($comuser[0]['comusers_activate_string'] == $comuser[0]['comusers_activate_key']) {
                // уже равны, активация не требуется
                return '<div class="' . $args['css_ok'] . '">' . tf('Активация уже выполнена') . '</div>';
            } else {
                // ключи в базе не равны
                // сверяем с переданным ключом из формы
                if ($f_comusers_activate_key == $comuser[0]['comusers_activate_key']) {
                    // верный ключ - обновляем в базе
                    $CI->db->where('comusers_id', $id);
                    $res = $CI->db->update('comusers', array('comusers_activate_string' => $f_comusers_activate_key)) ? '1' : '0';
                    $CI->db->cache_delete_all();
                    if ($res) {
                        return '<div class="' . $args['css_ok'] . '">' . tf('Активация выполнена!') . '</div>';
                    } else {
                        return '<div class="' . $args['css_error'] . '">' . tf('Ошибка БД при добавления ключа активации') . '</div>';
                    }
                } else {
                    return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный ключ активации') . '</div>';
                }
            }
        } else {
            // вообще нет такого комюзера
            return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный номер пользователя') . '</div>';
        }
    } elseif ($post = mso_check_post(array('flogin_session_id', 'flogin_submit', 'flogin_user', 'flogin_password', 'flogin_redirect'))) {
        // логинимся через стандартную _mso_login()
        _mso_login();
        return;
    } elseif ($post = mso_check_post(array('f_session_id', 'f_submit', 'f_comusers_email', 'f_comusers_password', 'f_comusers_nik', 'f_comusers_url', 'f_comusers_icq', 'f_comusers_msn', 'f_comusers_jaber', 'f_comusers_date_birth', 'f_comusers_description', 'f_comusers_avatar_url'))) {
        if (!is_login_comuser()) {
            return '<div class="' . $args['css_error'] . '">' . tf('Ошибочные данные пользователя') . '</div>';
        }
        # защита рефера
        mso_checkreferer();
        # защита сессии - если не нужно закомментировать строчку!
        if ($MSO->data['session']['session_id'] != $post['f_session_id']) {
            mso_redirect();
        }
        // получаем номер юзера id из f_submit[]
        $id = (int) mso_array_get_key($post['f_submit']);
        if (!$id) {
            return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный номер пользователя') . '</div>';
        }
        # проверяем id в сессии с сабмитом
        if ($id != $id_session) {
            return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный номер пользователя') . '</div>';
        }
        $f_comusers_email = trim($post['f_comusers_email']);
        $f_comusers_password = trim($post['f_comusers_password']);
        if (!$f_comusers_email or !$f_comusers_password) {
            return '<div class="' . $args['css_error'] . '">' . tf('Необходимо указать email и пароль') . '</div>';
        }
        // проверим есть ли такой комюзер
        $CI =& get_instance();
        $CI->db->select('*');
        $CI->db->from('comusers');
        # CodeIgniter экранирует where, даже когда только условия в полях
        $CI->db->where('comusers_activate_string=comusers_activate_key', '', false);
        // активация должна уже быть
        $CI->db->where(array('comusers_id' => $id, 'comusers_email' => $f_comusers_email, 'comusers_password' => $f_comusers_password));
        $CI->db->limit(1);
        $query = $CI->db->get();
        if ($query->num_rows() > 0) {
            // все ок - логин пароль верные
            $comuser = $query->result_array();
            // данные комюзера
            $f_comusers_avatar_url = mso_strip($post['f_comusers_avatar_url'], false, array('\\', '|', '?', '%', '*', '`'));
            $allowed_ext = array('gif', 'jpg', 'jpeg', 'png');
            // разрешенные типы
            $ext = strtolower(str_replace('.', '', strrchr($f_comusers_avatar_url, '.')));
            // расширение файла
            if (!in_array($ext, $allowed_ext)) {
                $f_comusers_avatar_url = '';
            }
            // запрещенный тип файла
            if (!isset($post['f_comusers_notify'])) {
                $post['f_comusers_notify'] = '0';
            }
            if (!isset($post['f_comusers_skype'])) {
                $post['f_comusers_skype'] = '';
            }
            // скайп
            $post = mso_clean_post(array('f_comusers_nik' => 'base', 'f_comusers_url' => 'base', 'f_comusers_icq' => 'base', 'f_comusers_msn' => 'base', 'f_comusers_jaber' => 'base', 'f_comusers_skype' => 'base', 'f_comusers_date_birth' => 'base', 'f_comusers_description' => 'base', 'f_comusers_notify' => 'int'), $post);
            $upd_date = array('comusers_nik' => strip_tags($post['f_comusers_nik']), 'comusers_url' => strip_tags($post['f_comusers_url']), 'comusers_icq' => strip_tags($post['f_comusers_icq']), 'comusers_msn' => strip_tags($post['f_comusers_msn']), 'comusers_jaber' => strip_tags($post['f_comusers_jaber']), 'comusers_skype' => strip_tags($post['f_comusers_skype']), 'comusers_date_birth' => strip_tags($post['f_comusers_date_birth']), 'comusers_description' => strip_tags($post['f_comusers_description']), 'comusers_avatar_url' => $f_comusers_avatar_url, 'comusers_notify' => $post['f_comusers_notify']);
            # pr($upd_date );
            $CI->db->where('comusers_id', $id);
            $res = $CI->db->update('comusers', $upd_date) ? '1' : '0';
            // если переданы метаполя, то обновляем и их
            if (isset($post['f_comusers_meta']) and $post['f_comusers_meta']) {
                //pr($post);
                foreach ($post['f_comusers_meta'] as $key => $val) {
                    // вначале грохаем если есть такой ключ
                    $CI->db->where('meta_table', 'comusers');
                    $CI->db->where('meta_id_obj', $id);
                    $CI->db->where('meta_key', $key);
                    $CI->db->delete('meta');
                    // теперь добавляем как новый
                    $ins_data = array('meta_table' => 'comusers', 'meta_id_obj' => $id, 'meta_key' => $key, 'meta_value' => $val);
                    $CI->db->insert('meta', $ins_data);
                }
            }
            $CI->db->cache_delete_all();
            // mso_flush_cache(); // сбросим кэш
            if ($res) {
                return '<div class="' . $args['css_ok'] . '">' . tf('Обновление выполнено!') . '</div>';
            } else {
                return '<div class="' . $args['css_error'] . '">' . tf('Ошибка БД при обновлении') . '</div>';
            }
        } else {
            return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный email и пароль') . '</div>';
        }
    }
    // обновление формы
}
Exemple #10
0
function _mso_login()
{
    global $MSO;
    // обрабатываем POST если есть
    if ($_POST) {
        $_POST = mso_clean_post(array('flogin_submit' => 'base', 'flogin_redirect' => 'base', 'flogin_user' => 'base', 'flogin_password' => 'base', 'flogin_session_id' => 'base'));
    }
    if ($_POST and isset($_POST['flogin_submit']) and isset($_POST['flogin_redirect']) and isset($_POST['flogin_user']) and isset($_POST['flogin_password']) and isset($_POST['flogin_session_id'])) {
        sleep(3);
        // задержка - примитивная защита от подбора пароля
        $flogin_session_id = $_POST['flogin_session_id'];
        # защита сесии
        if ($MSO->data['session']['session_id'] != $flogin_session_id) {
            mso_redirect('loginform/error');
        }
        $flogin_redirect = urldecode($_POST['flogin_redirect']);
        if ($flogin_redirect == 'home') {
            $flogin_redirect = getinfo('siteurl');
        }
        $flogin_user = $_POST['flogin_user'];
        $flogin_password = $_POST['flogin_password'];
        # проверяем на strip - запрещенные символы
        if (!mso_strip($flogin_user, true) or !mso_strip($flogin_password, true)) {
            mso_redirect('loginform/error');
        }
        $flogin_password = mso_md5($flogin_password);
        $CI =& get_instance();
        // если это комюзер, то логин = email
        // проверяем валидность email и если он верный, то ставим куку на этого комюзера
        // и редиректимся на главную (куку ставить только на главную!)
        // если же это обычный юзер-автор, то проверяем логин и пароль по базе
        if (mso_valid_email($flogin_user)) {
            // если в логине мыло, то проверяем сначала в таблице авторов
            $CI->db->from('users');
            # таблица users
            $CI->db->select('*');
            # все поля
            $CI->db->limit(1);
            # одно значение
            $CI->db->where('users_email', $flogin_user);
            // where 'users_login' = $flogin_user
            $CI->db->where('users_password', $flogin_password);
            // where 'users_password' = $flogin_password
            $query = $CI->db->get();
            if ($query->num_rows() > 0) {
                $userdata = $query->result_array();
                # добавляем юзера к сессии
                $CI->session->set_userdata('userlogged', '1');
                $data = array('users_id' => $userdata[0]['users_id'], 'users_nik' => $userdata[0]['users_nik'], 'users_login' => $userdata[0]['users_login'], 'users_password' => $userdata[0]['users_password'], 'users_groups_id' => $userdata[0]['users_groups_id'], 'users_last_visit' => $userdata[0]['users_last_visit'], 'users_show_smiles' => $userdata[0]['users_show_smiles'], 'users_time_zone' => $userdata[0]['users_time_zone'], 'users_language' => $userdata[0]['users_language']);
                $CI->session->set_userdata($data);
                // сразу же обновим поле последнего входа
                $CI->db->where('users_id', $userdata[0]['users_id']);
                $CI->db->update('users', array('users_last_visit' => date('Y-m-d H:i:s')));
                mso_redirect($flogin_redirect, true);
            } else {
                // это не автор, значит это комюзер
                $CI->db->select('comusers_id, comusers_password, comusers_email, comusers_nik, comusers_url, comusers_avatar_url, comusers_last_visit');
                $CI->db->where('comusers_email', $flogin_user);
                $CI->db->where('comusers_password', $flogin_password);
                $query = $CI->db->get('comusers');
                if ($query->num_rows()) {
                    $comuser_info = $query->row_array(1);
                    // вся инфа о комюзере
                    // сразу же обновим поле последнего входа
                    $CI->db->where('comusers_id', $comuser_info['comusers_id']);
                    $CI->db->update('comusers', array('comusers_last_visit' => date('Y-m-d H:i:s')));
                    $expire = time() + 60 * 60 * 24 * 365;
                    // 365 дней
                    $name_cookies = 'maxsite_comuser';
                    $value = serialize($comuser_info);
                    mso_add_to_cookie($name_cookies, $value, $expire, $flogin_redirect);
                    // в куку для всего сайта
                    exit;
                } else {
                    mso_redirect('loginform/error');
                    exit;
                }
            }
        } else {
            // это обычный автор
            $CI->db->from('users');
            # таблица users
            $CI->db->select('*');
            # все поля
            $CI->db->limit(1);
            # одно значение
            $CI->db->where('users_login', $flogin_user);
            // where 'users_login' = $flogin_user
            $CI->db->where('users_password', $flogin_password);
            // where 'users_password' = $flogin_password
            $query = $CI->db->get();
            if ($query->num_rows() > 0) {
                $userdata = $query->result_array();
                # добавляем юзера к сессии
                $CI->session->set_userdata('userlogged', '1');
                $data = array('users_id' => $userdata[0]['users_id'], 'users_nik' => $userdata[0]['users_nik'], 'users_login' => $userdata[0]['users_login'], 'users_password' => $userdata[0]['users_password'], 'users_groups_id' => $userdata[0]['users_groups_id'], 'users_last_visit' => $userdata[0]['users_last_visit'], 'users_show_smiles' => $userdata[0]['users_show_smiles'], 'users_time_zone' => $userdata[0]['users_time_zone'], 'users_language' => $userdata[0]['users_language']);
                $CI->session->set_userdata($data);
                // сразу же обновим поле последнего входа
                $CI->db->where('users_id', $userdata[0]['users_id']);
                $CI->db->update('users', array('users_last_visit' => date('Y-m-d H:i:s')));
                mso_redirect($flogin_redirect, true);
            } else {
                mso_redirect('loginform/error');
            }
        }
        // автор
    } else {
        $MSO->data['type'] = 'loginform';
        $template_file = $MSO->config['templates_dir'] . $MSO->config['template'] . '/index.php';
        if (file_exists($template_file)) {
            require $template_file;
        } else {
            show_error('Ошибка - отсутствует файл шаблона index.php');
        }
    }
}