function theme_switch_init($args = array()) { global $MSO; // если есть get ?theme=шаблон , то выставляем новую куку по этому значению // идея nicothin (Николай Громов) - http://forum.max-3000.com/viewtopic.php?p=9943#p9943 $get = mso_parse_url_get(mso_url_get()); $get = (isset($get['theme']) and $get['theme']) ? mso_xss_clean($get['theme']) : false; // проверяем есть ли post if ($post = mso_check_post(array('f_session_id', 'f_theme_switch_submit', 'theme_switch_radio')) or $get) { if (!$get) { mso_checkreferer(); $dir = $post['theme_switch_radio'][0]; // каталог шаблона } else { $dir = $get; } // если он есть - проверяем, то пишем куку и редиректимся if (file_exists(getinfo('templates_dir') . $dir . '/index.php')) { $opt = mso_get_option('theme_switch', 'plugins', array()); if (isset($opt['templates'][$dir])) { // 30 дней = 2592000 секунд 60 * 60 * 24 * 30 mso_add_to_cookie('theme_switch', $dir, time() + 2592000, true); } } } // проверяем существование куки theme_switch if (isset($_COOKIE['theme_switch'])) { $dir = $_COOKIE['theme_switch']; // значение текущего кука if (file_exists(getinfo('templates_dir') . $dir . '/index.php')) { $opt = mso_get_option('theme_switch', 'plugins', array()); if (isset($opt['templates'][$dir])) { $MSO->config['template'] = $dir; $functions_file = $MSO->config['templates_dir'] . $dir . '/functions.php'; if (file_exists($functions_file)) { require_once $functions_file; } } else { @setcookie('theme_switch', '', time()); } // сбросили куку } else { @setcookie('theme_switch', '', time()); } // сбросили куку } return $args; }
function _mso_logout() { $ci =& get_instance(); $ci->session->sess_destroy(); $url = (isset($_SERVER['HTTP_REFERER']) and $_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; // проверяем, чтобы url был текущего сайта $pos = strpos($url, getinfo('site_url')); if ($pos === false or $pos > 0) { $url = ''; } // чужой, сбрасываем переход // сразу же удаляем куку комюзера $comuser = mso_get_cookie('maxsite_comuser', false); if ($comuser) { $name_cookies = 'maxsite_comuser'; $expire = time() - 31500000; $value = ''; //_pr($url); // mso_add_to_cookie('mso_edit_form_comuser', '', $expire); //mso_add_to_cookie($name_cookies, $value, $expire, getinfo('siteurl') . mso_current_url()); // в куку для всего сайта mso_add_to_cookie($name_cookies, $value, $expire, $url); // в куку для всего сайта } elseif ($url) { mso_redirect($url, true); } else { mso_redirect(getinfo('site_url'), true); } }
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; }