<?php
							 | 
						|
								/** 
							 | 
						|
								* @package		uForum2
							 | 
						|
								* @file		inc/models/UsersModel.php
							 | 
						|
								* @copyright	2007-2015 (c) PioDer 
							 | 
						|
								* @link    		http://www.pioder.pl/
							 | 
						|
								* @license		see LICENSE.txt
							 | 
						|
								**/
							 | 
						|
								
							 | 
						|
								class UsersModel extends Model
							 | 
						|
								{
							 | 
						|
									private $user_info = null;
							 | 
						|
									
							 | 
						|
									public function nickExists($nick)
							 | 
						|
									{
							 | 
						|
										$out = $this->select(USERS_TABLE, 'nick', '`nick`=\''.$nick.'\'', '', 1);
							 | 
						|
										if (count($out) > 0)
							 | 
						|
											return true;
							 | 
						|
										else
							 | 
						|
											return false;
							 | 
						|
									}	
							 | 
						|
									
							 | 
						|
									public function createNewUser($nick, $passwd, $email)
							 | 
						|
									{
							 | 
						|
										$passwd = $this->generatePasswordHash($nick, $passwd);
							 | 
						|
										$this->db->query('call add_user(\''.$nick.'\', \''.$passwd.'\', \''.$email.'\');'); 
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function getUsersNicks()
							 | 
						|
									{
							 | 
						|
										$out = $this->select (USERS_TABLE, 'user_id, nick', '', 'user_id ASC');
							 | 
						|
										if (count($out) > 0)
							 | 
						|
											return $out;
							 | 
						|
										else
							 | 
						|
											return array();
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function getUserInformation($user, $passwd = false)
							 | 
						|
									{
							 | 
						|
										if ($this->user_info == null)
							 | 
						|
										{
							 | 
						|
											$query = '
							 | 
						|
											SELECT 
							 | 
						|
											u.nick as nick, u.email as email, u.rank as rank, u.active as active,
							 | 
						|
											ui.regdate as regdate, ui.lastvisit as lastvisit, ui.avatar as avatar, ui.location as location, ui.signature as signature, pc.post_count as post_count, lu.IP as user_IP ';
							 | 
						|
											if ($passwd)
							 | 
						|
												$query .= ',u.password as password ';
							 | 
						|
											$query .= '
							 | 
						|
											FROM '.USERS_TABLE.' u
							 | 
						|
											LEFT JOIN '.USERS_INFO_TABLE.' ui on ui.user_id = u.user_id
							 | 
						|
											LEFT JOIN '.USERS_PC_VIEW.' pc on pc.user_id = u.user_id 
							 | 
						|
											LEFT JOIN '.LOGGED_USERS_VIEW.' lu on lu.user_id = u.user_id 
							 | 
						|
											WHERE u.user_id = \''.$user.'\' OR u.nick = \''.$user.'\'';
							 | 
						|
								
							 | 
						|
											$out = $this->select_query($query);
							 | 
						|
											if (count($out) > 0)
							 | 
						|
												$this->user_info = $out[0];
							 | 
						|
										}
							 | 
						|
										
							 | 
						|
										return $this->user_info;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function changeUserPassword($user_id, $nick, $passwd)
							 | 
						|
									{
							 | 
						|
										$passwd = $this->generatePasswordHash($nick, $passwd);
							 | 
						|
										$query = 
							 | 
						|
										'UPDATE .'.USERS_TABLE.'
							 | 
						|
										SET `password`=\''.$passwd.'\'
							 | 
						|
										WHERE `user_id` = \''.$user_id.'\'';
							 | 
						|
										
							 | 
						|
										$this->db->query($query);
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function changeUserRank($user_id, $rank)
							 | 
						|
									{
							 | 
						|
										$query = 
							 | 
						|
										'UPDATE .'.USERS_TABLE.'
							 | 
						|
										SET `rank`=\''.$rank.'\'
							 | 
						|
										WHERE `user_id` = \''.$user_id.'\'';
							 | 
						|
										
							 | 
						|
										$this->db->query($query);
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function updateUserProfile($user_id, $nick, $email, $location, $signature, $avatar)
							 | 
						|
									{
							 | 
						|
										$query = 
							 | 
						|
										'UPDATE .'.USERS_TABLE.'
							 | 
						|
										SET ';
							 | 
						|
										if ($nick != null)
							 | 
						|
											$query .= '`nick`=\''.$nick.'\',';
							 | 
						|
										$query .= '`email`=\''.$email.'\'
							 | 
						|
										WHERE `user_id` = \''.$user_id.'\'';
							 | 
						|
										
							 | 
						|
										$this->db->query($query);
							 | 
						|
										
							 | 
						|
										//profile informations
							 | 
						|
										$query = 
							 | 
						|
										'UPDATE .'.USERS_INFO_TABLE.'
							 | 
						|
										SET 
							 | 
						|
										`avatar`=\''.$avatar.'\',
							 | 
						|
										`location`=\''.$location.'\',
							 | 
						|
										`signature`=\''.$signature.'\'
							 | 
						|
										WHERE `user_id` = \''.$user_id.'\'';
							 | 
						|
										
							 | 
						|
										$this->db->query($query);
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function getUsers($stype, $sorder, $rank)
							 | 
						|
									{
							 | 
						|
										$query = '
							 | 
						|
										SELECT 
							 | 
						|
										u.user_id as user_id, u.nick as nick, u.rank as rank, ui.regdate as regdate, ui.lastvisit as lastvisit, pc.post_count as post_count
							 | 
						|
										FROM '.USERS_TABLE.' u
							 | 
						|
										LEFT JOIN '.USERS_INFO_TABLE.' ui on ui.user_id = u.user_id
							 | 
						|
										LEFT JOIN '.USERS_PC_VIEW.' pc on pc.user_id = u.user_id ';
							 | 
						|
										if ($rank !== '')
							 | 
						|
											$query .= 'WHERE rank=\''.$rank.'\'';
							 | 
						|
										$query .= '
							 | 
						|
										ORDER BY '.$stype.' '.$sorder;
							 | 
						|
										
							 | 
						|
										$out = $this->select_query($query);
							 | 
						|
										
							 | 
						|
										return $out;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function deleteUser($user_id)
							 | 
						|
									{
							 | 
						|
										$query = 
							 | 
						|
										'DELETE FROM .'.USERS_TABLE.'
							 | 
						|
										WHERE `user_id` = \''.$user_id.'\'';
							 | 
						|
										$this->db->query($query);
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									public function generatePasswordHash($nick, $password)
							 | 
						|
									{
							 | 
						|
										$modulo =  strlen($nick) % 8;
							 | 
						|
										
							 | 
						|
										$salt_begin = substr(RANDOM_STRING, $modulo*SALT_LENGTH, SALT_LENGTH-$modulo);
							 | 
						|
										
							 | 
						|
										$salt_end = substr(RANDOM_STRING, $modulo*SALT_LENGTH + SALT_LENGTH-$modulo, $modulo);
							 | 
						|
										
							 | 
						|
										return hash('haval256,5', $salt_begin.$password.$salt_end);
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								?>
							 |