function _create_table($active_plugins = true) { global $MSO; $CI =& get_instance(); $CI->load->helper('directory'); $plugins_dir = $MSO->config['plugins_dir']; // все каталоги в массиве $dirs $dirs = directory_map($plugins_dir, true); sort($dirs); # пересортируем элементы масива так чтобы активные плагины из # $MSO->active_plugins оказались вверху $dirs = array_unique(array_merge($MSO->active_plugins, $dirs)); $flag_present_plugins = false; // признак, что пустая таблица foreach ($dirs as $dir) { if (!is_dir($plugins_dir . $dir)) { continue; } // если не каталог ничего не делаем if ($active_plugins and !in_array($dir, $MSO->active_plugins)) { continue; } if (!$active_plugins and in_array($dir, $MSO->active_plugins)) { continue; } $info_f = $plugins_dir . $dir . '/info.php'; if (file_exists($info_f)) { require $info_f; if (isset($info)) { /* [name] => Demo [description] => Демонстрационный плагин [version] => 1.0 [author] => Максим [plugin_url] => http://maxsite.org/ [author_url] => http://maxsite.org/ [group] => template [help] => ссылка на хелп 'options_url' => getinfo('site_admin_url') . 'plugin_XXX', // ссылка на страницу опций */ $name = isset($info['name']) ? mso_strip($info['name']) : ''; $version = isset($info['version']) ? $info['version'] : ''; $description = isset($info['description']) ? $info['description'] : ''; $author = isset($info['author']) ? mso_strip($info['author']) : ''; $author_url = isset($info['author_url']) ? $info['author_url'] : false; $plugin_url = isset($info['plugin_url']) ? $info['plugin_url'] : false; $help = isset($info['help']) ? $info['help'] : false; $options_url = isset($info['options_url']) ? $info['options_url'] : false; if ($author_url) { $author = '<a href="' . $author_url . '">' . $author . '</a>'; } if ($plugin_url) { $name = '<a href="' . $plugin_url . '">' . $name . '</a>'; } $act = '<input type="checkbox" name="f_check_submit[' . $dir . ']" id="f_check_submit_' . $dir . '">'; $dir0 = $dir; if (in_array($dir, $MSO->active_plugins)) { // $status = '<span style="color: green;"><strong>' . t('вкл') . '</strong></span>'; if (function_exists($dir . '_mso_options')) { // есть опции $status = '<a title="' . t('Настройки плагина') . '" href="' . getinfo('site_admin_url') . 'plugin_options/' . $dir . '">' . t('опции') . '</a>'; } else { $status = ' '; } $dir = '<label for="f_check_submit_' . $dir . '"><span class="plugin_on">' . $dir . '</span></label>'; if ($options_url) { $status .= ' <a href="' . $options_url . '" title="' . t('Настройки плагина') . '">' . t('опции') . '</a>'; } } else { $dir = '<label for="f_check_submit_' . $dir . '">' . $dir . '</label>'; // формируем ссылку для включения плагина $status = '<span class="gray"><a href="" onclick="' . "\r\n\t\t\t\t\t\t\t\$('#f_check_submit_" . $dir0 . "').attr('checked', 'checked'); \r\n\t\t\t\t\t\t\t\$('form').prepend('<input type=hidden name=f_activate_submit value=1>');\r\n\t\t\t\t\t\t\t\$('form').submit(); \r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t" . '">' . t('включить') . '</a></span>'; $description = '<span class="gray">' . $description . '</span>'; $dir = '<span class="gray">' . $dir . '</span>'; $version = '<span class="gray">' . $version . '</span>'; $name = '<span class="gray">' . $name . '</span>'; $author = '<span class="gray">' . $author . '</span>'; } if ($help) { $status .= ' <a href="' . $help . '" target="_blank" title="' . t('Помощь по плагину') . '">(?)</a>'; } $CI->table->add_row($act, $dir, $status, $name, $version, $author, $description); $flag_present_plugins = true; } } } return $flag_present_plugins; }
function _mso_sql_build_search($r, &$pag) { $CI =& get_instance(); if ($r['slug']) { $search = $r['slug']; } else { $search = mso_segment(2); } // $search = mso_segment(2); $search = mso_strip(strip_tags($search)); $offset = 0; if ($r['pagination']) { # пагинация # для неё нужно при том же запросе указываем общее кол-во записей и кол-во на страницу # сама пагинация выводится отдельным плагином # запрос один в один, кроме limit и юзеров $CI->db->select('SQL_BUFFER_RESULT ' . $CI->db->dbprefix('page') . '.`page_id`', false); $CI->db->from('page'); if ($r['page_status']) { $CI->db->where('page_status', $r['page_status']); } if ($r['type']) { if (is_array($r['type'])) { $CI->db->where_in('page_type_name', $r['type']); } else { $CI->db->where('page_type_name', $r['type']); } } // if ($r['date_now']) $CI->db->where('page_date_publish < ', 'DATE_ADD(NOW(), INTERVAL "' . $r['time_zone'] . '" HOUR_MINUTE)', false); if ($r['date_now'] and $r['page_id_date_now']) { $CI->db->where_not_in('page.page_id', $r['page_id_date_now']); } if ($r['page_id_autor']) { $CI->db->where('page.page_id_autor', $r['page_id_autor']); } $CI->db->where('(`page_content` LIKE \'%' . $CI->db->escape_str($search) . '%\' OR `page_title` LIKE \'%' . $CI->db->escape_str($search) . '%\')', '', false); $CI->db->join('page_type', 'page_type.page_type_id = page.page_type_id'); $CI->db->order_by($r['order'], $r['order_asc']); if ($function_add_custom_sql = $r['function_add_custom_sql']) { $function_add_custom_sql(); } $query = $CI->db->get(); $pag_row = $query->num_rows(); if ($pag_row > 0) { $pag['maxcount'] = ceil($pag_row / $r['limit']); // всего станиц пагинации $pag['limit'] = $r['limit']; // записей на страницу $current_paged = mso_current_paged($r['pagination_next_url']); if ($current_paged > $pag['maxcount']) { $current_paged = $pag['maxcount']; } $offset = $current_paged * $pag['limit'] - $pag['limit']; } else { $pag = false; } } else { $pag = false; } // теперь сами страницы if (!$r['all_fields']) { $CI->db->select('page.page_id, page_type_name, page_slug, page_title, page_date_publish, page_status, users_nik, page_content, page_view_count, page_rating, page_rating_count, page_password, page_comment_allow, page_id_parent, users_avatar_url, page.page_id_autor, users_description, users_login'); } else { $CI->db->select('page.*, page_type.*, users.*'); } $CI->db->from('page'); // if ($r['date_now']) $CI->db->where('page_date_publish < ', 'DATE_ADD(NOW(), INTERVAL "' . $r['time_zone'] . '" HOUR_MINUTE)', false); if ($r['date_now'] and $r['page_id_date_now']) { $CI->db->where_not_in('page.page_id', $r['page_id_date_now']); } if ($r['page_id_autor']) { $CI->db->where('page.page_id_autor', $r['page_id_autor']); } // like делаем свой $CI->db->where('(`page_content` LIKE \'%' . $CI->db->escape_str($search) . '%\' OR `page_title` LIKE \'%' . $CI->db->escape_str($search) . '%\')', '', false); if ($r['page_status']) { $CI->db->where('page_status', $r['page_status']); } if ($r['type']) { if (is_array($r['type'])) { $CI->db->where_in('page_type_name', $r['type']); } else { $CI->db->where('page_type_name', $r['type']); } } $CI->db->join('users', 'users.users_id = page.page_id_autor', 'left'); $CI->db->join('page_type', 'page_type.page_type_id = page.page_type_id', 'left'); $CI->db->order_by($r['order'], $r['order_asc']); $CI->db->group_by('page.page_id'); if (!$r['no_limit']) { if ($pag and $offset) { $CI->db->limit($r['limit'], $offset); } else { $CI->db->limit($r['limit']); } } if ($function_add_custom_sql = $r['function_add_custom_sql']) { $function_add_custom_sql(); } }
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; }
<?php if (!defined('BASEPATH')) { exit('No direct script access allowed'); } /** * MaxSite CMS * (c) http://max-3000.com/ */ # подготовка данных $min_search_chars = 2; // минимальное кол-во симоволов при поиске $search = mso_segment(2); $search = mso_strip(strip_tags($search)); $searh_to_text = mb_strtolower($search, 'UTF8'); if ($f = mso_page_foreach('search-head-meta')) { require $f; } else { mso_head_meta('title', $search); } $search_len = true; // поисковая фраза более 2 символов // параметры для получения страниц if (!$search or $search_len = strlen(mso_slug($search)) < $min_search_chars) { $search = tf('Поиск'); $pages = false; // нет страниц $categories = false; // нет рубрик $tags = false; // нет меток
function parents_out_way_parents($page_id = 0) { //рекурентная для parents_out_way_to $r = ''; $CI =& get_instance(); $CI->db->select('page_id, page_id_parent, page_title, page_slug'); $CI->db->where('page_id', $page_id); $CI->db->order_by('page_menu_order'); $query = $CI->db->get('page'); $result = $query->result_array(); global $MSO; if ($result) { foreach ($result as $key => $page2) { extract($page2); $page_link = '<a href="' . $MSO->config['site_url'] . $page_slug . '" title="' . mso_strip($page_title) . '">' . $page_title . '</a>'; $r = $page_link; if ($page_id_parent > 0) { $parents = parents_out_way_parents($page_id_parent); $r = $parents . '->' . $page_link; } } } return $r; }
$CI->load->helper('string_helper'); $userpassword = random_string('alnum', 12); // генератор пароля $useremail = ''; $namesite = ''; $demoposts = 0; $error = false; if ($step == 3 and $_POST) { mso_checkreferer(); // проверка на чужой реферер if ($_POST['mysubmit']) { $username = isset($_POST['username']) ? mso_strip($_POST['username'], true) : false; $userpassword = isset($_POST['userpassword']) ? mso_strip($_POST['userpassword'], true) : false; $useremail = $_POST['useremail'] ? mso_strip($_POST['useremail'], true) : false; $namesite = isset($_POST['namesite']) ? mso_strip($_POST['namesite'], true) : false; $demoposts = isset($_POST['demoposts']) ? (int) mso_strip($_POST['demoposts'], true) : 0; if (!mso_valid_email($useremail)) { $useremail = false; } if (strlen($userpassword) < 6) { $userpassword = false; } if (!$useremail or !$username or !$userpassword or !$namesite) { $step = 2; $error = '<h2 class="error">' . t('Ошибочные или неполные данные!', 'install') . '</h2>'; } if ($step === 3) { require_once APPPATH . 'views/install/install-common.php'; //require_once ('install-common.php'); $res = mso_install_newsite(array('username' => $username, 'userpassword' => mso_md5($userpassword), 'userpassword_orig' => $userpassword, 'useremail' => $useremail, 'namesite' => $namesite, 'demoposts' => $demoposts, 'ip' => $_SERVER['REMOTE_ADDR'])); }
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'); } }
<h1><?php echo t('Группы пользователей'); ?> </h1> <p class="info"><?php echo t('Здесь вы можете настроить группы пользователей. Вы не можете удалить группы <strong>«admins»</strong> и <strong>«users»</strong>. Группе <strong>«admins»</strong> разрешены все действия.'); ?> </p> <?php $CI =& get_instance(); if ($post = mso_check_post(array('f_session_id', 'f_new_submit', 'f_new'))) { # добавление новой группы mso_checkreferer(); $f_new = mso_strip($post['f_new']); if ($f_new) { $CI->db->select('groups_id'); $CI->db->where(array('groups_name' => $f_new)); $query = $CI->db->get('groups'); if ($query->num_rows() == 0) { if ($CI->db->insert('groups', array('groups_name' => $f_new))) { echo '<div class="update">' . t('Новая группа добавлена!') . '</div>'; } else { echo '<div class="error">' . t('Ошибка добавления!') . '</div>'; } } else { echo '<div class="error">' . t('Такая группа уже существует!') . '</div>'; } } else { echo '<div class="error">' . t('Ошибочное имя') . '</div>';
function mso_comuser_edit($args = array()) { global $MSO; if (!isset($args['css_ok'])) { $args['css_ok'] = 'comment-ok'; } if (!isset($args['css_error'])) { $args['css_error'] = 'comment-error'; } # id комюзера, который в сессии if (isset($MSO->data['session']['comuser']) and $MSO->data['session']['comuser']) { $id_session = $MSO->data['session']['comuser']['comusers_id']; } else { $id_session = false; } if ($post = mso_check_post(array('f_session_id', 'f_submit', 'f_comusers_activate_key'))) { # защита рефера mso_checkreferer(); # защита сессии - если не нужно закомментировать строчку! if ($MSO->data['session']['session_id'] != $post['f_session_id']) { mso_redirect(); } // получаем номер юзера id из f_submit[] $id = (int) mso_array_get_key($post['f_submit']); if (!$id) { return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный номер пользователя') . '</div>'; } # проверяем id в сессии с сабмитом // if ($id != $id_session) // return '<div class="' . $args['css_error']. '">'. t('Ошибочный номер пользователя'). '</div>'; $f_comusers_activate_key = trim($post['f_comusers_activate_key']); if (!$f_comusers_activate_key) { return '<div class="' . $args['css_error'] . '">' . tf('Неверный (пустой) ключ') . '</div>'; } // нужно проверить если у указанного комюзера не равные ключи // если они равны, то ничего не делаем $CI =& get_instance(); $CI->db->select('comusers_activate_string, comusers_activate_key'); $CI->db->from('comusers'); $CI->db->where('comusers_id', $id); $CI->db->limit(1); $query = $CI->db->get(); if ($query->num_rows() > 0) { $comuser = $query->result_array(); // данные комюзера if ($comuser[0]['comusers_activate_string'] == $comuser[0]['comusers_activate_key']) { // уже равны, активация не требуется return '<div class="' . $args['css_ok'] . '">' . tf('Активация уже выполнена') . '</div>'; } else { // ключи в базе не равны // сверяем с переданным ключом из формы if ($f_comusers_activate_key == $comuser[0]['comusers_activate_key']) { // верный ключ - обновляем в базе $CI->db->where('comusers_id', $id); $res = $CI->db->update('comusers', array('comusers_activate_string' => $f_comusers_activate_key)) ? '1' : '0'; $CI->db->cache_delete_all(); if ($res) { return '<div class="' . $args['css_ok'] . '">' . tf('Активация выполнена!') . '</div>'; } else { return '<div class="' . $args['css_error'] . '">' . tf('Ошибка БД при добавления ключа активации') . '</div>'; } } else { return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный ключ активации') . '</div>'; } } } else { // вообще нет такого комюзера return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный номер пользователя') . '</div>'; } } elseif ($post = mso_check_post(array('flogin_session_id', 'flogin_submit', 'flogin_user', 'flogin_password', 'flogin_redirect'))) { // логинимся через стандартную _mso_login() _mso_login(); return; } elseif ($post = mso_check_post(array('f_session_id', 'f_submit', 'f_comusers_email', 'f_comusers_password', 'f_comusers_nik', 'f_comusers_url', 'f_comusers_icq', 'f_comusers_msn', 'f_comusers_jaber', 'f_comusers_date_birth', 'f_comusers_description', 'f_comusers_avatar_url'))) { if (!is_login_comuser()) { return '<div class="' . $args['css_error'] . '">' . tf('Ошибочные данные пользователя') . '</div>'; } # защита рефера mso_checkreferer(); # защита сессии - если не нужно закомментировать строчку! if ($MSO->data['session']['session_id'] != $post['f_session_id']) { mso_redirect(); } // получаем номер юзера id из f_submit[] $id = (int) mso_array_get_key($post['f_submit']); if (!$id) { return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный номер пользователя') . '</div>'; } # проверяем id в сессии с сабмитом if ($id != $id_session) { return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный номер пользователя') . '</div>'; } $f_comusers_email = trim($post['f_comusers_email']); $f_comusers_password = trim($post['f_comusers_password']); if (!$f_comusers_email or !$f_comusers_password) { return '<div class="' . $args['css_error'] . '">' . tf('Необходимо указать email и пароль') . '</div>'; } // проверим есть ли такой комюзер $CI =& get_instance(); $CI->db->select('*'); $CI->db->from('comusers'); # CodeIgniter экранирует where, даже когда только условия в полях $CI->db->where('comusers_activate_string=comusers_activate_key', '', false); // активация должна уже быть $CI->db->where(array('comusers_id' => $id, 'comusers_email' => $f_comusers_email, 'comusers_password' => $f_comusers_password)); $CI->db->limit(1); $query = $CI->db->get(); if ($query->num_rows() > 0) { // все ок - логин пароль верные $comuser = $query->result_array(); // данные комюзера $f_comusers_avatar_url = mso_strip($post['f_comusers_avatar_url'], false, array('\\', '|', '?', '%', '*', '`')); $allowed_ext = array('gif', 'jpg', 'jpeg', 'png'); // разрешенные типы $ext = strtolower(str_replace('.', '', strrchr($f_comusers_avatar_url, '.'))); // расширение файла if (!in_array($ext, $allowed_ext)) { $f_comusers_avatar_url = ''; } // запрещенный тип файла if (!isset($post['f_comusers_notify'])) { $post['f_comusers_notify'] = '0'; } if (!isset($post['f_comusers_skype'])) { $post['f_comusers_skype'] = ''; } // скайп $post = mso_clean_post(array('f_comusers_nik' => 'base', 'f_comusers_url' => 'base', 'f_comusers_icq' => 'base', 'f_comusers_msn' => 'base', 'f_comusers_jaber' => 'base', 'f_comusers_skype' => 'base', 'f_comusers_date_birth' => 'base', 'f_comusers_description' => 'base', 'f_comusers_notify' => 'int'), $post); $upd_date = array('comusers_nik' => strip_tags($post['f_comusers_nik']), 'comusers_url' => strip_tags($post['f_comusers_url']), 'comusers_icq' => strip_tags($post['f_comusers_icq']), 'comusers_msn' => strip_tags($post['f_comusers_msn']), 'comusers_jaber' => strip_tags($post['f_comusers_jaber']), 'comusers_skype' => strip_tags($post['f_comusers_skype']), 'comusers_date_birth' => strip_tags($post['f_comusers_date_birth']), 'comusers_description' => strip_tags($post['f_comusers_description']), 'comusers_avatar_url' => $f_comusers_avatar_url, 'comusers_notify' => $post['f_comusers_notify']); # pr($upd_date ); $CI->db->where('comusers_id', $id); $res = $CI->db->update('comusers', $upd_date) ? '1' : '0'; // если переданы метаполя, то обновляем и их if (isset($post['f_comusers_meta']) and $post['f_comusers_meta']) { //pr($post); foreach ($post['f_comusers_meta'] as $key => $val) { // вначале грохаем если есть такой ключ $CI->db->where('meta_table', 'comusers'); $CI->db->where('meta_id_obj', $id); $CI->db->where('meta_key', $key); $CI->db->delete('meta'); // теперь добавляем как новый $ins_data = array('meta_table' => 'comusers', 'meta_id_obj' => $id, 'meta_key' => $key, 'meta_value' => $val); $CI->db->insert('meta', $ins_data); } } $CI->db->cache_delete_all(); // mso_flush_cache(); // сбросим кэш if ($res) { return '<div class="' . $args['css_ok'] . '">' . tf('Обновление выполнено!') . '</div>'; } else { return '<div class="' . $args['css_error'] . '">' . tf('Ошибка БД при обновлении') . '</div>'; } } else { return '<div class="' . $args['css_error'] . '">' . tf('Ошибочный email и пароль') . '</div>'; } } // обновление формы }
function _mso_login() { global $MSO; // обрабатываем POST если есть if ($_POST) { $_POST = mso_clean_post(array('flogin_submit' => 'base', 'flogin_redirect' => 'base', 'flogin_user' => 'base', 'flogin_password' => 'base', 'flogin_session_id' => 'base')); } if ($_POST and isset($_POST['flogin_submit']) and isset($_POST['flogin_redirect']) and isset($_POST['flogin_user']) and isset($_POST['flogin_password']) and isset($_POST['flogin_session_id'])) { sleep(3); // задержка - примитивная защита от подбора пароля $flogin_session_id = $_POST['flogin_session_id']; # защита сесии if ($MSO->data['session']['session_id'] != $flogin_session_id) { mso_redirect('loginform/error'); } $flogin_redirect = urldecode($_POST['flogin_redirect']); if ($flogin_redirect == 'home') { $flogin_redirect = getinfo('siteurl'); } $flogin_user = $_POST['flogin_user']; $flogin_password = $_POST['flogin_password']; # проверяем на strip - запрещенные символы if (!mso_strip($flogin_user, true) or !mso_strip($flogin_password, true)) { mso_redirect('loginform/error'); } $flogin_password = mso_md5($flogin_password); $CI =& get_instance(); // если это комюзер, то логин = email // проверяем валидность email и если он верный, то ставим куку на этого комюзера // и редиректимся на главную (куку ставить только на главную!) // если же это обычный юзер-автор, то проверяем логин и пароль по базе if (mso_valid_email($flogin_user)) { // если в логине мыло, то проверяем сначала в таблице авторов $CI->db->from('users'); # таблица users $CI->db->select('*'); # все поля $CI->db->limit(1); # одно значение $CI->db->where('users_email', $flogin_user); // where 'users_login' = $flogin_user $CI->db->where('users_password', $flogin_password); // where 'users_password' = $flogin_password $query = $CI->db->get(); if ($query->num_rows() > 0) { $userdata = $query->result_array(); # добавляем юзера к сессии $CI->session->set_userdata('userlogged', '1'); $data = array('users_id' => $userdata[0]['users_id'], 'users_nik' => $userdata[0]['users_nik'], 'users_login' => $userdata[0]['users_login'], 'users_password' => $userdata[0]['users_password'], 'users_groups_id' => $userdata[0]['users_groups_id'], 'users_last_visit' => $userdata[0]['users_last_visit'], 'users_show_smiles' => $userdata[0]['users_show_smiles'], 'users_time_zone' => $userdata[0]['users_time_zone'], 'users_language' => $userdata[0]['users_language']); $CI->session->set_userdata($data); // сразу же обновим поле последнего входа $CI->db->where('users_id', $userdata[0]['users_id']); $CI->db->update('users', array('users_last_visit' => date('Y-m-d H:i:s'))); mso_redirect($flogin_redirect, true); } else { // это не автор, значит это комюзер $CI->db->select('comusers_id, comusers_password, comusers_email, comusers_nik, comusers_url, comusers_avatar_url, comusers_last_visit'); $CI->db->where('comusers_email', $flogin_user); $CI->db->where('comusers_password', $flogin_password); $query = $CI->db->get('comusers'); if ($query->num_rows()) { $comuser_info = $query->row_array(1); // вся инфа о комюзере // сразу же обновим поле последнего входа $CI->db->where('comusers_id', $comuser_info['comusers_id']); $CI->db->update('comusers', array('comusers_last_visit' => date('Y-m-d H:i:s'))); $expire = time() + 60 * 60 * 24 * 365; // 365 дней $name_cookies = 'maxsite_comuser'; $value = serialize($comuser_info); mso_add_to_cookie($name_cookies, $value, $expire, $flogin_redirect); // в куку для всего сайта exit; } else { mso_redirect('loginform/error'); exit; } } } else { // это обычный автор $CI->db->from('users'); # таблица users $CI->db->select('*'); # все поля $CI->db->limit(1); # одно значение $CI->db->where('users_login', $flogin_user); // where 'users_login' = $flogin_user $CI->db->where('users_password', $flogin_password); // where 'users_password' = $flogin_password $query = $CI->db->get(); if ($query->num_rows() > 0) { $userdata = $query->result_array(); # добавляем юзера к сессии $CI->session->set_userdata('userlogged', '1'); $data = array('users_id' => $userdata[0]['users_id'], 'users_nik' => $userdata[0]['users_nik'], 'users_login' => $userdata[0]['users_login'], 'users_password' => $userdata[0]['users_password'], 'users_groups_id' => $userdata[0]['users_groups_id'], 'users_last_visit' => $userdata[0]['users_last_visit'], 'users_show_smiles' => $userdata[0]['users_show_smiles'], 'users_time_zone' => $userdata[0]['users_time_zone'], 'users_language' => $userdata[0]['users_language']); $CI->session->set_userdata($data); // сразу же обновим поле последнего входа $CI->db->where('users_id', $userdata[0]['users_id']); $CI->db->update('users', array('users_last_visit' => date('Y-m-d H:i:s'))); mso_redirect($flogin_redirect, true); } else { mso_redirect('loginform/error'); } } // автор } else { $MSO->data['type'] = 'loginform'; $template_file = $MSO->config['templates_dir'] . $MSO->config['template'] . '/index.php'; if (file_exists($template_file)) { require $template_file; } else { show_error('Ошибка - отсутствует файл шаблона index.php'); } } }