class Model_User extends Amodel { protected $table = 'users'; protected $table_key = 'id'; protected $fields = array('id' => '', 'display_name' => '', 'username' => '', 'email' => '', 'password' => '', 'auth_code' => '', 'created_time' => '', 'active' => '', 'deleted' => '', 'banned' => '', 'token' => '', 'token_expires' => '', 'last_active' => '', 'admin_login' => '', 'logins' => '', 'token_user_agent' => '' ); protected $rules = array( 'display_name' => array('required', 'length[4,100]'), 'username' => array('required', 'length[4,100]', 'alpha_dash'), 'email' => array('required', 'email'), 'password' => array('required', 'length[8,100]', 'matches[password2]') ); protected $callbacks = array( 'username' => array('is_unique') ); public function pre_validate($data, $is_update = FALSE, $before = array()) { if ($is_update) { // Don't check for unique username if they didn't change the username if (isset($data['username']) AND isset($before['username']) AND $data['username'] == $before['username']) { unset($this->callbacks['username']); } // We need the create_time for the password salt $data['created_time'] = $before['created_time']; // The password isn't required for updates $this->rules['password'] = array('length[8,100]', 'matches[password2]'); } return $data; } }