· 10 years ago · Sep 15, 2016, 11:08 AM
1<html>
2 <head>
3 <title>Core\PushSender\ApnsPHP\Message\ApnsPHP_Message_Exception: Invalid device token 'APA91bGYMUq1ty8ILResa-MzgXO6AIihzgXk1KXGCEvV7X7R6btvETNQA2Mf1vTUxxO4h3bBLnY7c8Sm9pwGekc4hGXUXNSqM0_NTeMVTi3uZiydY3DisEOQcv9L4jNqEjkXnLRDgaUJ'</title>
4 <link href="//static.phalconphp.com/www/debug/2.0.0/jquery/jquery-ui.css" type="text/css" rel="stylesheet" />
5 <link href="//static.phalconphp.com/www/debug/2.0.0/themes/default/style.css" type="text/css" rel="stylesheet" />
6 </head>
7 <body>
8 <div class="version">Phalcon Framework
9 <a target="_new" href="//docs.phalconphp.com/en/2.0.9/">2.0.9</a>
10 </div>
11 <div align="center">
12 <div class="error-main">
13 <h1>Core\PushSender\ApnsPHP\Message\ApnsPHP_Message_Exception: Invalid device token 'APA91bGYMUq1ty8ILResa-MzgXO6AIihzgXk1KXGCEvV7X7R6btvETNQA2Mf1vTUxxO4h3bBLnY7c8Sm9pwGekc4hGXUXNSqM0_NTeMVTi3uZiydY3DisEOQcv9L4jNqEjkXnLRDgaUJ'</h1>
14 <span class="error-file">C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\PushSender\ApnsPHP\ApnsPHP_Message.php (78)</span>
15 </div>
16 <div class="error-info">
17 <div id="tabs">
18 <ul>
19 <li>
20 <a href="#error-tabs-1">Backtrace</a>
21 </li>
22 <li>
23 <a href="#error-tabs-2">Request</a>
24 </li>
25 <li>
26 <a href="#error-tabs-3">Server</a>
27 </li>
28 <li>
29 <a href="#error-tabs-4">Included Files</a>
30 </li>
31 <li>
32 <a href="#error-tabs-5">Memory</a>
33 </li>
34 </ul>
35 <div id="error-tabs-1">
36 <table cellspacing="0" align="center" width="100%">
37 <tr>
38 <td align="right" valign="top" class="error-number">#0</td>
39 <td>
40 <span class="error-class">Core\PushSender\ApnsPHP\ApnsPHP_Message</span>->
41 <span class="error-function">addRecipient</span>(
42 <span class="error-parameter">APA91bGYMUq1ty8ILResa-MzgXO6AIihzgXk1KXGCEvV7X7R6btvETNQA2Mf1vTUxxO4h3bBLnY7c8Sm9pwGekc4hGXUXNSqM0_NTeMVTi3uZiydY3DisEOQcv9L4jNqEjkXnLRDgaUJ</span>)
43 <br/>
44 <div class="error-file">C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\PushSender.php (136)</div>
45 <pre class="prettyprint highlight:1:136 linenums error-scroll"><?php
46namespace Core;
47
48use \Model\AndroidPush;
49use \Model\IOSPush;
50use Core\PushSender\ApnsPHP\ApnsPHP_Push;
51use Phalcon\Mvc\User\Plugin;
52use Phalcon\Tag;
53
54
55
56/**
57 * Description of PushSender
58 *
59 * @author Dylan Hoogeveen
60 * @version 1.0
61 */
62class PushSender extends Plugin {
63
64 const PRODUCTION = 0;
65 const SANDBOX = 1;
66 const GCM_URL = 'https://android.googleapis.com/gcm/send';
67
68 /**
69 * @var String
70 */
71 private $iosCertificate;
72
73 /**
74 * @var String
75 */
76 private $androidKey;
77
78 /**
79 * @var \Model\IOSPush[]
80 */
81 private $iOSPushes;
82
83 /**
84 * @var \Model\AndroidPush[]
85 */
86 private $androidPushes;
87
88 /**
89 * @var String
90 */
91 private $environment;
92
93 /**
94 * Constructor of this class.
95 * @param $environment, The environment, Defaults to sandbox.
96 */
97 public function __construct($environment = self::SANDBOX) {
98 // Assign the environment:
99 $this->environment = $environment;
100 // Assign the iOS certificate:
101 if($this->environment == self::SANDBOX) {
102 $this->iosCertificate = $this->config->push->iosCertificate;
103 } else {
104 $this->iosCertificate = $this->config->push->iosCertificate;
105 }
106 // Assign Android API key:
107 $this->androidKey = $this->config->push->androidKey;
108 }
109
110 /**
111 * Sends all pushed based on the database.
112 * Gets both ios and android pushes from database
113 */
114 public function sendPushes($cron = 0) {
115 // Find the pushes for iOS:
116 $this->iOSPushes = IOSPush::find(array(
117 'sent = 0 AND is_cron = :is_cron:', 'bind' => ['is_cron' => $cron]
118 ));
119 // Check if there are pushes for iOS:
120 if ($this->iOSPushes) {
121 // Make sure there is a valid certificate.
122 if($this->iosCertificate !== "" && $this->iosCertificate !== NULL) {
123 // Send the pushes:
124 $this->sendIOS();
125 }
126 else{
127 // Display error:
128 echo "Error: iOS certificates are invalid.";
129 exit;
130 }
131 }
132
133 // Find the pushes for Android:
134 $this->androidPushes = AndroidPush::find(array(
135 'sent = 0 AND is_cron = :is_cron:', 'bind' => ['is_cron' => $cron]
136 ));
137 // Check if there are pushes for Android:
138 if ($this->androidPushes) {
139 // Make sure we have a android API key:
140 if($this->androidKey !== "" && $this->androidKey !== NULL){
141 // Send them:
142 $this->sendAndroid();
143 }
144 else{
145 // Display error:
146 echo "Error: Not a valid Android API key is specified.";
147 exit;
148 }
149 }
150 }
151
152 /**
153 * Sends Push notification using the ApnsPHP library
154 */
155 private function sendIOS() {
156 # Enable APNS library
157 $push = new \Core\PushSender\ApnsPHP\ApnsPHP_Push($this->environment, $this->iosCertificate);
158
159 # Loop over all the pushes and create a message for it
160 foreach ($this->iOSPushes as $iOSPush) {
161
162 # Decode array string to array of push entries
163 $pushEntries = json_decode($iOSPush->push_entries);
164
165 if(count($pushEntries) < 1) {
166 continue;
167 }
168
169 $push->connect();
170
171 # Setup the message
172 $message = new \Core\PushSender\ApnsPHP\ApnsPHP_Message();
173 $message->setText($iOSPush->message);
174 $message->setSound($iOSPush->sound);
175 $message->setBadge(1);
176
177 # Replace spaces in string
178 foreach ($pushEntries as $pushEntry) {
179 $pushEntry = str_replace(' ', '', $pushEntry->device_token);
180 $message->addRecipient($pushEntry);
181 $push->add($message);
182 }
183
184 $iOSPush->sent = 1;
185 $iOSPush->save();
186
187 }
188
189 # Send the push bulk and disconnect
190 $push->send();
191 $push->disconnect();
192
193 # If any, show errors
194 $aErrorQueue = $push->getErrors();
195 if (!empty($aErrorQueue)) {
196 var_dump($aErrorQueue);
197 }
198 }
199
200 /**
201 * Sends android push notification though Google Cloud Messaging
202 */
203 private function sendAndroid() {
204
205 foreach ($this->androidPushes as $androidPush) {
206
207 # Decode array string to push entries
208 $pushEntries = json_decode($androidPush->push_entries);
209
210 if(count($pushEntries) < 1) {
211 continue;
212 }
213
214 $deviceTokens = array();
215
216
217 foreach ($pushEntries as $pushEntry) {
218 $deviceTokens[] = $pushEntry;
219 }
220
221 $fields = array(
222 'registration_ids' => $deviceTokens,
223 'data' => array("message" => $androidPush->data),
224 );
225
226 $headers = array(
227 'Authorization: key=' . $this->androidKey,
228 'Content-Type: application/json'
229 );
230
231 // Open connection
232 $ch = curl_init();
233
234 // Set the url, number of POST vars, POST data
235 curl_setopt($ch, CURLOPT_URL, self::GCM_URL);
236
237 curl_setopt($ch, CURLOPT_POST, true);
238 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
239 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
240
241 curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
242
243 // Execute post
244 $result = curl_exec($ch);
245
246 // Close connection
247 curl_close($ch);
248 $androidPush->sent = 1;
249 $androidPush->save();
250 }
251 }
252}
253</pre>
254 </td>
255 </tr>
256 <tr>
257 <td align="right" valign="top" class="error-number">#1</td>
258 <td>
259 <span class="error-class">Core\PushSender</span>->
260 <span class="error-function">sendIOS</span>()
261 <br/>
262 <div class="error-file">C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\PushSender.php (80)</div>
263 <pre class="prettyprint highlight:1:80 linenums error-scroll"><?php
264namespace Core;
265
266use \Model\AndroidPush;
267use \Model\IOSPush;
268use Core\PushSender\ApnsPHP\ApnsPHP_Push;
269use Phalcon\Mvc\User\Plugin;
270use Phalcon\Tag;
271
272
273
274/**
275 * Description of PushSender
276 *
277 * @author Dylan Hoogeveen
278 * @version 1.0
279 */
280class PushSender extends Plugin {
281
282 const PRODUCTION = 0;
283 const SANDBOX = 1;
284 const GCM_URL = 'https://android.googleapis.com/gcm/send';
285
286 /**
287 * @var String
288 */
289 private $iosCertificate;
290
291 /**
292 * @var String
293 */
294 private $androidKey;
295
296 /**
297 * @var \Model\IOSPush[]
298 */
299 private $iOSPushes;
300
301 /**
302 * @var \Model\AndroidPush[]
303 */
304 private $androidPushes;
305
306 /**
307 * @var String
308 */
309 private $environment;
310
311 /**
312 * Constructor of this class.
313 * @param $environment, The environment, Defaults to sandbox.
314 */
315 public function __construct($environment = self::SANDBOX) {
316 // Assign the environment:
317 $this->environment = $environment;
318 // Assign the iOS certificate:
319 if($this->environment == self::SANDBOX) {
320 $this->iosCertificate = $this->config->push->iosCertificate;
321 } else {
322 $this->iosCertificate = $this->config->push->iosCertificate;
323 }
324 // Assign Android API key:
325 $this->androidKey = $this->config->push->androidKey;
326 }
327
328 /**
329 * Sends all pushed based on the database.
330 * Gets both ios and android pushes from database
331 */
332 public function sendPushes($cron = 0) {
333 // Find the pushes for iOS:
334 $this->iOSPushes = IOSPush::find(array(
335 'sent = 0 AND is_cron = :is_cron:', 'bind' => ['is_cron' => $cron]
336 ));
337 // Check if there are pushes for iOS:
338 if ($this->iOSPushes) {
339 // Make sure there is a valid certificate.
340 if($this->iosCertificate !== "" && $this->iosCertificate !== NULL) {
341 // Send the pushes:
342 $this->sendIOS();
343 }
344 else{
345 // Display error:
346 echo "Error: iOS certificates are invalid.";
347 exit;
348 }
349 }
350
351 // Find the pushes for Android:
352 $this->androidPushes = AndroidPush::find(array(
353 'sent = 0 AND is_cron = :is_cron:', 'bind' => ['is_cron' => $cron]
354 ));
355 // Check if there are pushes for Android:
356 if ($this->androidPushes) {
357 // Make sure we have a android API key:
358 if($this->androidKey !== "" && $this->androidKey !== NULL){
359 // Send them:
360 $this->sendAndroid();
361 }
362 else{
363 // Display error:
364 echo "Error: Not a valid Android API key is specified.";
365 exit;
366 }
367 }
368 }
369
370 /**
371 * Sends Push notification using the ApnsPHP library
372 */
373 private function sendIOS() {
374 # Enable APNS library
375 $push = new \Core\PushSender\ApnsPHP\ApnsPHP_Push($this->environment, $this->iosCertificate);
376
377 # Loop over all the pushes and create a message for it
378 foreach ($this->iOSPushes as $iOSPush) {
379
380 # Decode array string to array of push entries
381 $pushEntries = json_decode($iOSPush->push_entries);
382
383 if(count($pushEntries) < 1) {
384 continue;
385 }
386
387 $push->connect();
388
389 # Setup the message
390 $message = new \Core\PushSender\ApnsPHP\ApnsPHP_Message();
391 $message->setText($iOSPush->message);
392 $message->setSound($iOSPush->sound);
393 $message->setBadge(1);
394
395 # Replace spaces in string
396 foreach ($pushEntries as $pushEntry) {
397 $pushEntry = str_replace(' ', '', $pushEntry->device_token);
398 $message->addRecipient($pushEntry);
399 $push->add($message);
400 }
401
402 $iOSPush->sent = 1;
403 $iOSPush->save();
404
405 }
406
407 # Send the push bulk and disconnect
408 $push->send();
409 $push->disconnect();
410
411 # If any, show errors
412 $aErrorQueue = $push->getErrors();
413 if (!empty($aErrorQueue)) {
414 var_dump($aErrorQueue);
415 }
416 }
417
418 /**
419 * Sends android push notification though Google Cloud Messaging
420 */
421 private function sendAndroid() {
422
423 foreach ($this->androidPushes as $androidPush) {
424
425 # Decode array string to push entries
426 $pushEntries = json_decode($androidPush->push_entries);
427
428 if(count($pushEntries) < 1) {
429 continue;
430 }
431
432 $deviceTokens = array();
433
434
435 foreach ($pushEntries as $pushEntry) {
436 $deviceTokens[] = $pushEntry;
437 }
438
439 $fields = array(
440 'registration_ids' => $deviceTokens,
441 'data' => array("message" => $androidPush->data),
442 );
443
444 $headers = array(
445 'Authorization: key=' . $this->androidKey,
446 'Content-Type: application/json'
447 );
448
449 // Open connection
450 $ch = curl_init();
451
452 // Set the url, number of POST vars, POST data
453 curl_setopt($ch, CURLOPT_URL, self::GCM_URL);
454
455 curl_setopt($ch, CURLOPT_POST, true);
456 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
457 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
458
459 curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
460
461 // Execute post
462 $result = curl_exec($ch);
463
464 // Close connection
465 curl_close($ch);
466 $androidPush->sent = 1;
467 $androidPush->save();
468 }
469 }
470}
471</pre>
472 </td>
473 </tr>
474 <tr>
475 <td align="right" valign="top" class="error-number">#2</td>
476 <td>
477 <span class="error-class">Core\PushSender</span>->
478 <span class="error-function">sendPushes</span>()
479 <br/>
480 <div class="error-file">C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\modules\ApiModule\controller\RieController.php (138)</div>
481 <pre class="prettyprint highlight:1:138 linenums error-scroll"><?php
482/**
483 * Created by PhpStorm.
484 * User: rasjaad
485 * Date: 20-Jul-16
486 * Time: 10:04
487 */
488
489namespace Api\Controller;
490
491
492use Core\Http\Response;
493use Facade\PushDevice;
494use Manager\Controller\ProjectController;
495use Model\BranchHasProject;
496use Model\Checklist;
497use Model\ChecklistAnswer;
498use Model\ChecklistQuestion;
499use Model\DeviceToken;
500use Model\User\EmployeeHasRights;
501use Model\Project;
502use Model\Rie;
503use Model\RieHasChecklist;
504use Model\User\Employee;
505use Phalcon\Mvc\Model\Transaction\Failed as TxFailed;
506use Phalcon\Mvc\Model\Transaction\Manager as TxManager;
507use \Facade\Push;
508
509class RieController extends BaseController
510{
511 const ARRAY_EMPTY = 0;
512
513 public function indexAction()
514 {
515 $branchId = $this->getJson('branch_id');
516 $projectId = $this->getJson("project_id");
517 $checklists = $this->getJson("checklists");
518
519 if (BranchHasProject::findFirst(array(
520 'project_id = :project_id:',
521 'bind' => array('project_id' => $projectId)
522 ))
523 ) {
524 $this->response->sendResponse(Response::STATUS_FAILED, "Failed to link project and branch. Project is already linked.");
525 }
526
527 $projectBranch = new BranchHasProject();
528 $projectBranch->branch_id = $branchId;
529 $projectBranch->project_id = $projectId;
530 if (!$projectBranch->save()) {
531 $this->response->sendResponse(Response::STATUS_FAILED, "Failed to link project and branch");
532 }
533
534 $project = Project::findFirst(array('id = :project_id: AND deleted = 0',
535 'bind' => array(
536 'project_id' => $projectId)
537 ));
538
539 if (!$project) {
540 $this->response->sendResponse(Response::STATUS_NOT_FOUND, "Project does not exist");
541 }
542 $rie = Rie::findFirst(array('project_id = :project_id: AND finished',
543 'bind' => array(
544 'project_id' => $projectId)
545 ));
546 if ($rie) {
547 $this->response->sendResponse(Response::STATUS_NOT_FOUND, "Rie already exists");
548 }
549 $existingChecklists = Checklist::find(array(
550 'bind' => array('ids' => $checklists)
551 ));
552 if (!$existingChecklists || count($checklists) > count($existingChecklists)) {
553 $this->response->sendResponse(Response::STATUS_NOT_FOUND, "Checklist does not exist");
554 }
555
556 $rie = new Rie();
557 $rie->assign($this->request->getJsonRawBody(true));
558 $rie->employee_id = $this->authEmployee->id;
559 if (!$rie->save()) {
560 $this->response->sendResponse(Response::STATUS_FAILED, "Failed to update Rie.".print_r($rie->getMessages(),true));
561 }
562
563 try {
564 // Create a transaction manage
565 $manager = new TxManager();
566 // Request a transaction
567 $transaction = $manager->get();
568 // Get the robots to be deleted
569 foreach ($checklists as $checklistId) {
570 $rieHasChecklist = new RieHasChecklist();
571 $rieHasChecklist->checklist_id = $checklistId;
572 $rieHasChecklist->rie_id = $rie->id;
573
574 if (!$rieHasChecklist->save()) {
575 $transaction->rollback();
576 $this->response->sendResponse(Response::STATUS_FAILED, "Failed to link checklist.");
577 }
578 }
579
580 $users = Employee::findFirst(array('user_id = :id:',
581 'bind' => array(
582 'id' => $this->authUser->id)
583 ));
584 $company = $users->company_id;
585
586 $query =
587 "SELECT d.* FROM \Model\User\EmployeeHasRights AS ehr ".
588 "JOIN \Model\User\Employee AS e ON ehr.employee_id = e.id AND ehr.access_rights = :access_rights: AND e.company_id = :company_id: ".
589 "JOIN \Model\DeviceToken AS d ON e.user_id = d.user_id ";
590
591 $parameters = array(
592 'company_id' => $company,
593 'access_rights' => EmployeeHasRights::RIGHTS_RIE
594 );
595
596 $devicetokens = $this->modelsManager->executeQuery($query, $parameters);
597
598 $pushFacade = new PushDevice();
599 // Make push object for Android and check if it failed or success
600 if (!$pushFacade->android("RIE toegevoegd!", "Er is een nieuwe RIE toegevoegd!", $devicetokens)) {
601 // Failed:
602 $this->response->sendResponse(Response::STATUS_ERROR, $pushFacade->getErrors());
603 }
604
605 // Same as android (almost) TODO: ALSO handle error
606 if (!$pushFacade->iOS("Er is een nieuwe RIE toegevoegd!", $devicetokens)) {
607 // Failed:
608 $this->response->sendResponse(Response::STATUS_ERROR, $pushFacade->getErrors());
609 }
610
611
612 // Everything's gone fine, let's commit the transaction
613 $transaction->commit();
614 // All success, create the PushSender, with environment:
615 $environment = ENVIRONMENT == 'production' ? \Core\PushSender::PRODUCTION : \Core\PushSender::SANDBOX;
616 $pushSender = new \Core\PushSender($environment);
617 // Send cron pushes:
618 $pushSender->sendPushes();
619
620 $this->response->sendResponse(Response::STATUS_OK, $rie->id);
621
622 } catch (TxFailed $e) {
623 $this->response->sendResponse(Response::STATUS_ERROR, $e->getMessage());
624 }
625 $branchProjectExists = BranchHasProject::findFirst(array('id = :project_id:',
626 'bind' => array(
627 'project_id' => $projectId)
628 ));
629 if ($branchProjectExists) {
630 $this->response->sendResponse(Response::STATUS_FAILED, "Branch already exists for this project");
631 }
632 $branchHasProject = new BranchHasProject();
633 $branchHasProject->project_id = $projectId;
634 $branchHasProject->branch_id = $branchId;
635 if (!$branchHasProject->save()) {
636 $this->response->sendResponse(Response::STATUS_FAILED, "Failed to save branch.");
637 }
638
639 }
640
641
642
643
644 public function saveAnswersAction()
645 {
646 $answers = $this->getJson('answers');
647 foreach ($answers as $answer) {
648 $question = ChecklistQuestion::findFirst(array('id = :question_id:',
649 'bind' => array(
650 'question_id' => $answer['checklist_question_id'])
651 ));
652 if (!$question) {
653 $this->response->sendResponse(Response::STATUS_FAILED, "Question not found no answers have been saved.");
654 }
655 }
656
657 try {
658 $rieId = null;
659 // Create a transaction manager
660 $manager = new TxManager();
661 // Request a transaction
662 $transaction = $manager->get();
663 // Get the robots to be deleted
664 foreach ($answers as $answer) {
665 $checklistAnswer = new ChecklistAnswer();
666 $checklistAnswer->setTransaction($transaction);
667 $checklistAnswer->assign($answer);
668 $checklistAnswer->rie_id = $answer['rie_id'];
669 $existingAnswers = ChecklistAnswer::findFirst(array(
670 'checklist_question_id = :question_id:
671 AND rie_id = :rie_id:',
672 'bind' => array(
673 'question_id' => $answer['checklist_question_id'],
674 'rie_id' => $answer['rie_id']
675 )));
676 if ($existingAnswers) {
677 $this->response->sendResponse(Response::STATUS_FAILED, "question has already been answered. No answers have been saved");
678 }
679 if (!$checklistAnswer->save()) {
680 $transaction->rollback();
681 $this->response->sendResponse(Response::STATUS_FAILED, "Failed to save answers.");
682 }
683 if ($rieId != null && $answer['rie_id'] != $rieId) {
684 $transaction->rollback('Different rie_id\'s given');
685 }
686 $rieId = $answer['rie_id'];
687 }
688 $rieHasChecklist = RieHasChecklist::find(array('rie_id = :rie_id:',
689 'bind' => array(
690 'rie_id' => $rieId)
691 ));
692 foreach ($rieHasChecklist as $checklist) {
693 $checklist->finished = 1;
694 if (!$checklist->save()) {
695 $this->response->sendResponse(Response::STATUS_FAILED, "Failed to update rie status, no answers have been saved.");
696 }
697 }
698
699 $rie = Rie::findFirst(array(
700 'id = :id:',
701 'bind' => array('id' => $rieId)
702 ));
703 $rie->setTransaction($transaction);
704 $rie->finished = true;
705 if (!$rie->save()) {
706 $transaction->rollback('Could not set rie to finished');
707 }
708
709 // Everything's gone fine, let's commit the transaction
710 $transaction->commit();
711
712 $this->response->sendResponse(Response::STATUS_OK);
713
714 } catch (TxFailed $e) {
715 $this->response->sendResponse(Response::STATUS_ERROR, $e->getMessage());
716 }
717
718
719 }
720
721 public function questionsAction()
722 {
723
724 if (!$this->hasRights(Rie::RIGHTS)) {
725 $this->response->sendResponse(Response::STATUS_UNAUTHORIZED, "You are not authorized.");
726 }
727 $rieId = $this->getJson('rie_id');
728
729 $checklists = RieHasChecklist::find(array('rie_id = :rie_id:',
730 'bind' => array(
731 'rie_id' => $rieId)
732 ));
733
734 if (!$checklists) {
735 $this->response->sendResponse(Response::STATUS_NOT_FOUND, "No checklists found");
736 }
737
738 $questions = array();
739 foreach ($checklists as $checklist) {
740 if ($checklist->finished == true) {
741 $this->response->sendResponse(Response::STATUS_FORBIDDEN, "Checklist has already been finished.");
742 }
743 $questions = array_merge($questions, $checklist->checklist->checklistQuestion->toArray());
744 }
745
746 if (count($questions) == self::ARRAY_EMPTY) {
747 $this->response->sendResponse(Response::STATUS_NOT_FOUND, "No questions found");
748 }
749 $this->response->sendResponse(Response::STATUS_OK, $questions);
750 }
751}</pre>
752 </td>
753 </tr>
754 <tr>
755 <td align="right" valign="top" class="error-number">#3</td>
756 <td>
757 <span class="error-class">Api\Controller\RieController</span>->
758 <span class="error-function">indexAction</span>()
759 </td>
760 </tr>
761 <tr>
762 <td align="right" valign="top" class="error-number">#4</td>
763 <td>
764 <span class="error-class">
765 <a target="_new" href="//api.phalconphp.com/class/Phalcon/Dispatcher.html">Phalcon\Dispatcher</a>
766 </span>->
767 <span class="error-function">dispatch</span>()
768 </td>
769 </tr>
770 <tr>
771 <td align="right" valign="top" class="error-number">#5</td>
772 <td>
773 <span class="error-class">
774 <a target="_new" href="//api.phalconphp.com/class/Phalcon/Mvc/Application.html">Phalcon\Mvc\Application</a>
775 </span>->
776 <span class="error-function">handle</span>()
777 <br/>
778 <div class="error-file">C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\bootstrap.php (203)</div>
779 <pre class="prettyprint highlight:1:203 linenums error-scroll"><?php
780use Phalcon\DI\FactoryDefault;
781use Phalcon\Mvc\Router;
782use Phalcon\Mvc\Url as UrlResolver;
783use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter;
784use Phalcon\Mvc\View\Engine\Volt as VoltEngine;
785use Phalcon\Mvc\Model\Metadata\Memory as MetaDataAdapter;
786/**
787 * Description of bootstrap
788 *
789 * @author Webvizitky, Softdream <info@webvizitky.cz>,<info@softdream.net>
790 * @copyright (c) 2014 - 2015, Miranthis a.s.
791 */
792
793try {
794
795 $configAddition = (!empty(ENVIRONMENT) ? '.' . ENVIRONMENT : '');
796 $config = new \Phalcon\Config\Adapter\Json("../app/config/config" . $configAddition . ".json");
797
798$loader = new \Phalcon\Loader();
799/**
800 * We're a registering a set of directories taken from the configuration file
801 */
802$loader->registerDirs(
803 array(
804 $config->application->libraryDir,
805 $config->application->pluginsDir
806 )
807)->registerNamespaces(['Core' => __DIR__.'/library/Core/'])->register();
808
809
810
811
812/**
813 * The FactoryDefault Dependency Injector automatically register the right services providing a full stack framework
814 */
815$di = new FactoryDefault();
816
817$di->set('config', $config);
818$di->set('assets',new \Assets(),true);
819
820$di->set('request',function(){
821 return new Core\Http\Request();
822});
823
824$di->set('formsManager',function(){
825 return new Core\Form\Manager();
826},true);
827
828$di->set('response',function(){
829 return new Core\Http\Response();
830});
831/**
832 The URL component is used to generate all kind of urls in the application
833 */
834$di->set('url', function () use ($config) {
835 $url = new UrlResolver();
836 $url->setBaseUri($config->application->baseUri);
837
838 return $url;
839}, true);
840
841$di->set('cache',\Core\Cache::factory('data', 'memcache', $config->memcache->toArray()), true);
842
843$di->set('templateEngine', function($view, $di) use($config) {
844 $engine = new VoltEngine($view, $di);
845 $engine->setOptions(
846 array(
847 'compiledPath' => $config->application->templateEngineCachePath
848 )
849 );
850
851 $compiler = $engine->getCompiler();
852
853 $compiler->addFunction('range', function($resolvedArgs, $exprArgs) {
854 $ret = '';
855
856 $start = 0;
857 $end = intval($exprArgs[0]['expr']['value']);
858
859 if(count($exprArgs) > 1) {
860 $start = $end;
861 $end = intval($exprArgs[1]['expr']['value']);
862 }
863
864 for($i = $start; $i < $end; $i++) {
865 if($i > $start) {
866 $ret .= ',';
867 }
868 $ret .= $i;
869 }
870
871 return '[' . $ret . ']';
872 });
873
874 //register getImage snippet to template
875 $compiler->addFunction('getImage',function($resolvedArgs,$exprArgs) use($compiler){
876 $path = isset($exprArgs[0]['expr']) ? $compiler->expression($exprArgs[0]['expr']) : null;
877 $base64 = isset($exprArgs[1]['expr']) ? $compiler->expression($exprArgs[1]['expr']) : false;
878 $w = isset($exprArgs[2]['expr']) ? $compiler->expression($exprArgs[2]['expr']) : null;
879 $h = isset($exprArgs[3]['expr']) ? $compiler->expression($exprArgs[3]['expr']) : null;
880 $default = '/images/no-image.png';
881
882 return "$path";
883 if(!$path || $path == ''){
884 return "\"$default\"";
885 }
886
887 return "\Core\File\Adapter\Image::getImage(".$path.",".$base64.",".$w.",".$h.")";
888 });
889
890 return $engine;
891}, true);
892
893
894/**
895 * Database connection is created based in the parameters defined in the configuration file
896 */
897$di->set('db', function () use ($config) {
898 $config = array(
899 'host' => $config->database->host,
900 'username' => $config->database->username,
901 'password' => $config->database->password,
902 'dbname' => $config->database->dbname,
903 'charset' => $config->database->charset
904 );
905 return new DbAdapter($config);
906},true);
907
908 $di->set('modelsManager', function() {
909 return new Phalcon\Mvc\Model\Manager();
910 });
911
912/**
913 * If the configuration specify the use of metadata adapter use it or use memory otherwise
914 */
915$di->set('modelsMetadata', function () {
916 return new MetaDataAdapter();
917});
918
919/**
920 * Start the session the first time some component request the session service
921 */
922$di->set('session', function () use ($config) {
923 $session = new \Phalcon\Session\Adapter\Memcache((array) $config->memcache );
924 $session->start();
925
926 return $session;
927}, true);
928
929$di->set('cookies', function () {
930 $cookies = new Phalcon\Http\Response\Cookies();
931 $cookies->useEncryption(false);
932 return $cookies;
933}, true);
934
935
936$di->set('flash', function(){
937 $flash = new \Core\Flash\Session(array(
938 'error' => 'alert alert-danger alert-dismissible alert-fixed',
939 'success' => 'alert alert-success alert-dismissible alert-fixed',
940 'notice' => 'alert alert-info alert-dismissible alert-fixed',
941 'warning' => 'alert alert-warning alert-dismissible alert-fixed'
942 ));
943
944 return $flash;
945},true);
946
947$di->set('cacheManager', function()use($config){
948 return new \Core\Cache\Manager($config);
949},true);
950
951
952$di->set('lang', function(){
953 $lang = new Lang(array(
954 'cache' => null,
955 'defaultLang' => 'cz'
956 ));
957
958 return $lang;
959},true);
960
961
962$application = new \Phalcon\Mvc\Application($di);
963$helper = new \Helper\Application($application);
964//register routers and modules
965$helper->registerModules();
966$eventManager = new \Phalcon\Events\Manager();
967
968//plugin loader
969$pluginLoader = new \Plugin\Loader($application, $di, $config);
970$pluginLoader->setPluginDirectory('../app/library/Plugin/');
971$eventManager->attach('application', $pluginLoader);
972
973//autoroute plugin
974$autoRoutePlugin = new \Plugin\AutoRoute($eventManager);
975$eventManager->attach('application', $autoRoutePlugin);
976$eventManager->attach("dispatch",$autoRoutePlugin);
977
978
979$application->setEventsManager($eventManager);
980
981echo $application->handle()->getContent();
982
983} catch (\Exception $e) {
984 throw $e;
985}
986
987
988
989</pre>
990 </td>
991 </tr>
992 <tr>
993 <td align="right" valign="top" class="error-number">#6</td>
994 <td>
995 <span class="error-function">require_once</span>(
996 <span class="error-parameter">C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\bootstrap.php</span>)
997 <br/>
998 <div class="error-file">C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\public\index.php (30)</div>
999 <pre class="prettyprint highlight:1:30 linenums error-scroll"><?php
1000$allowedIp = array(
1001 '212.64.22.129'
1002);
1003ini_set("display_errors",1);
1004//
1005error_reporting(E_ALL);
1006$debug = new \Phalcon\Debug();
1007$debug->listen();
1008$ip = $_SERVER['REMOTE_ADDR'];
1009if(
1010 strpos($_SERVER['HTTP_HOST'],'loc.') !== false ||
1011 strpos($_SERVER['HTTP_HOST'],'development.') !== false ||
1012 strpos($_SERVER['HTTP_HOST'],'localhost') !== false)
1013{
1014 ini_set("display_errors",1);
1015 //
1016 error_reporting(E_ALL);
1017 $debug = new \Phalcon\Debug();
1018 $debug->listen();
1019 // Define development environment:
1020 define('ENVIRONMENT', '');
1021}
1022else {
1023 ini_set("display_errors",0);
1024 // Define production environment:
1025 define('ENVIRONMENT', 'production');
1026}
1027
1028require_once '../app/bootstrap.php';
1029require "../vendor/autoload.php";</pre>
1030 </td>
1031 </tr>
1032 </table>
1033 </div>
1034 <div id="error-tabs-2">
1035 <table cellspacing="0" align="center" class="superglobal-detail">
1036 <tr>
1037 <th>Key</th>
1038 <th>Value</th>
1039 </tr>
1040 <tr>
1041 <td class="key">_url</td>
1042 <td>/api/rie/</td>
1043 </tr>
1044 <tr>
1045 <td class="key">auth_token</td>
1046 <td>ca203d4b87ewrwer42563132gqe</td>
1047 </tr>
1048 <tr>
1049 <td class="key">PHPSESSID</td>
1050 <td>qknph5r6n7rr8aigjte9242j66</td>
1051 </tr>
1052 </table>
1053 </div>
1054 <div id="error-tabs-3">
1055 <table cellspacing="0" align="center" class="superglobal-detail">
1056 <tr>
1057 <th>Key</th>
1058 <th>Value</th>
1059 </tr>
1060 <tr>
1061 <td class="key">REDIRECT_UNIQUE_ID</td>
1062 <td>V9qBOwoAAEAAA1HIE3EAAAA6</td>
1063 </tr>
1064 <tr>
1065 <td class="key">REDIRECT_STATUS</td>
1066 <td>200</td>
1067 </tr>
1068 <tr>
1069 <td class="key">UNIQUE_ID</td>
1070 <td>V9qBOwoAAEAAA1HIE3EAAAA6</td>
1071 </tr>
1072 <tr>
1073 <td class="key">HTTP_HOST</td>
1074 <td>localhost:8080</td>
1075 </tr>
1076 <tr>
1077 <td class="key">HTTP_CONNECTION</td>
1078 <td>keep-alive</td>
1079 </tr>
1080 <tr>
1081 <td class="key">CONTENT_LENGTH</td>
1082 <td>82</td>
1083 </tr>
1084 <tr>
1085 <td class="key">HTTP_CACHE_CONTROL</td>
1086 <td>no-cache</td>
1087 </tr>
1088 <tr>
1089 <td class="key">HTTP_ORIGIN</td>
1090 <td>chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop</td>
1091 </tr>
1092 <tr>
1093 <td class="key">CONTENT_TYPE</td>
1094 <td>application/json</td>
1095 </tr>
1096 <tr>
1097 <td class="key">HTTP_USER_AGENT</td>
1098 <td>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36</td>
1099 </tr>
1100 <tr>
1101 <td class="key">HTTP_POSTMAN_TOKEN</td>
1102 <td>52950358-00e4-63fb-7f33-fad02add1340</td>
1103 </tr>
1104 <tr>
1105 <td class="key">HTTP_ACCEPT</td>
1106 <td>*/*</td>
1107 </tr>
1108 <tr>
1109 <td class="key">HTTP_ACCEPT_ENCODING</td>
1110 <td>gzip, deflate</td>
1111 </tr>
1112 <tr>
1113 <td class="key">HTTP_ACCEPT_LANGUAGE</td>
1114 <td>nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4</td>
1115 </tr>
1116 <tr>
1117 <td class="key">HTTP_COOKIE</td>
1118 <td>PHPSESSID=qknph5r6n7rr8aigjte9242j66</td>
1119 </tr>
1120 <tr>
1121 <td class="key">PATH</td>
1122 <td>C:\Program Files (x86)\Razer Chroma SDK\bin;C:\Program Files\Razer Chroma SDK\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Skype\Phone\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Brackets\command;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Users\Jordin\AppData\Local\Microsoft\WindowsApps;</td>
1123 </tr>
1124 <tr>
1125 <td class="key">SystemRoot</td>
1126 <td>C:\WINDOWS</td>
1127 </tr>
1128 <tr>
1129 <td class="key">COMSPEC</td>
1130 <td>C:\WINDOWS\system32\cmd.exe</td>
1131 </tr>
1132 <tr>
1133 <td class="key">PATHEXT</td>
1134 <td>.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC</td>
1135 </tr>
1136 <tr>
1137 <td class="key">WINDIR</td>
1138 <td>C:\WINDOWS</td>
1139 </tr>
1140 <tr>
1141 <td class="key">SERVER_SIGNATURE</td>
1142 <td></td>
1143 </tr>
1144 <tr>
1145 <td class="key">SERVER_SOFTWARE</td>
1146 <td>Apache/2.2.27 (Win32) DAV/2 mod_ssl/2.2.27 OpenSSL/1.0.1g mod_fcgid/2.3.9 mod_wsgi/3.4 Python/2.7.6 PHP/5.6.13 mod_perl/2.0.8 Perl/v5.16.3</td>
1147 </tr>
1148 <tr>
1149 <td class="key">SERVER_NAME</td>
1150 <td>localhost</td>
1151 </tr>
1152 <tr>
1153 <td class="key">SERVER_ADDR</td>
1154 <td>127.0.0.1</td>
1155 </tr>
1156 <tr>
1157 <td class="key">SERVER_PORT</td>
1158 <td>8080</td>
1159 </tr>
1160 <tr>
1161 <td class="key">REMOTE_ADDR</td>
1162 <td>127.0.0.1</td>
1163 </tr>
1164 <tr>
1165 <td class="key">DOCUMENT_ROOT</td>
1166 <td>C:/Users/Jordin/Google Drive/DTT/GIT/web_ggm/public</td>
1167 </tr>
1168 <tr>
1169 <td class="key">SERVER_ADMIN</td>
1170 <td>testemail@test.com</td>
1171 </tr>
1172 <tr>
1173 <td class="key">SCRIPT_FILENAME</td>
1174 <td>C:/Users/Jordin/Google Drive/DTT/GIT/web_ggm/public/index.php</td>
1175 </tr>
1176 <tr>
1177 <td class="key">REMOTE_PORT</td>
1178 <td>23264</td>
1179 </tr>
1180 <tr>
1181 <td class="key">REDIRECT_QUERY_STRING</td>
1182 <td>_url=/api/rie/&auth_token=ca203d4b87ewrwer42563132gqe</td>
1183 </tr>
1184 <tr>
1185 <td class="key">REDIRECT_URL</td>
1186 <td>/api/rie/</td>
1187 </tr>
1188 <tr>
1189 <td class="key">GATEWAY_INTERFACE</td>
1190 <td>CGI/1.1</td>
1191 </tr>
1192 <tr>
1193 <td class="key">SERVER_PROTOCOL</td>
1194 <td>HTTP/1.1</td>
1195 </tr>
1196 <tr>
1197 <td class="key">REQUEST_METHOD</td>
1198 <td>POST</td>
1199 </tr>
1200 <tr>
1201 <td class="key">QUERY_STRING</td>
1202 <td>_url=/api/rie/&auth_token=ca203d4b87ewrwer42563132gqe</td>
1203 </tr>
1204 <tr>
1205 <td class="key">REQUEST_URI</td>
1206 <td>/api/rie/?auth_token=ca203d4b87ewrwer42563132gqe</td>
1207 </tr>
1208 <tr>
1209 <td class="key">SCRIPT_NAME</td>
1210 <td>/index.php</td>
1211 </tr>
1212 <tr>
1213 <td class="key">PHP_SELF</td>
1214 <td>/index.php</td>
1215 </tr>
1216 <tr>
1217 <td class="key">REQUEST_TIME_FLOAT</td>
1218 <td>1473937723.164</td>
1219 </tr>
1220 <tr>
1221 <td class="key">REQUEST_TIME</td>
1222 <td>1473937723</td>
1223 </tr>
1224 </table>
1225 </div>
1226 <div id="error-tabs-4">
1227 <table cellspacing="0" align="center" class="superglobal-detail">
1228 <tr>
1229 <th>#</th>
1230 <th>Path</th>
1231 </tr>
1232 <tr>
1233 <td>0
1234 </th>
1235 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\public\index.php</td>
1236 </tr>
1237 <tr>
1238 <td>1
1239 </th>
1240 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\bootstrap.php</td>
1241 </tr>
1242 <tr>
1243 <td>2
1244 </th>
1245 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Assets.php</td>
1246 </tr>
1247 <tr>
1248 <td>3
1249 </th>
1250 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\Cache.php</td>
1251 </tr>
1252 <tr>
1253 <td>4
1254 </th>
1255 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Helper\Application.php</td>
1256 </tr>
1257 <tr>
1258 <td>5
1259 </th>
1260 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\Directory\Manager.php</td>
1261 </tr>
1262 <tr>
1263 <td>6
1264 </th>
1265 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\Directory\Reader.php</td>
1266 </tr>
1267 <tr>
1268 <td>7
1269 </th>
1270 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\String.php</td>
1271 </tr>
1272 <tr>
1273 <td>8
1274 </th>
1275 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\Observer.php</td>
1276 </tr>
1277 <tr>
1278 <td>9
1279 </th>
1280 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\Observer\Server.php</td>
1281 </tr>
1282 <tr>
1283 <td>10
1284 </th>
1285 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Plugin\Loader.php</td>
1286 </tr>
1287 <tr>
1288 <td>11
1289 </th>
1290 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Plugin\AutoRoute.php</td>
1291 </tr>
1292 <tr>
1293 <td>12
1294 </th>
1295 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\Http\Request.php</td>
1296 </tr>
1297 <tr>
1298 <td>13
1299 </th>
1300 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\Http\Url\Map.php</td>
1301 </tr>
1302 <tr>
1303 <td>14
1304 </th>
1305 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\modules\ApiModule\controller\RieController.php</td>
1306 </tr>
1307 <tr>
1308 <td>15
1309 </th>
1310 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\modules\ApiModule\controller\BaseController.php</td>
1311 </tr>
1312 <tr>
1313 <td>16
1314 </th>
1315 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\ControllerBase.php</td>
1316 </tr>
1317 <tr>
1318 <td>17
1319 </th>
1320 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\modules\ApiModule\Module.php</td>
1321 </tr>
1322 <tr>
1323 <td>18
1324 </th>
1325 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\BaseModule.php</td>
1326 </tr>
1327 <tr>
1328 <td>19
1329 </th>
1330 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\Auth.php</td>
1331 </tr>
1332 <tr>
1333 <td>20
1334 </th>
1335 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\Http\Response.php</td>
1336 </tr>
1337 <tr>
1338 <td>21
1339 </th>
1340 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Model\User\Employee.php</td>
1341 </tr>
1342 <tr>
1343 <td>22
1344 </th>
1345 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\Model.php</td>
1346 </tr>
1347 <tr>
1348 <td>23
1349 </th>
1350 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Model\BranchHasProject.php</td>
1351 </tr>
1352 <tr>
1353 <td>24
1354 </th>
1355 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Model\Project.php</td>
1356 </tr>
1357 <tr>
1358 <td>25
1359 </th>
1360 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Model\Rie.php</td>
1361 </tr>
1362 <tr>
1363 <td>26
1364 </th>
1365 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Model\Checklist.php</td>
1366 </tr>
1367 <tr>
1368 <td>27
1369 </th>
1370 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Model\User\EmployeeHasRights.php</td>
1371 </tr>
1372 <tr>
1373 <td>28
1374 </th>
1375 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Model\DeviceToken.php</td>
1376 </tr>
1377 <tr>
1378 <td>29
1379 </th>
1380 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Facade\PushDevice.php</td>
1381 </tr>
1382 <tr>
1383 <td>30
1384 </th>
1385 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Model\AndroidPush.php</td>
1386 </tr>
1387 <tr>
1388 <td>31
1389 </th>
1390 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Model\IOSPush.php</td>
1391 </tr>
1392 <tr>
1393 <td>32
1394 </th>
1395 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\PushSender.php</td>
1396 </tr>
1397 <tr>
1398 <td>33
1399 </th>
1400 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\PushSender\ApnsPHP\ApnsPHP_Push.php</td>
1401 </tr>
1402 <tr>
1403 <td>34
1404 </th>
1405 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\PushSender\ApnsPHP\ApnsPHP_Abstract.php</td>
1406 </tr>
1407 <tr>
1408 <td>35
1409 </th>
1410 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\PushSender\ApnsPHP\Log\ApnsPHP_Log_Embedded.php</td>
1411 </tr>
1412 <tr>
1413 <td>36
1414 </th>
1415 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\PushSender\ApnsPHP\Log\ApnsPHP_Log_Interface.php</td>
1416 </tr>
1417 <tr>
1418 <td>37
1419 </th>
1420 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\PushSender\ApnsPHP\ApnsPHP_Message.php</td>
1421 </tr>
1422 <tr>
1423 <td>38
1424 </th>
1425 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\PushSender\ApnsPHP\Message\ApnsPHP_Message_Exception.php</td>
1426 </tr>
1427 <tr>
1428 <td>39
1429 </th>
1430 <td>C:\Users\Jordin\Google Drive\DTT\GIT\web_ggm\app\library\Core\PushSender\ApnsPHP\ApnsPHP_Exception.php</td>
1431 </tr>
1432 </table>
1433 </div>
1434 <div id="error-tabs-5">
1435 <table cellspacing="0" align="center" class="superglobal-detail">
1436 <tr>
1437 <th colspan="2">Memory</th>
1438 </tr>
1439 <tr>
1440 <td>Usage</td>
1441 <td>1572864</td>
1442 </tr>
1443 </table>
1444 </div>
1445 </div>
1446 <script type="text/javascript" src="//static.phalconphp.com/www/debug/2.0.0/jquery/jquery.js"></script>
1447 <script type="text/javascript" src="//static.phalconphp.com/www/debug/2.0.0/jquery/jquery-ui.js"></script>
1448 <script type="text/javascript" src="//static.phalconphp.com/www/debug/2.0.0/jquery/jquery.scrollTo.js"></script>
1449 <script type="text/javascript" src="//static.phalconphp.com/www/debug/2.0.0/prettify/prettify.js"></script>
1450 <script type="text/javascript" src="//static.phalconphp.com/www/debug/2.0.0/pretty.js"></script>
1451 </div>
1452 </body>
1453 </html>