request->data) { //Create a user from the data $user = User::Create($this->request->data); //The user isn't active until after they confirm. $user->confirmed = false; $user->active = false; $user->joinedon = date('Y-m-d H:i:s', time()); $user->level = "user"; //By default save does validation at the same time, //If there are errors its stuffs them into the $user->_erorrs variable, //Accessible from $user->errors(), this is automatically passed to the view. if ($user->save()) { //Generate a confirmation key for the user $key = confirmKey::Create(array('key' => confirmKey::generate($user->email), 'username' => $user->username)); //Save it to the database $key->save(); $link = "/signup/confirm/$key->key"; return compact('key', 'link', 'user'); } } //If there are validation errors, send them back to the form return compact('user'); } public function confirm($key = null) { //Situation one //They have a key if (!(empty($key))) { //Find the key in the database $foundKey = confirmKey::find('first', array('conditions' => compact('key'))); //If the key exists if($foundKey) { //Find that user in the database $foundUser = User::find('first', array('conditions' => array("username" => $foundKey->username))); $valid = ($foundUser != NULL); //Set the users account active and confirmed. $foundUser->confirmed = true; $foundUser->active = true; //If the user is saved sucsessfully, if($foundUser->save(null, array('validate' => false))) { /* If the save is sucsessful we are done */ //Delete their key, $foundKey->delete(); //Send them to the homepage (probably login though) $this->redirect("/"); } else { FlashMessage::set("There was an error."); } } else { //Otherwise FlashMessage::set("There was an error finding the key."); return; } } } public function cancel($key = null) { $thisKey = Key::find('first', array('conditions' => compact('key'))); //If the key exists if ($thisKey) { $user = User::find('first', array('conditions' => array('username' => $thisKey->username))); $user->delete(); $thisKey->delete(); } return; } }