pressmate / branches / master / models / user.php

history
<?php

class User extends AppModel {
	
	var $actsAs = array('Acl' => array('Aro' => 'requestor'));
	
	 var $validate = array(
		'first_name' => array(
			'rule' => array('custom', '/^[A-Za-z\- ]+$/'),
			'message' => 'Only letters, spaces, and hyphens allowed'
		),
		'last_name' => array(
			'rule' => array('custom', '/^[A-Za-z\- ]+$/'),
			'message' => 'Only letters, spaces and hyphens allowed'
		),
		'email' => array(
			'usernameExists' => array(
				'rule' => array('validateEmail'),
				'message' => 'That email address is already taken'
			),
			'email' => array(
				'rule' => array('email'),
				'message' => 'Must be valid email address'
			)
		),
		'avatar_url' => array(
			'rule' => array('url'),
			'message' => 'Must be valid web address',
			'allowEmpty' => true
		),
		'username' => array(
			'usernameExists' => array(
				'rule' => array('validateUsername'),
				'message' => 'That username is already taken'
			),
			'alphaNumeric' => array(
				'rule' => array('alphaNumeric'),
				'message' => 'Only letters and numbers allowed'
			)
		),
		'password' => array(
			'rule' => array('validatePassword'),
			'message' => 'Passwords must match',
			'allowEmpty' => false
		),
		'password1' => array(
			'rule' => array('validatePassword'),
			'message' => 'Passwords must match',
			'allowEmpty' => false
		)
	);

	/**
	 * required for ACL behavior
	 */
	function parentNode() {
		return false;
	}
	
	/**
	 * checks that passwords match
	 */
	function validatePassword() {
		extract($this->data[$this->alias]);
		
		// user already has a password, no need to validate
		if (isset($id) && isset($password)) {
			$user = $this->findById($id);
			if (empty($password) && $user[$this->alias]['password']) {
				return true;
			}
		}
		
		// check that passwords match
		if (empty($password1) || empty($password2) || $password1 != $password2) {
			$this->invalidate('password', 'Passwords must match');
			$this->invalidate('password1', 'Passwords must match');
			$this->invalidate('password2', 'Passwords must match');
			return false;
		}
		
		// assign to proper password field
		$this->data[$this->alias]['password'] = Security::hash($this->data[$this->alias]['password1'], null, true);
		return true;
	}
	
	/**
	 * checks that username is not taken
	 */
	function validateUsername() {
		extract($this->data[$this->alias]);
		$user = $this->findByUsername($username);
		if ($user && $id != $user[$this->alias][$this->primaryKey]) {
			return false;
		}
		return true;
	}
	
	/**
	 * checks that email is not already used
	 */
	function validateEmail() {
		extract($this->data[$this->alias]);
		$user = $this->findByEmail($email);
		if ($user && $id != $user[$this->alias][$this->primaryKey]) {
			return false;
		}
		return true;
	}
	
	/**
	 * creates user account
	 */
	function createAccount($data) {
		extract($data[$this->alias]);
		$this->create($data);
		if (!$this->save()) {
			return false;
		}
		return true;
	}
	
}

?>