<?php

/* 

 * phpMyVisites : website statistics and audience measurements

 * Copyright (C) 2002 - 2006

 * http://www.phpmyvisites.net/ 

 * phpMyVisites is free software (license GNU/GPL)

 * Authors : phpMyVisites team

*/



// $Id: FormUser.class.php 187 2007-01-17 11:03:48Z matthieu_ $





require_once INCLUDE_PATH . "/core/forms/Form.class.php";

require_once INCLUDE_PATH . "/core/include/UserConfigDb.class.php";



class FormUser extends Form

{

	var $login;

	function FormUser( &$template, $userLogin = false )

	{

		parent::Form( $template );

		

		$this->login = $userLogin;

	}

	

	function process()

	{

		

		if($this->login == 'anonymous') {

			return false;

		}

		if($this->login) {

			$info = User::getInfo( $this->login );

		}

		

		$req =& Request::getInstance();



		$tmpPassword = @$info['password'];

		$passwordMd5OrNot = !empty($tmpPassword)?$tmpPassword:'';

		if($req->getActionName() === 'modCur' ) 

		{

			$formElements = array(

				array ('hidden', 'form_login', $this->login),

				array('password', 'form_passwordold', "Old password:", 'value=""'),

				array('password', 'form_password', "New password:", 'value=""'),

				array('password', 'form_password2', $GLOBALS['lang']['admin_type_again'], 'value=""'),

				array('text', 'form_alias', "Alias", 'size=40 value="'.@$info['alias'].'"'),

				array('text', 'form_email', "email", 'value="'.@$info['email'].'"'),

				array('radio', 'form_send_mail', $GLOBALS['lang']['install_send_mail'], $GLOBALS['lang']['install_oui'], 'yes'),

				array('radio', 'form_send_mail', null, $GLOBALS['lang']['install_non'], 'no'),

			);

			$formRules = array(

				array('form_email', $GLOBALS['lang']['admin_valid_email'], 'email', '', 'server'),

				array('form_email', sprintf($GLOBALS['lang']['admin_required'], $GLOBALS['lang']['admin_admin_mail']), 'required'),

	

				array('form_passwordold', sprintf($GLOBALS['lang']['admin_required'], $GLOBALS['lang']['admin_user_oldPwd']), 'required'),

				array('form_passwordold', $GLOBALS['lang']['admin_user_oldPwd_bad'], 'checkOldCurrentPassword'),

				

				array('form_password', $GLOBALS['lang']['admin_valid_pass'], 'complexPassword'),

				array('form_password', $GLOBALS['lang']['admin_match_pass'], 'compareField', 'form_password2'),

				array('form_password', $GLOBALS['lang']['admin_valid_pass'], 'changePassword'),

	

				);

		}

		else {

			$formElements = array(

				array('password', 'form_password', "Password:", 'value="'.$passwordMd5OrNot.'"'),

				array('password', 'form_password2', $GLOBALS['lang']['admin_type_again'], 'value="'.$passwordMd5OrNot.'"'),

				array('text', 'form_alias', "Alias", 'size=40 value="'.@$info['alias'].'"'),

				array('text', 'form_email', "email", 'value="'.@$info['email'].'"'),

				array('radio', 'form_send_mail', $GLOBALS['lang']['install_send_mail'], $GLOBALS['lang']['install_oui'], 'yes'),

				array('radio', 'form_send_mail', null, $GLOBALS['lang']['install_non'], 'no'),

			);

		

			$formRules = array(

				array('form_email', $GLOBALS['lang']['admin_valid_email'], 'email', '', 'server'),

				array('form_email', sprintf($GLOBALS['lang']['admin_required'], $GLOBALS['lang']['admin_admin_mail']), 'required'),

	

				array('form_password', sprintf($GLOBALS['lang']['admin_required'], $GLOBALS['lang']['install_mdpadmin']), 'required'),

				array('form_password', $GLOBALS['lang']['admin_valid_pass'], 'complexPassword'),

				array('form_password', $GLOBALS['lang']['admin_match_pass'], 'compareField', 'form_password2'),

	

				);

		}

		



		// when adding a new element, add an input named login

		// else read the login in url

		if($req->getActionName() === 'add' )

		{

			$formElements = array_merge( 

				array(	array('text', 'form_login', "Login:", 'value=""')),

				$formElements

				);

			$formRules[] = array('form_login', sprintf($GLOBALS['lang']['admin_required'], "Login"), 'required');

			$formRules[] = array('form_login', "Alpha numeric only", 'alphanumeric');

			

			if($login = $this->getSubmitValue('form_login'))

			{

				$all = array_keys(User::getAllUsers());

				if(in_array( $login, $all ))

				{

					$this->setElementError( 'form_login', 'Login already exist in database!');

				}

			}

		}

		

		$this->addElements( $formElements , 'User Information');

		$this->setChecked( 'form_send_mail', @$info['send_mail']=='1'?'yes':'no' );

		$this->addRules( $formRules );

		

		

		return parent::process('install_general_setup');

	}

	

	function postProcess()

	{

		$confUser = new UserConfigDb();

		

		$req =& Request::getInstance();

		$curAction = $req->getActionName();

		

		if($curAction === 'modCur' ) 

		{

			// Verify if we update current user

			if ($this->getSubmitValue('form_login') === $this->login) 

			{

				$currentInfo = User::getInfo( $this->login );

				

				// Verify if old password is ok

				$tmpOldPwd = md5($this->getSubmitValue('form_passwordold'));

				if (@$currentInfo['password'] !== $tmpOldPwd) 

				{

					// Bad old password

					trigger_error('Bad old passord!', E_USER_ERROR);

				}

				else 

				{

					$info = array(	

						// db field name => new value

						'login' => $this->login,

						//'password' => $tmpPassword,

						'alias' => $this->getSubmitValue('form_alias'),

						'email' => $this->getSubmitValue('form_email'),

						'send_mail' => $this->getSubmitValue('form_send_mail')=='no'?0:1,

						);

						

					$submitPassword = $this->getSubmitValue('form_password');

					if ( !empty($submitPassword) && $submitPassword !== $tmpOldPwd) 

					{

						$info ['password'] = md5($submitPassword);

					}

					$curAction = 'mod';

				}

			}

			else 

			{

				trigger_error('Action not authorized. You can modify only your settings!', E_USER_ERROR);

			}

		}

		else {

			$info = array(	

				// db field name => new value

				'login' => $this->login?$this->login:$this->getSubmitValue('form_login'),

				//'password' => md5($this->getSubmitValue('form_password')),

				'alias' => $this->getSubmitValue('form_alias'),

				'email' => $this->getSubmitValue('form_email'),

				'send_mail' => $this->getSubmitValue('form_send_mail')=='no'?0:1,

			);

			if ($curAction == 'mod') {

				$currentInfo = User::getInfo( $this->login );

				if ($currentInfo['password'] !== $this->getSubmitValue('form_password')){

					$info['password'] = md5($this->getSubmitValue('form_password'));

				}

			}

			else {

				$info['password'] = md5($this->getSubmitValue('form_password'));

			}

		}

			

		switch( $curAction )

		{

			case 'add':

				$confUser->addUser( $info );

			break;

			

			case 'mod':				

				$confUser->modUser( $info );

			break;

						

			default:

				trigger_error('Action not specified for User configuration. Were you trying to add, modify, delete? Only YOU know that!', E_USER_ERROR);

			break;

		}

	}

}

?>