* @copyright: Copyright (c) 2010, Bunzia Alexander * @version: 1.0 * @license: http://www.gnu.org/copyleft/gpl.html GNU/GPL */ class users_profile{ private $error = false; private $act = ''; function __construct(){ global $MAIN_PAGE; define('M_PATH',MAIN_SOURCE_PATH.'/modules/'.$MAIN_PAGE -> dirname() ); define('M_URL',MAIN_SOURCE_URL.'/modules/'.$MAIN_PAGE -> dirname() ); include_once(M_PATH.'/inc/url.php'); include_once(MAIN_PATH.'/tmp/meta/users.php'); include_once(MAIN_PATH.'/source/inc/class.html.php'); include_once(M_PATH.'/inc/class.users.php'); if ( !empty($_REQUEST['act']) ){ $this -> act = $_REQUEST['act']; } include_once(MAIN_SOURCE_PATH.'/ext/ajax/JsHttpRequest.php'); new JsHttpRequest($MAIN_PAGE -> charset()); $this -> act = !empty($_REQUEST['act']) ? $_REQUEST['act'] : $this -> act; $GLOBALS['_RESULT']['id_request'] = !empty($_REQUEST['id_request']) ? $_REQUEST['id_request'] : 0; } public function get(){ global $MAIN_PAGE; $func = $this -> act; if ( !method_exists($this ,$func) ){ sys_error(ERROR_404); } $MAIN_PAGE -> set_key($func); return $this -> $func(); } /** * профайл * */ private function profile(){ $u = users::load_id($_GET['uid']); if ( false===$u ){ sys_error(ERROR_404); } $t = new PHPTAL(); $t -> setSnippet( 'users','profile'); $t -> name = $u -> name(); $t -> avatar_src = $u -> avatar_src(); $t -> points = 12;//$u -> points(); $t -> uid = $u -> id(); // свой профайл $t -> is_own = ($_GET['uid']==MAIN_USER) ? 1 : 0; // подключаем библиотеку для загрузки изображений upload_img::include_files(); return $t -> execute(); } /** * Форма авторизации пользователя на сайте * */ private function login_form($error=''){ $t = new PHPTAL(); $t -> setSnippet( 'users','login_form'); $t -> error = $error; return $t -> execute(); } /** * обработка формы авторизации * */ private function login(){ global $MAIN_USER,$MAIN_PAGE; //sys_block_disable(); Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); //Дата в прошлом Header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 Header("Pragma: no-cache"); // HTTP/1.1 Header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT"); if ( empty($MAIN_USER) ){ $MAIN_USER = users::auth(); } if ( $MAIN_USER -> group()!=3 ){ sys_redirect( MAIN_URL ); } $u = self::inc_login_site($_POST['auth_login'],$_POST['auth_password'],1,$_POST['auth_email']); if ( false===$u ){ $MAIN_PAGE -> set_title( 2, $MAIN_PAGE -> meta_title( $this -> act ) ); return $this -> login_form(M_USERS_ERROR_LOGIN); }else{ sys_redirect( MAIN_URL ); } } /** * выход * */ private function logout(){ Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); //Дата в прошлом Header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 Header("Pragma: no-cache"); // HTTP/1.1 Header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT"); sys_block_disable(); users::logout(); sys_redirect( MAIN_URL ); exit(); } /** * Форма восстановления пароля пользователя на сайте * */ private function forget_form($e=''){ global $MAIN_PAGE; $t = new PHPTAL(); $t -> setSnippet( 'users','users_forget_form'); $t -> error = $e; $t -> end = 0; $MAIN_PAGE -> set_title( 2, $MAIN_PAGE -> meta_title( $this -> act ) ); return $t -> execute(); } /** * Высылаем на запрос * */ private function forget_request($error=''){ global $MAIN_PAGE; $u = users::load_email($_POST['forget_email']); if ( false===$u){ return $this -> forget_form('Пользователь не найден'); } include_once(MAIN_SOURCE_PATH.'/inc/class.mail.php'); $m = mail::load('forget_pass'); if ( false===$m ){ sys_error(ERROR_500); } $m -> set('MAIN_URL',MAIN_URL ); $m -> set('u_name', $u -> name() ); $m -> set('forget_url', sys_url(URL_USERS_FORGET_END, $u -> id(),$u-> act_code() ) ); $m -> send_mail( $u -> email() ); $t = new PHPTAL(); $t -> setSnippet( 'users','users_forget_form'); $t -> end = 1; $t -> error = false; $MAIN_PAGE -> set_title( 2, $MAIN_PAGE -> meta_title( 'forget_form' ) ); return $t -> execute(); } /** * меняем пароль и высылаем его на почту. * */ private function forget_end(){ global $MAIN_PAGE; $MAIN_PAGE -> set_title( 2, $MAIN_PAGE -> meta_title( 'forget_form' ) ); $t = new PHPTAL(); $t -> setSnippet( 'users','users_forget_end'); $u = new usersQuery('u'); if ( false=== $u -> where_id($_GET['id']) ){ $t -> msg = M_USERS_ERROR_LINK; return $t -> execute(); } if ( false=== $u -> where_actcode($_GET['code']) ){ $t -> msg = M_USERS_ERROR_LINK; return $t -> execute(); } //$u -> set_debug(1); $u -> get('u_id',false); if ( !$u -> get_count_rows() ){ $t -> msg = M_USERS_ERROR_LINK; return $t -> execute(); } list($u_id) = $u -> row(); // загружаем пользователя $u = users::load_id($u_id); $new_pass = sys_str_rand(10); $u -> set('u_pass',$new_pass); $u -> set('u_act_code',sys_str_rand(5)); $u -> update(); include_once(MAIN_SOURCE_PATH.'/inc/class.mail.php'); $m = mail::load('new_pass'); if ( false===$m ){ sys_error(ERROR_500); } $m -> set('name', $u -> name() ); $m -> set('login', $u -> login() ); $m -> set('pass',$new_pass); $m -> set('MAIN_URL',MAIN_URL); $m -> send_mail( $u -> email() ); $t -> msg = 'Мы сгенерировали для вас новый пароль. Он выслан вам на E-mail.'; //$t -> error = 'Новый пароль выслан вам на e-mail'; return $t -> execute(); } /** * Выводит ajax окно для ввода логина/пароля * */ private function ajax_login_form(){ sys_block_disable(); $t = new PHPTAL(); $t -> setSnippet( 'users','ajax_login_form'); echo ''.M_USERS_LOGIN_TITLE.' execute().']]>'; exit(); } /** * обработка формы авторизации * */ private function ajax_auth(){ global $MAIN_USER; sys_block_disable(); if ( empty($MAIN_USER) ){ $MAIN_USER = users::auth(); } if ( $MAIN_USER -> group()!=3 ){ sys_redirect( MAIN_URL ); } $u = self::inc_login_site($_POST['auth_login'],$_POST['auth_password'],$_POST['auth_save'],$_POST['auth_email']); if ( false===$u ){ echo M_USERS_ERROR_LOGIN; } exit(); } /** * обработка формы редактирования профиля * */ private function ajax_edit(){ global $MAIN_USER; sys_block_disable(); $q = new usersQuery('q'); if ( false===$q -> where_id($_GET['id']) ){ sys_error(ERROR_404); } $q -> get('*'); $row = $q -> row(); if ( $row['u_id']!=MAIN_USER ){ sys_error(ERROR_403); } $a = new upload_img('image'); $a -> set_max_size( 5000000 ); $a -> set_crop(82,72); $a -> set_file($row['u_avatar']); $a -> set_path( 'users/ava'); $a -> set_base( MAIN_URL.'/media/users/ava'); $row['upl_img'] = $a -> get('img',1,'form[u_avatar]'); $t = new PHPTAL(); $t -> setSnippet( 'users','ajax_edit_profile'); $t -> row = $row; $GLOBALS['_RESULT']['content'] = $t -> execute(); $GLOBALS['_RESULT']['title'] = M_USERS_PROFILE_TITLE; exit(); } /** * Сохраняем изменённый профиль * */ private function ajax_save(){ global $MAIN_USER; sys_block_disable(); $u = users::load_id(MAIN_USER); //$u -> set_debug(1); if ( false===$u ){ sys_error(ERROR_403); } if ( $u -> active()==0 ){ sys_error(ERROR_403); } //var_dump( $_POST['form']); try{ $u -> set('u_name',$_POST['form']['u_name']); $u -> set('u_avatar',$_POST['form']['u_avatar']); $u -> set('u_pass',$_POST['form']['u_pass']); $u -> set('u_pass_re',$_POST['form']['u_pass_re']); $u -> update(); }catch(Exception $e){ echo $e -> getMessage(); exit(); } exit(); } private function ajax_forget(){ sys_block_disable(); $t = new PHPTAL(); $t -> setSnippet( 'users','ajax_forget_form'); $t -> forget_send = false; $GLOBALS['_RESULT']['content'] = $t -> execute(); $GLOBALS['_RESULT']['title'] = M_USERS_FORGET_TITLE; exit(); } private function ajax_forget_send(){ sys_block_disable(); $u = new usersQuery('u'); if ( false=== $u -> where_email($_POST['forget_email']) ){ echo M_USERS_ERROR_EMAIL; exit(); } $u -> get(' u_id,u_act_code as forget_url',false); list($u_id,$forget_url) = $u -> row(); include_once(MAIN_SOURCE_PATH.'/inc/class.mail.php'); $m = mail::load('forget_pass'); $m -> set('forget_url',$forget_url); $m -> send_mail($_POST['forget_email'] ); $t = new PHPTAL(); $t -> setSnippet( 'users','ajax_forget_form'); $t -> forget_send = true; $GLOBALS['_RESULT']['msg'] = $t -> execute(); exit(); } private function inc_login_site($l,$p,$save,$email=''){ if ( empty($l) ){ $u = users::load_email($email); }else{ $u = users::load_login($l); } if ( $u===false ){ return false; } if ( $u -> pass()!=users::make_pass($p) ){ return false; } if ( $u -> get('u_active')==0 ){ return false; } $u -> user_session($save); return $u; } } // end class ?>