Location: PHPKode > projects > IceBB > icebb/modules/usercp.php
<?php
//******************************************************//
//           /////////                 ////   /////
//              //                    // //  //  //
//             //      /////  ////// ////   ////
//            //      //     ////   //  // //  //
//        /////////  /////  ////// /////  /////
//******************************************************//
// icebb.net // 1.0
//******************************************************//
// user control center module
// $Id: usercp.php 802 2007-04-14 18:14:22Z mutantmonkey0 $
//******************************************************//

class usercp
{
	function run()
	{
		global $icebb,$config,$db,$std;
		
		$this->html						= $icebb->skin->load_template('usercp');
		$this->posthtml					= $icebb->skin->load_template('post');
		$this->lang						= $std->learn_language('usercp');
		$this->postlang					= $std->learn_language('post');
		
		$icebb->nav						= array("<a href='{$icebb->base_url}act=ucp'>{$this->lang['title']}</a>");
		
		if(empty($icebb->user['id']))
		{
			$std->error($this->lang['please_login'],1);
		}
		
		$icebb->hooks->hook('ucp_init');
		
		switch($icebb->input['func'])
		{
			case 'profile':
				$this->profile();
				break;
			case 'signature':
				$this->signature();
				break;
			case 'email':
				$this->email();
				break;
			case 'password':
				$this->pass();
				break;
			case 'avatar':
				$this->avatar();
				break;
			case 'uploadav':
				$this->avup();
				break;
			case 'favorites':
				$this->fav();
				break;
			case 'uploads':
				$this->uploads();
				break;
			case 'emailset':
				$this->emailset();
				break;
			case 'settings':
				$this->settings();
				break;
			case 'dateset':
				$this->dateset();
				break;
			case 'iptools':
				$this->iptools();
				break;
			case 'away_system':
				$this->away_system();
				break;
			case 'buddies':
				$this->buddies();
				break;
			default:
				$this->main();
				break;
		}
		
		$this->output				= $this->html->layout($this->output);
		
		$icebb->skin->html_insert($this->output);
		$icebb->skin->do_output();
	}
	
	function main()
	{
		global $icebb,$config,$db,$std;
		
		if(!empty($icebb->input['notepad']))
		{
			$db->query("UPDATE icebb_users SET notepad='{$icebb->input['notepad']}' WHERE id='{$icebb->user['id']}' LIMIT 1");
			
			//$std->bouncy_bouncy("Your notepad has been saved","{$icebb->base_url}act=ucp");
			$std->redirect("{$icebb->base_url}act=ucp");
		}
		
		$icebb->user['joined_formatted']= $std->date_format($icebb->user['date_format'],$icebb->user['joindate']);
		
		$icebb->user['days_registered']= (time()-$icebb->user['joindate'])/(3600*24);
		$icebb->user['posts_per_day']	= round($icebb->user['posts']/$icebb->user['days_registered'],2);
		
		$db->query("SELECT f.*,t.* FROM icebb_favorites AS f LEFT JOIN icebb_topics AS t ON f.favobjid=t.tid WHERE f.favuser='{$icebb->user['id']}' AND f.favtype='topic'");
		while($f			= $db->fetch_row())
		{
			$favorite_topics.= $this->html->main_favtopic($f);
		}
		
		$db->query("SELECT * FROM icebb_pm_topics WHERE owner='{$icebb->user['id']}' AND deleted=0");
		$pm['topics']		= $db->get_num_rows();
		
		$db->query("SELECT t.*,p.* FROM icebb_pm_topics AS t RIGHT JOIN icebb_pm_posts AS p ON p.ptopicid=t.tid WHERE t.owner='{$icebb->user['id']}' AND t.deleted=0");
		$pm['posts']		= $db->get_num_rows();
		
		$icebb->hooks->hook('ucp_main');
		
		$this->output		= $this->html->main($favorite_topics,$pm);
	}
	
	function profile()
	{
		global $icebb,$config,$db,$std;
		
		$icebb->lang			= $std->learn_language('usercp','profile');
		
		if($icebb->user['icq'] == '0')
		{
			$icebb->user['icq']	= '';
		}
		
		$g						= array();
		$g['u']					= "\t<option value='u'>-</option>";
		$g['m']					= "\t<option value='m'>{$icebb->lang['male']}</option>";
		$g['f']					= "\t<option value='f'>{$icebb->lang['female']}</option>";
		switch($icebb->user['gender'])
		{
			case 'm':
				$g['m']			= "\t<option value='m' selected='selected'>{$icebb->lang['male']}</option>";
				break;
			case 'f':
				$g['f']			= "\t<option value='f' selected='selected'>{$icebb->lang['female']}</option>";
				break;
			default:
				$g['u']			= "\t<option value='u' selected='selected'>-</option>";
				break;
		}
		
		if(empty($icebb->input['submit']))
		{
			$user_dob_clean		= explode('.',date('m.d.Y',$icebb->user['birthdate']));
		
			$months[1]			= $icebb->lang['month_jan'];
			$months[2]			= $icebb->lang['month_feb'];
			$months[3]			= $icebb->lang['month_mar'];
			$months[4]			= $icebb->lang['month_apr'];
			$months[5]			= $icebb->lang['month_may'];
			$months[6]			= $icebb->lang['month_jun'];
			$months[7]			= $icebb->lang['month_jul'];
			$months[8]			= $icebb->lang['month_aug'];
			$months[9]			= $icebb->lang['month_sep'];
			$months[10]			= $icebb->lang['month_oct'];
			$months[11]			= $icebb->lang['month_nov'];
			$months[12]			= $icebb->lang['month_dec'];
		
			for($i=1;$i<=12;$i++)
			{
				if($i			== $user_dob_clean[0])
				{
					$dob['month'].= "<option value='{$i}' selected='selected'>{$months[$i]}</option>";
				}
				else {
					$dob['month'].= "<option value='{$i}'>{$months[$i]}</option>";
				}
			}
		
			for($i=1;$i<=31;$i++)
			{
				if($i			== $user_dob_clean[1])
				{
					$dob['day'].= "<option value='{$i}' selected='selected'>{$i}</option>";
				}
				else {
					$dob['day'].= "<option value='{$i}'>{$i}</option>";
				}
			}
			
			for($i=date('Y');$i>=1900;$i--)
			{
				if($user_dob_clean[2]==$i)
				{
					$dob['year'].= "<option value='{$i}' selected='selected'>{$i}</option>";
				}
				else {
					$dob['year'].= "<option value='{$i}'>{$i}</option>";
				}
			}
		
			$icebb->hooks->hook('ucp_profile_edit');
		
			$this->output		= $this->html->editProfile($dob,$g,$this->plugin_extra);
		}
		else {
			require('includes/classes/post_parser.php');
			$post_parser		= new post_parser();
		
			// URL
			$url				= $icebb->input['url'];
			if(substr($url, 0, 7) != 'http://')
			{
				$url			= 'http://' . $url;
			}
		
			if(!empty($icebb->input['dob_month']) && !empty($icebb->input['dob_day']) && !empty($icebb->input['dob_year']))
			{
				$date_of_birth	= gmmktime(12,0,0,intval($icebb->input['dob_month']),intval($icebb->input['dob_day']),intval($icebb->input['dob_year']));
			}
		
			$update				= array(
				'title'			=> $db->escape_string($icebb->input['title']),
				'location'		=> $db->escape_string($icebb->input['location']),
				'gender'		=> $db->escape_string($icebb->input['gender']),
				'url'			=> $db->escape_string($url),
				'msn'			=> $db->escape_string($icebb->input['msn']),
				'yahoo'			=> $db->escape_string($icebb->input['yahoo']),
				'aim'			=> $db->escape_string($icebb->input['aim']),
				'icq'			=> $db->escape_string($icebb->input['icq']),
				'jabber'		=> $db->escape_string($icebb->input['jabber']),
				'birthdate'		=> $db->escape_string($date_of_birth),
			);
			
			$icebb->hooks->hook('ucp_profile_edit_update');
			
			foreach($update as $k => $v)
			{
				$update_sects[]	= "{$k}='{$v}'";
			}
		
			$updateq = $db->query("UPDATE icebb_users SET ".implode(',',$update_sects)." WHERE id='{$icebb->user['id']}' LIMIT 1");

			if(!empty($date_of_birth))
			{
				$db->query("SELECT * FROM icebb_users");
				while($u			= $db->fetch_row())
				{
					if(!empty($u['birthdate']))
					{
						$bds['uid']	= $u['id'];
						$bds['username']= $u['username'];
				
						$u['birthdate']= @explode('.',@gmdate('m.d.Y',$u['birthdate']));
						$bd['bmonth']= $u['birthdate'][0];
						$bd['bday']= $u['birthdate'][1];
						$bd['byear']= $u['birthdate'][2];
				
						$bds['year']= $bd['byear'];
				
						$bdays[$bd['bmonth']][$bd['bday']][]= $bds;
					}
				}
				$std->recache($bdays,'birthdays');
			}
			
			$std->bouncy_bouncy($this->lang['saved'],"{$icebb->base_url}act=ucp&func=profile");
		}
	}
	
	function signature()
	{
		global $icebb,$config,$db,$std,$post_parser;
				
		require('includes/classes/post_parser.php');
		$post_parser							= new post_parser();
				
		if(!isset($icebb->input['sig']))
		{
			$currsig			= $post_parser->parse(array('TEXT'=>$icebb->user['siggie'],'SMILIES'=>0,'BBCODE'=>1,'ME_TAG'=>0));

			$editor_style		= !empty($icebb->user['editor_style']) ? $icebb->user['editor_style'] : $icebb->settings['default_editor_style'];
			if($editor_style	== '3')
			{
				$form			= $this->posthtml->wysiwyg_editor('signatureInfo','sig',nl2br($icebb->user['siggie']));
			}
			else if($editor_style== '2')
			{
				$form			= $this->posthtml->richtext_editor('signatureInfo','sig',$icebb->user['siggie']);
			}
			else {
				$form			= $this->posthtml->basic_editor('signatureInfo','sig',$icebb->user['siggie']);
			}
		
			$this->output		= $this->html->editSignature($currsig,$form);
		}
		else {
			// fix it if we're coming from WYSIWYG
			if($icebb->input['wysiwyg']		== '1')
			{
				$icebb->input['sig']		= $post_parser->html_to_bbcode($icebb->input['sig']);
			}
		
			$db->query("UPDATE icebb_users SET siggie='{$icebb->input['sig']}' WHERE id='{$icebb->user['id']}' LIMIT 1");
			
			$std->bouncy_bouncy($this->lang['sig_update'],"{$icebb->base_url}act=ucp&func=signature");
		}
	}
	
	function email()
	{
		global $icebb,$config,$db,$std;
		
		if(!$icebb->input['mail'] && !$icebb->input['mailc'])
		{
			$this->output		= $this->html->editEmail();
		}
		else if($icebb->input['mail'] === $icebb->user['email'])
		{
			$std->error($this->lang['email_same']);
		}
		else if(empty($icebb->input['mail']) || empty($icebb->input['mailc']))
		{
			$std->error($this->lang['empty']);
		}
		else if($icebb->input['mail'] != $icebb->input['mailc'])
		{
			$std->error($this->lang['email_match']);
		}
		else {
			$db->query("UPDATE icebb_users SET email='{$icebb->input['mail']}' WHERE id='{$icebb->user['id']}' LIMIT 1");
			
			$std->send_mail($icebb->input['mail'], $this->lang['email_subject'], $this->lang['email_msg']);
			
			$std->bouncy_bouncy($this->lang['saved'], "{$icebb->base_url}act=ucp&func=email");
		}
	}
	
	// Password Change
	function pass()
	{
		global $icebb,$config,$db,$std,$login_func;
		
		if(empty($icebb->user['password']))
		{
			$this->output		= $this->html->editPassNone();
			return;
		}
				
		$salty			= md5(crypt(make_salt(27)));
		
		$current_date = date('l dS of F Y h:i:s A');
		if(!$icebb->input['pass_confirm'] && !$icebb->input['pass_new'] && !$icebb->input['pass_confirm'])
		{
			$this->output		= $this->html->editPass();
		}
		else if($pass_new_md5 === $icebb->user['password'])
		{
			$std->error($this->lang['pass_same']);
		}
		else if(!$icebb->input['pass_old'] || !$icebb->input['pass_new'] || !$icebb->input['pass_confirm'])
		{
			$std->error($this->lang['empty']);
		}
		else if($icebb->input['pass_new'] != $icebb->input['pass_confirm'])
		{
			$std->error($this->lang['pass_match']);
		}
		else {
			if(md5(md5($icebb->input['pass_old']).$icebb->user['pass_salt'])!=$icebb->user['password'])
			{
				$std->error($this->lang['pass_wrong_error']);
			}
			
			$pass_new_md5	= md5(md5($icebb->input['pass_new']).$salty);
			
			$login_key		= md5(uniqid(rand(), true));
			
			$updateq		= $db->query("UPDATE icebb_users SET password='{$pass_new_md5}',pass_salt='{$salty}',login_key='{$login_key}' WHERE id='{$icebb->user['id']}' LIMIT 1");
			
			$std->send_mail($icebb->user['mail'], $this->lang['pass_email_subject'], $this->lang['pass_email_notice']);
			$std->bouncy_bouncy($this->lang['saved'],"{$icebb->base_url}act=ucp&func=password");
		}
	}
	
	function avatar()
	{
		global $icebb,$config,$db,$std;
		
		if(isset($icebb->input['submit']))
		{
			switch($icebb->input['avtype'])
			{
				case 'upload':
					$this->avup();
					$std->bouncy_bouncy($this->lang['saved'],$icebb->base_url.'act=ucp&func=avatar');
					break;
					
				case 'url':
					if(!empty($icebb->input['av_url']))
					{
						list($w,$h)			= @getimagesize($icebb->input['av_url']);
						$db->query("UPDATE icebb_users SET avatar='{$icebb->input['av_url']}',avtype='url',avsize='{$w}x{$h}' WHERE id='{$icebb->user['id']}' LIMIT 1");
				
						$std->bouncy_bouncy($this->lang['saved'],$icebb->base_url.'act=ucp&func=avatar');
					}
					break;
					
				case 'none':
					$db->query("UPDATE icebb_users SET avatar='',avtype='none',avsize='' WHERE id='{$icebb->user['id']}' LIMIT 1");
				
					$std->bouncy_bouncy($this->lang['saved'],$icebb->base_url.'act=ucp&func=avatar');
					break;
				
				default:
					$std->error($this->lang['unauthorized']);
					//$std->bouncy_bouncy('Redirecting you to skenmy\'s favorite site.','http://goatse.cx/');
					break;
			}
		}
		else {
			$this->output		= $this->html->editAvatar($icebb->user);
		}
	}
	
	function avup()
	{
		global $icebb,$config,$db,$std;
		
		$retval					= true;
		
		$ext					= explode('.',$_FILES['file']['name']);
		$ext					= $ext[count($ext)-1];
		
		$allowed_exts			= array('jpg','jpeg','png','gif');
		//if(!in_array($ext[1],$allowed_exts)) imagine the following filename: file.jpg.whatever - $ext[0]="file"; $ext[1]="jpg"; $ext[2]="whatever"; you must always check the last one, not the second one ;)
		if(!in_array($ext,$allowed_exts))
		{
			$std->error($this->lang['av_type_not_allowed']);
		}
		else if(@getimagesize($_FILES['file']['tmp_name']) == false) // if it's an image, then this will return true
		{
			$std->error($this->lang['av_type_not_allowed']);
		}
		
		$uploaddir				= $icebb->settings['board_path'].'uploads/';
		$uploadfilename			= "av-{$icebb->user['id']}.{$ext}";
		$uploadfile				= "{$uploaddir}{$uploadfilename}";
		$file					= "uploads/{$uploadfilename}";
		    
		if(!@move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile))
		{
			$std->error($this->lang['something_went_wrong']);
		}
		else {
			list($w,$h)			= getimagesize($uploadfile);
		
			@chmod($uploadfile,0777);
		
			if($w > 100 || $h > 100)
			{
				$retval				= $std->resize_image($uploadfile,100,100);
				list($w,$h)			= getimagesize($uploadfile); 
			}
		}
		
		$db->query("UPDATE icebb_users SET avatar='{$file}',avtype='upload',avsize='{$w}x{$h}' WHERE id='{$icebb->user['id']}'");
		return $retval;
	}
	
    // No easter egg here - Go away :P
	function fav()
	{
		global $icebb,$std,$config,$db;
		
		if(!$icebb->input['opt'] && !$icebb->input['tid'])
		{
			$db->query("SELECT f.*,t.* FROM icebb_favorites AS f LEFT JOIN icebb_topics AS t ON f.favobjid=t.tid WHERE f.favuser='{$icebb->user['id']}' AND f.favtype='topic'");
			while($f			= $db->fetch_row())
			{
				$f['favtopic']	= $f['objid'];
				$favorite_topics.= $this->html->favorite_topic($f);
			}
			
			if(empty($favorite_topics))
			{
				$favorite_topics= $this->html->favorites_none();
			}
			
			$db->query("SELECT f.*,forum.* FROM icebb_favorites AS f LEFT JOIN icebb_forums AS forum ON f.favobjid=forum.fid WHERE f.favuser='{$icebb->user['id']}' AND f.favtype='forum'");
			while($f			= $db->fetch_row())
			{
				$f['favtopic']	= $f['objid'];
				$favorite_forums.= $this->html->favorite_forum($f);
			}
			
			if(empty($favorite_forums))
			{
				$favorite_forums= $this->html->favorites_none();
			}
			
			$this->output		= $this->html->favoriteView($favorite_topics,$favorite_forums);
		}
		else if($icebb->input['opt'] == 'delete' && $icebb->input['id'] && $icebb->input['type'])
		{
			$db->query("DELETE FROM icebb_favorites WHERE favuser={$icebb->user['id']} AND favtype='{$icebb->input['type']}' AND favobjid={$icebb->input['id']} LIMIT 1");
			
			$std->bouncy_bouncy($this->lang['fav_del'],$_SERVER['HTTP_REFERER']);
		}
	}
	
	function uploads()
	{
		global $icebb,$std,$db;
		
		if(!empty($icebb->input['del']))
		{
			$u				= $db->fetch_result("SELECT * FROM icebb_uploads WHERE uid='{$icebb->input['del']}'");
			$db->query("DELETE FROM icebb_uploads WHERE uid='{$icebb->input['del']}'");
			
			@unlink(str_replace($icebb->settings['board_url'],$icebb->settings['board_path'],$u['upath']));
		
			$std->bouncy_bouncy($this->lang['upload_deleted'],"{$icebb->base_url}act=ucp&func=uploads");
		}
		
		$db->query("SELECT * FROM icebb_uploads WHERE uowner='{$icebb->user['id']}'");
		if($db->get_num_rows() <= 0)
		{
			$uploads		= $this->html->uploads_none();
		}
		else {
			while($u		= $db->fetch_row())
			{
				$u['usize']	= $this->size_translate($u['usize']);
				$uploads   .= $this->html->uploads_row($u);
			}
		}
		
		$this->output		= $this->html->uploads($uploads);
	}
	
	function size_translate($filesize)
	{
	   $array = array(
		   'MB' => 1024 * 1024,
		   'KB' => 1024,
	   );
	   
	   if($filesize <= 1024)
	   {
		   $filesize = $filesize . ' Bytes';
	   }
	   
	   foreach($array AS $name => $size)
	   {
		   if($filesize > $size || $filesize == $size)
		   {
			   $filesize = round((round($filesize / $size * 100) / 100), 2) . ' ' . $name;
		   }
	   }
	   
	   return $filesize;
	}
	
	function emailset()
	{
		global $icebb,$std,$config,$db;
		
		if($icebb->user['email_admin'] == '1')
		{
			$a_send = "<input type='radio' name='admin' value='1' checked='checked' /> {$this->lang['yes']} - <input type='radio' name='admin' value='0' /> {$this->lang['no']}";
		}
		else if($icebb->user['email_admin'] == '0')
		{
			$a_send = "<input type='radio' name='admin' value='1' /> {$this->lang['yes']} - <input type='radio' name='admin' value='0' checked='checked' /> {$this->lang['no']}";
		}
		
		if($icebb->user['email_member'] == '1')
		{
			$m_send = "<input type='radio' name='member' value='1' checked='checked' /> {$this->lang['yes']} - <input type='radio' name='member' value='0' /> {$this->lang['no']}";
		}
		else if($icebb->user['email_member'] == '0')
		{
			$m_send = "<input type='radio' name='member' value='1' /> {$this->lang['yes']} - <input type='radio' name='member' value='0' checked='checked' /> {$this->lang['no']}";
		}
		
		if(!$icebb->input['member'] && !$icebb->input['admin'])
		{
			$this->output		= $this->html->emailset($m_send,$a_send);
		}
		else {
			$db->query("UPDATE icebb_users SET email_admin='{$icebb->input['admin']}' , email_member='{$icebb->input['member']}' WHERE id='{$icebb->user['id']}'");
			
			$std->bouncy_bouncy($this->lang['saved'],$icebb->base_url.'act=ucp&func=emailset');
		}
	}
	
    function settings()
    {
    	global $icebb,$std,$config,$db;
		
		// we seriouslah need a better way to do this
		
		// yeah, we need it like it is in the acc - Daniel
		
		if($icebb->user['view_av'] == '1')
		{
			$view_av = "<input type='radio' name='view_av' value='1' checked='checked' /> {$this->lang['yes']} - <input type='radio' name='view_av' value='no' /> {$this->lang['no']}";
		}
		else {
			$view_av = "<input type='radio' name='view_av' value='1' /> {$this->lang['yes']} - <input type='radio' name='view_av' value='no' checked='checked' /> {$this->lang['no']}";
		}
		
		if($icebb->user['view_sig'] == '1')
		{
			$view_sig		= "<input type='radio' name='view_sig' value='1' checked='checked' /> {$this->lang['yes']} - <input type='radio' name='view_sig' value='no' /> {$this->lang['no']}";
		}
		else {
			$view_sig		= "<input type='radio' name='view_sig' value='1' /> {$this->lang['yes']} - <input type='radio' name='view_sig' value='no' checked='checked' /> {$this->lang['no']}";
		}
		
		if($icebb->user['view_smileys'] == '1')
		{
			$view_smileys	= "<input type='radio' name='view_smileys' value='1' checked='checked' /> {$this->lang['yes']} - <input type='radio' name='view_smileys' value='no' /> {$this->lang['no']}";
		}
		else {
			$view_smileys	= "<input type='radio' name='view_smileys' value='1' /> {$this->lang['yes']} - <input type='radio' name='view_smileys' value='no' checked='checked' /> {$this->lang['no']}";
		}
		
		$editor_style		= !empty($icebb->user['editor_style']) ? $icebb->user['editor_style'] : $icebb->settings['default_editor_style'];
		if($editor_style	== '3')
		{
			$editor['3']	= " selected='selected'";
		}
		else if($editor_style == '2')
		{
			$editor['2']	= " selected='selected'";
		}
		else {
			$editor['1']	= " selected='selected'";
		}
		
		if($icebb->user['quick_edit'] == '1')
		{
			$quick_edit		= "<input type='radio' name='quick_edit' value='1' checked='checked' /> {$this->lang['yes']} - <input type='radio' name='quick_edit' value='no' /> {$this->lang['no']}";
		}
		else {
			$quick_edit		= "<input type='radio' name='quick_edit' value='1' /> {$this->lang['yes']} - <input type='radio' name='quick_edit' value='no' checked='checked' /> {$this->lang['no']}";
		}
		
		if(is_array($icebb->cache['skins']))
		{
			$skins					= $icebb->cache['skins'];
			$skins[0]				= array('skin_id'=>'0','skin_name'=>$this->lang['forum_default']);
			ksort($skins);
			foreach($skins as $skin)
			{
				if($skin['skin_is_hidden']=='1')
				{
					if($icebb->user['g_is_admin']=='1')
					{
						if($skin['skin_id']==$icebb->user['skinid'])
						{
							$skin_options.= "\t<option value='{$skin['skin_id']}' selected='selected'>{$skin['skin_name']} (Hidden)</option>\n";
						}
						else {
							$skin_options.= "\t<option value='{$skin['skin_id']}'>{$skin['skin_name']} (Hidden)</option>\n";
						}
					}
				}
				else {
					if($skin['skin_id']==$icebb->user['skinid'])
					{
						$skin_options.= "\t<option value='{$skin['skin_id']}' selected='selected'>{$skin['skin_name']}</option>\n";
					}
					else {
						$skin_options.= "\t<option value='{$skin['skin_id']}'>{$skin['skin_name']}</option>\n";
					}
				}
			}
		}
		
		if(is_array($icebb->cache['langs']))
		{
			$langs					= $icebb->cache['langs'];
			$langs[0]				= array('lang_short'=>'0','lang_name'=>$this->lang['forum_default']);
			unset($langs['default']);ksort($langs);
			foreach($langs as $lang)
			{
				if($lang['lang_short']==$icebb->user['langid'])
				{
					$lang_options.= "\t<option value='{$lang['lang_short']}' selected='selected'>{$lang['lang_name']}</option>\n";
				}
				else {
					$lang_options.= "\t<option value='{$lang['lang_short']}'>{$lang['lang_name']}</option>\n";
				}
			}
		}
		
		$icebb->hooks->hook('ucp_settings_edit');
		
		if(empty($icebb->input['view_av']) || empty($icebb->input['view_sig']) || empty($icebb->input['view_smileys']))
		{
			$this->output	= $this->html->settings($view_av,$view_sig,$editor,$quick_edit,$skin_options,$lang_options,$view_smileys,$this->plugin_extra);
		}
		else {
			if($icebb->input['view_av'] == 'no')
			{
				$icebb->input['view_av']= '0';
			}
			
			if($icebb->input['view_sig']== 'no')
			{
				$icebb->input['view_sig']= '0';
			}
			
			if($icebb->input['view_smileys']== 'no')
			{
				$icebb->input['view_smileys']= '0';
			}
			
			$update				= array(
				'view_av'		=> $icebb->input['view_av'],
				'view_sig'		=> $icebb->input['view_sig'],
				'view_smileys'	=> $icebb->input['view_smileys'],
				'editor_style'	=> $icebb->input['editor_style'],
				'quick_edit'	=> $icebb->input['quick_edit'],
				'skinid'		=> $icebb->input['skin'],
				'langid'		=> $icebb->input['lang'],
			);
			
			$icebb->hooks->hook('ucp_settings_edit_update');
			
			foreach($update as $k => $v)
			{
				$update_sects[]	= "{$k}='{$v}'";
			}
			
			$db->query("UPDATE icebb_users SET ".implode(',',$update_sects)." WHERE id='{$icebb->user['id']}' LIMIT 1");
			
			$std->bouncy_bouncy($this->lang['settings_updated'],$icebb->base_url.'act=ucp&func=settings');
		}
    }
    
    function dateset()
    {
    	global $icebb,$std,$config,$db;
     
		$tz=array();
			
		$tz['-12'] = '(GMT -12 Hours) Eniwetok, Kwajalein';
		$tz['-11'] = '(GMT -11 Hours) Midway Island, Samoa';
		$tz['-10'] = '(GMT -10 Hours) Hawaii';
		$tz['-9'] = '(GMT -9 Hours) Alaska';
		$tz['-8'] = '(GMT -8 Hours) Pacific Time (US & Canada)';
		$tz['-7'] = '(GMT -7 Hours) Mountain Time (US & Canada)';
		$tz['-6'] = '(GMT -6 Hours) Central Time (US & Canada), Mexico City';
		$tz['-5'] = '(GMT -5 Hours) Eastern Time (US & Canada), Bogota, Lima';
		$tz['-4'] = '(GMT -4 Hours) Atlantic Time (Canada), Caracas, La Paz';
		$tz['-3.5'] = '(GMT -3.5 Hours) Newfoundland';
		$tz['-3'] = '(GMT -3 Hours) Brazil, Buenos Aires, Georgetown';
		$tz['-2'] = '(GMT -2 Hours) Mid-Atlantic';
		$tz['-1'] = '(GMT -1 Hour) Azores, Cape Verde Islands';
		$tz['0'] = '(GMT) London, Lisbon, Casablanca, Monrovia';
		$tz['1'] = '(GMT +1 Hour) Berlin, Brussels, Madrid, Paris';
		$tz['2'] = '(GMT +2 Hours) Kaliningrad, South Africa';
		$tz['3'] = '(GMT +3 Hours) Baghdad, Riyadh, Moscow, Nairobi';
		$tz['3.5'] = '(GMT +3.5 Hours) Tehran';
		$tz['4'] = '(GMT +4 Hours) Abu Dhabi, Muscat, Baku, Tbilisi';
		$tz['4.5'] = '(GMT +4.5 Hours) Kabul';
		$tz['5'] = '(GMT +5 Hours) Ekaterinburg, Islamabad, Karachi, Tashkent';
		$tz['5.5'] = '(GMT +5.5 Hours) Bombay, Calcutta, Madras, New Delhi';
		$tz['5.75'] = '(GMT +5.75 Hours) Kathmandu';
		$tz['6'] = '(GMT +6 Hours) Almaty, Dhaka, Colombo';
		$tz['6.5'] = '(GMT +6.5 Hours)';
		$tz['7'] = '(GMT +7 Hours) Bangkok, Hanoi, Jakarta';
		$tz['8'] = '(GMT +8 Hours) Beijing, Singapore, Hong Kong, Taipei';
		$tz['9'] = '(GMT +9 Hours) Tokyo, Seoul, Osaka, Sapporo, Yakutsk';
		$tz['9.5'] = '(GMT +9.5 Hours) Adelaide, Darwin';
		$tz['10'] = '(GMT +10 Hours) Guam, Papua New Guinea';
		$tz['11'] = '(GMT +11 Hours) Magadan, Solomon Islands, New Caledonia';
		$tz['12'] = '(GMT +12 Hours) Auckland, Wellington, Fiji, Marshall Island';
    
		foreach($tz as $offset => $desc)
		{
			if($offset == $icebb->user['gmt'])
			{
				$gmt_select .= "\t<option value='{$offset}' selected='selected'>".htmlentities($desc, ENT_QUOTES)."</option>\n";
			}
			else
			{
				$gmt_select .= "\t<option value='{$offset}'>".htmlentities($desc, ENT_QUOTES)."</option>\n";
			}
		}
		
		if($icebb->user['dst']=='1')
		{
			$dst				= " checked='checked'";
		}
     
		if(!$icebb->input['gmt'] && !$icebb->input['date_format'])
		{
			$date				= gmdate($icebb->user['date_format'],time()+$std->get_offset());
		
			$this->output		= $this->html->dateset($date,$gmt_select,$dst);
		}
		else if(empty($icebb->input['date_format']))
		{
			$std->error($this->lang['empty']);
		}
		else {
			$db->query("UPDATE icebb_users SET gmt='{$icebb->input['gmt']}',dst='".intval($icebb->input['dst'])."',date_format='{$icebb->input['date_format']}' WHERE id='{$icebb->user['id']}' LIMIT 1");
			$std->bouncy_bouncy($this->lang['settings_updated'],$icebb->base_url.'act=ucp&func=dateset');
		}
    }
    
    function iptools()
    {
		global $icebb,$db,$std;
		
		if($icebb->user['g_is_mod']!='1')
		{
			$std->error($this->lang['unauthorized'],1);
		}
		
		if(!empty($icebb->input['ajax_dns_lookup']))
		{
			echo @gethostbyaddr($icebb->input['ajax_dns_lookup']);
			exit();
		}
		
		$ip['ip']				= long2ip(ip2long($icebb->input['ip']));
		$ip['resolved']			= @gethostbyaddr($ip['ip']);
		
		$db->query("SELECT * FROM icebb_users WHERE ip='{$ip['ip']}'");
		while($u						= $db->fetch_row())
		{
			$ip['members_using'][]		= $u;
		}
		
		$db->query("SELECT p.*,u.username as pauthor2 FROM icebb_posts AS p LEFT JOIN icebb_users AS u ON p.pauthor_id=u.id WHERE p.pauthor_ip='{$ip['ip']}'");
		while($p						= $db->fetch_row())
		{
			if(empty($p['pauthor']))
			{
				$p['pauthor']			= $p['pauthor2'];
			}
		
			$ip['posts_using'][]		= $p;
		}
		
		$this->output			= $this->html->iptools($ip);
		
		//@header("Location: http://dnstools.com/?lookup=on&arin=on&target={$icebb->input['ip']}");
    }
    
    function away_system()
    {
    	global $icebb,$std,$db;
    	
    	if(isset($icebb->input['end']))
    	{
    		$db->query("UPDATE icebb_users SET away='0' WHERE id='{$icebb->user['id']}' LIMIT 1");
    		$redirect_to = empty($_SERVER['HTTP_REFERER']) ? $icebb->base_url : $_SERVER['HTTP_REFERER'];
    		$std->bouncy_bouncy($this->lang['away_status_updated'],$redirect_to);
    		exit();
    	}
    	
    	if(isset($icebb->input['away']) && isset($icebb->input['away_reason']))
    	{
    		$away = $icebb->input['away']==1 ? (string) '1' : (string) '0';
    		$db->query("UPDATE icebb_users SET away='{$away}',away_reason='{$icebb->input['away_reason']}' WHERE id='{$icebb->user['id']}' LIMIT 1");
    		$std->bouncy_bouncy($this->lang['away_status_updated'],$icebb->base_url.'act=ucp&func=away_system');
    	}
    	else {
    		$this->output = $this->html->away_system();
    	}
    }
	
	function buddies()
	{
		global $icebb,$db,$std;
		
		if(!empty($icebb->input['buddy']))
		{
			$db->query("SELECT id FROM icebb_users WHERE username='{$icebb->input['add']}'");
			if($db->get_num_rows()<=0)
			{
				$std->error($this->lang['user_not_found']);
			}
			
			$u				= $db->fetch_row();
		
			$db->insert('icebb_buddies',array(
				'owner'		=> $icebb->user['id'],
				'type'		=> 1,
				'uid'		=> $u['id'],
			));
			
			$this->recache_buddies();
		}
		else if(!empty($icebb->input['block']))
		{
			$db->query("SELECT id FROM icebb_users WHERE username='{$icebb->input['block_add']}'");
			if($db->get_num_rows()<=0)
			{
				$std->error($this->lang['user_not_found']);
			}
			
			$u				= $db->fetch_row();
		
			$db->insert('icebb_buddies',array(
				'owner'		=> $icebb->user['id'],
				'type'		=> 2,
				'uid'		=> $u['id'],
			));
			
			$this->recache_buddies();
		}
		else if(!empty($icebb->input['del']))
		{
			$db->query("DELETE FROM icebb_buddies WHERE id=".intval($icebb->input['del']));
			$this->recache_buddies();
		}
		
		$buddies			= array(1=>array(),2=>array());
		
		$db->query("SELECT b.*,u.username FROM icebb_buddies AS b LEFT JOIN icebb_users AS u ON b.uid=u.id WHERE b.owner={$icebb->user['id']}");
		while($b			= $db->fetch_row())
		{
			//$b['type']		= $b['type']	= 1;
			
			$buddies[$b['type']][]= $b;
		}
		
		$this->output		= $this->html->buddy_list($buddies[1],$buddies[2]);
	}
	
	function recache_buddies()
	{
		global $icebb,$db,$std;
	
		$db->query("SELECT * FROM icebb_buddies WHERE owner={$icebb->user['id']}");
		while($b			= $db->fetch_row())
		{
			$buddies[]		= $b;
		}
		
		$buddies_cache		= serialize($buddies);
		$buddies_cache		= addslashes($buddies_cache);
		
		$db->query("UPDATE icebb_users SET buddies='{$buddies_cache}' WHERE id={$icebb->user['id']}");
	}
}
?>
Return current item: IceBB