diff --git a/app/assets/less/components/button.less b/app/assets/less/components/button.less index 4d2e596..9f19980 100644 --- a/app/assets/less/components/button.less +++ b/app/assets/less/components/button.less @@ -45,6 +45,11 @@ .button-brand { .button-variant(@button-brand-color, @button-brand-bg); } .button-light { .button-variant(@text-light-color, @button-bg-color, @button-hover-color); } +.button-info { .button-variant(@button-info-color, @button-info-bg); } +.button-success { .button-variant(@button-success-color, @button-success-bg); } +.button-warning { .button-variant(@button-warning-color, @button-warning-bg); } +.button-danger { .button-variant(@button-danger-color, @button-danger-bg); } + .button-github { .button-variant(@button-github-color, @button-github-bg); } .button-gitlab { .button-variant(@button-gitlab-color, @button-gitlab-bg); } .button-google { .button-variant(@button-google-color, @button-google-bg); } diff --git a/app/assets/less/variables.less b/app/assets/less/variables.less index 0576ada..d4930f7 100644 --- a/app/assets/less/variables.less +++ b/app/assets/less/variables.less @@ -104,6 +104,16 @@ @button-brand-color: white; @button-brand-bg: @brand-color; +// State +@button-info-color: white; +@button-info-bg: @state-info-text; +@button-success-color: white; +@button-success-bg: @state-success-text; +@button-warning-color: white; +@button-warning-bg: @state-warning-text; +@button-danger-color: white; +@button-danger-bg: @state-danger-text; + // Company. @button-google-color: white; diff --git a/app/assets/less/vendor/bootstrap-framework.less b/app/assets/less/vendor/bootstrap-framework.less index 58d8446..93e7aac 100644 --- a/app/assets/less/vendor/bootstrap-framework.less +++ b/app/assets/less/vendor/bootstrap-framework.less @@ -30,7 +30,7 @@ @import (reference) "bootstrap/panels.less"; @import (reference) "bootstrap/wells.less"; @import "bootstrap/close.less"; -@import (reference) "bootstrap/modals.less"; +@import "bootstrap/modals.less"; @import (reference) "bootstrap/tooltip.less"; @import (reference) "bootstrap/popovers.less"; @import (reference) "bootstrap/carousel.less"; diff --git a/app/controllers/UserController.php b/app/controllers/UserController.php index a6973ef..09bab32 100644 --- a/app/controllers/UserController.php +++ b/app/controllers/UserController.php @@ -6,6 +6,7 @@ use App\Controller\ControllerBase, App\Form\UserSettings as UserSettingsForm, App\Model\Data\ActivityLog, App\Model\Data\PasswordLink, + App\Model\Data\User, SendGrid\Mail\Mail as SendGridMail; class UserController extends ControllerBase @@ -79,6 +80,37 @@ class UserController extends ControllerBase $this->view->form = $form; } + public function deleteAction() + { + $user = $this->_getAuth()->getUser(); + + if ($this->request->isPost()) { + $data = $this->request->getPost(); + } + + // Delete acc. + if (isset($data['deleteAcc'])) { + + if (strlen($user->getPassword()) > 0) { + if (!isset($data['currentpw']) || !$this->security->checkHash($data['currentpw'], $user->getPassword())) { + $this->flash->error('The password was not correct. Refusing to delete account.'); + $this->response->redirect('/settings'); + return; + } + } + + $user->setStatus(User::STATUS_DELETED); + $user->save(); + + // Logout the user. + $this->auth->clearIdentity(); + + $this->flash->success('The account was successfully removed.'); + } + + $this->response->redirect('/settings'); + } + /** * Activate a password. * diff --git a/app/library/Auth.php b/app/library/Auth.php index 718b0ee..2ec49ae 100644 --- a/app/library/Auth.php +++ b/app/library/Auth.php @@ -58,6 +58,13 @@ class Auth extends Component return $user->getMessages(); } } + // Here we activate the user. + // As for OAuth we perform registration if the user does not exist. + // We should therefore activate deleted accounts. + else if ($user->Status == User::STATUS_DELETED) { + $user->Status = User::STATUS_ACTIVE; + $user->save(); + } $this->setIdentity($user->getId()); diff --git a/app/models/Data/User.php b/app/models/Data/User.php index fdeb5bf..425ec3e 100644 --- a/app/models/Data/User.php +++ b/app/models/Data/User.php @@ -281,8 +281,8 @@ class User extends Model static public function findFirstByUsernameOrEmail($value) { return self::findFirst([ - "email = :v: OR username = :v:", - "bind" => [ 'v' => $value ] + "(email = :v: OR username = :v:) AND status = :s:", + "bind" => [ 'v' => $value, 's' => self::STATUS_ACTIVE ] ]); } diff --git a/app/views/user/settings.volt b/app/views/user/settings.volt index ef5a814..c7c40df 100644 --- a/app/views/user/settings.volt +++ b/app/views/user/settings.volt @@ -71,8 +71,46 @@

{{ form.render('Save') }} + +
+ + + +