summaryrefslogtreecommitdiff
path: root/app/frontend/facades/UserFacade.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/frontend/facades/UserFacade.php')
-rw-r--r--app/frontend/facades/UserFacade.php78
1 files changed, 78 insertions, 0 deletions
diff --git a/app/frontend/facades/UserFacade.php b/app/frontend/facades/UserFacade.php
new file mode 100644
index 0000000..1604a70
--- /dev/null
+++ b/app/frontend/facades/UserFacade.php
@@ -0,0 +1,78 @@
+<?php
+
+Prado::using('Application.facades.Facade');
+Prado::using('Application.user.DbUser');
+Prado::using('Application.model.User');
+Prado::using('Application.dto.TimezoneDTO');
+
+class UserFacade extends Facade {
+
+ public function findByLogin(string $login) {
+ return User::finder()->findByLogin($login);
+ }
+
+ public function checkForUsername(string $login) {
+ return !User::finder()->count('login = ?', $login);
+ }
+
+ public function registerUser(string $login, string $password, bool $admin) {
+ $transaction = $this->beginTransaction();
+ try {
+ $newUser = new User();
+ $newUser->Login = $login;
+ $newUser->Password = $this->generatePassword($password);
+ $newUser->IsAdmin = $admin;
+ $newUser->save();
+ $this->raiseEvent('UserRegistered', $newUser);
+ $transaction->commit();
+ return $newUser;
+ } catch (Exception $e) {
+ $transaction->rollback();
+ throw $e;
+ }
+ }
+
+ public function changePassword(DbUser $user, string $pass) {
+ if (!$user->IsGuest) {
+ $user->DbRecord->Password = $this->generatePassword($pass);
+ $user->DbRecord->save();
+ }
+ }
+
+ public function verifyUserPassword(string $password, DbUser $user) {
+ $dbPassword = $user->IsGuest ? '' : $user->DbRecord->Password;
+ return $this->verifyPassword($password, $dbPassword);
+ }
+
+ public function generatePassword(string $password) {
+ return password_hash($password, PASSWORD_DEFAULT);
+ }
+
+ public function verifyPassword(string $password, string $dbPassword) {
+ return password_verify($password, $dbPassword);
+ }
+
+ public function setTimezonePreference(DbUser $user, string $timezone) {
+ if ($user->IsGuest) {
+ throw new TInvalidDataException(
+ Prado::localize(
+ 'Timezone preference change impossible for guest user'
+ )
+ );
+ }
+ $user->DbRecord->Timezone = $timezone;
+ $user->DbRecord->save();
+ }
+
+ public function getTimezonePreference(DbUser $user) {
+ if (!$user->IsGuest) {
+ try {
+ return new TimezoneDTO($user->DbRecord->Timezone);
+ } catch(Exception $e) {}
+ }
+ return new TimezoneDTO(date_default_timezone_get());
+ }
+
+}
+
+?>