src/Entity/User.php line 24

Open in your IDE?
  1. <?php
  2. /*
  3.  * Eventfix - User.php
  4.  * --------------------------------------------------------------------------
  5.  * Created by: mhack
  6.  * Created on: 15.1.2024
  7.  * --------------------------------------------------------------------------
  8.  * Copyright (c) 2024 | Michael Hack Software e.K. | www.mh-s.de
  9.  */
  10. namespace App\Entity;
  11. use Doctrine\Common\Collections\Collection;
  12. use Doctrine\Common\Collections\Criteria;
  13. use Doctrine\ORM\Mapping as ORM;
  14. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  15. use Symfony\Component\Security\Core\User\UserInterface;
  16. /**
  17.  * User
  18.  * @ORM\Table(name="users")
  19.  * @ORM\Entity
  20.  */
  21. class User extends Base\User implements UserInterfacePasswordAuthenticatedUserInterface\Serializable {
  22.     public function __toString() {
  23.         return trim($this->firstname ' ' $this->lastname);
  24.     }
  25.     /**
  26.      * Zugangsdaten löschen
  27.      */
  28.     public function eraseCredentials() {
  29.     }
  30.     /**
  31.      * Gebuchtes, aktives Paket des Benutzers
  32.      * @return UserPlan|null
  33.      */
  34.     public function getActivePlan() : ?UserPlan {
  35.         $result $this->plans->matching(
  36.             Criteria::create()->andWhere(Criteria::expr()->eq('state'UserPlan::STATE_ACTIVE))
  37.         );
  38.         return $result->count() ? $result->first() : null;
  39.     }
  40.     /**
  41.      * Offene Rechnung ein es Typs
  42.      * @param string $type
  43.      * @return Invoice|null
  44.      */
  45.     public function getOpenInvoice(string $type Invoice::TYPE_INVOICE): ?Invoice {
  46.         $result $this->invoices->matching(
  47.             Criteria::create()
  48.                     ->andWhere(Criteria::expr()->eq('type'$type))
  49.                     ->andWhere(Criteria::expr()->eq('state'Invoice::STATE_OPEN))
  50.         );
  51.         return $result->count() ? $result->first() : null;
  52.     }
  53.     /**
  54.      * Vollständiger Name
  55.      * @return string
  56.      */
  57.     public function getFullname() : string {
  58.         return trim("{$this->firstname} {$this->lastname}");
  59.     }
  60.     /**
  61.      * Alle tatsächlich ausgeführten Rechnungen
  62.      * @return Invoice[]|Collection
  63.      */
  64.     public function getInvoices() : Collection {
  65.         return $this->invoices->matching(
  66.             Criteria::create()->where(Criteria::expr()->neq('state'Invoice::STATE_OPEN))
  67.         );
  68.     }
  69.     /**
  70.      * (Aktuelles) Lastschriftmandat ermitteln
  71.      * @param int $id
  72.      * @return UserMandate|null
  73.      */
  74.     public function getMandate(int $id 0) : ?UserMandate {
  75.         // Einen spezfisches Mandat
  76.         if ($id) {
  77.             return $this->_getItem($this->mandates$id);
  78.         }
  79.         // Aktuelles Mandat
  80.         $result $this->mandates->matching(
  81.             Criteria::create()->where(Criteria::expr()->eq('state'UserMandate::STATE_ACTIVE))
  82.         );
  83.         return $result->count() ? $result->first() : null;
  84.     }
  85.     /**
  86.      * Erstes (und aktuell einziges) Profil zurückgeben
  87.      * @param int $id
  88.      * @return UserProfile|null
  89.      */
  90.     public function getProfile(int $id 0) : ?UserProfile {
  91.         if ($id) {
  92.             return parent::getProfile($id);
  93.         }
  94.         if ($this->profiles->isEmpty()) {
  95.             return null;
  96.         }
  97.         return $this->profiles->first();
  98.     }
  99.     /**
  100.      * Berechtigung zur Authentifizierung
  101.      * @return array
  102.      */
  103.     public function getRoles() {
  104.         $roles = [];
  105.         switch ($this->state) {
  106.             case self::STATE_NEW:
  107.                 $roles[] = 'ROLE_NEW';
  108.                 break;
  109.             case self::STATE_ACTIVE:
  110.                 $roles[] = 'ROLE_USER';
  111.                 if ($this->is_admin) {
  112.                     $roles[] = 'ROLE_ADMIN';
  113.                 }
  114.                 break;
  115.             case self::STATE_DELETED:
  116.                 $roles[] = 'ROLE_ARCHIVE';
  117.                 break;
  118.         }
  119.         return $roles;
  120.     }
  121.     /**
  122.      * Anrede der Person
  123.      * @return string
  124.      */
  125.     public function getSalutation() : string {
  126.         return "Sehr geehrte/r " trim($this->firstname ' ' $this->lastname);
  127.     }
  128.     /**
  129.      * Status ermitteln
  130.      * @return string
  131.      */
  132.     public function getState() : string {
  133.         if ($this->is_locked) {
  134.             return User::STATE_LOCKED;
  135.         }
  136.         return parent::getState();
  137.     }
  138.     /**
  139.      * Aktive Vertragsbedingungen
  140.      * @return UserTerm[]|Collection
  141.      */
  142.     public function getTerms() : Collection {
  143.         return $this->terms->matching(
  144.             Criteria::create()->where(Criteria::expr()->neq('state'UserTerm::STATE_ACTIVE))
  145.         );
  146.     }
  147.     /**
  148.      * Offene Todos
  149.      * @return UserTodo[]|Collection
  150.      */
  151.     public function getTodos() : Collection {
  152.         $criteria Criteria::create()->where(Criteria::expr()->eq('is_done'false));
  153.         return $this->todos->matching($criteria);
  154.     }
  155.     /**
  156.      * Benutzername zur Authentifizierung
  157.      * @return string
  158.      */
  159.     public function getUserIdentifier() {
  160.         return $this->username;
  161.     }
  162.     /**
  163.      * Wartendes, nächstes Paket des Benutzers
  164.      * @return UserPlan|null
  165.      */
  166.     public function getWaitingPlan() : ?UserPlan {
  167.         $result $this->plans->matching(
  168.             Criteria::create()->andWhere(Criteria::expr()->eq('state'UserPlan::STATE_NEW))
  169.         );
  170.         return $result->count() ? $result->first() : null;
  171.     }
  172.     /**
  173.      * Hatte der Benutzer einen Probezeitraum?
  174.      * @return bool
  175.      */
  176.     public function hasTrial() : bool {
  177.         $result $this->plans->matching(
  178.             Criteria::create()->andWhere(Criteria::expr()->eq('is_trial'true))
  179.         );
  180.         return $result->count() > 0;
  181.     }
  182.     /**
  183.      * Aktiver, abrechnungsfähiger Benutzer
  184.      * @return bool
  185.      */
  186.     public function isActive() : bool {
  187.         if (!$this->username) return false;
  188.         return $this->state == self::STATE_ACTIVE;
  189.     }
  190.     /**
  191.      * Deaktivierter und eingeschränkter Benutzer
  192.      * @return bool
  193.      */
  194.     public function isDisabled() : bool {
  195.         // Kein Benutzername hinterlegt
  196.         if (!$this->username) return true;
  197.         // Gesperrt, Deaktiviert bzw in Löschung
  198.         if ($this->is_locked) return true;
  199.         if ($this->state == self::STATE_DEACTIVATED) return true;
  200.         if ($this->state == self::STATE_DELETED)     return true;
  201.         return false;
  202.     }
  203.     /**
  204.      * Serializer für die Session
  205.      * @return string
  206.      */
  207.     public function serialize() {
  208.         return serialize([
  209.             $this->id,
  210.             $this->firstname,
  211.             $this->lastname,
  212.             $this->username,
  213.             $this->password,
  214.             $this->state,
  215.             $this->is_admin,
  216.             $this->is_locked
  217.         ]);
  218.     }
  219.     /**
  220.      * Passwort setzen
  221.      *
  222.      * @param string|null $password
  223.      *
  224.      * @return User
  225.      */
  226.     public function setPassword($password) : self {
  227.         $this->password password_hash($passwordPASSWORD_BCRYPT);
  228.         return $this;
  229.     }
  230.     /**
  231.      * Status setzen
  232.      * @param string $state
  233.      *
  234.      * @return User
  235.      */
  236.     public function setState(string $state) {
  237.         if ($state == self::STATE_LOCKED) {
  238.             $this->setIsLocked(true);
  239.             return $this;
  240.         }
  241.         $this->setIsLocked(false);
  242.         return parent::setState($state);
  243.     }
  244.     /**
  245.      * Unserializer für die Session
  246.      * @param string $data
  247.      */
  248.     public function unserialize($data) {
  249.         [
  250.             $this->id,
  251.             $this->firstname,
  252.             $this->lastname,
  253.             $this->username,
  254.             $this->password,
  255.             $this->state,
  256.             $this->is_admin,
  257.             $this->is_locked
  258.         ] = unserialize($data);
  259.     }
  260.     // ---------------------------------------------------------------------------------------------
  261.     // Deprecated
  262.     // ---------------------------------------------------------------------------------------------
  263.     public function getSalt() {
  264.         return '';
  265.     }
  266. }