classes/bfw/mvc/model/TTicket.php
changeset 1 56e0dbd5c243
parent 0 4869aea77e21
equal deleted inserted replaced
0:4869aea77e21 1:56e0dbd5c243
     1 <?php
     1 <?php
     2 
     2 
     3 namespace bfw\mvc\model {
     3 namespace bfw\mvc\model;
     4 
     4 
     5     /**
     5 use bfw\mvc\common\Model;
     6      * Class TTicket
     6 use Logger;
     7      *
     7 
     8      * @method int getUser_Id()
     8 /**
     9      * @method int getStatus_Id()
     9  * Class TTicket
    10      * @method string getSubject()
    10  *
    11      * @method string getMessage()
    11  * @method int getUser_Id()
    12      * @method bool getLocked()
    12  * @method int getStatus_Id()
    13      * @method timestamp getLast_Access()
    13  * @method string getSubject()
    14      *
    14  * @method string getMessage()
    15      * @method setStatus_Id($param)
    15  * @method bool getLocked()
    16      * @method setSubject($param)
    16  * @method timestamp getLast_Access()
    17      * @method setMessage($param)
    17  *
    18      * @method setLocked($param)
    18  * @method setStatus_Id($param)
    19      * @method setLast_Access($param)
    19  * @method setSubject($param)
    20      *
    20  * @method setMessage($param)
    21      */
    21  * @method setLocked($param)
    22     class TTicket extends Model {
    22  * @method setLast_Access($param)
    23         private static $logger = null;
    23  *
    24 
    24  */
    25         public function __construct() {
    25 class TTicket extends Model {
    26             parent::__construct('t_ticket');
    26     private static $logger = null;
    27 
    27 
    28             self::$logger = \Logger::getLogger('__CLASS__');
    28     public function __construct() {
    29 
    29         parent::__construct('t_ticket');
    30             $this->data = array(
    30 
    31                 'id' => NULL,
    31         self::$logger = Logger::getLogger('__CLASS__');
    32                 'user_id' => 1,
    32 
    33                 'status_id' => 1,
    33         $this->data = array(
    34                 'subject' => '',
    34             'id' => NULL,
    35                 'message' => '',
    35             'user_id' => 1,
    36                 'locked' => 0,
    36             'status_id' => 1,
    37                 'last_access' => 'now()',
    37             'subject' => '',
    38             );
    38             'message' => '',
    39         }
    39             'locked' => 0,
    40 
    40             'last_access' => 'now()',
    41         /**
    41         );
    42          * <b>Findet alle Tickets des angegebenen Nutzers</b>
    42     }
    43          *
    43 
    44          *
    44     /**
    45          * @param SERIAL $uid
    45      * <b>Findet alle Tickets des angegebenen Nutzers</b>
    46          * @return array|null
    46      *
    47          */
    47      *
    48         public function findAllTicketsByUserid($uid) {
    48      * @param SERIAL $uid
    49             return $this->findAllByField('user_id', $uid);
    49      * @return array|null
    50         }
    50      */
    51 
    51     public function findAllTicketsByUserid($uid) {
    52         /**
    52         return $this->findAllByField('user_id', $uid);
    53          * <b>Weisst frei gewordenen Tickets automatisiert zu.</b>
    53     }
    54          */
    54 
    55         public function reassignFreeTickets() {
    55     /**
    56             $tickets = $this->findAllByField('user_id', 1);
    56      * <b>Weisst frei gewordenen Tickets automatisiert zu.</b>
    57 
    57      */
    58             $tUser = new TUser();
    58     public function reassignFreeTickets() {
    59             foreach ($tickets as $ticket) {
    59         $tickets = $this->findAllByField('user_id', 1);
    60                 $freeSupporterId = $tUser->getFreeSupporterId();
    60 
    61 
    61         if (!is_object($tickets)) {
    62                 /**
    62             return;
    63                  * Niemals vergessen: Nur aktualisieren, wenn auch
    63         }
    64                  * aktualisiert werden muss.
    64 
    65                  *
    65         $tUser = new TUser();
    66                  */
    66         foreach ($tickets as $ticket) {
       
    67             $freeSupporterId = $tUser->getFreeSupporterId();
       
    68 
       
    69             /**
       
    70              * Niemals vergessen: Nur aktualisieren, wenn auch
       
    71              * aktualisiert werden muss.
       
    72              *
       
    73              */
       
    74             if ($freeSupporterId > 1) {
       
    75                 $ticket->setUser_Id($freeSupporterId);
       
    76                 if ($ticket->store()) {
       
    77                     self::$logger->info(sprintf("TICKET %d wurde neu zugewiesen.", $ticket->getId()));
       
    78                 }
       
    79             }
       
    80         }
       
    81     }
       
    82 
       
    83     public function lockTicket($ticket, $user) {
       
    84         if ($user->getGroup_id() == TGroup::SUPPORTER) {
       
    85             if ($ticket->getLocked() == false) {
       
    86                 $ticket->setLocked(1);
       
    87                 $ticket->setLast_Access(date('Y-m-d H:i:s'));
       
    88 
       
    89                 if ($ticket->store()) {
       
    90                     self::$logger->info(sprintf("TICKET %d wurde gesperrt", $ticket->getId()));
       
    91                     return true;
       
    92                 }
       
    93             }
       
    94         }
       
    95 
       
    96         return false;
       
    97     }
       
    98 
       
    99     /**
       
   100      * <b>Das Ticket wird automatisch entsperrt nach 2 Stunden</b>
       
   101      *
       
   102      * @return bool
       
   103      */
       
   104     public function unlockTickets() {
       
   105         $tickets = $this->findAll(false);
       
   106         $user = new TUser();
       
   107 
       
   108         foreach ($tickets as $ticket) {
       
   109             if ($ticket->getStatus_Id() == TStatus::GESCHLOSSEN) {
       
   110                 continue;
       
   111             }
       
   112 
       
   113             // Ticketalter
       
   114             $ticketAge = time() - strtotime($ticket->getLast_Access());
       
   115 
       
   116             // Die Bearbeitungszeit beträgt 2 Stunden pro Supporter
       
   117             $deadLine = 3600 * 2;
       
   118 
       
   119             self::$logger->info('Ticket-Alter: ' . $ticketAge);
       
   120             self::$logger->info('Deadline: ' . $deadLine);
       
   121 
       
   122             if ($ticketAge > $deadLine) {
       
   123                 self::$logger->info('Time is up: Daten werden geändert.');
       
   124                 $freeSupporterId = $user->getFreeSupporterId();
       
   125 
    67                 if ($freeSupporterId > 1) {
   126                 if ($freeSupporterId > 1) {
    68                     $ticket->setUser_Id($freeSupporterId);
   127                     $ticket->setUser_Id($freeSupporterId);
    69                     if ($ticket->store($ticket->getId(), $ticket)) {
   128                     $ticket->setLocked(0);
    70                         self::$logger->info(sprintf("TICKET %d wurde neu zugewiesen.", $ticket->getId()));
   129 
       
   130                     if (!$ticket->store()) {
       
   131                         self::$logger->info(sprintf('Fehler beim Schreiben: %s', print_r($ticket->getData(), true)));
    71                     }
   132                     }
       
   133                 } else {
       
   134                     // Es existieren keine Supporter
       
   135                     self::$logger->info(sprintf("%s(): Es existieren keine Supporter!", __METHOD__));
    72                 }
   136                 }
    73             }
   137             }
    74         }
   138         }
    75 
   139 
    76         public function lockTicket($ticket, $user) {
   140         return false;
    77             if ($user->getGroup_id() == TGroup::SUPPORTER) {
   141     }
    78                 if ($ticket->getLocked() == false) {
   142 
    79                     $ticket->setLocked(1);
   143     /**
    80                     $ticket->setLast_Access(date('Y-m-d H:i:s'));
   144      * <b>Überladene find Methode</b>
    81 
   145      *
    82                     if ($this->store($ticket->getId(), $ticket)) {
   146      * In früheren Versionen wurde hier das Ticket 'on the fly' modifiziert.
    83                         self::$logger->info(sprintf("TICKET %d wurde gesperrt", $ticket->getId()));
   147      * Da das aber nicht Sinn und Zweck einer 'find' Methode ist, wurde das
    84                         return true;
   148      * wieder entfernt und die Modifizierung erfolgt außerhalb...
    85                     }
   149      *
    86                 }
   150      * <b>Sinn und Zweck dieser Methode ist: 'Ticket-ID: nnn' ins Log zu schreiben...</b>
    87             }
   151      *
    88 
   152      * @param $id
       
   153      *
       
   154      * @return array|null
       
   155      */
       
   156     public function find($id) {
       
   157         self::$logger->info(sprintf("Ticket-ID: %d", $id));
       
   158 
       
   159         return parent::find($id);
       
   160     }
       
   161 
       
   162     /**
       
   163      * <b>Prüft, ob der übergebene Nutzer überhaupt die Berechtigung für das übergebene Ticket besitzt.</b>
       
   164      *
       
   165      * @param $ticket
       
   166      * @param $user
       
   167      * @return bool
       
   168      */
       
   169     public function hasPrivilege($ticket, $user, $write = true) {
       
   170 
       
   171         // NULL Tickets: Kein Zugriff
       
   172         if (!is_object($ticket)) {
       
   173             self::$logger->warn(sprintf("%s(): Ticket wurde nicht initialisiert!", __METHOD__));
    89             return false;
   174             return false;
    90         }
   175         }
    91 
   176 
    92         /**
   177         // NULL User: Kein Zugriff
    93          * <b>Das Ticket wird automatisch entsperrt nach 2 Stunden</b>
   178         if (!is_object($user)) {
    94          *
   179             self::$logger->warn(sprintf("%s(): Benutzer wurde nicht initialisiert!", __METHOD__));
    95          * @param $tTicket
       
    96          * @return bool
       
    97          */
       
    98         public function unlockTickets($tTicket) {
       
    99             $tickets = $tTicket->findAll(false);
       
   100             $user = new TUser();
       
   101 
       
   102             foreach ($tickets as $ticket) {
       
   103                 if ($ticket->getStatus_Id() == TStatus::GESCHLOSSEN) {
       
   104                     continue;
       
   105                 }
       
   106 
       
   107                 // Ticketalter
       
   108                 $ticketAge = time() - strtotime($ticket->getLast_Access());
       
   109 
       
   110                 // Die Bearbeitungszeit beträgt 2 Stunden pro Supporter
       
   111                 $deadLine = 3600 * 2;
       
   112 
       
   113                 self::$logger->info('Ticket-Alter: ' . $ticketAge);
       
   114                 self::$logger->info('Deadline: ' . $deadLine);
       
   115 
       
   116                 if ($ticketAge > $deadLine) {
       
   117                     self::$logger->info('Time is up: Daten werden geändert.');
       
   118                     $freeSupporterId = $user->getFreeSupporterId();
       
   119 
       
   120                     if ($freeSupporterId > 1) {
       
   121                         $ticket->setUser_Id($freeSupporterId);
       
   122                         $ticket->setLocked(0);
       
   123 
       
   124                         if ($this->store($ticket->getId(), $ticket)) {
       
   125                             continue;
       
   126                         }
       
   127                     } else {
       
   128                         // Es existieren keine Supporter
       
   129                         self::$logger->info(sprintf("%s(): Es existieren keine Supporter!", __METHOD__));
       
   130                     }
       
   131                 }
       
   132             }
       
   133 
       
   134             return false;
   180             return false;
   135         }
   181         }
   136 
   182 
   137         /**
   183         // ADMIN UND MANAGER: Zugriff per Default
   138          * <b>Überladene find Methode</b>
   184         switch ($user->getGroup_Id()) {
   139          *
   185             case TGroup::ADMIN:
   140          * In früheren Versionen wurde hier das Ticket 'on the fly' modifiziert.
   186             case TGroup::MANAGER:
   141          * Da das aber nicht Sinn und Zweck einer 'find' Methode ist, wurde das
   187                 return true;
   142          * wieder entfernt und die Modifizierung erfolgt außerhalb...
   188         }
   143          *
   189 
   144          * <b>Sinn und Zweck dieser Methode ist: 'Ticket-ID: nnn' ins Log zu schreiben...</b>
   190         if ($write == false) {
   145          *
   191             // System-Datensatz herausfiltern
   146          * @param $id
   192             if ($ticket->getId() > 1) {
   147          *
   193                 return true;
   148          * @return array|null
   194             }
   149          */
   195         }
   150         public function find($id) {
   196 
   151             self::$logger->info(sprintf("Ticket-ID: %d", $id));
   197         // Ticketbasierter Zugriff: Ticket-Owner == Angemeldeter Benutzer?
   152 
   198         return ($ticket->getUser_Id() == $user->getId());
   153             return parent::find($id);
   199     }
   154         }
   200 
   155 
       
   156         /**
       
   157          * <b>Prüft, ob der übergebene Nutzer überhaupt die Berechtigung für das übergebene Ticket besitzt.</b>
       
   158          *
       
   159          * @param $ticket
       
   160          * @param $user
       
   161          * @return bool
       
   162          */
       
   163         public function hasPrivilege($ticket, $user, $write = true) {
       
   164 
       
   165             // NULL Tickets: Kein Zugriff
       
   166             if (!is_object($ticket)) {
       
   167                 self::$logger->warn(sprintf("%s(): Ticket wurde nicht initialisiert!", __METHOD__));
       
   168                 return false;
       
   169             }
       
   170 
       
   171             // NULL User: Kein Zugriff
       
   172             if (!is_object($user)) {
       
   173                 self::$logger->warn(sprintf("%s(): Benutzer wurde nicht initialisiert!", __METHOD__));
       
   174                 return false;
       
   175             }
       
   176 
       
   177             // ADMIN UND MANAGER: Zugriff per Default
       
   178             switch ($user->getGroup_Id()) {
       
   179                 case TGroup::ADMIN:
       
   180                 case TGroup::MANAGER:
       
   181                     return true;
       
   182             }
       
   183 
       
   184             if ($write == false) {
       
   185                 // System-Datensatz herausfiltern
       
   186                 if ($ticket->getId() > 1) {
       
   187                     return true;
       
   188                 }
       
   189             }
       
   190 
       
   191             // Ticketbasierter Zugriff: Ticket-Owner == Angemeldeter Benutzer?
       
   192             return ($ticket->getUser_Id() == $user->getId());
       
   193         }
       
   194 
       
   195     }
       
   196 }
   201 }