// подставим введенные поля $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 указан, проверим его корректность $email = mso_clean_str($post['freg_email'], 'email'); if (!$email) { $error .= '<div class="mso-message-error">' . tf('Неверный email') . '</div>'; } } if (!$post['freg_password']) { $error .= '<div class="mso-message-error">' . tf('Не указан пароль') . '</div>'; $vreg_password = ''; $vreg_password_repeat = ''; } else { if (strlen($post['freg_password']) < 6) { $error .= '<div class="mso-message-error">' . tf('Длина пароля должна быть более 6 символов') . '</div>'; } } if ($post['freg_password'] != $post['freg_password_repeat']) { $vreg_password = '';
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_clean_post($keys = array(), $post = false) { if (!$post) { if ($_POST) { $post = $_POST; } else { return $post; } } foreach ($keys as $key => $rules) { if (isset($post[$key])) { $post[$key] = mso_clean_str($post[$key], $rules); } } return $post; }
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; }