mso_redirect('loginform'); } if (!$comuser['comusers_nik']) { $hello = t('Привет!'); } else { $hello = t('Привет,') . ' ' . $comuser['comusers_nik'] . '!'; } eval(mso_tmpl_ts('type/loginform/units/loginform-comuser-tmpl.php')); } else { $redirect_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : getinfo('siteurl'); // для запоминания уже введенных полей $vreg_email = $vreg_password = $vreg_password_repeat = $vreg_nik = $vreg_url = ''; if ($post = mso_check_post(array('freg_session_id', 'freg_rules_ok', 'freg_email', 'freg_password', 'freg_password_repeat', 'freg_nik', 'freg_url', 'freg_submit'))) { mso_checkreferer(); // обработка _post $post = mso_clean_post(array('freg_email' => 'email', 'freg_password' => 'base', 'freg_password_repeat' => 'base', 'freg_nik' => 'base|not_url', 'freg_url' => 'base', 'freg_redirect_url' => 'base'), $post); // подставим введенные поля $vreg_email = $post['freg_email']; $vreg_password = $post['freg_password']; $vreg_password_repeat = $post['freg_password_repeat']; $vreg_nik = $post['freg_nik']; $vreg_url = $post['freg_url']; // проверки введенных данных $error = ''; if (!$post['freg_rules_ok']) { $error .= '<div class="mso-message-error">' . tf('Необходимо принять правила сайта') . '</div>'; } if (!$post['freg_email']) { $error .= '<div class="mso-message-error">' . tf('Не указан email') . '</div>'; } else { // email указан, проверим его корректность
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'); } } }
function forms_content_callback($matches) { $text = $matches[1]; $text = str_replace("\r", "", $text); $text = str_replace(' ', ' ', $text); $text = str_replace("\t", ' ', $text); $text = str_replace('<br />', "<br>", $text); $text = str_replace('<br>', "\n", $text); $text = str_replace("\n\n", "\n", $text); $text = str_replace(' ', ' ', $text); $text = str_replace(' ', ' ', $text); $text = str_replace(' ', ' ', $text); $text = str_replace(' ', ' ', $text); $text = str_replace("\n ", "\n", $text); $text = str_replace("\n\n", "\n", $text); $text = trim($text); $out = ''; // убиваем исходный текст формы //$r = preg_match_all('!\[email=(.*?)\]|\[redirect=(.*?)\]\[subject=(.*?)\]|\[field\](.*?)\[\/field\]|\[ushka=(.*?)\]!is', $text, $all); // на какой email отправляем $r = preg_match_all('!\\[email=(.*?)\\]!is', $text, $all); if ($r) { $email = trim(implode(' ', $all[1])); } else { $email = mso_get_option('admin_email', 'general', '*****@*****.**'); } // тема письма $r = preg_match_all('!\\[subject=(.*?)\\]!is', $text, $all); if ($r) { $subject = trim(implode(' ', $all[1])); } else { $subject = tf('Обратная связь'); } // куда редиректить после отправки $r = preg_match_all('!\\[redirect=(.*?)\\]!is', $text, $all); if ($r) { $redirect = trim(implode(' ', $all[1])); } else { $redirect = ''; } // eirf к форме $r = preg_match_all('!\\[ushka=(.*?)\\]!is', $text, $all); if ($r) { $ushka = trim(implode(' ', $all[1])); } else { $ushka = ''; } // отправить копию на ваш email $r = preg_match_all('!\\[nocopy\\]!is', $text, $all); if ($r) { $forms_subscribe = false; } else { $forms_subscribe = true; } // кнопка Сброс формы $r = preg_match_all('!\\[noreset\\]!is', $text, $all); if ($r) { $reset = false; } else { $reset = true; } // pr($all); // поля формы $r = preg_match_all('!\\[field\\](.*?)\\[\\/field\\]!is', $text, $all); $f = array(); // массив для полей if ($r) { $fields = $all[1]; /* pr($fields); pr($email); pr($redirect); pr($subject); pr($ushka); */ if ($subject) { // поле тема письма делаем в виде обязательнного поля select. // формируем массив для формы $subject_f['require'] = 1; //$subject_f['type'] = 'select'; $subject_f['type'] = mb_strpos($subject, '#') === false ? 'text' : 'select'; // если это одиночное поле, но при этом текст сабжа начинается // с _ то ставим тип hidden if ($subject_f['type'] == 'text' and mb_strpos($subject, '_') === 0) { $subject = mb_substr($subject . ' ', 1, -1, 'UTF-8'); $subject_f['type'] = 'hidden'; } $subject_f['description'] = tf('Тема письма'); //$subject_f['tip'] = t('Выберите тему письма'); $subject_f['values'] = $subject; $subject_f['value'] = $subject; $subject_f['default'] = ''; // преобразования, чтобы сделать ключ для поля $f1['subject'] = $subject_f; // у поля тема будет ключ subject foreach ($f as $key => $val) { $f1[$key] = $val; } $f = $f1; } $i = 0; foreach ($fields as $val) { $val = trim($val); if (!$val) { continue; } $val = str_replace(' = ', '=', $val); $val = str_replace('= ', '=', $val); $val = str_replace(' =', '=', $val); $val = explode("\n", $val); // разделим на строки $ar_val = array(); foreach ($val as $pole) { $pole = preg_replace('!=!', '_VAL_', $pole, 1); $ar_val = explode('_VAL_', $pole); // строки разделены = type = select if (isset($ar_val[0]) and isset($ar_val[1])) { $f[$i][$ar_val[0]] = $ar_val[1]; } } $i++; } if (!$f) { return ''; } // нет полей - выходим // теперь по-идее у нас есть вся необходимая информация по полям и по форме // смотрим есть ли POST. Если есть, то проверяем введенные поля и если они корректные, // то выполняем отправку почты, выводим сообщение и редиректимся // если POST нет, то выводим обычную форму // pr($f); if ($_POST) { $_POST = mso_clean_post(array('forms_antispam1' => 'integer', 'forms_antispam2' => 'integer', 'forms_antispam' => 'integer', 'forms_name' => 'base', 'forms_email' => 'email', 'forms_session' => 'base')); } if ($post = mso_check_post(array('forms_session', 'forms_antispam1', 'forms_antispam2', 'forms_antispam', 'forms_name', 'forms_email', 'forms_submit'))) { mso_checkreferer(); $out .= '<div class="forms-post">'; // верный email? if (!($ok = mso_valid_email($post['forms_email']))) { $out .= '<div class="message error small">' . tf('Неверный email!') . '</div>'; } // антиспам if ($ok) { $antispam1s = (int) $post['forms_antispam1']; $antispam2s = (int) $post['forms_antispam2']; $antispam3s = (int) $post['forms_antispam']; if ($antispam1s / 984 + $antispam2s / 765 != $antispam3s) { // неверный код $ok = false; $out .= '<div class="message error small">' . tf('Неверная сумма антиспама') . '</div>'; } } if ($ok) { foreach ($f as $key => $val) { if ($ok and isset($val['require']) and $val['require'] == 1) { if (!isset($post['forms_fields'][$key]) or !$post['forms_fields'][$key]) { $ok = false; $out .= '<div class="message error small">' . tf('Заполните все необходимые поля!') . '</div>'; } } if (!$ok) { break; } } } // всё ок if ($ok) { //pr($post); // pr($f); // pr($redirect); // pr($email); // pr($subject); // формируем письмо и отправляем его if (!mso_valid_email($email)) { $email = mso_get_option('admin_email', 'general', '*****@*****.**'); } // куда приходят письма $message = t('Имя: ') . $post['forms_name'] . "\n"; $message .= t('Email: ') . $post['forms_email'] . "\n"; foreach ($post['forms_fields'] as $key => $val) { //pr($key); if ($key === 'subject' and $val) { $subject = $val; //pr($subject); continue; } $message .= $f[$key]['description'] . ': ' . $val . "\n\n"; } if ($_SERVER['REMOTE_ADDR'] and $_SERVER['HTTP_REFERER'] and $_SERVER['HTTP_USER_AGENT']) { $message .= "\n" . tf('IP-адрес: ') . $_SERVER['REMOTE_ADDR'] . "\n"; $message .= tf('Отправлено со страницы: ') . $_SERVER['HTTP_REFERER'] . "\n"; $message .= tf('Браузер: ') . $_SERVER['HTTP_USER_AGENT'] . "\n"; } // pr($message); $form_hide = mso_mail($email, $subject, $message, $post['forms_email']); if ($forms_subscribe and isset($post['forms_subscribe'])) { mso_mail($post['forms_email'], tf('Вами отправлено сообщение:') . ' ' . $subject, $message); } $out .= '<div class="message ok small">' . tf('Ваше сообщение отправлено!') . '</div><p>' . str_replace("\n", '<br>', htmlspecialchars($subject . "\n" . $message)) . '</p>'; if ($redirect) { mso_redirect($redirect, true); } } else { $out .= forms_show_form($f, $ushka, $forms_subscribe, $reset, $subject); } $out .= '</div>'; $out .= mso_load_jquery('jquery.scrollto.js'); $out .= '<script>$(document).ready(function(){$.scrollTo("div.forms-post", 500);})</script>'; } else { $out .= forms_show_form($f, $ushka, $forms_subscribe, $reset, $subject); } } return $out; }
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>'; } } // обновление формы }