Exemple #1
0
function mso_check_post_ini()
{
    $CI =& get_instance();
    // проверяем входящие данные - поля всегда одни
    if ($post = mso_check_post(array('f_session_id', 'f_options', 'f_submit', 'f_ini'))) {
        # защита рефера
        mso_checkreferer();
        $options = $post['f_options'];
        if (isset($post['f_all_checkbox'])) {
            $all_checkbox = $post['f_all_checkbox'];
        } else {
            $all_checkbox = array();
        }
        // добавим к $options $all_checkbox если их нет
        // и сразу заменим on на 1
        // pr($options);
        foreach ($all_checkbox as $key => $val) {
            if (!isset($options[$key])) {
                $options[$key] = '0';
            } else {
                if (!is_array($options[$key])) {
                    $options[$key] = '1';
                } else {
                    $options[$key] = array_map('trim', $options[$key]);
                }
            }
        }
        // pr($options);
        // pr($all_checkbox);
        foreach ($options as $key_type => $val) {
            // разделим имя опции на ключ и группу
            $key_type = explode('_m_s_o_', $key_type);
            $key = $key_type[0];
            $type = $key_type[1];
            // pr($key . ' ' . $val . ' ' . $type, 1);
            // добавляем опцию без mso_refresh_options();
            mso_add_option($key, $val, $type, false);
        }
        mso_refresh_options();
        mso_flush_cache();
        // посколько у нас всегда true, то результат не анализируем
        return true;
    }
    return false;
}
Exemple #2
0
function samborsky_ping_do($result = null)
{
    if (!is_array($list = mso_get_option('samborsky_ping_list', 'plugins'))) {
        $list = array();
    }
    $CI =& get_instance();
    $CI->load->library('xmlrpc');
    $CI->xmlrpc->method('weblogUpdates.ping');
    $CI->xmlrpc->request(array(mso_get_option('name_site', 'plugins'), getinfo('site_url'), getinfo('site_url') . 'feed'));
    foreach ($list as $key => $value) {
        if (!empty($value)) {
            $CI->xmlrpc->server($value, 80);
            $CI->xmlrpc->send_request();
        }
    }
    // Удадалим кеш
    mso_flush_cache();
    return $result;
}
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
        echo '<h2 class="bor-solid-b bor-gray400 mar20-b mar20-t i-rss">' . t('Новости MaxSite CMS') . '</h2>';
        foreach ($rss as $item) {
            // title link category description date_timestamp pubdate
            // if (!isset($item['category'])) $item['category'] = '-';
            echo '<h5><a href="' . $item['link'] . '">' . $item['title'] . '</a> - ' . date('d.m.Y', $item['date_timestamp']) . '</h5>';
            echo '<p>' . $item['description'] . '</p>';
            echo '<hr class="dotted mar0-t">';
        }
    }
}
if (mso_check_allow('admin_home')) {
    $show_clear_cache = true;
    if ($post = mso_check_post(array('f_session_id', 'f_submit_clear_cache'))) {
        mso_checkreferer();
        $show_clear_cache = false;
        mso_flush_cache();
        // сбросим кэш
        // echo '<p>' . t('Кэш удален') . '</p><br>';
        mso_redirect('admin/home');
    }
    if ($show_clear_cache) {
        echo '<form method="post">' . mso_form_session('f_session_id');
        if ($show_clear_cache) {
            echo '<p><button type="submit" name="f_submit_clear_cache" class="button i-stack-overflow">' . t('Сбросить кэш системы') . '</button></p>';
        }
        echo '</form>';
    }
}
//if (mso_check_allow('admin_home'))
mso_hook('admin_home');
# end of file
Exemple #5
0
function mso_remote_f_deletecategory($post)
{
    if ($post = mso_check_post(array('category_id'))) {
        require_once getinfo('common_dir') . 'functions-edit.php';
        // функции редактирования
        // получаем номер категории
        $f_id = $post['category_id'];
        // подготавливаем данные
        $data = array('category_id' => $f_id);
        $result = mso_delete_category($data);
        if (isset($result['result']) and $result['result']) {
            mso_flush_cache();
            // сбросим кэш
            $out = 'OK: ' . $result['description'];
        } else {
            $out = 'ERROR: ' . $result['description'];
        }
        return $out;
    } else {
        $out = 'ERROR: ' . 'missing arguments';
        return $out;
    }
}
Exemple #6
0
function mso_initalizing()
{
    global $MSO;
    $CI =& get_instance();
    // нет соединения с Базой данных - всё рубим, а-а-а-а-а!
    if (!$CI->db->conn_id) {
        die('Database not connected');
    }
    # считываем файл конфигурации
    $fn = $MSO->config['config_file'];
    if (file_exists($fn)) {
        require_once $fn;
    }
    // если кэш старый, то очищаем его
    // #ci1 $path = $CI->config->item('cache_path');
    $path = getinfo('cache_dir');
    // #ci1 $mso_cache_last = ($path == '') ? BASEPATH . 'cache/' . '_mso_cache_last.txt' : $path . '_mso_cache_last.txt';
    $mso_cache_last = $path . '_mso_cache_last.txt';
    if (file_exists($mso_cache_last)) {
        $time = (int) trim(implode('', file($mso_cache_last)));
        $time = $time + $MSO->config['cache_time'] + 60;
        // запас + 60 секунд
        if (time() > $time) {
            mso_flush_cache();
        }
        // время истекло - сбрасываем кэш
    } else {
        mso_flush_cache();
    }
    # подключаем опции - они могут быть в кэше
    global $cache_options;
    if ($opt = mso_get_cache('options')) {
        # есть кэш опций
        $cache_options = $opt;
    } else {
        mso_refresh_options();
    }
    # обновляем кэш опций
    # проверим текущий шаблон
    $template = mso_get_option('template', 'general');
    // считали из опций
    $index = $MSO->config['templates_dir'] . $template . '/index.php';
    // проверим в реале
    if (!file_exists($index)) {
        mso_add_option('template', 'default', 'general');
        $MSO->config['template'] = 'default';
    } else {
        // все ок
        $MSO->config['template'] = $template;
    }
    # проверяем залогинненость юзера
    if (!isset($CI->session->userdata['userlogged']) or !$CI->session->userdata['userlogged']) {
        // не залогинен
        $CI->session->userdata['userlogged'] = 0;
    } else {
        // отмечено, что залогинен
        // нужно проверить верность данных юзера
        $CI->db->from('users');
        # таблица users
        $CI->db->select('users_id, users_groups_id');
        $CI->db->limit(1);
        # одно значение
        $CI->db->where(array('users_login' => $CI->session->userdata['users_login'], 'users_password' => $CI->session->userdata['users_password']));
        $query = $CI->db->get();
        if (!$query or $query->num_rows() == 0) {
            $CI->session->sess_destroy();
            // убиваем сессию
            $CI->session->userdata['userlogged'] = 0;
            // отмечаем, что не залогинен
        } else {
            // есть что-то
            $row = $query->row();
            // сразу выставим группу
            $MSO->data['session']['users_groups_id'] = $row->users_groups_id;
        }
    }
    # сразу обновляем время последней активности сессии
    # раньше было только для users, теперь делаем для всех
    # при этом сохраняем предыдущее значение
    # это значение позволяет отследить периодичность действий посетителя
    if (isset($CI->session->userdata['last_activity'])) {
        $CI->session->set_userdata('last_activity_prev', $CI->session->userdata['last_activity']);
        $CI->session->set_userdata('last_activity', time());
    } else {
        $CI->session->set_userdata('last_activity_prev', time());
        $CI->session->set_userdata('last_activity', $CI->session->userdata['last_activity_prev']);
    }
    // аналогично проверяем и комюзера, только данные из куки
    // но при этом сразу сохраняем все данные комюзера, чтобы потом не обращаться к БД
    $comuser = mso_get_cookie('maxsite_comuser', false);
    if ($comuser) {
        $comuser = unserialize($comuser);
        /*
        [comusers_id] => 1
        [comusers_password] => 037035235237852
        [comusers_email] => max-3000@list.ru
        [comusers_nik] => Максим
        [comusers_url] => http://maxsite.org/
        [comusers_avatar_url] => http://maxsite.org/avatar.jpg
        */
        // нужно сверить с тем, что есть
        $CI->db->select('comusers_id, comusers_password, comusers_email');
        $CI->db->where('comusers_id', $comuser['comusers_id']);
        $CI->db->where('comusers_password', $comuser['comusers_password']);
        $CI->db->where('comusers_email', $comuser['comusers_email']);
        $query = $CI->db->get('comusers');
        if ($query->num_rows()) {
            $CI->session->userdata['comuser'] = $comuser;
        } else {
            $CI->session->userdata['comuser'] = 0;
        }
    } else {
        $CI->session->userdata['comuser'] = 0;
    }
    # дефолтные хуки
    mso_hook_add('init', '_mso_require_functions_file');
    // подключение functions.php текущего шаблона
    // mso_hook_add('content_auto_tag', 'mso_auto_tag'); // авторасстановка тэгов
    // mso_hook_add('content_balance_tags', 'mso_balance_tags'); // автозакрытие тэгов - их баланс
}
Exemple #7
0
function global_cache_all_flush($arg = array())
{
    mso_flush_cache(false, 'html');
    return $arg;
}
Exemple #8
0
function mso_get_new_comment($args = array())
{
    global $MSO;
    $args = mso_hook('mso_get_new_comment_args', $args);
    if ($post = mso_check_post(array('comments_session', 'comments_submit', 'comments_page_id', 'comments_content'))) {
        // mso_checkreferer(); // если нужно проверять на реферер
        $CI =& get_instance();
        // заголовок страницы
        if (!isset($args['page_title'])) {
            $args['page_title'] = '';
        }
        // стили
        if (!isset($args['css_ok'])) {
            $args['css_ok'] = 'comment-ok';
        }
        if (!isset($args['css_error'])) {
            $args['css_error'] = 'comment-error';
        }
        // разрешенные тэги
        if (!isset($args['tags'])) {
            $args['tags'] = '<p><blockquote><br><span><strong><strong><em><i><b><u><s><pre><code>';
        }
        // обрабатывать текст на xss-атаку
        if (!isset($args['xss_clean'])) {
            $args['xss_clean'] = true;
        }
        // если найдена xss-атака, то не публиковать комментарий
        if (!isset($args['xss_clean_die'])) {
            $args['xss_clean_die'] = false;
        }
        // запрещенные слова как имя автора
        if (!isset($args['noword'])) {
            $args['noword'] = array('.com', '.ru', '.net', '.org', '.info', '.ua', '.su', '.name', '/', 'www.', 'http', ':', '-', '"', '«', '»', '%', '<', '>', '&', '*', '+', '\'');
        }
        mso_hook('add_new_comment');
        if (!mso_checksession($post['comments_session'])) {
            return '<div class="' . $args['css_error'] . '">' . tf('Ошибка сессии! Обновите страницу') . '</div>';
        }
        if (!$post['comments_page_id']) {
            return '<div class="' . $args['css_error'] . '">' . tf('Ошибка!') . '</div>';
        }
        $comments_page_id = $post['comments_page_id'];
        $id = (int) $comments_page_id;
        if ((string) $comments_page_id != (string) $id) {
            $id = false;
        }
        // $comments_page_id не число
        if (!$id) {
            return '<div class="' . $args['css_error'] . '">' . tf('Ошибка!') . '</div>';
        }
        // капчу проверим
        // если этот хук возвращает false, значит капча неверная
        if (!mso_hook('comments_new_captcha', true)) {
            // если определен хук на неверную капчу, отдаем его
            if (mso_hook_present('comments_new_captcha_error')) {
                return mso_hook('comments_new_captcha_error');
            } else {
                return '<div class="' . $args['css_error'] . '">' . tf('Ошибка! Неверно введены нижние символы!') . '</div>';
            }
        }
        // вычищаем от запрещенных тэгов
        if ($args['tags']) {
            $t = $post['comments_content'];
            $t = strip_tags($t, $args['tags']);
            // оставим только разрешенные тэги
            $post['comments_content'] = $t;
            // сохраним как текст комментария
        }
        // если указано рубить коммент при обнаруженной xss-атаке
        if ($args['xss_clean_die'] and mso_xss_clean($post['comments_content'], true, false) === true) {
            return '<div class="' . $args['css_error'] . '">' . tf('Обнаружена XSS-атака!') . '</div>';
        }
        if (!trim($post['comments_content'])) {
            return '<div class="' . $args['css_error'] . '">' . tf('Ошибка, нет текста!') . '</div>';
        }
        // возможно есть текст, но только из одних html - не пускаем
        if (!trim(strip_tags(trim($post['comments_content'])))) {
            return '<div class="' . $args['css_error'] . '">' . tf('Ошибка, нет полезного текста!') . '</div>';
        }
        // вычищаем текст от xss
        if ($args['xss_clean']) {
            $post['comments_content'] = mso_xss_clean($post['comments_content']);
            // проставим pre исправление ошибки CodeIgniter
            $post['comments_content'] = str_replace('&lt;/pre>', '</pre>', $post['comments_content']);
        }
        $comments_author_ip = $_SERVER['REMOTE_ADDR'];
        $comments_date = date('Y-m-d H:i:s');
        $comments_content = mso_hook('new_comments_content', $post['comments_content']);
        // есть дли родитель у комментария
        $comments_parent_id = isset($post['comments_parent_id']) ? $post['comments_parent_id'] : '0';
        // провека на спам - проверим через хук new_comments_check_spam
        $comments_check_spam = mso_hook('new_comments_check_spam', array('comments_content' => $comments_content, 'comments_date' => $comments_date, 'comments_author_ip' => $comments_author_ip, 'comments_page_id' => $comments_page_id, 'comments_server' => $_SERVER, 'comments_parent_id' => $comments_parent_id, 'comments_author' => isset($post['comments_author']) ? $post['comments_author'] : false, 'comments_email' => isset($post['comments_email']) ? $post['comments_email'] : false, 'comusers_email' => isset($post['comusers_email']) ? $post['comusers_email'] : false, 'comments_user_id' => isset($post['comments_user_id']) ? $post['comments_user_id'] : false, 'comments_comusers_nik' => isset($post['comments_comusers_nik']) ? $post['comments_comusers_nik'] : false, 'comments_comusers_url' => isset($post['comments_comusers_url']) ? $post['comments_comusers_url'] : false), false);
        // если есть спам, то возвращается что-то отличное от comments_content
        // если спама нет, то должно вернуться false
        // если есть подозрения, то возвращается массив с moderation (comments_approved)
        // если есть параметр check_spam=true, значит определен спам и он вообще не пускается
        // сообщение для вывода в парметре 'message'
        // разрешение антиспама moderation
        // -1 - не определено, 0 - можно разрешить, 1 - отдать на модерацию
        $moderation = -1;
        if ($comments_check_spam) {
            if (isset($comments_check_spam['check_spam']) and $comments_check_spam['check_spam'] == true) {
                if (isset($comments_check_spam['message']) and $comments_check_spam['message']) {
                    return '<div class="' . $args['css_error'] . '">' . $comments_check_spam['message'] . '</div>';
                } else {
                    return '<div class="' . $args['css_error'] . '">' . tf('Ваш комментарий определен как спам и удален.') . '</div>';
                }
            } else {
                // спам не определен, но возможно стоит moderation - принудительная модерация
                if (isset($comments_check_spam['moderation'])) {
                    $moderation = $comments_check_spam['moderation'];
                }
            }
        }
        // проверим есть ли уже такой комментарий
        // проверка по ip и тексту
        $CI->db->select('comments_id');
        $CI->db->where(array('comments_page_id' => $comments_page_id, 'comments_author_ip' => $comments_author_ip, 'comments_content' => $comments_content));
        $query = $CI->db->get('comments');
        if ($query->num_rows()) {
            return '<div class="' . $args['css_error'] . '">' . tf('Похоже, вы уже отправили этот комментарий...') . '</div>';
        }
        if (is_login()) {
            $comments_users_id = $MSO->data['session']['users_id'];
            $ins_data = array('comments_users_id' => $comments_users_id, 'comments_page_id' => $comments_page_id, 'comments_author_ip' => $comments_author_ip, 'comments_date' => $comments_date, 'comments_content' => $comments_content, 'comments_parent_id' => $comments_parent_id, 'comments_approved' => 1);
            $res = $CI->db->insert('comments', $ins_data) ? '1' : '0';
            if ($res) {
                $id_comment_new = $CI->db->insert_id();
                mso_email_message_new_comment($id_comment_new, $ins_data, $args['page_title']);
                mso_flush_cache();
                $CI->db->cache_delete_all();
                mso_hook('new_comment');
                mso_redirect(mso_current_url() . '#comment-' . $id_comment_new);
            } else {
                return '<div class="' . $args['css_error'] . '">' . tf('Ошибка добавления комментария') . '</div>';
            }
        } else {
            if (isset($post['comments_reg'])) {
                if ($post['comments_reg'] == 'reg') {
                    // проверим есть ли разршение на комментарии от комюзеров
                    // для случаев подделки post-запроса
                    if (!mso_get_option('allow_comment_comusers', 'general', '1')) {
                        return '<div class="' . $args['css_error'] . '">' . tf('Error allow_comment_comusers') . '</div>';
                    }
                    if (!isset($post['comments_email']) or !$post['comments_email']) {
                        return '<div class="' . $args['css_error'] . '">' . tf('Нужно указать Email') . '</div>';
                    }
                    if (!isset($post['comments_password']) or !$post['comments_password']) {
                        return '<div class="' . $args['css_error'] . '">' . tf('Нужно указать пароль') . '</div>';
                    }
                    $comments_email = mso_strip($post['comments_email']);
                    $comments_password = mso_strip($post['comments_password']);
                    if (!mso_valid_email($comments_email)) {
                        return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный Email') . '</div>';
                    }
                    // проверим время последнего комментария чтобы не очень часто
                    if (!mso_last_activity_comment()) {
                        return '<div class="' . $args['css_error'] . '">' . tf('Слишком частые комментарии. Попробуйте позже.') . '</div>';
                    }
                    // вначале нужно зарегистрировать comюзера - получить его id и только после этого добавить сам коммент
                    // но вначале есть смысл проверить есть ли такой ком-пользователь
                    $comusers_id = false;
                    $CI->db->select('comusers_id, comusers_password');
                    $CI->db->where('comusers_email', $comments_email);
                    $query = $CI->db->get('comusers');
                    if ($query->num_rows()) {
                        $row = $query->row_array(1);
                        // пароль не нужно шифровать mso_md5
                        if (isset($post['comments_password_md']) and $post['comments_password_md']) {
                            if ($row['comusers_password'] != $comments_password) {
                                // пароль неверный
                                return '<div class="' . $args['css_error'] . '">' . tf('Неверный пароль') . '</div>';
                            }
                        } else {
                            if ($row['comusers_password'] != mso_md5($comments_password)) {
                                // пароль неверный
                                return '<div class="' . $args['css_error'] . '">' . tf('Неверный пароль') . '</div>';
                            }
                        }
                        $comusers_id = $row['comusers_id'];
                        // получаем номер комюзера
                    } else {
                        // такого комюзера нет
                        $ins_data = array('comusers_email' => $comments_email, 'comusers_password' => mso_md5($comments_password));
                        // генерируем случайный ключ активации
                        $ins_data['comusers_activate_key'] = mso_md5(rand());
                        $ins_data['comusers_date_registr'] = date('Y-m-d H:i:s');
                        $ins_data['comusers_last_visit'] = date('Y-m-d H:i:s');
                        $ins_data['comusers_ip_register'] = $_SERVER['REMOTE_ADDR'];
                        $ins_data['comusers_notify'] = '1';
                        // сразу включаем подписку на уведомления
                        // если сразу отправлен адрес ссайта
                        if (isset($post['comments_comusers_url']) and $post['comments_comusers_url']) {
                            $comusers_url = htmlspecialchars(mso_xss_clean(strip_tags($post['comments_comusers_url'])));
                            if (strpos($comusers_url, 'http://') === false) {
                                $comusers_url = 'http://' . $comusers_url;
                            }
                            if ($comusers_url) {
                                $ins_data['comusers_url'] = $comusers_url;
                            }
                        }
                        // если сразу отправлен ник
                        if (isset($post['comments_comusers_nik']) and $post['comments_comusers_nik']) {
                            $ins_data['comusers_nik'] = htmlspecialchars(mso_xss_clean(strip_tags($post['comments_comusers_nik'])));
                        }
                        // Автоматическая активация новых комюзеров
                        // если активация стоит автоматом, то сразу её и прописываем
                        if (mso_get_option('comusers_activate_auto', 'general', '0')) {
                            $ins_data['comusers_activate_string'] = $ins_data['comusers_activate_key'];
                        }
                        $res = $CI->db->insert('comusers', $ins_data) ? '1' : '0';
                        if ($res) {
                            // сохраним в сессии время отправления комментария - используется в mso_last_activity_comment
                            $CI->session->set_userdata('last_activity_comment', time());
                            $comusers_id = $CI->db->insert_id();
                            // номер добавленной записи
                            // нужно добавить опцию в мета «новые комментарии, где я участвую» subscribe_my_comments
                            // вначале грохаем если есть такой ключ
                            $CI->db->where('meta_table', 'comusers');
                            $CI->db->where('meta_id_obj', $comusers_id);
                            $CI->db->where('meta_key', 'subscribe_my_comments');
                            $CI->db->delete('meta');
                            // теперь добавляем как новый
                            $ins_data2 = array('meta_table' => 'comusers', 'meta_id_obj' => $comusers_id, 'meta_key' => 'subscribe_my_comments', 'meta_value' => '1');
                            $CI->db->insert('meta', $ins_data2);
                            // почему CodeIgniter не может так?
                            // INSERT INTO table SET column = 1, id=1 ON DUPLICATE KEY UPDATE column = 2
                            // отправляем ему уведомление с кодом активации
                            mso_email_message_new_comuser($comusers_id, $ins_data, mso_get_option('comusers_activate_auto', 'general', '0'));
                            mso_flush_cache();
                            $CI->db->cache_delete_all();
                        } else {
                            return '<div class="' . $args['css_error'] . '">' . tf('Ошибка регистрации') . '</div>';
                        }
                    }
                    if ($comusers_id) {
                        // Модерация комюзеров 1 - модерировать
                        $comments_com_approved = mso_get_option('new_comment_comuser_moderate', 'general', 1);
                        // если включена модерация комюзеров
                        // и включена опция только первого комментария
                        // то получаем кол-во комментариев комюзера
                        if ($comments_com_approved and mso_get_option('new_comment_comuser_moderate_first_comment', 'general', 0)) {
                            $all_comusers = mso_comuser_update_count_comment();
                            // список комюзер => колво комментов
                            // есть такой комюзер и у него более 1 комментария
                            if (isset($all_comusers[$comusers_id]) and $all_comusers[$comusers_id] > 0) {
                                $comments_com_approved = 0;
                            }
                            // разрешаем публикацию
                        }
                        // но у нас в базе хранится значение наоборот - 1 разрешить 0 - запретить
                        $comments_com_approved = !$comments_com_approved;
                        if ($moderation == 1) {
                            $comments_com_approved = 0;
                        }
                        // антиспам определил, что нужно премодерировать
                        if ($comments_com_approved == 1) {
                            $comments_com_approved = mso_hook('new_comments_check_spam_comusers', array('comments_page_id' => $comments_page_id, 'comments_comusers_id' => $comusers_id, 'comments_com_approved' => $comments_com_approved), 1);
                        }
                        // комюзер добавлен или есть
                        // теперь сам коммент
                        $ins_data = array('comments_page_id' => $comments_page_id, 'comments_comusers_id' => $comusers_id, 'comments_author_ip' => $comments_author_ip, 'comments_date' => $comments_date, 'comments_content' => $comments_content, 'comments_approved' => $comments_com_approved, 'comments_parent_id' => $comments_parent_id);
                        // проверим время последнего комментария чтобы не очень часто
                        if (!mso_last_activity_comment()) {
                            return '<div class="' . $args['css_error'] . '">' . tf('Слишком частые комментарии. Попробуйте позже.') . '</div>';
                        }
                        $res = $CI->db->insert('comments', $ins_data) ? '1' : '0';
                        if ($res) {
                            // сохраним в сессии время отправления комментария - используется в mso_last_activity_comment
                            $CI->session->set_userdata('last_activity_comment', time());
                            $id_comment_new = $CI->db->insert_id();
                            // посколько у нас идет редирект, то данные об отправленном комменте
                            // сохраняем в сессии номер комментария
                            if (isset($MSO->data['session'])) {
                                $CI->session->set_userdata(array('comments' => array($id_comment_new)));
                            }
                            mso_email_message_new_comment($id_comment_new, $ins_data, $args['page_title']);
                            mso_flush_cache();
                            $CI->db->cache_delete_all();
                            mso_hook('new_comment');
                            # если комюзер не залогинен, то сразу логиним его
                            $CI->db->select('comusers_id, comusers_password, comusers_email, 
									comusers_nik, comusers_url, comusers_avatar_url, comusers_last_visit');
                            $CI->db->where('comusers_email', $comments_email);
                            $CI->db->where('comusers_password', mso_md5($comments_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 * 30;
                                // 30 дней = 2592000 секунд
                                $name_cookies = 'maxsite_comuser';
                                $value = serialize($comuser_info);
                                # ставим куку и редиректимся автоматом
                                mso_add_to_cookie($name_cookies, $value, $expire, mso_current_url(true) . '#comment-' . $id_comment_new);
                                exit;
                            }
                            mso_redirect(mso_current_url() . '#comment-' . $id_comment_new);
                        } else {
                            return '<div class="' . $args['css_error'] . '">' . tf('Ошибка добавления комментария') . '</div>';
                        }
                    }
                } elseif ($post['comments_reg'] == 'noreg') {
                    // комментарий от анонима
                    // проверим есть ли разрешение на комментарии от анонимов
                    // для случаев подделки post-запроса
                    if (!mso_get_option('allow_comment_anonim', 'general', '1')) {
                        return '<div class="' . $args['css_error'] . '">' . tf('Error allow_comment_anonim') . '</div>';
                    }
                    // проверим время последнего комментария чтобы не очень часто
                    if (!mso_last_activity_comment()) {
                        return '<div class="' . $args['css_error'] . '">' . tf('Слишком частые комментарии. Попробуйте позже.') . '</div>';
                    }
                    if (isset($post['comments_author'])) {
                        $comments_author_name = mso_strip($post['comments_author']);
                        $comments_author_name = str_replace($args['noword'], '', $comments_author_name);
                        $comments_author_name = htmlspecialchars(trim($comments_author_name));
                        if (!$comments_author_name) {
                            $comments_author_name = tf('Аноним');
                        }
                    } else {
                        $comments_author_name = 'Аноним';
                    }
                    // можно ли публиковать без модерации?
                    $comments_approved = mso_get_option('new_comment_anonim_moderate', 'general', 1);
                    // но у нас в базе хранится значение наоборот - 1 разрешить 0 - запретить
                    $comments_approved = !$comments_approved;
                    if ($moderation == 1) {
                        $comments_approved = 0;
                    }
                    // антиспам определил, что нужно премодерировать
                    $ins_data = array('comments_page_id' => $comments_page_id, 'comments_author_name' => $comments_author_name, 'comments_author_ip' => $comments_author_ip, 'comments_date' => $comments_date, 'comments_content' => $comments_content, 'comments_approved' => $comments_approved, 'comments_parent_id' => $comments_parent_id);
                    $res = $CI->db->insert('comments', $ins_data) ? '1' : '0';
                    if ($res) {
                        $id_comment_new = $CI->db->insert_id();
                        // сохраним в сессии время отправления комментария - используется в mso_last_activity_comment
                        $CI->session->set_userdata('last_activity_comment', time());
                        // посколько у нас идет редирект, то данные об отправленном комменте
                        // сохраняем в сессии номер комментария
                        if (isset($MSO->data['session'])) {
                            $CI->session->set_userdata(array('comments' => array($id_comment_new)));
                        }
                        mso_email_message_new_comment($id_comment_new, $ins_data, $args['page_title']);
                        mso_flush_cache();
                        $CI->db->cache_delete_all();
                        mso_hook('new_comment');
                        mso_redirect(mso_current_url() . '#comment-' . $id_comment_new);
                    } else {
                        return '<div class="' . $args['css_error'] . '">' . tf('Ошибка добавления комментария') . '</div>';
                    }
                }
            }
        }
    }
}
Exemple #9
0
 function _view_i($type = 'home', $vievers = 'index')
 {
     global $MSO;
     $data = array('type' => $type);
     $MSO->data = array_merge($this->data_def, $data);
     // если главная страница то проверим в сессии служебный массив _add_to_cookie
     // если он есть, то внесем из него все данные в куки
     //	[_add_to_cookie] => Array
     //	(
     //		[namecooke] => Array
     //			(
     //				[value] => ru
     //				[expire] => 1221749019
     //			)
     //	)
     //	[_add_to_cookie_redirect] => http://max-3000.com/page/about
     if ($type == 'home' and isset($this->session->userdata['_add_to_cookie'])) {
         foreach ($this->session->userdata['_add_to_cookie'] as $key => $val) {
             if (isset($val['value']) and isset($val['expire'])) {
                 setcookie($key, $val['value'], $val['expire']);
                 // записали в куку
             }
         }
         $this->session->unset_userdata('_add_to_cookie');
         // удаляем добавленное
         mso_flush_cache();
         // редирект на главную страницу
         if (isset($this->session->userdata['_add_to_cookie_redirect'])) {
             $r = $this->session->userdata['_add_to_cookie_redirect'];
             if (is_bool($r) or is_numeric($r)) {
                 // === true or $r === false) // логическая переменная
                 mso_redirect(getinfo('siteurl'), true);
             } else {
                 mso_redirect($r, true);
             }
             // редирект по указанному адресу
         } else {
             mso_redirect(getinfo('siteurl'), true);
         }
         // редирект на главную
         exit;
     }
     if (function_exists('mso_autoload_plugins')) {
         mso_autoload_plugins();
     }
     mso_hook('init');
     $this->load->view($vievers, $MSO->data);
 }
Exemple #10
0
function mso_admin_plugin_options($key, $type, $ar, $title = '', $info = '', $text_other = '', $show_goto_plugins = false)
{
    if ($show_goto_plugins) {
        echo '<p><a href="' . getinfo('site_admin_url') . 'plugins" class="i plugins">' . t('Плагины') . '</a></p>';
    }
    if ($title) {
        echo '<h1><a href="">' . $title . '</a></h1>';
    } else {
        echo '<h1><a href="">' . t('Опции плагина') . '</a></h1>';
    }
    if ($info) {
        echo '<p class="info">' . $info . '</p>';
    } else {
        echo '<p class="info">' . t('Укажите необходимые опции плагина.') . '</p>';
    }
    if ($text_other) {
        echo '<p>' . $text_other . '</p>';
    }
    # тут получаем текущие опции
    $options = mso_get_option($key, $type, array());
    // получаем опции
    # здесь смотрим post
    # в post должен быть $key . '-' . $type
    if ($post = mso_check_post(array('f_session_id', 'f_submit', $key . '-' . $type))) {
        # защита рефера
        mso_checkreferer();
        # наши опции
        $in = $post[$key . '-' . $type];
        if (isset($in['_mso_checkboxs'])) {
            $ch_names = array_keys($in['_mso_checkboxs']);
            // получили все чекбоксы
            $t = array();
            // временный массив
            foreach ($ch_names as $val) {
                if (isset($in[$val])) {
                    $t[$val] = '1';
                }
                // если есть, значит отмечен
            }
            $t = array_merge($in['_mso_checkboxs'], $t);
            // объединим с чекбоксамии
            unset($in['_mso_checkboxs']);
            // удалим _mso_checkboxs
            $in = array_merge($in, $t);
            // объединим с $in
            // теперь в $in все чекбоксы
        }
        # перед проверкой удалим из $ar все типы info
        $ar1 = $ar;
        foreach ($ar1 as $m => $val) {
            if ($val['type'] == 'info') {
                unset($ar1[$m]);
            }
        }
        # проверяем их с входящим $ar - ключи должны совпадать
        # финт ушами: смотрим разность ключей массивов - красиво?
        # если будет разность, значит неверные входящие данные, все рубим
        if (array_diff(array_keys($ar1), array_keys($in))) {
            die('Error key. :-(');
        }
        $newoptions = array_merge($options, $in);
        // объединим
        if ($options != $newoptions) {
            mso_add_option($key, $newoptions, $type);
            // обновим
            $options = $newoptions;
            // сразу обновим переменную на новые опции
            mso_flush_cache();
            // сбросим кэш
        }
        echo '<div class="update">' . t('Обновлено!') . '</div>';
    }
    if ($ar) {
        # тут генерируем форму
        $form = '';
        foreach ($ar as $m => $val) {
            if ($val['type'] == 'info') {
                if (isset($val['id'])) {
                    $tag_id = ' id="' . $val['id'] . '"';
                } else {
                    $tag_id = '';
                }
                if (isset($val['class'])) {
                    $tag_class = ' ' . $val['class'];
                } else {
                    $tag_class = '';
                }
                $form .= '<div class="admin_plugin_options_info' . $tag_class . '"' . $tag_id . '>';
                if (isset($val['title'])) {
                    $form .= '<h3>' . $val['title'] . '</h3>';
                }
                if (isset($val['text'])) {
                    $form .= '<p>' . $val['text'] . '</p>';
                }
                $form .= '</div>';
                continue;
            }
            if (!isset($options[$m])) {
                $options[$m] = $val['default'];
            }
            $group_start = isset($val['group_start']) ? $val['group_start'] : '';
            $group_end = isset($val['group_end']) ? $val['group_end'] : '';
            /*
            			// обрамление группы опций
            			if (isset($val['group_start']))
            			{
            				if ($val['group_start']) $group_start = '<div class="admin_plugin_options">';
            				else $group_start = '';
            			}
            			else $group_start = '<div class="admin_plugin_options">';
            if (isset($val['group_end']))
            			{
            				if ($val['group_end']) $group_end = '</div>';
            				else $group_end = '<br>';
            			}
            			else $group_end = '</div>';
            */
            if ($val['description']) {
                $val['description'] = '<span class="hint-options">' . $val['description'] . '</span>';
            }
            if ($val['type'] == 'text') {
                if (isset($val['itype'])) {
                    $itype = $val['itype'];
                } else {
                    $itype = 'text';
                }
                if ($itype == 'hidden') {
                    $form .= $group_start . '<p><span>' . $val['name'] . '</span>' . '<input type="' . $itype . '" value="' . htmlspecialchars($options[$m]) . '" name="' . $key . '-' . $type . '[' . $m . ']' . '">' . $val['description'] . '</p>' . $group_end . NR;
                } else {
                    $form .= $group_start . '<p><label><span>' . $val['name'] . '</span>' . '<input type="' . $itype . '" value="' . htmlspecialchars($options[$m]) . '" name="' . $key . '-' . $type . '[' . $m . ']' . '"></label>' . $val['description'] . '</p>' . $group_end . NR;
                }
            } elseif ($val['type'] == 'textarea') {
                if (isset($val['rows'])) {
                    $rows = (int) $val['rows'];
                } else {
                    $rows = 10;
                }
                $form .= $group_start . '<p><label><span>' . t($val['name']) . '</span>' . '<textarea rows="' . $rows . '" name="' . $key . '-' . $type . '[' . $m . ']' . '">' . htmlspecialchars($options[$m]) . '</textarea></label>' . $val['description'] . '</p>' . $group_end . NR;
            } elseif ($val['type'] == 'checkbox') {
                $ch_val = $options[$m];
                if ($ch_val) {
                    $checked = 'checked="checked"';
                } else {
                    $checked = '';
                }
                $form .= $group_start . '<p><label><input class="checkbox" type="checkbox" value="' . $ch_val . '"' . ' name="' . $key . '-' . $type . '[' . $m . ']' . '" ' . $checked . '> <span>' . $val['name'] . '</span></label>' . $val['description'] . '</p>' . $group_end . NR;
                # поскольку не отмеченные чекбоксы не передаются в POST, сделаем массив чекбоксов в hidden
                $form .= '<input type="hidden" name="' . $key . '-' . $type . '[_mso_checkboxs][' . $m . ']" value="0">';
            } elseif ($val['type'] == 'select') {
                $form .= $group_start . '<p><label><span>' . $val['name'] . '</span>' . '<select name="' . $key . '-' . $type . '[' . $m . ']' . '">';
                // если есть values, то выводим - правила задания, как в ini-файлах
                if (isset($val['values'])) {
                    $values = explode('#', $val['values']);
                    foreach ($values as $v) {
                        $v = trim($v);
                        $v_t = $v;
                        $ar = explode('||', $v);
                        if (isset($ar[0])) {
                            $v = trim($ar[0]);
                        }
                        if (isset($ar[1])) {
                            $v_t = trim($ar[1]);
                        }
                        if (htmlspecialchars($options[$m]) == $v) {
                            $checked = 'selected="selected"';
                        } else {
                            $checked = '';
                        }
                        $form .= NR . '<option value="' . $v . '" ' . $checked . '>' . $v_t . '</option>';
                    }
                }
                $form .= '</select></label>' . $val['description'] . '</p>' . $group_end . NR;
            } elseif ($val['type'] == 'radio') {
                $form .= $group_start . '<p><span>' . $val['name'] . '</span></p><p>';
                if (!isset($val['delimer'])) {
                    $delimer = '<br>';
                } else {
                    $delimer = stripslashes($val['delimer']);
                }
                // если есть values, то выводим - правила задания, как в ini-файлах
                if (isset($val['values'])) {
                    $values = explode('#', $val['values']);
                    foreach ($values as $v) {
                        $v = trim($v);
                        $v_t = $v;
                        $ar = explode('||', $v);
                        if (isset($ar[0])) {
                            $v = trim($ar[0]);
                        }
                        if (isset($ar[1])) {
                            $v_t = trim($ar[1]);
                        }
                        if (htmlspecialchars($options[$m]) == $v) {
                            $checked = 'checked="checked"';
                        } else {
                            $checked = '';
                        }
                        $form .= NR . '<label><input type="radio" value="' . $v . '" ' . $checked . ' name="' . $key . '-' . $type . '[' . $m . ']' . '"> ' . $v_t . '</label>' . $delimer;
                    }
                }
                $form .= $val['description'] . '</p><hr>' . $group_end . NR;
            }
        }
        # выводим форму
        echo NR . '<form method="post" class="mso_admin_plugin_options">' . mso_form_session('f_session_id');
        echo $form;
        echo NR . '<button type="submit" name="f_submit" class="i save">' . t('Сохранить') . '</button>';
        echo '</form>' . NR;
    } else {
        echo t('<p>Опции не определены.</p>') . NR;
    }
}
Exemple #11
0
function forms_content_post($options, $files, $fields, $format)
{
    $result['show_error'] = array();
    // каждый элемент сообщение об ошибке
    $result['show_form'] = false;
    $result['show_ok'] = false;
    $result['fields'] = array();
    // массив полей в случае ошибок
    $out = '';
    // принимаем post
    if ($post = mso_check_post(array('forms_session', 'forms_fields'))) {
        mso_checkreferer();
        $subject_key = false;
        // если у поля отмечен subject, то ставим номер поля
        $from_key = false;
        // если у поля отмечен from, то ставим номер поля
        // добавляем в массив $field полученные значения и сразу их чистим через mso_clean_str()
        foreach ($fields as $key => $field) {
            if (isset($fields[$key]['post_value'])) {
                unset($fields[$key]['post_value']);
            }
            $field = array_map('trim', $field);
            if (isset($post['forms_fields'][$key])) {
                $p_v = mso_clean_str($post['forms_fields'][$key], $field['clean']);
                $fields[$key]['post_value'] = $p_v;
                // обязательное поле и не получены данные (браузер должен был это сам отсеить)
                if ($field['require'] and !$p_v) {
                    $result['show_error'][] = tf('Неверно заполнено поле: ') . $field['description'];
                }
            }
            if ($field['subject']) {
                $subject_key = $key;
            }
            if ($field['from']) {
                $from_key = $key;
            }
        }
        // если есть ошибки то выходим
        if ($result['show_error']) {
            $result['show_form'] = true;
            $result['fields'] = $fields;
            return $result;
        }
        // если были ошибки, то уже вышли из функции
        $prefs = '';
        // дополнительные опции для mso_mail
        // если есть вложения
        if ($file_attaches = forms_files_post($files)) {
            // формируем вложения к письму
            $prefs['attach'] = $file_attaches;
        }
        // формируем само письмо
        // куда приходят письма
        $email = $options['email'];
        if (!mso_valid_email($email)) {
            $email = mso_get_option('admin_email', 'general', '*****@*****.**');
        }
        // тема письма может быть в опциях
        $subject = $options['subject'];
        if (!$subject) {
            // нет, значит ищем в полях
            $subject = $fields[$subject_key]['post_value'];
        }
        // тема письма может быть в опциях
        $from = $options['from'];
        if (!$from) {
            // нет, значит ищем в полях
            $from = $fields[$from_key]['post_value'];
        }
        // pr($fields);
        $message = '';
        foreach ($fields as $field) {
            $description = $field['description'];
            $post_value = $field['post_value'];
            $m = $format['mail_field'];
            $m = str_replace('[description]', $description, $m);
            $m = str_replace('[post_value]', $post_value, $m);
            $m = str_replace('[NR]', NR, $m);
            $message .= $m;
        }
        // добавляем служебную информацию
        $message .= tf('IP: ') . $_SERVER['REMOTE_ADDR'] . NR;
        $message .= tf('Браузер: ') . $_SERVER['HTTP_USER_AGENT'] . NR;
        mso_hook('forms_send', $post);
        // pr($email);
        // pr($subject);
        // pr($from);
        // pr($message);
        // pr($prefs);
        // тут отправка почты
        mso_mail($email, $subject, $message, $from, $prefs);
        // удаляем временные файлы вложений
        if ($files) {
            mso_flush_cache(false, 'forms_attaches/');
        }
        $result['show_ok'] = true;
    } else {
        $result['show_error'][] = tf('Ошибка сессии');
    }
    return $result;
}