|
@@ -0,0 +1,119 @@
|
|
|
|
|
+<?php
|
|
|
|
|
+
|
|
|
|
|
+namespace app\controllers;
|
|
|
|
|
+
|
|
|
|
|
+use li3_swiftmailer\mailer\Transports;
|
|
|
|
|
+use li3_swiftmailer\mailer\Message;
|
|
|
|
|
+use app\models\User;
|
|
|
|
|
+use app\models\confirmKey;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class SignupController extends \lithium\action\Controller {
|
|
|
|
|
+ public $publicActions = array('index','confirm', 'cancel' );
|
|
|
|
|
+
|
|
|
|
|
+ public function index() {
|
|
|
|
|
+ $user = null;
|
|
|
|
|
+ //If the request isn't empty
|
|
|
|
|
+ if($this->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("F j, Y, g:i a");
|
|
|
|
|
+
|
|
|
|
|
+ //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();
|
|
|
|
|
+
|
|
|
|
|
+ //Create the link for the user to click.
|
|
|
|
|
+ $link = $this->html->link('Here', array('controller' => 'signup',
|
|
|
|
|
+ 'action' => 'confirm',
|
|
|
|
|
+ 'args' => $key->key));
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ $mailer = Transports::adapter('default');
|
|
|
|
|
+ $message = Message::newInstance()
|
|
|
|
|
+ ->setSubject('Welcome to OtakuHUB')
|
|
|
|
|
+ ->setFrom(array('admin@weareotak.us' => 'OtakuHUB signup team'))
|
|
|
|
|
+ ->setTo(array($user->email))
|
|
|
|
|
+ ->setBody("Hey! Wecome to our awesome site! Click $link to get started");
|
|
|
|
|
+
|
|
|
|
|
+ $result = $mailer->send($message);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ 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;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|