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; }
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; }
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; }
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
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; } }
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'); // автозакрытие тэгов - их баланс }
function global_cache_all_flush($arg = array()) { mso_flush_cache(false, 'html'); return $arg; }
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('</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>'; } } } } } }
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); }
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; } }
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; }