Example #1
0
 // подставим введенные поля
 $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 = '';
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
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;
}