Esempio n. 1
0
function mso_admin_content()
{
    global $MSO;
    $out = mso_hook('admin_content_do');
    if (count($MSO->data['uri_segment']) > 1) {
        $url = $MSO->data['uri_segment'][2];
        if (mso_hook_present('admin_url_' . $url)) {
            $out = mso_hook('admin_url_' . $url, $out);
        } else {
            $out = mso_hook('admin_content_default', $out);
        }
    } else {
        $out = mso_hook('admin_content_default', $out);
    }
    $out = mso_hook('admin_content', $out);
    return $out;
}
Esempio n. 2
0
<?php

if (!defined('BASEPATH')) {
    exit('No direct script access allowed');
}
if (!mso_hook_present('main_menu')) {
    ?>
		<div id="MainMenu" class="MainMenu"><div class="wrap">
			<ul class="menu">
				<?php 
    $menu = mso_get_option('top_menu', 'templates', tf('/ | Главная_NR_about | О сайте_NR_comments | Комментарии_NR_contact | Контакты_NR_sitemap | Архив_NR_feed | RSS'));
    if (is_login()) {
        $menu .= NR . '[';
        $menu .= NR . 'admin | ' . getinfo('users_nik') . ' | Админ-панель | icon icon-admin';
        $menu .= NR . 'admin/page_new | Создать запись';
        $menu .= NR . 'admin/page | Список записей';
        $menu .= NR . 'admin/cat | Рубрики';
        $menu .= NR . 'admin/plugins | Плагины';
        $menu .= NR . 'admin/files | Загрузки';
        $menu .= NR . 'admin/sidebars | Сайдбары';
        $menu .= NR . 'admin/options | Основные настройки';
        $menu .= NR . 'admin/template_options | Настройка шаблона';
        $menu .= NR . 'http://max-3000.com/page/faq | ЧАВО для новичков';
        $menu .= NR . 'http://max-3000.com/help | Центр помощи';
        $menu .= NR . 'http://forum.max-3000.com/ | Форум поддержки';
        $menu .= NR . 'logout | Выход';
        $menu .= NR . ']';
    } elseif (is_login_comuser()) {
        $comuser = is_login_comuser();
        $menu .= NR . '[';
        if ($comuser['comusers_nik']) {
Esempio n. 3
0
            }
            $all_pages .= NR . '<option ' . $sel . 'value="' . $row['page_id'] . '">' . $row['page_id'] . ' - ' . htmlspecialchars($row['page_title']) . '</option>';
        }
    }
}
$all_pages .= NR . '</select>' . NR;
# мета большие,вынесена в отдельный файл
# из неё получается $all_meta = '<p>Нет</p>';
require $MSO->config['admin_plugins_dir'] . 'admin_page/all_meta.php';
# закладка файлы вынесена отдельно
# её результат — переменная $all_files
require $MSO->config['admin_plugins_dir'] . 'admin_page/all-files.php';
$f_status_draft = $f_status_private = '';
$f_status_publish = 'checked';
$f_return = '<input name="f_return" type="checkbox" title="' . t('После сохранения вернуться к редактированию') . '">';
// checked="checked"
// быстрое сохранение только в режиме редактирования
$f_bsave = '';
# форма вынесена в отдельный файл, поскольку она одна и таже для new и edit
# из неё получается $do и $posle
require $MSO->config['admin_plugins_dir'] . 'admin_page/form.php';
$ad_config = array('action' => '', 'content' => $f_content, 'do' => $do, 'posle' => $posle);
# отображаем редактор
# есть ли хук на редактор: если да, то получаем эту функцию
# если нет, то отображаем стандартный editor_jw
if (mso_hook_present('editor_custom')) {
    mso_hook('editor_custom', $ad_config);
} else {
    editor_markitup($ad_config);
}
# end file
Esempio n. 4
0
function mso_find_ts_file($fn, $default = false)
{
    $fn1 = getinfo('template_dir') . $fn;
    // путь в шаблоне
    $fn2 = getinfo('shared_dir') . $fn;
    // путь в shared
    // если указан хук custom_ts_file, то вначале его обрабатываем
    // хук должен вернуть иполное имя файла
    if (mso_hook_present('custom_ts_file') and $fn3 = mso_hook('custom_ts_file', $fn) and file_exists($fn3)) {
        return $fn3;
    } elseif (file_exists($fn1)) {
        return $fn1;
    } elseif (file_exists($fn2)) {
        return $fn2;
    } else {
        return $default;
    }
}
Esempio n. 5
0
		<li><a href="' . getinfo('siteurl') . 'logout">' . t('Выйти') . '</a></li>
	</ul>
	</div>
	';
} else {
    global $MSO;
    // если разрешены регистрации, то выводим ссылку
    if (mso_get_option('allow_comment_comusers', 'general', '1')) {
        $registration = ' <span class="registration"><a href="' . getinfo('siteurl') . 'registration">' . tf('Регистрация') . '</a></span>';
        $reg_text = t('Вход / Регистрация');
    } else {
        $registration = '';
        $reg_text = t('Вход');
    }
    // возможен вход через соцсеть
    $hook_login_form_auth = mso_hook_present('login_form_auth') ? '<span class="login-form-auth-title">' . tf('Вход через:') . ' </span>' . mso_hook('login_form_auth') : '';
    if ($hook_login_form_auth) {
        $hook_login_form_auth = trim(str_replace('[end]', '     ', $hook_login_form_auth));
        $hook_login_form_auth = '<p class="login-form-auth">' . str_replace('     ', ', ', $hook_login_form_auth) . '</p>';
    } else {
        $hook_login_form_auth = '';
    }
    $out = '
			
	<a href="#" data-dropdown="#dropdown-1" class="dropdown">' . $reg_text . '</a>

	<div id="dropdown-1" class="dropdown-menu has-tip anchor-right">
	<ul><li>
		<form method="post" action="' . $MSO->config['site_url'] . 'login" name="flogin">
			<input type="hidden" value="' . $MSO->config['site_url'] . mso_current_url() . '" name="flogin_redirect">
			<input type="hidden" value="' . $MSO->data['session']['session_id'] . '" name="flogin_session_id">
Esempio n. 6
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');
    }
}
Esempio n. 7
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>';
                    }
                }
            }
        }
    }
}
Esempio n. 8
0
</span>
							</p>
						
						<?php 
    }
    ?>
			
				<?php 
    if ($form_comment_comuser = mso_get_option('form_comment_comuser', 'general', '')) {
        echo '<p><span class="ffirst"></span><span class="fhint">', $form_comment_comuser, '</span></p>';
    }
    ?>
			
			
				<?php 
    if (mso_hook_present('page-comment-form')) {
        echo '<p class="hint comments_auth"><span class="ffirst">' . tf('Авторизация') . '&nbsp;</span>';
        mso_hook('page-comment-form');
        echo '</p>';
    }
    ?>
			
			</div> <!-- class="comments-auth"-->
			
			<?php 
}
// залогирование
?>

			<?php 
mso_hook('comments_content_end');
Esempio n. 9
0
function mso_get_comuser($id = 0, $args = array())
{
    global $MSO;
    if (!$id) {
        // не указан id, получаем его из сессии
        if (isset($MSO->data['session']['comuser']) and $MSO->data['session']['comuser']) {
            $id = $MSO->data['session']['comuser']['comusers_id'];
        } else {
            $id = mso_segment(2);
        }
        // или сегмент в url
    }
    if (!$id) {
        return array();
    }
    // нет номера, выходим
    if (!is_numeric($id)) {
        return array();
    }
    // если id указан не номером, выходим
    if (!isset($args['limit'])) {
        $args['limit'] = 20;
    }
    if (!isset($args['tags'])) {
        $args['tags'] = '<p><img><strong><em><i><b><u><s><font><pre><code><blockquote>';
    }
    if (!isset($args['order'])) {
        $args['order'] = 'comments_date';
    }
    if (!isset($args['asc'])) {
        $args['asc'] = 'desc';
    }
    $CI =& get_instance();
    $CI->db->select('comusers.*, COUNT(comments_comusers_id) as comusers_count_comment_real');
    $CI->db->from('comusers');
    $CI->db->where('comusers_id', $id);
    $CI->db->limit(1);
    // отдавать все комменты, включая и неотмодерированные
    //$CI->db->where('comments.comments_approved', '1');
    $CI->db->join('comments', 'comusers.comusers_id = comments.comments_comusers_id', 'left');
    $CI->db->group_by('comments_comusers_id');
    $query = $CI->db->get();
    if ($query->num_rows() > 0) {
        $comuser = $query->result_array();
        // данные комюзера
        // pr($comuser);
        $comuser_count_comment_first = $comuser[0]['comusers_count_comments'];
        // первоначальное значание колво комментариев
        // подсоединим к нему [comments] - все его комментарии
        $CI->db->select('comments.*, page.page_id, page.page_title, page.page_slug');
        $CI->db->from('comments');
        $CI->db->where('comments_comusers_id', $id);
        // $CI->db->where('page.page_status', 'publish');
        // $CI->db->where('page_date_publish <', date('Y-m-d H:i:s'));
        $CI->db->where('comments.comments_approved', '1');
        $CI->db->join('page', 'page.page_id = comments.comments_page_id');
        $CI->db->order_by('comments_date', $args['asc']);
        if ($args['limit']) {
            $CI->db->limit($args['limit']);
        }
        $query = $CI->db->get();
        $comments = array();
        // все комменты
        if ($query->num_rows() > 0) {
            // нужно обработать тексты комментариев на предмет всяких хуков и лишних тэгов
            $comments = $query->result_array();
            foreach ($comments as $key => $comment) {
                $comments_content = $comment['comments_content'];
                // защитим pre
                $t = $comments_content;
                $t = str_replace('&lt;/pre>', '</pre>', $t);
                // проставим pre - исправление ошибки CodeIgniter
                $t = preg_replace_callback('!<pre>(.*?)</pre>!is', 'mso_clean_html_do', $t);
                $t = strip_tags($t, $args['tags']);
                $t = mso_xss_clean($t);
                $t = str_replace('[html_base64]', '<pre>[html_base64]', $t);
                // проставим pre
                $t = str_replace('[/html_base64]', '[/html_base64]</pre>', $t);
                // обратная замена
                $t = preg_replace_callback('!\\[html_base64\\](.*?)\\[\\/html_base64\\]!is', 'mso_clean_html_posle', $t);
                $comments_content = $t;
                // сохраним как текст комментария
                $comments_content = mso_hook('comments_content', $comments_content);
                $comments_content = str_replace("\n", "<br>", $comments_content);
                $comments_content = str_replace('<p>', '&lt;p&gt;', $comments_content);
                $comments_content = str_replace('</p>', '&lt;/p&gt;', $comments_content);
                $comments_content = str_replace('<P>', '&lt;P&gt;', $comments_content);
                $comments_content = str_replace('</P>', '&lt;/P&gt;', $comments_content);
                if (mso_hook_present('comments_content_custom')) {
                    $comments_content = mso_hook('comments_content_custom', $comments_content);
                } else {
                    $comments_content = mso_auto_tag($comments_content, true);
                    $comments_content = mso_hook('content_balance_tags', $comments_content);
                }
                $comments_content = mso_hook('comments_content_out', $comments_content);
                $comments[$key]['comments_content'] = $comments_content;
            }
            $comuser[0]['comments'] = $comments;
            // $comuser[0]['comments'] = $query->result_array();
            $comuser[0]['comusers_count_comments'] = count($comments);
        } else {
            $comuser[0]['comments'] = array();
        }
        if ($comuser_count_comment_first != count($comments)) {
            mso_comuser_set_count_comment($id, count($comments));
        }
        // в секцию meta добавим все метаполя данного юзера
        $CI->db->select('meta_key, meta_value');
        $CI->db->from('meta');
        $CI->db->where('meta_table', 'comusers');
        $CI->db->where('meta_id_obj', $id);
        $query = $CI->db->get();
        if ($query->num_rows() > 0) {
            // переделаем полученный массив в key = value
            foreach ($query->result_array() as $val) {
                $comuser[0]['comusers_meta'][$val['meta_key']] = $val['meta_value'];
            }
        } else {
            $comuser[0]['comusers_meta'] = array();
        }
        // от вских гадостей
        $comuser[0]['comusers_url'] = mso_xss_clean($comuser[0]['comusers_url']);
        if ($comuser[0]['comusers_url'] and strpos($comuser[0]['comusers_url'], 'http://') === false) {
            $comuser[0]['comusers_url'] = 'http://' . $comuser[0]['comusers_url'];
        }
        $comuser[0]['comusers_msn'] = mso_xss_clean($comuser[0]['comusers_msn']);
        // twitter
        $comuser[0]['comusers_msn'] = mso_slug(str_replace('@', '', $comuser[0]['comusers_msn']));
        // подчистка
        $comuser[0] = mso_clean_post(array('comusers_nik' => 'base', 'comusers_icq' => 'base', 'comusers_jaber' => 'base', 'comusers_skype' => 'base', 'comusers_description' => 'base', 'comusers_msn' => 'base', 'comusers_url' => 'base'), $comuser[0]);
        // pr($comuser);
        return $comuser;
    } else {
        return array();
    }
}
Esempio n. 10
0
function mso_page_foreach($type_foreach_file = false)
{
    global $MSO;
    # при первом обращении занесем сюда все файлы из шаблонного type_foreach
    # чтобы потом результат считывать из масива, а не по file_exists
    static $files = false;
    $MSO->data['type_foreach_file'] = $type_foreach_file;
    // помещаем в $MSO вызываемый тип
    // описание см. default/type_foreach/_general.php
    if (file_exists(getinfo('template_dir') . 'type_foreach/general.php')) {
        include getinfo('template_dir') . 'type_foreach/general.php';
    }
    // можно поменять type_foreach-файл через хук
    $type_foreach_file = mso_hook('type-foreach-file-general', $type_foreach_file);
    if ($type_foreach_file) {
        if ($files === false) {
            $CI =& get_instance();
            $CI->load->helper('directory');
            $files = directory_map(getinfo('template_dir') . 'type_foreach/', true);
            // только в type_foreach
            if (!$files) {
                $files = array();
            }
        }
        if (in_array($type_foreach_file . '.php', $files)) {
            // есть файл в шаблоне
            return getinfo('template_dir') . 'type_foreach/' . $type_foreach_file . '.php';
        } else {
            // файла нет
            // если есть хук type-foreach-file
            if (mso_hook_present('type-foreach-file')) {
                // получим его значение
                // он должен возвращать либо полный путь к файлу, либо false
                if ($out = mso_hook('type-foreach-file', $type_foreach_file)) {
                    return $out;
                } else {
                    return false;
                }
                // вернул false
            } else {
                // нет хука type-foreach-file
                return false;
            }
        }
    }
    return false;
}
Esempio n. 11
0
 public function output($r = array())
 {
     if (!$this->pages) {
         return;
     }
     // нет записей, выходим
     // дефолтный формат вывода
     $default = array('title_start' => '<h3 class="home-last-page">', 'title_end' => '</h3>', 'date' => 'D, j F Y г. в H:i', 'date_start' => '<span class="date"><time datetime="[page_date_publish_iso]">', 'date_end' => '</time></span>', 'cat_start' => ' | <span class="cat">', 'cat_end' => '</span>', 'cat_sep' => ', ', 'tag_start' => ' | <span class="tag">', 'tag_end' => '</span>', 'tag_sep' => ', ', 'author_start' => '', 'author_end' => '', 'read' => '»»»', 'read_start' => '', 'read_end' => '', 'comments_count_start' => '', 'comments_count_end' => '', 'thumb' => true, 'thumb_width' => 320, 'thumb_height' => 180, 'thumb_class' => 'thumb left', 'placehold' => false, 'placehold_path' => 'http://placehold.it/', 'placehold_pattern' => '[W]x[H].png', 'placehold_file' => false, 'placehold_data_bg' => '#CCCCCC', 'block_start' => '', 'block_end' => '', 'line1' => '[thumb]', 'line1_start' => '', 'line1_end' => '', 'line2' => '[title]', 'line2_start' => '', 'line2_end' => '', 'line3' => '[date] [cat]', 'line3_start' => '<p class="home-last-page-info">', 'line3_end' => '</p>', 'line4' => '', 'line4_start' => '', 'line4_end' => '', 'line5' => '', 'line5_start' => '', 'line5_end' => '', 'content' => true, 'content_chars' => 0, 'content_words' => 0, 'content_cut' => ' ...', 'content_start' => '<div class="mso-page-content">', 'content_end' => '</div>', 'columns' => 0, 'columns_class_row' => 'onerow', 'columns_class_cell' => 'col w1-2', 'clearfix' => false, 'page_start' => '', 'page_end' => '', 'pagination_start' => '', 'pagination_end' => '', 'box_grid' => 0, 'box_grid_class' => 'w50', 'box_grid_box_class' => 'table-box', 'exclude_page_add' => true);
     $r = array_merge($default, $r);
     // объединяем
     // $r = array_map('trim', $r);
     $p = new Page_out();
     // шаблонизатор
     // echo $r['block_start'];
     eval(mso_tmpl_prepare($r['block_start'], false));
     // формат записи
     $p->format('title', $r['title_start'], $r['title_end']);
     $p->format('date', $r['date'], $r['date_start'], $r['date_end']);
     $p->format('author', $r['author_start'], $r['author_end']);
     $p->format('cat', $r['cat_sep'], $r['cat_start'], $r['cat_end']);
     $p->format('tag', $r['tag_sep'], $r['tag_start'], $r['tag_end']);
     $p->format('read', $r['read'], $r['read_start'], $r['read_end']);
     $p->format('comments_count', $r['comments_count_start'], $r['comments_count_end']);
     if ($r['exclude_page_add']) {
         $exclude_page_id = mso_get_val('exclude_page_id');
     }
     if ($r['columns']) {
         $my_columns = new Columns($r['columns'], count($this->pages), $r['columns_class_row']);
     }
     if ($r['box_grid']) {
         $p->box_grid($r['box_grid']);
     }
     foreach ($this->pages as $page) {
         $p->load($page);
         // загружаем данные записи
         if ($r['box_grid']) {
             $p->box_grid_cell($r['box_grid_class'], $r['box_grid_box_class']);
         }
         if ($r['columns']) {
             $my_columns->out($r['columns_class_cell']);
         }
         // echo $r['page_start'];
         eval(mso_tmpl_prepare($r['page_start'], false));
         if ($r['thumb']) {
             // плейсхолд
             if ($r['placehold']) {
                 if ($r['placehold_file']) {
                     if ($r['placehold_file'] == 'data') {
                         // сами генерируем плейсхолд
                         // mso_holder($width = 100, $height = 100, $text = true, $background_color = '#CCCCCC', $text_color = '#777777', $font_size = 5)
                         $t_placehold = mso_holder($r['thumb_width'], $r['thumb_height'], false, $r['placehold_data_bg']);
                     } else {
                         $t_placehold = $r['placehold_path'] . $r['placehold_file'];
                     }
                 } else {
                     $t_placehold_pattern = str_replace('[W]', $r['thumb_width'], $r['placehold_pattern']);
                     $t_placehold_pattern = str_replace('[H]', $r['thumb_height'], $t_placehold_pattern);
                     $t_placehold_pattern = str_replace('[RND]', rand(1, 10), $t_placehold_pattern);
                     $t_placehold = $r['placehold_path'] . $t_placehold_pattern;
                 }
             } else {
                 $t_placehold = false;
             }
             if ($thumb = thumb_generate($p->meta_val('image_for_page'), $r['thumb_width'], $r['thumb_height'], $t_placehold)) {
                 $p->thumb = '<a href="' . mso_page_url($p->val('page_slug')) . '" title="' . htmlspecialchars($p->val('page_title')) . '"><img src="' . $thumb . '" class="' . $r['thumb_class'] . '" alt="' . htmlspecialchars($p->val('page_title')) . '"></a>';
             }
         }
         $p->line($r['line1'], $r['line1_start'], $r['line1_end']);
         $p->line($r['line2'], $r['line2_start'], $r['line2_end']);
         $p->line($r['line3'], $r['line3_start'], $r['line3_end']);
         if ($r['content']) {
             if ($r['content_chars']) {
                 $p->content_chars($r['content_chars'], $r['content_cut'], $r['content_start'], $r['content_end']);
                 // текст обрезанный
             } elseif ($r['content_words']) {
                 $p->content_words($r['content_words'], $r['content_cut'], $r['content_start'], $r['content_end']);
                 // текст обрезанный
             } else {
                 $p->content($r['content_start'], $r['content_end']);
             }
         }
         $p->line($r['line4'], $r['line4_start'], $r['line4_end']);
         $p->line($r['line5'], $r['line5_start'], $r['line5_end']);
         if ($r['clearfix']) {
             $p->clearfix();
         }
         // echo $r['page_end'];
         eval(mso_tmpl_prepare($r['page_end'], false));
         if ($r['columns']) {
             $my_columns->next();
         }
         if ($r['box_grid']) {
             $p->box_grid_next();
         }
         // сохраняем id записей, чтобы их исключить из вывода
         if ($r['exclude_page_add']) {
             $exclude_page_id[] = $p->val('page_id');
         }
     }
     if ($r['columns']) {
         $my_columns->close();
     }
     if ($r['box_grid']) {
         $p->box_grid_end();
     }
     if ($r['exclude_page_add']) {
         mso_set_val('exclude_page_id', $exclude_page_id);
     }
     if ($this->param['pagination']) {
         if (mso_hook_present('pagination')) {
             // echo $r['pagination_start'];
             eval(mso_tmpl_prepare($r['pagination_start'], false));
             mso_hook('pagination', $this->pagination);
             // echo $r['pagination_end'];
             eval(mso_tmpl_prepare($r['pagination_end'], false));
         }
     }
     // echo $r['block_end'];
     eval(mso_tmpl_prepare($r['block_end'], false));
 }
Esempio n. 12
0
    // нет, значит дефолтный
    exit;
    // выходим
}
# подключаем нужные библиотеки - они используются почти везде
require_once getinfo('common_dir') . 'page.php';
// функции страниц
require_once getinfo('common_dir') . 'category.php';
// функции рубрик
# в зависимости от типа данных подключаем нужный файл
$mso_type_file = getinfo('type');
// текущий тип
$mso_type_file_404 = false;
// признак page_404
# на page_404 может быть свой хук. Тогда ничего не подключаем
if ($mso_type_file == 'page_404' and mso_hook_present('custom_page_404') and mso_hook('custom_page_404')) {
    $mso_type_file = false;
} elseif ($mso_type_file == 'page_404') {
    $mso_type_file_404 = mso_segment(1);
}
// страница не найдена, попробуем найти по сегменту
# анализ сегментов URL, где переопределяется файл типа
if ($mso_type_file == 'users') {
    if (mso_segment(3) == 'edit') {
        $mso_type_file = 'users-form';
    } elseif (mso_segment(3) == 'lost') {
        $mso_type_file = 'users-form-lost';
    } elseif (mso_segment(2) == '') {
        $mso_type_file = 'users-all';
    }
    // список всех комюзеров
Esempio n. 13
0
            // здесь комментарии
            if ($f = mso_page_foreach('page-comments-start')) {
                require $f;
            }
            if (mso_get_option('comment_other_system', 'general', false)) {
                // внешнее комментирование
                if ($fn = mso_find_ts_file('type/page/units/page-comments-other-system.php')) {
                    require $fn;
                }
                // + стандартное комментирование
                if (mso_get_option('comment_other_system_standart', 'general', false)) {
                    if ($fn = mso_find_ts_file('type/page/units/page-comments.php')) {
                        require $fn;
                    }
                }
            } elseif (mso_hook_present('page-comment-unit-file') and $fn = mso_fe(mso_hook('page-comment-unit-file'), '')) {
                require $fn;
            } elseif ($fn = mso_find_ts_file('type/page/units/page-comments.php')) {
                require $fn;
            }
            if ($f = mso_page_foreach('page-comments-end')) {
                require $f;
            }
        }
        // end foreach
    }
    // else page_content_only
} else {
    if ($f = mso_page_foreach('pages-not-found')) {
        require $f;
        // подключаем кастомный вывод