function captcha_go($args = array()) { global $MSO; echo ' <div class="captcha"><label for="comments_captha">' . tf('Введите нижние символы') . '</label> <input type="text" name="comments_captha" id="comments_captha" value="" maxlength="4" class="comments_captha"> <img src="' . create_captha_img(mso_md5($MSO->data['session']['session_id'] . mso_current_url())) . '" alt="" title="' . tf('Защита от спама: введите только нижние символы') . '"> <span>' . t('(обязательно)') . '</span><br><br></div> '; }
function parse_ini_string($ini, $process_sections = false, $scanner_mode = null) { $tempname = getinfo('cache_dir') . mso_md5($ini); $fp = fopen($tempname, 'w'); fwrite($fp, $ini); $ini = parse_ini_file($tempname, !empty($process_sections)); fclose($fp); @unlink($tempname); return $ini; }
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; }
function last_comments_widget_custom($options = array(), $num = 1) { if (!isset($options['count'])) { $options['count'] = 5; } if (!isset($options['words'])) { $options['words'] = 20; } if (!isset($options['maxchars'])) { $options['maxchars'] = 20; } if (!isset($options['header'])) { $options['header'] = ''; } $options['count'] = (int) $options['count']; if ($options['count'] < 1) { $options['count'] = 5; } $options['words'] = (int) $options['words']; if ($options['words'] < 1) { $options['words'] = 20; } $options['maxchars'] = (int) $options['maxchars']; if ($options['maxchars'] < 1) { $options['maxchars'] = 20; } $cache_key = 'last_comments_widget_' . $num . mso_md5(serialize($options)); $k = mso_get_cache($cache_key, true); if ($k) { return $k; } // да есть в кэше require_once getinfo('common_dir') . 'comments.php'; // функции комментариев $comments = mso_get_comments(false, array('limit' => $options['count'], 'order' => 'desc')); $out = ''; if ($comments) { // сгруппируем все комментарии по записям $arr_com_page = array(); $arr_com_page_title = array(); foreach ($comments as $comment) { $arr_com_page[$comment['page_id']][$comment['comments_id']] = $comment; $arr_com_page_title[$comment['page_id']] = $comment['page_title']; } // выводим по странично foreach ($arr_com_page as $key => $comments) { $out .= '<h5>' . $arr_com_page_title[$key] . '</h5>'; $comments = array_reverse($comments); // чтобы комментарии были в привычном порядке сверху вниз $out .= '<ul class="mso-widget-list">'; foreach ($comments as $comment) { extract($comment); if ($comment['comments_users_id']) { $css_style_add = 'last_comment_users ' . ' mso-last-comment-users-' . $comment['comments_users_id']; } elseif ($comment['comments_comusers_id']) { $css_style_add = 'last_comment_comusers ' . ' mso-last-comment-comusers-' . $comment['comments_comusers_id']; } else { $css_style_add = 'last_comment_anonim'; } $out .= '<li class="' . $css_style_add . '"><a href="' . getinfo('siteurl') . 'page/' . mso_slug($page_slug) . '#comment-' . $comments_id . '"><b>'; if ($comments_users_id) { $out .= $users_nik; } elseif ($comments_comusers_id) { if ($comusers_nik) { $out .= $comusers_nik; } else { $out .= t('Комментатор') . ' ' . $comusers_id; } } elseif ($comments_author_name) { $out .= $comments_author_name; } else { $out .= ' ' . t('Аноним'); } $comments_content_1 = strip_tags($comments_content); // удалим тэги $comments_content = mso_str_word($comments_content_1, $options['words']); // ограничение на количество слов // если старый и новый текст после обрезки разные, значит добавим в конце ... if ($comments_content_1 != $comments_content) { $comments_content .= '...'; } // каждое слово нужно проверить на длину и если оно больше maxchars, то добавить пробел в wordwrap $words = explode(' ', $comments_content); foreach ($words as $key => $word) { $words[$key] = mso_wordwrap($word, $options['maxchars'], ' '); } $comments_content = implode(' ', $words); $out .= ' »</b> ' . strip_tags($comments_content) . '</a>'; $out .= '</li>' . NR; } $out .= '</ul>'; } if ($options['header']) { $out = $options['header'] . $out; } } mso_add_cache($cache_key, $out, false, true); // сразу в кэш добавим return trim($out); }
<![endif]--> <script type="text/javascript"> //<![CDATA[ $(function() { //if ($.browser.msie) // { // document.execCommand("BackgroundImageCache", false, true); // } DiGraph = new DiGraph('<?php echo $editor_config['url']; ?> ', 'f_content'); DiGraph.skey='<?php echo mso_md5('digraph'); ?> '; DiGraph.init(); }); //]]> </script> <form method="post" <?php echo $editor_config['action']; ?> > <fieldset> <?php echo $editor_config['do']; ?>
<?php if (!$_SERVER['HTTP_X_REQUESTED_WITH']) { exit(0); } if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') { exit(0); } if (!$_REQUEST['skey']) { exit(0); } define('BASEPATH', 'digraph hook'); require_once '../../../mso_config.php'; require_once '../../../common/common.php'; $skey = mso_md5('digraph'); if ($_REQUEST['skey'] != $skey) { exit(0); } $host = 'www.typograf.ru'; $script = '/webservice/'; $data = 'text=' . urlencode($_REQUEST['text']) . '&chr=UTF-8'; $buf = ''; $fp = fsockopen($host, 80, $errno, $errstr, 30); if ($fp) { fputs($fp, "POST {$script} HTTP/1.1\n"); fputs($fp, "Host: {$host}\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\n"); fputs($fp, "Content-length: " . strlen($data) . "\n"); fputs($fp, "User-Agent: PHP Script\n"); fputs($fp, "Connection: close\n\n"); fputs($fp, $data);
} else { // тут форма, если не было post echo '<div class="mso-guestbook"><form method="post">' . mso_form_session('f_session_id'); foreach ($options['fields_arr'] as $key => $val) { echo '<p><label><span>' . t($val) . '</span>'; if ($key != 'text') { echo '<input name="f_fields_guestbook[' . $key . ']" type="text"></label></p>'; } else { echo '<textarea name="f_fields_guestbook[' . $key . ']" rows="10"></textarea></label></p>'; } } // капча из плагина капчи if (!function_exists('create_captha_img')) { require_once getinfo('plugins_dir') . 'captcha/index.php'; } $captcha = '<img src="' . create_captha_img(mso_md5($MSO->data['session']['session_id'] . mso_current_url())) . '" title="' . t('Защита от спама: введите только нижние символы') . '">'; echo '<p><label><span>' . t('Нижние символы:') . $captcha . '</span> <input type="text" name="f_guestbook_captha" value="" maxlength="4" required></label></p>'; echo '<p><button type="submit" class="i submit" name="f_submit_guestbook">' . t('Отправить') . '</button></p>'; echo '</form></div>'; } // тут последние отзывы с пагинацией // нам нужна все поля таблицы // вначале определим общее количество записей $pag = array(); // пагинация $pag['limit'] = $options['limit']; // записей на страницу $pag['type'] = ''; // тип $CI->db->select('guestbook_id');
function mso_remote_f_newcategory($post) { if ($post = mso_check_post(array('category_id_parent', 'category_name', 'category_desc', 'category_slug', 'category_menu_order'))) { // подготавливаем данные $data = array('category_id_parent' => (int) $post['category_id_parent'], 'category_name' => $post['category_name'], 'category_desc' => $post['category_desc'], 'category_slug' => $post['category_slug'], 'category_menu_order' => (int) $post['category_menu_order'], 'user_login' => $post['remote_login'], 'password' => mso_md5($post['remote_password'])); // выполняем запрос и получаем результат require_once getinfo('common_dir') . 'category.php'; require_once getinfo('common_dir') . 'functions-edit.php'; // функции редактирования $result = mso_new_category($data); if (isset($result['result']) and $result['result']) { mso_flush_cache(); // сбросим кэш $out = 'OK: ' . $result['description']; return $out; } else { $out = 'ERROR: ' . $result['description']; return $out; } } else { $out = 'ERROR: ' . 'missing arguments'; return $out; } }
$namesite = isset($_POST['namesite']) ? mso_strip($_POST['namesite'], true) : false; $demoposts = isset($_POST['demoposts']) ? (int) mso_strip($_POST['demoposts'], true) : 0; if (!mso_valid_email($useremail)) { $useremail = false; } if (strlen($userpassword) < 6) { $userpassword = false; } if (!$useremail or !$username or !$userpassword or !$namesite) { $step = 2; $error = '<h2 class="error">' . t('Ошибочные или неполные данные!', 'install') . '</h2>'; } if ($step === 3) { require_once APPPATH . 'views/install/install-common.php'; //require_once ('install-common.php'); $res = mso_install_newsite(array('username' => $username, 'userpassword' => mso_md5($userpassword), 'userpassword_orig' => $userpassword, 'useremail' => $useremail, 'namesite' => $namesite, 'demoposts' => $demoposts, 'ip' => $_SERVER['REMOTE_ADDR'])); } } else { $step == 2; } } mso_nocache_headers(); ?> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Install MaxSite CMS</title> <meta name="generator" content="MaxSite CMS"> <link rel="stylesheet" href="<?php echo $MSO->data['url_css'];
function _mso_login() { global $MSO; // обрабатываем POST если есть if ($_POST) { $_POST = mso_clean_post(array('flogin_submit' => 'base', 'flogin_redirect' => 'base', 'flogin_user' => 'base', 'flogin_password' => 'base', 'flogin_session_id' => 'base')); } if ($_POST and isset($_POST['flogin_submit']) and isset($_POST['flogin_redirect']) and isset($_POST['flogin_user']) and isset($_POST['flogin_password']) and isset($_POST['flogin_session_id'])) { sleep(3); // задержка - примитивная защита от подбора пароля $flogin_session_id = $_POST['flogin_session_id']; # защита сесии if ($MSO->data['session']['session_id'] != $flogin_session_id) { mso_redirect('loginform/error'); } $flogin_redirect = urldecode($_POST['flogin_redirect']); if ($flogin_redirect == 'home') { $flogin_redirect = getinfo('siteurl'); } $flogin_user = $_POST['flogin_user']; $flogin_password = $_POST['flogin_password']; # проверяем на strip - запрещенные символы if (!mso_strip($flogin_user, true) or !mso_strip($flogin_password, true)) { mso_redirect('loginform/error'); } $flogin_password = mso_md5($flogin_password); $CI =& get_instance(); // если это комюзер, то логин = email // проверяем валидность email и если он верный, то ставим куку на этого комюзера // и редиректимся на главную (куку ставить только на главную!) // если же это обычный юзер-автор, то проверяем логин и пароль по базе if (mso_valid_email($flogin_user)) { // если в логине мыло, то проверяем сначала в таблице авторов $CI->db->from('users'); # таблица users $CI->db->select('*'); # все поля $CI->db->limit(1); # одно значение $CI->db->where('users_email', $flogin_user); // where 'users_login' = $flogin_user $CI->db->where('users_password', $flogin_password); // where 'users_password' = $flogin_password $query = $CI->db->get(); if ($query->num_rows() > 0) { $userdata = $query->result_array(); # добавляем юзера к сессии $CI->session->set_userdata('userlogged', '1'); $data = array('users_id' => $userdata[0]['users_id'], 'users_nik' => $userdata[0]['users_nik'], 'users_login' => $userdata[0]['users_login'], 'users_password' => $userdata[0]['users_password'], 'users_groups_id' => $userdata[0]['users_groups_id'], 'users_last_visit' => $userdata[0]['users_last_visit'], 'users_show_smiles' => $userdata[0]['users_show_smiles'], 'users_time_zone' => $userdata[0]['users_time_zone'], 'users_language' => $userdata[0]['users_language'], 'users_avatar_url' => $userdata[0]['users_avatar_url'], 'users_email' => $userdata[0]['users_email']); $CI->session->set_userdata($data); // сразу же обновим поле последнего входа $CI->db->where('users_id', $userdata[0]['users_id']); $CI->db->update('users', array('users_last_visit' => date('Y-m-d H:i:s'))); mso_redirect($flogin_redirect, true); } else { // это не автор, значит это комюзер $CI->db->select('comusers_id, comusers_password, comusers_email, comusers_nik, comusers_url, comusers_avatar_url, comusers_last_visit'); $CI->db->where('comusers_email', $flogin_user); $CI->db->where('comusers_password', $flogin_password); $query = $CI->db->get('comusers'); if ($query->num_rows()) { $comuser_info = $query->row_array(1); // вся инфа о комюзере // сразу же обновим поле последнего входа $CI->db->where('comusers_id', $comuser_info['comusers_id']); $CI->db->update('comusers', array('comusers_last_visit' => date('Y-m-d H:i:s'))); $expire = time() + 60 * 60 * 24 * 365; // 365 дней $name_cookies = 'maxsite_comuser'; $value = serialize($comuser_info); mso_add_to_cookie($name_cookies, $value, $expire, $flogin_redirect); // в куку для всего сайта exit; } else { mso_redirect('loginform/error'); exit; } } } else { // это обычный автор $CI->db->from('users'); # таблица users $CI->db->select('*'); # все поля $CI->db->limit(1); # одно значение $CI->db->where('users_login', $flogin_user); // where 'users_login' = $flogin_user $CI->db->where('users_password', $flogin_password); // where 'users_password' = $flogin_password $query = $CI->db->get(); if ($query->num_rows() > 0) { $userdata = $query->result_array(); # добавляем юзера к сессии $CI->session->set_userdata('userlogged', '1'); $data = array('users_id' => $userdata[0]['users_id'], 'users_nik' => $userdata[0]['users_nik'], 'users_login' => $userdata[0]['users_login'], 'users_password' => $userdata[0]['users_password'], 'users_groups_id' => $userdata[0]['users_groups_id'], 'users_last_visit' => $userdata[0]['users_last_visit'], 'users_show_smiles' => $userdata[0]['users_show_smiles'], 'users_time_zone' => $userdata[0]['users_time_zone'], 'users_language' => $userdata[0]['users_language'], 'users_avatar_url' => $userdata[0]['users_avatar_url'], 'users_email' => $userdata[0]['users_email']); $CI->session->set_userdata($data); // сразу же обновим поле последнего входа $CI->db->where('users_id', $userdata[0]['users_id']); $CI->db->update('users', array('users_last_visit' => date('Y-m-d H:i:s'))); mso_redirect($flogin_redirect, true); } else { mso_redirect('loginform/error'); } } // автор } else { $MSO->data['type'] = 'loginform'; $template_file = $MSO->config['templates_dir'] . $MSO->config['template'] . '/index.php'; if (file_exists($template_file)) { require $template_file; } else { show_error('Ошибка - отсутствует файл шаблона index.php'); } } }
<?php if (!defined('BASEPATH')) { exit('No direct script access allowed'); } /** * MaxSite CMS * (c) http://max-3000.com/ */ header('Content-type: text/html; charset=utf-8'); header('Content-Type: application/rss+xml'); $cache_key = mso_md5('feed_' . mso_current_url()); $k = mso_get_cache($cache_key); if ($k) { return print $k; } // да есть в кэше ob_start(); require_once getinfo('common_dir') . 'page.php'; // основные функции страниц require_once getinfo('common_dir') . 'category.php'; // функции рубрик $this->load->helper('xml'); $time_zone = getinfo('time_zone'); // 2.00 -> 200 $time_zone_server = date('O') / 100; // +0100 -> 1.00 $time_zone = $time_zone + $time_zone_server; // 3 $time_zone = number_format($time_zone, 2, '.', ''); // 3.00
function mso_comuser_auth($data) { if (!isset($data['email'])) { return false; } else { $email = $data['email']; } $pass = isset($data['password']) ? $data['password'] : false; $comusers_nik = isset($data['comusers_nik']) ? $data['comusers_nik'] : ''; $redirect = isset($data['redirect']) ? $data['redirect'] : true; // если $die = true, то всё рубим через die // иначе возвращаем результат по return $die = isset($data['die']) ? $data['die'] : true; // разрешить создавать через эту функцию новых комюзеров (если такого email нет в базе) $allow_create_new_comuser = isset($data['allow_create_new_comuser']) ? $data['allow_create_new_comuser'] : true; $CI =& get_instance(); // если указанный email зарегистрирован на user, то отказываем в регистрации $CI->db->select('users_id'); $CI->db->where('users_email', $email); $query = $CI->db->get('users'); if ($query->num_rows() > 0) { if ($die) { die(tf('Данный email уже используется на сайте админом или автором.')); } else { return tf('Данный email уже используется на сайте админом или автором.'); } } // имя email и пароль нужно проверить, чтобы такие были в базе // вначале нужно проверить наличие такого email // если есть, то сверяем и пароль $CI->db->select('comusers_id, comusers_password, comusers_email, comusers_nik, comusers_url, comusers_avatar_url, comusers_last_visit'); $CI->db->where('comusers_email', $email); $query = $CI->db->get('comusers'); if ($query->num_rows()) { $comuser_info = $query->row_array(1); // вся инфа о комюзере if ($pass !== false) { // сверим пароль if ($comuser_info['comusers_password'] == mso_md5($pass)) { // пароли равны, можно логинить // сразу же обновим поле последнего входа $CI->db->where('comusers_id', $comuser_info['comusers_id']); $CI->db->update('comusers', array('comusers_last_visit' => date('Y-m-d H:i:s'))); $expire = time() + 60 * 60 * 24 * 365; // 365 дней $name_cookies = 'maxsite_comuser'; $value = serialize($comuser_info); mso_add_to_cookie($name_cookies, $value, $expire, $redirect); // в куку для всего сайта } else { // email есть но пароль ошибочный if ($die) { die('Данный email уже зарегистрирован <a href="' . getinfo('siteurl') . '">на сайте</a>. Для входа нужно указать верный пароль. Вы можете <a href="' . getinfo('siteurl') . 'password-recovery">восстановить пароль</a>.'); } else { return 'Данный email уже зарегистрирован <a href="' . getinfo('siteurl') . '">на сайте</a>. Для входа нужно указать верный пароль. Вы можете <a href="' . getinfo('siteurl') . 'password-recovery">восстановить пароль</a>.'; } } } else { // пароль сверять не нужно // сразу же обновим поле последнего входа $CI->db->where('comusers_id', $comuser_info['comusers_id']); $CI->db->update('comusers', array('comusers_last_visit' => date('Y-m-d H:i:s'))); $expire = time() + 60 * 60 * 24 * 365; // 365 дней $name_cookies = 'maxsite_comuser'; $value = serialize($comuser_info); mso_add_to_cookie($name_cookies, $value, $expire, $redirect); // в куку для всего сайта } } elseif ($allow_create_new_comuser) { // нет такого email, нужно регистрировать комюзера // но если запрещены регистрации, то все рубим if (!mso_get_option('allow_comment_comusers', 'general', '1')) { if ($die) { die(t('На сайте запрещена регистрация.')); } else { return t('На сайте запрещена регистрация.'); } } // если пароль не указан, то генерируем его случайным образом if ($pass === false) { $pass = substr(mso_md5($email), 1, 9); } $ins_data = array('comusers_email' => $email, 'comusers_password' => mso_md5($pass)); // генерируем случайный ключ активации $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($data['comusers_url'])) { if ($comusers_url = mso_clean_str($data['comusers_url'])) { $ins_data['comusers_url'] = $comusers_url; } } else { $comusers_url = ''; } if ($comusers_nik = mso_clean_str($comusers_nik, 'base|not_url')) { $ins_data['comusers_nik'] = $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) { $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); // отправляем ему уведомление с кодом активации mso_email_message_new_comuser($comusers_id, $ins_data, mso_get_option('comusers_activate_auto', 'general', '0')); // после отправки можно сразу залогинить $comuser_info = array('comusers_id' => $comusers_id, 'comusers_password' => mso_md5($pass), 'comusers_email' => $email, 'comusers_nik' => $comusers_nik, 'comusers_url' => $comusers_url, 'comusers_avatar_url' => '', 'comusers_last_visit' => ''); $value = serialize($comuser_info); $expire = time() + 60 * 60 * 24 * 365; // 365 дней $name_cookies = 'maxsite_comuser'; mso_add_to_cookie($name_cookies, $value, $expire, $redirect); // в куку для всего сайта } else { if ($die) { die(t('Произошла ошибка регистрации')); } else { return t('Произошла ошибка регистрации'); } } } return false; }
function mso_cat_ul($li_format = '%NAME%', $show_empty = true, $checked_id = array(), $selected_id = array(), $ul_class = 'category', $type_page = 'blog', $type = 'page', $order = 'category_menu_order', $asc = 'asc', $custom_array = false, $include = array(), $exclude = array()) { // спасибо за помощь http://tedbeer.net/wp/ // $include = array('3'); // $exclude = array('3'); // возможно, что этот список уже сформирован, поэтому посмотрим в кэше $cache_key = mso_md5('mso_cat_ul' . $li_format . $show_empty . implode(' ', $checked_id) . implode(' ', $selected_id) . $ul_class . $type_page . $type . $order . $asc . implode(' ', $include) . implode(' ', $exclude)); $k = mso_get_cache($cache_key); if ($k) { // находим текущий url (код повтояет внизу) $current_url = getinfo('siteurl') . mso_current_url(); // текущий урл $out = str_replace('<a href="' . $current_url . '">', '<a href="' . $current_url . '" class="current_url">', $k); $pattern = '|<li class="(.*?)">(.*?)(<a href="' . $current_url . '")|ui'; $out = preg_replace($pattern, '<li class="$1 current_url">$2$3', $out); return $out; } # получим все рубрики в виде одномерного массива if ($custom_array) { $all = $custom_array; } else { $all = mso_cat_array_single('page', $order, $asc, $type_page); } $top = array(); foreach ($all as $item) { $parentId = $item['category_id_parent']; $id = $item['category_id']; if ($parentId && isset($all[$parentId])) { if (!isset($all[$parentId]['children'])) { $all[$parentId]['children'] = array($id); } else { $all[$parentId]['children'][] = $id; } } else { $top[] = $id; } } // непосредственно формирование списка $out = _mso_cat_ul_glue($top, $all, $li_format, $checked_id, $selected_id, $show_empty, $include, $exclude); # $out = str_replace("\n{*}</li>", "</li>", $out); if ($ul_class) { $out = '<ul class="' . $ul_class . '">' . "\n" . $out . "\n" . '</ul>'; } else { $out = '<ul>' . "\n" . $out . "\n" . '</ul>'; } mso_add_cache($cache_key, $out); // сразу в кэш добавим // отметим текущую рубрику. Поскольку у нас к кэше должен быть весь список и не делать кэш для каждого url // то мы просто перед отдачей заменяем текущий url на url с li.current_url $current_url = getinfo('siteurl') . mso_current_url(); // текущий урл $out = str_replace('<a href="' . $current_url . '">', '<a href="' . $current_url . '" class="current_url">', $out); $pattern = '|<li class="(.*?)">(.*?)(<a href="' . $current_url . '")|ui'; $out = preg_replace($pattern, '<li class="$1 current_url">$2$3', $out); return $out; }
function maxsite_auth_custom($args = array()) { if (mso_segment(1) == 'maxsite-auth-form') { // здесь формируется форма для отправки запроса // данные отправляются POST // посетитель должен указать только адрес своего сайта // в hidden указываем нужные данные $redirect_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : getinfo('siteurl'); echo '<html><head> <title>Авторизация</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head><body> <form method="post" action="' . getinfo('site_url') . 'maxsite-auth-form-post"> <input type="hidden" name="redirect_url" value="' . urlencode($redirect_url) . '"> Укажите адрес сайта (с http://): <input type="text" name="url" value="" size="80"> <button type="submit">' . tf('Перейти к сайту') . '</button> </form> </body></html>'; die; // Форма ОК } elseif (mso_segment(1) == 'maxsite-auth-form-post') { // здесь происходит приём указанного адреса сайта и редирект на него с нужными данными if ($post = mso_check_post(array('redirect_url', 'url'))) { $url = mb_strtolower($post['url']); $url = trim(str_replace('/', ' ', $url)); $url = trim(str_replace(' ', ' ', $url)); $url = trim(str_replace(' ', '/', $url)); $url = str_replace('http:/', 'http://', $url); $url = $url . '/maxsite-auth-receive/' . base64_encode(getinfo('siteurl') . '##' . urldecode($post['redirect_url']) . '##' . substr(mso_md5(getinfo('siteurl')), 1, 5)); mso_redirect($url, true); } else { mso_redirect('maxsite-auth-form'); } // ошибочная форма - возвращаемся } elseif (mso_segment(1) == 'maxsite-auth-receive') { // принимаем входящие данные от другого сайта // здесь запрос на авторизацию // нужно проверить все входящие данные // проверить is_login // и сформировать форму с отправкой на входящий_сайт/maxsite-auth-reply if (!is_login()) { echo '<html><head> <title>Авторизация</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head><body> <div class="loginform">' . tf('Для авторизации необходимо войти на сайт') . '<br>'; mso_login_form(array('login' => tf('Логин:') . ' ', 'password' => tf('Пароль:') . ' ', 'submit' => ''), getinfo('siteurl') . mso_current_url()); echo '</div></body></html>'; die; // выходим ОК } else { //проверяем разрешения группы if (!mso_check_allow('maxsite_auth_edit')) { die(tf('Доступ к авторизации запрещен')); } $options = mso_get_option('plugin_maxsite_auth', 'plugins', array()); if (!isset($options['email']) or !$options['email']) { die(tf('Не задан ответный email')); } if (!isset($options['password']) or !$options['password']) { die(tf('Не задан ответный пароль')); } // смотрятся входные get-данные (расшифровка из base64) адрес-сайт1 $data64 = mso_segment(2); if (!$data64) { die(tf('Нет данных')); } // отладка // echo (getinfo('siteurl') . '##'. 'page/about' . '##' . substr(mso_md5(getinfo('siteurl')), 1, 5)); // echo '<br>'. base64_encode((getinfo('siteurl') . '##'. 'page/about' . '##' . substr(mso_md5(getinfo('siteurl')), 1, 5))); // echo '<br>'; // распаковываем данные $data = @base64_decode($data64); if (!$data) { die(tf('Ошибочные данные')); } // адрес-сайт1##адрес текущей страницы1##открытый ключ $data = explode('##', $data); // обработаем предварительно массив $data_1 = array(); foreach ($data as $element) { if ($d = trim($element)) { $data_1[] = $d; } } // должно быть 3 элемента if (count($data_1) != 3) { die(tf('Неверное количество данных')); } // pr($data_1); $data_siteurl = $data_1[0]; $data_redirect = $data_1[1]; $data_key = $data_1[2]; // все проверки пройдены // выводим форму с кнопкой Разрешить // данные для ответа // - адрес исходный // - адрес ответ - текущий // - адрес текущей страницы1 - редирект // - открытый ключ сайта2 // - зашифрованный «email##пароль» на основе открытых ключей сайт1 и сайт2 $CI =& get_instance(); $CI->load->library('encrypt'); // подключим библиотеку для шифрования // ключ строится по этому алгоритму // он должен быть фиксированным для одного сайта $my_key = substr(mso_md5(getinfo('siteurl')), 1, 5); // шифруем на основе двух ключей $my_email_pass = $CI->encrypt->encode($options['email'] . '##' . $options['password'], $data_key . $my_key); $data = getinfo('siteurl') . '##' . $data_siteurl . '##' . $data_redirect . '##' . $my_key . '##' . $my_email_pass; // pr($data); // pr($CI->encrypt->decode($my_email_pass, $data_key . $my_key)); echo '<html><head> <title>Авторизация</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head><body> <form method="post" action="' . $data_siteurl . 'maxsite-auth-reply"> <input type="hidden" name="data" value="' . base64_encode($data) . '"> <button type="submit">' . tf('Подтвердить авторизацию') . '</button> </form> </body></html>'; die; // выход ОК } } elseif (mso_segment(1) == 'maxsite-auth-reply') { // принимаем данные для авторизации от другого сайта // должен быть email и пароль // проверяем входящие данные // проверяем существаание такого комюзера // если его нет, то выполняем авторизацию // после выполняем автологин // и редиректимся на указанную страницу // pr($_POST); if ($post = mso_check_post(array('data'))) { // проверим referer if (!isset($_SERVER['HTTP_REFERER'])) { die(t('Ошибочный referer-сайт')); } $data = @base64_decode($post['data']); if (!$data) { die(t('Ошибочные данные')); } // ошибка распаковки // pr($data); $data = explode('##', $data); // обработаем предварительно массив $data_1 = array(); foreach ($data as $element) { if ($d = trim($element)) { $data_1[] = $d; } } // должно быть 5 элементов if (count($data_1) != 5) { die(t('Неверное количество данных')); } /* $data = getinfo('siteurl') . '##' . $data_siteurl . '##' . $data_redirect . '##' . $my_key . '##' . $my_email_pass; */ // pr($data_1); $data_siteurl = $data_1[0]; // сайт где была сделана авторизация = реферер $my_siteurl = $data_1[1]; // сайт с которого был отправлен запрос на авторизацию - должен быть равен текущему $data_redirect = $data_1[2]; // конечная страница $data_key = $data_1[3]; // открытый ключ сайта-авторизатора $data_email_pass = $data_1[4]; // email и пароль if (strpos($_SERVER['HTTP_REFERER'], $data_siteurl) === false) { die(t('Ошибочный referer-сайт')); } if ($my_siteurl != getinfo('siteurl')) { die(t('Ошибочный исходный сайт')); } $CI =& get_instance(); $CI->load->library('encrypt'); // подключим библиотеку для шифрования // ключ строится по этому алгоритму // он должен быть фиксированным для одного сайта $my_key = substr(mso_md5(getinfo('siteurl')), 1, 5); // шифруем на основе двух ключей $my_email_pass = $CI->encrypt->decode($data_email_pass, $my_key . $data_key); //_pr($my_email_pass); $email_pass = explode('##', $my_email_pass); if (count($email_pass) != 2) { die(tf('Неверные данные email-пароль')); } $email = $email_pass[0]; // email $pass = $email_pass[1]; // пароль if (!mso_valid_email($email)) { die(t('Неверный email')); } if (strlen($pass) < 6) { die(tf('Короткий пароль')); } // pr($email . ' ' . $pass); require_once getinfo('common_dir') . 'comments.php'; mso_comuser_auth(array('email' => $email, 'password' => $pass)); die; // выход ОК } else { die('Ошибочные данные'); } // нет POST } else { return $args; } }
function mso_remote_post() { # каждый запрос должен содержать логин, пароль, ключ безопасности, имя функции и её аргументы if ($post = mso_check_post(array('remote_login', 'remote_password', 'remote_key', 'remote_function'))) { //pr($post); $post = _mso_trim_array($post); //pr($post); $remote_login = $post['remote_login']; $remote_password = $post['remote_password']; $remote_key = $post['remote_key']; $CI =& get_instance(); # всегда проверяем логин и пароль $CI->db->from('users'); # таблица users $CI->db->select('users_id'); $CI->db->limit(1); # одно значение $CI->db->where(array('users_login' => $remote_login, 'users_password' => mso_md5($remote_password))); $query = $CI->db->get(); if ($query->num_rows() == 0) { echo 'MaxSite CMS REMOTE (http://max-3000.com/)ERROR: Login/password incorrect'; return false; } else { if ($remote_key != getinfo('remote_key')) { echo 'MaxSite CMS REMOTE (http://max-3000.com/)ERROR: Remote key incorrect'; return false; } // вход корректный, добавим в $post данные юзера $r = $query->result_array(); $post['remote_users_id'] = $r[0]['users_id']; $post['remote_users_login'] = $remote_login; $post['remote_users_password'] = mso_md5($remote_password); } # получаем имя функции $remote_function = $post['remote_function']; # формат вывода - для некоторых функций # есть только text, xml и html if (!isset($post['remote_format_out'])) { $post['remote_format_out'] = 'xml'; } else { if ($post['remote_format_out'] == 'text') { $post['remote_format_out'] = 'text'; } elseif ($post['remote_format_out'] == 'html') { $post['remote_format_out'] = 'html'; } else { $post['remote_format_out'] = 'xml'; } } # контроль # echo 'remote_function : ' . $remote_function . "<br />"; # echo 'remote_function_args : '; pr($remote_function_args); ################################################################################ # выполняем запрашиваемую функцию $out = ''; # hello if ($remote_function == 'hello') { $out = mso_remote_f_hello(); } elseif ($remote_function == 'addtwonumbers') { $out = mso_remote_f_addtwonumbers($post); } elseif ($remote_function == 'getgeneralinfo') { $out = mso_remote_f_getgeneralinfo($post); } elseif ($remote_function == 'newpost') { $out = mso_remote_f_newpost($post); } elseif ($remote_function == 'setpost') { $out = mso_remote_f_setpost($post); } elseif ($remote_function == 'getrecentposttitles') { $out = mso_remote_f_getrecentposttitles($post); } elseif ($remote_function == 'getpost') { $out = mso_remote_f_getpost($post); } elseif ($remote_function == 'deletepost') { $out = mso_remote_f_deletepost($post); } elseif ($remote_function == 'getcategorylist') { $out = mso_remote_f_getcategorylist($post); } elseif ($remote_function == 'newcategory') { $out = mso_remote_f_newcategory($post); } elseif ($remote_function == 'setcategory') { $out = mso_remote_f_setcategory($post); } elseif ($remote_function == 'deletecategory') { $out = mso_remote_f_deletecategory($post); } elseif ($remote_function == 'gettags') { $out = mso_remote_f_gettags($post); } elseif ($remote_function == 'getfilenameuploads') { $out = mso_remote_f_getfilenameuploads($post); } elseif ($remote_function == 'newmediaobject') { $out = mso_remote_f_newmediaobject($post); } elseif ($remote_function == 'deletemediaobject') { $out = mso_remote_f_deletemediaobject($post); } else { # ни одной функции не выполнилось - выходим $out = 'ERROR: No access (unknow function)'; } if ($out) { if ($post['remote_format_out'] == 'xml') { header("Content-type: text/xml"); } // в начало нужно добавить сигнатуру MaxSite CMS // если этой сигнатуры нет, блог-клиент должен определить результат как ошибка echo 'MaxSite CMS REMOTE (http://max-3000.com/)' . $out; } } else { echo 'ERROR: missing arguments'; } }
<?php if (!defined('BASEPATH')) { exit('No direct script access allowed'); } mso_checkreferer(); // защищаем реферер if ($post = mso_check_post(array('text', 'id'))) { $text = $post['text']; $id = $post['id']; // номер записи $fn = mso_add_float_option('autosave-' . $id . '-' . mso_md5($id), $text, '', false, '.txt', false); // и в float-опции без серилизации echo getinfo('uploads_url') . $fn; } # end file