Просмотр файла modules/user/controllers/user_profile.php

Размер файла: 6.39Kb
<?php
/**
 * Ant0ha's project
 *
 * @package
 * @author Anton Pisarenko <[email protected]>
 * @copyright Copyright (c) 2006 - 2010, Anton Pisarenko
 * @license http://ant0ha.ru/license.txt
 * @link http://ant0ha.ru
 */

defined('IN_SYSTEM') or die('<b>403<br />Запрет доступа!</b>');

//---------------------------------------------

/**
 * Контроллер профайла пользователей
 */
class User_Profile_Controller extends Controller {
	/**
	* Уровень пользовательского доступа
	*/
	public $access_level = 5;

	/**
	* Конструктор
	*/
	public function __construct() {
    	parent::__construct();
    	# Получаем id пользователя
    	if((ROUTE_ACTION == 'view' || ROUTE_ACTION == 'index') && is_numeric($_GET['user_id']))
    		$user_id = intval($_GET['user_id']);
    	else
    		$user_id = USER_ID;

    	# Получаем профайл пользователя
    	if($user_id == -1) a_notice("Это гость, у него нет анкеты", URL);

    	if(!$this->profile = $this->db->get_row("SELECT * FROM #__users_profiles JOIN #__users USING(user_id) WHERE user_id = '". $user_id ."'"))
    		a_error("Профайл не найден!");
	}

	/**
	* Метод по умолчанию
	*/
	public function action_index() {
		$this->action_cabinet();
	}

	/**
	* Просмотр анкеты
	*/
	public function action_view() {
    	# Количество сообщений в чате
    	if(modules::is_active_module('chat'))
			$this->profile['chat_messages'] = $this->db->get_one("SELECT COUNT(*) FROM #__chat_messages WHERE user_id = '". $this->profile['user_id'] ."'");

		# Количество сообщений в форуме
    	if(modules::is_active_module('forum'))
			$this->profile['forum_messages'] = $this->db->get_one("SELECT COUNT(*) FROM #__forum_messages WHERE user_id = '". $this->profile['user_id'] ."'");

		# Количество сообщений в гостевой
    	if(modules::is_active_module('guestbook'))
			$this->profile['guestbook_messages'] = $this->db->get_one("SELECT COUNT(*) FROM #__guestbook WHERE user_id = '". $this->profile['user_id'] ."'");

    	$this->tpl->assign(array(
    		'profile' => $this->profile
    	));

    	$this->tpl->display('profile_view');
	}

	/**
	* Кабинет пользователя
	*/
	public function action_cabinet() {
		$this->tpl->assign(array(
			'error' => $this->error,
			'info' => $info
		));

		$this->tpl->display('profile_cabinet');
	}

    /**
    * Редактирование профиля
    */
    public function action_edit() {
    	if(!class_exists('main_form')) a_import('modules/main/helpers/main_form');
    	if(isset($_POST['submit'])) {
        	if(!empty($_POST['birthday_day'])) {
        		if($_POST['birthday_day'] < 1 || $_POST['birthday_day'] > 31 || !is_numeric($_POST['birthday_day'])) {
        			$this->error .= 'Неверно указан день даты рождения (от 1 до 31)<br />';
        		}
          		if($_POST['birthday_month'] < 1 || $_POST['birthday_month'] > 12 || !is_numeric($_POST['birthday_month'])) {
          			$this->error .= 'Неверно указан месяц даты рождения (от 1 до 12)<br />';
          		}
          		if($_POST['birthday_year'] < 1900 || $_POST['birthday_year'] > 2010 || !is_numeric($_POST['birthday_year'])) {
          			$this->error .= 'Неверно указан год даты рождения (от 1900 до 2010)<br />';
          		}
          	}
          	if(!empty($_POST['uin'])) {
          		if(!is_numeric($_POST['uin']) or $_POST['uin'] < 10000 or $_POST['uin'] > 999999999) {
          			$this->error .= 'Неверный номер ICQ, только цифры, от 5ти до 9ти цифр<br />';
          		}
          	}
            if(!empty($_POST['homepage'])) {
            	# Проверяем домашнюю страницу
          		$homepage = str_replace('http://', '', $_POST['homepage']);
          		$homepage_contents = @file_get_contents('http://'. $homepage);
          		if(empty($homepage_contents)) {
          			$this->error .= 'Домашняя страница не найдена, либо в данный момент она не доступна<br />';
          		}
            }

          	if(!$this->error) {
          		# Работа с авой
          		if(!empty($_FILES['avatar']['tmp_name'])) {
                	if(!strstr($_FILES['avatar']['type'], 'image/')) a_error("Неверный формат файла аватара! Разрешены только gif, jpg и png");
                	# Копируем аватар 100х100
                	main::image_resize($_FILES['avatar']['tmp_name'], ROOT .'files/avatars/'. USER_ID .'_100.jpg', 100, 100, 90);
                	# Копируем аватар 32х32
                	main::image_resize($_FILES['avatar']['tmp_name'], ROOT .'files/avatars/'. USER_ID .'_32.jpg', 32, 32, 90);
                	$this->profile['avatar'] = 1;
          		}
          		# Генерируем время рождения
          		$birthday_time = mktime(0, 0, 0, $_POST['birthday_month'], $_POST['birthday_day'], $_POST['birthday_year']);
            	# Сохраняем данные
                $this->db->query("UPDATE #__users_profiles SET
                	birthday_time = '$birthday_time',
                	real_name = '". a_safe($_POST['real_name']) ."',
                	about = '". a_safe($_POST['about']) ."',
                	avatar = '". $this->profile['avatar'] ."',
                	uin = '". a_safe($_POST['uin']) ."',
                	homepage = '". a_safe($homepage) ."'
                	WHERE user_id = '". USER_ID ."'
                ");

                a_notice("Данные сохранены!", a_url('user/profile'));
          	}
		}
    	if(!isset($_POST['submit']) || $this->error) {
    		$select_date_birthday = array(
    			'prefix' => 'birthday_',
				'field_order' => 'DMY',
				'start_year' => 1900,
				'time' => $this->profile['birthday_time'] > 0 ? $this->profile['birthday_time'] : 0
			);

    		$this->tpl->assign(array(
    			'error' => $this->error,
    			'select_date_birthday' => $select_date_birthday,
    			'profile' => $this->profile
    		));

    		$this->tpl->display('profile_edit');
    	}
    }
}
?>