* @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
?>