View file Android_klient/sys/inc/classes/MobileAppApi.php

File size: 7.68Kb
<?

/**
 * MobileAppApi
 * Класс для ответов клиентскому приложние
 */

class MobileAppApi {
	public static $errors = array(
		1 => 'Ошибка авторизации', 
		2 => 'Поступили не все параметры'
	);
	protected $nick, 
			  $password, 
			  $token, 
			  $id, 
			  $user, 
			  $events_count = array();

	public function __construct() {}

	/**
	 * Указание ника пользователя
	 * @param string $nick Ник пользователя
	 * @return $this
	 */

	public function setNick($nick) {
		$this -> nick = my_esc($nick);
		return $this;
	}

	/**
	 * Указание пароля пользователя
	 * @param string $password Пароль пользователя
	 * @return $this
	 */

	public function setPassword($password) {
		$this -> password = my_esc($password);
		return $this;
	}

	/**
	 * Указание токена пользователя
	 * @param string $token Токен пользователя
	 * @return $this
	 */

	public function setToken($token) {
		$this -> token = my_esc($token);
		return $this;
	}

	/**
	 * Указание токена пользователя
	 * @param string $token Токен пользователя
	 * @return $this
	 */

	public function setID($id) {
		$this -> id = intval($id);
		return $this;
	}

	/**
	 * Проверка данных авторизации пользователя
	 * @return boolean
	 */

	public function checkUser() {
		$this -> user = mysql_fetch_assoc(mysql_query("SELECT * FROM `user` WHERE `nick` = '{$this -> nick}' AND `pass` = '" . $this -> getCryptedPassword() . "'"));
		return @$this -> user['id'] != 0;
	}

	/**
	 * Проверка токена и ID
	 * @return boolean
	 */

	public function checkTokenAndID() {
		$this -> user = mysql_fetch_assoc(mysql_query("SELECT * FROM `user` WHERE `mobile_app_token` = '{$this -> token}' AND `id` = '{$this -> id}'"));
		return @$this -> user['id'] != 0;
	}

	/**
	 * Возвращает зашифрованный пароль
	 * @return string
	 */

	public function getCryptedPassword() {
		include_once(H . 'sys/inc/shif.php');
		return shif($this -> password);
	}

	/**
	 * Возвращает токен
	 * @return string
	 */

	public function getToken() {
		include_once(H . 'sys/inc/shif.php');

		// если токен ещё пуст
		if (!$this -> user['mobile_app_token'])
			$this -> generateToken();

		return $this -> user['mobile_app_token'];
	}

	/**
	 * Генерирует токен
	 * @return $this
	 */

	public function generateToken() {
		$user = $this -> user;
		include_once(H . 'sys/inc/shif.php');
		$token = shif($this -> user['password'] . $this -> user['nick'] . 'mobile_app_token' . microtime(true));
		mysql_query("UPDATE `user` SET `mobile_app_token` = '$token' WHERE `id` = '$user[id]'");
		$this -> user = get_user($user['id']);
		return $this;
	}

	/**
	 * Возвращает массив новых событий
	 * @return array
	 */

	public function getEventsCount() {
		$user = $this -> user;
		if (empty($this -> events_count))
			$this -> events_count = array(
				'mail' => mysql_result(mysql_query("SELECT COUNT(`mail`.`id`) FROM `mail` LEFT JOIN `users_konts` ON `mail`.`id_user` = `users_konts`.`id_kont` AND `users_konts`.`id_user` = '$user[id]' WHERE `mail`.`id_kont` = '$user[id]' AND (`users_konts`.`type` IS NULL OR `users_konts`.`type` = 'common' OR `users_konts`.`type` = 'favorite') AND `mail`.`read` = '0'"), 0), 
				'discussions' => mysql_result(mysql_query("SELECT COUNT(`count`) FROM `discussions` WHERE `id_user` = '$user[id]' AND `count` > '0' "), 0), 
				'notification' => mysql_result(mysql_query("SELECT COUNT(`read`) FROM `notification` WHERE `id_user` = '$user[id]' AND `read` = '0'"), 0), 
				'tape' => mysql_result(mysql_query("SELECT COUNT(`read`) FROM `tape` WHERE `id_user` = '$user[id]' AND `read` = '0' "), 0), 
				'friends' => mysql_result(mysql_query("SELECT COUNT(id) FROM `frends_new` WHERE `to` = '$user[id]'"), 0), 
				'guests' => mysql_result(mysql_query("SELECT COUNT(*) FROM `my_guests` WHERE `id_ank` = '$user[id]' AND `read` = '1'"), 0)
			);
		return $this -> events_count;
	}

	/**
	 * Возвращает контент новых событий
	 * @return array
	 */

	public function getEventsContent() {
		$user = $this -> user;
		$events_count = $this -> getEventsCount();

		$events_content = array(
			'mail' => array(), 
			'friends' => array(), 
			'guests' => array()
		);

		if ($events_count['mail'] > 0) {
			$messages = mysql_query("SELECT `mail`.*, COUNT(`mail`.`id`) AS `count` FROM `mail` LEFT JOIN `users_konts` ON `mail`.`id_user` = `users_konts`.`id_kont` AND `users_konts`.`id_user` = '$user[id]' WHERE `mail`.`id_kont` = '$user[id]' AND (`users_konts`.`type` IS NULL OR `users_konts`.`type` = 'common' OR `users_konts`.`type` = 'favorite') AND `mail`.`read` = '0' AND `mail`.`id` = (SELECT `id` FROM `mail` AS `mail_new` WHERE `mail_new`.`id_user` = `mail`.`id_user` AND `mail_new`.`id_kont` = '$user[id]' ORDER BY `mail_new`.`time` DESC LIMIT 1) GROUP BY `mail`.`id_user` ORDER BY `mail`.`time` ASC, `count` ASC");
			while ($message = mysql_fetch_assoc($messages)) {
				$message_user = self::getUser($message['id_user']);

				$events_content['mail'][] = array(
					'id' => $message['id'], 
					'user' => $message_user, 
					'message' => $message['msg'], 
					'time' => vremja($message['time'])
				);
			}
		}

		if ($events_count['friends'] > 0) {
			$new_friends = mysql_query("SELECT * FROM `frends_new` WHERE `to` = $user[id] ORDER BY `time`");
			while ($new_friend = mysql_fetch_assoc($new_friends)) {
				$friend_user = self::getUser($new_friend['user']);

				$events_content['friends'][] = array(
					'id' => $new_friend['id'], 
					'user' => $friend_user, 
					'time' => vremja($new_friend['time'])
				);
			}
		}

		if ($events_count['guests'] > 0) {
			$new_guests = mysql_query("SELECT * FROM `my_guests` WHERE `id_ank` = '$user[id]' AND `read` = '1' ORDER BY `time` DESC");
			while ($new_guest = mysql_fetch_assoc($new_guests)) {
				$guest_user = self::getUser($new_guest['id_user']);

				$events_content['guests'][] = array(
					'id' => $new_guest['id'], 
					'user' => $guest_user, 
					'time' => vremja($new_guest['time'])
				);
			}
		}

		return $events_content;
	}

	/**
	 * Возвращает массив с данными пользователя
	 * @param $user_id ID пользователя
	 * @return array
	 */

	public static function getUser($user_id) {
		$user = get_user($user_id);

		return array(
			'id' => $user['id'], 
			'nick' => $user['nick'], 
			'avatar' => self::getAvatar($user['id'])
		);
	}

	/**
	 * Возвращает массив с данными текущего пользователя
	 * @return array
	 */

	public function getCurrentUser() {
		return self::getUser($this -> user['id']);
	}

	/**
	 * Возвращает ссылку на аватар пользователя
	 * @param $user_id ID пользователя
	 * @return array
	 */

	public static function getAvatar($user_id) {
		$user_id = intval($user_id);
		$result = array('exists' => false);

		$sql_query = mysql_query("SELECT * FROM `gallery_foto` WHERE `id_user` = $user_id AND `avatar` = '1' LIMIT 1");
		if (mysql_num_rows($sql_query)) {
			$avatar = mysql_fetch_array($sql_query);
			if (is_file(H . "sys/gallery/48/$avatar[id].$avatar[ras]")) {
				$result['exists'] = true;
				$result['id'] = $avatar['id'];
				$result['extension'] = $avatar['ras'];
			}
		}

		return $result;
	}
}
?>