Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4696 | Rev 5050 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
4113 efrain 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
use LeadersLinked\Mapper\UserMapper;
4131 efrain 14
use LeadersLinked\Mapper\ChatUserMapper;
15
use LeadersLinked\Mapper\ChatGroupMapper;
16
use LeadersLinked\Mapper\ChatGroupUserMapper;
4141 efrain 17
use LeadersLinked\Mapper\CalendarEventMapper;
18
use LeadersLinked\Mapper\ZoomMeetingMapper;
19
use LeadersLinked\Model\CalendarEvent;
20
use LeadersLinked\Library\Functions;
4656 efrain 21
use LeadersLinked\Mapper\PerformanceEvaluationTestMapper;
4300 efrain 22
use LeadersLinked\Mapper\PerformanceEvaluationFormMapper;
4656 efrain 23
use LeadersLinked\Model\PerformanceEvaluationTest;
4300 efrain 24
use LeadersLinked\Mapper\JobDescriptionMapper;
25
use LeadersLinked\Mapper\CompanyUserMapper;
26
use LeadersLinked\Model\CompanyUser;
4398 efrain 27
use LeadersLinked\Mapper\CompanyMapper;
4113 efrain 28
 
4131 efrain 29
 
4113 efrain 30
class CalendarController extends AbstractActionController
31
{
32
    /**
33
     *
34
     * @var AdapterInterface
35
     */
36
    private $adapter;
37
 
38
 
39
    /**
40
     *
41
     * @var AbstractAdapter
42
     */
43
    private $cache;
44
 
45
    /**
46
     *
47
     * @var  LoggerInterface
48
     */
49
    private $logger;
50
 
51
 
52
    /**
53
     *
54
     * @var array
55
     */
56
    private $config;
57
 
58
    /**
59
     *
60
     * @param AdapterInterface $adapter
61
     * @param AbstractAdapter $cache
62
     * @param LoggerInterface $logger
63
     * @param array $config
64
     */
65
    public function __construct($adapter, $cache, $logger,  $config)
66
    {
67
        $this->adapter      = $adapter;
68
        $this->cache        = $cache;
69
        $this->logger       = $logger;
70
        $this->config       = $config;
71
    }
72
 
73
 
74
 
75
    public function indexAction()
76
    {
4131 efrain 77
        $currentUserPlugin = $this->plugin('currentUserPlugin');
78
        $currentUser = $currentUserPlugin->getUser();
79
 
4113 efrain 80
 
81
 
82
        $this->layout()->setTemplate('layout/layout.phtml');
83
        $viewModel = new ViewModel();
84
        $viewModel->setTemplate('leaders-linked/calendar/index.phtml');
4131 efrain 85
 
4113 efrain 86
        return $viewModel;
87
    }
88
 
89
 
90
 
91
 
92
    public function eventsAction()
93
    {
94
 
4141 efrain 95
        $request = $this->getRequest();
96
        if($request->isGet()) {
97
 
98
            $currentUserPlugin = $this->plugin('currentUserPlugin');
99
            $currentUser = $currentUserPlugin->getUser();
100
 
4155 efrain 101
            $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
102
            $currentNetwork = $currentNetworkPlugin->getNetwork();
4141 efrain 103
 
4155 efrain 104
 
105
 
4141 efrain 106
            $start  = $this->params()->fromQuery('start');
107
            $end    = $this->params()->fromQuery('end');
108
 
109
            if(!empty($start) && !empty($end)) {
110
 
111
                $dtStart = \DateTime::createFromFormat('Y-m-d', $start);
112
                $dtEnd = \DateTime::createFromFormat('Y-m-d', $end);
113
            } else {
114
                $dtStart = null;
115
                $dtEnd = null;
116
            }
117
 
118
            if(!$dtStart || !$dtEnd) {
119
              $t = time();
120
              $year = intval(date('Y', $t), 10);
121
              $month = intval(date('m', $t), 10);
122
              $last_day = intval(date('t', $t), 10);
123
 
124
              $start = mktime(0, 0, 0, $month, 1, $year);
125
              $start = date('Y-m-d H:i:s');
126
 
127
              $start = mktime(23, 56, 59, $month, $last_day, $year);
128
              $end = date('Y-m-d H:i:s');
129
 
130
            } else {
131
                $dtStart->setTime(0, 0, 0);
132
                $start = $dtStart->format('Y-m-d H:i:s');
133
 
134
                $dtEnd->setTime(23, 59, 59);
135
                $end  = $dtEnd->format('Y-m-d H:i:s');
136
            }
137
 
138
 
139
            $events = [];
4113 efrain 140
 
4141 efrain 141
 
4155 efrain 142
 
143
            //3 días
4156 efrain 144
            $expirePeriod = 86400 * 3;
4155 efrain 145
            $t1 = time();
146
 
4300 efrain 147
 
4398 efrain 148
            $companies = [];
149
            $companyMapper = CompanyMapper::getInstance($this->adapter);
150
 
151
            $companyUsers = [];
4300 efrain 152
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
153
            $records = $companyUserMapper->fetchAllByUserId($currentUser->id);
154
 
155
            foreach($records as $record) {
156
                $companyUsers[$record->company_id] = $record->backend == CompanyUser::BACKEND_YES;
157
             }
158
 
159
 
4398 efrain 160
 
4141 efrain 161
 
162
            $zoomMeetingMapper = ZoomMeetingMapper::getInstance($this->adapter);
4656 efrain 163
            $performanceEvaluationTestMapper = PerformanceEvaluationTestMapper::getInstance($this->adapter);
4300 efrain 164
            $performanceEvaluationFormMapper = PerformanceEvaluationFormMapper::getInstance($this->adapter);
165
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
166
            $userMapper = UserMapper::getInstance($this->adapter);
4141 efrain 167
 
168
            $calendarEventMapper = CalendarEventMapper::getInstance($this->adapter);
169
            $records = $calendarEventMapper->fetchAllByUserIdAndStartTimeAndEndTime($currentUser->id, $start, $end);
170
            foreach($records as $record)
171
            {
172
                switch($record->type)
173
                {
4300 efrain 174
 
4696 efrain 175
 
4300 efrain 176
                    case CalendarEvent::TYPE_PERFORMANCE_EVALUATION :
4696 efrain 177
 
178
 
4300 efrain 179
                        $backgroundColor = $currentNetwork->css_calendar_performance_evaluation_bg_color ;
180
                        $textColor = $currentNetwork->css_calendar_performance_evaluation_text_color;
181
 
182
 
4656 efrain 183
                        $performanceEvaluationTest = $performanceEvaluationTestMapper->fetchOne($record->relational_id);
184
                        if($performanceEvaluationTest) {
4300 efrain 185
 
4656 efrain 186
                            $performanceEvaluationForm = $performanceEvaluationFormMapper->fetchOne($performanceEvaluationTest->form_id);
4398 efrain 187
                            if($performanceEvaluationForm) {
188
                                $jobDescription = $jobDescriptionMapper->fetchOne($performanceEvaluationForm->job_description_id);
189
                                if($jobDescription) {
4300 efrain 190
 
191
 
4656 efrain 192
                                    if($performanceEvaluationTest->supervisor_id) {
193
                                        $supervisor = $userMapper->fetchOne($performanceEvaluationTest->supervisor_id);
4398 efrain 194
                                    } else {
195
                                        $supervisor = '';
196
                                    }
4300 efrain 197
 
4656 efrain 198
                                    if($performanceEvaluationTest->employee_id) {
199
                                        $employee = $userMapper->fetchOne($performanceEvaluationTest->employee_id);
4398 efrain 200
                                    } else {
201
                                        $employee = '';
202
                                    }
4300 efrain 203
 
204
 
4632 efrain 205
 
206
 
4398 efrain 207
                                    $hasLink = false;
208
                                    if(isset($companyUsers[$currentUser->id])) {
209
                                        if($companyUsers[$currentUser->id]) {
210
                                            $hasLink = true;
211
                                        }
212
                                    }
213
 
214
                                    if($hasLink) {
215
 
4656 efrain 216
                                        if(!isset($companies[$performanceEvaluationTest->company_id])) {
217
                                            $company  = $companyMapper->fetchOne($performanceEvaluationTest->company_id);
4398 efrain 218
 
219
                                            $companies[ $company->id ]  = $company;
220
                                        } else {
4656 efrain 221
                                            $company = $companies[ $performanceEvaluationTest->company_id ];
4398 efrain 222
                                        }
223
 
224
 
225
                                        $href = $this->url()->fromRoute('backend/signin-company', [
226
                                            'id' => $company->uuid,
4656 efrain 227
                                            'relational' => $performanceEvaluationTest->uuid,
4398 efrain 228
                                            'type' => CalendarEvent::TYPE_PERFORMANCE_EVALUATION
229
                                        ]);
230
 
231
 
232
                                        $agenda = '<a href="'.$href.'" class="goto-backend"><br>';
233
                                    }
234
 
235
                                    $agenda .= " LABEL_PERFORMANCE_EVALUATION_FORM_NAME : " . $performanceEvaluationForm->name . "<br>";
236
                                    $agenda .= " LABEL_PERFORMANCE_EVALUATION_JOB_DESCRIPTION : " . $jobDescription->name . "<br>";
4300 efrain 237
 
4656 efrain 238
                                    switch($performanceEvaluationTest->type)
4398 efrain 239
                                    {
4656 efrain 240
                                        case PerformanceEvaluationTest::TYPE_BOTH :
4398 efrain 241
                                            $agenda .= " LABEL_PERFORMANCE_EVALUATION_TYPE : LABEL_PERFORMANCE_EVALUATION_TYPE_BOTH <br>";
242
                                            break;
243
 
4656 efrain 244
                                        case PerformanceEvaluationTest::TYPE_SUPERVISOR :
4398 efrain 245
                                            $agenda .= " LABEL_PERFORMANCE_EVALUATION_TYPE : LABEL_PERFORMANCE_EVALUATION_TYPE_SUPERVISOR <br>";
246
                                            break;
247
 
4656 efrain 248
                                        case PerformanceEvaluationTest::TYPE_EMPLOYEE :
4398 efrain 249
                                            $agenda .= " LABEL_PERFORMANCE_EVALUATION_TYPE : LABEL_PERFORMANCE_EVALUATION_TYPE_EMPLOYEE <br>";
250
                                            break;
251
 
252
 
253
                                    }
254
 
255
                                    if($supervisor) {
256
                                        $agenda .= " LABEL_PERFORMANCE_EVALUATION_SUPERVISOR : " . trim($supervisor->first_name . ' ' . $supervisor->last_name) . " <br>";
257
 
258
                                    }
259
                                    if($employee) {
260
                                        $agenda .= " LABEL_PERFORMANCE_EVALUATION_EMPLOYEE : " . trim($employee->first_name . ' ' . $employee->last_name) . " <br>";
261
 
262
                                    }
263
 
4656 efrain 264
                                    $dtStart = \DateTime::createFromFormat('Y-m-d', $performanceEvaluationTest->last_date);
4398 efrain 265
                                    $agenda .= " LABEL_PERFORMANCE_EVALUATION_LAST_DATE : " . $dtStart->format('Y-m-d') . "<br>" ;
266
 
267
                                    if($hasLink) {
268
                                        $agenda .= "</a><br>";
269
                                    }
270
 
4632 efrain 271
 
272
 
4398 efrain 273
 
274
                                    array_push($events, [
4656 efrain 275
                                        'id'                => $performanceEvaluationTest->uuid,
4398 efrain 276
                                        'title'             =>  $performanceEvaluationForm->name,
277
                                        'agenda'            => $agenda,
4632 efrain 278
                                        'start'             => $dtStart->format('Y-m-d'),
4398 efrain 279
                                        'url'               => '',
280
                                        'backgroundColor'   => $backgroundColor,
281
                                        'textColor'         => $textColor,
4632 efrain 282
                                        'allDay'            => true,
4700 efrain 283
                                        'type'              => 'task',
4398 efrain 284
                                    ]);
285
                                }
4300 efrain 286
                            }
287
 
288
                        }
289
 
290
 
291
 
292
 
293
 
294
                        break;
295
 
4141 efrain 296
                    case CalendarEvent::TYPE_ZOOM :
297
                        $zoomMeeting = $zoomMeetingMapper->fetchOne($record->relational_id);
298
                        if($zoomMeeting) {
299
 
4155 efrain 300
                            $backgroundColor = $currentNetwork->css_calendar_zoom_bg_color ;
301
                            $textColor = $currentNetwork->css_calendar_zoom_text_color;
4141 efrain 302
 
4155 efrain 303
                            $dtStart = \DateTime::createFromFormat('Y-m-d H:i:s', $zoomMeeting->start_time);
304
                            $t2 = $dtStart->getTimestamp();
305
 
306
                            if($t2 > $t1) {
307
 
308
                                $t3 = $t1 + $expirePeriod;
309
                                if($t3 > $t2) {
310
                                    $backgroundColor = $currentNetwork->css_calendar_expire_bg_color;
311
                                    $textColor = $currentNetwork->css_calendar_expire_text_color;
312
                                }
313
 
314
                            }
315
 
316
 
317
 
4141 efrain 318
                            if($currentUser->timezone && $currentUser->timezone != $zoomMeeting->timezone) {
319
 
320
                                $start =  str_replace(' ', 'T', Functions::convertDateTimeBetweenTimeZones($zoomMeeting->start_time, $zoomMeeting->timezone, $currentUser->timezone));
321
                                $end =  str_replace(' ', 'T', Functions::convertDateTimeBetweenTimeZones($zoomMeeting->end_time, $zoomMeeting->timezone, $currentUser->timezone));
322
 
323
 
324
 
325
 
326
 
327
                            } else {
328
                                $start = str_replace(' ', 'T', $zoomMeeting->start_time);
329
                                $end = str_replace(' ', 'T', $zoomMeeting->end_time);
330
                            }
331
 
332
 
4155 efrain 333
 
334
 
335
 
336
 
4141 efrain 337
                            $agenda = "<a href=\"{$zoomMeeting->join_url}\" target=\"_blank\">" .  $zoomMeeting->agenda . "<br>" .
338
                                " LABEL_ZOOM_MEETING_START_DATE : " . $dtStart->format('Y-m-d') . "<br>" .
339
                                " LABEL_ZOOM_MEETING_START_TIME : " . $dtStart->format('H:i a') . "<br>" .
340
                                " LABEL_ZOOM_MEETING_TIMEZONE : " . $zoomMeeting->timezone . "<br>" .
341
                                " LABEL_ZOOM_MEETING_TITLE :  " . $zoomMeeting->topic  . "<br>" .
342
                                " LABEL_ZOOM_MEETING_URL : " . $zoomMeeting->join_url . "<br>" .
343
                                " LABEL_ZOOM_MEETING_PASSWORD : " . $zoomMeeting->password . "<br>" .
344
                                "</a>";
345
 
346
                            array_push($events, [
347
                                'id'                => $zoomMeeting->id,
4148 efrain 348
                                'title'             => $zoomMeeting->topic,
4141 efrain 349
                                'agenda'            => $agenda,
350
                                'start'             => $start,
351
                                'end'               => $end,
352
                                'url'               => $zoomMeeting->join_url,
4155 efrain 353
                                'backgroundColor'   => $backgroundColor,
354
                                'textColor'         => $textColor,
4700 efrain 355
                                'type'              => 'event',
4141 efrain 356
                            ]);
357
                        }
358
                        break;
359
 
360
 
361
                }
362
 
363
 
364
 
365
            }
366
 
367
 
368
 
369
 
370
 
371
 
372
 
373
 
4113 efrain 374
 
375
 
4141 efrain 376
            return new JsonModel($events);
4113 efrain 377
 
4141 efrain 378
        } else {
379
            $response = [
380
                'success' => false,
381
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
382
            ];
383
        }
4113 efrain 384
 
4141 efrain 385
        return new JsonModel($response);
4113 efrain 386
    }
387
 
388
 
389
 
390
 
391
}