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 } |