Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 4656 | Rev 4700 | 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
            {
4696 efrain 172
                $type = '';
4141 efrain 173
                switch($record->type)
174
                {
4300 efrain 175
 
4696 efrain 176
 
4300 efrain 177
                    case CalendarEvent::TYPE_PERFORMANCE_EVALUATION :
4696 efrain 178
 
179
 
4300 efrain 180
                        $backgroundColor = $currentNetwork->css_calendar_performance_evaluation_bg_color ;
181
                        $textColor = $currentNetwork->css_calendar_performance_evaluation_text_color;
182
 
183
 
4656 efrain 184
                        $performanceEvaluationTest = $performanceEvaluationTestMapper->fetchOne($record->relational_id);
185
                        if($performanceEvaluationTest) {
4300 efrain 186
 
4656 efrain 187
                            $performanceEvaluationForm = $performanceEvaluationFormMapper->fetchOne($performanceEvaluationTest->form_id);
4398 efrain 188
                            if($performanceEvaluationForm) {
189
                                $jobDescription = $jobDescriptionMapper->fetchOne($performanceEvaluationForm->job_description_id);
190
                                if($jobDescription) {
4300 efrain 191
 
192
 
4656 efrain 193
                                    if($performanceEvaluationTest->supervisor_id) {
194
                                        $supervisor = $userMapper->fetchOne($performanceEvaluationTest->supervisor_id);
4398 efrain 195
                                    } else {
196
                                        $supervisor = '';
197
                                    }
4300 efrain 198
 
4656 efrain 199
                                    if($performanceEvaluationTest->employee_id) {
200
                                        $employee = $userMapper->fetchOne($performanceEvaluationTest->employee_id);
4398 efrain 201
                                    } else {
202
                                        $employee = '';
203
                                    }
4300 efrain 204
 
205
 
4632 efrain 206
 
207
 
4398 efrain 208
                                    $hasLink = false;
209
                                    if(isset($companyUsers[$currentUser->id])) {
210
                                        if($companyUsers[$currentUser->id]) {
211
                                            $hasLink = true;
212
                                        }
213
                                    }
214
 
215
                                    if($hasLink) {
216
 
4656 efrain 217
                                        if(!isset($companies[$performanceEvaluationTest->company_id])) {
218
                                            $company  = $companyMapper->fetchOne($performanceEvaluationTest->company_id);
4398 efrain 219
 
220
                                            $companies[ $company->id ]  = $company;
221
                                        } else {
4656 efrain 222
                                            $company = $companies[ $performanceEvaluationTest->company_id ];
4398 efrain 223
                                        }
224
 
225
 
226
                                        $href = $this->url()->fromRoute('backend/signin-company', [
227
                                            'id' => $company->uuid,
4656 efrain 228
                                            'relational' => $performanceEvaluationTest->uuid,
4398 efrain 229
                                            'type' => CalendarEvent::TYPE_PERFORMANCE_EVALUATION
230
                                        ]);
231
 
232
 
233
                                        $agenda = '<a href="'.$href.'" class="goto-backend"><br>';
234
                                    }
235
 
236
                                    $agenda .= " LABEL_PERFORMANCE_EVALUATION_FORM_NAME : " . $performanceEvaluationForm->name . "<br>";
237
                                    $agenda .= " LABEL_PERFORMANCE_EVALUATION_JOB_DESCRIPTION : " . $jobDescription->name . "<br>";
4300 efrain 238
 
4656 efrain 239
                                    switch($performanceEvaluationTest->type)
4398 efrain 240
                                    {
4656 efrain 241
                                        case PerformanceEvaluationTest::TYPE_BOTH :
4398 efrain 242
                                            $agenda .= " LABEL_PERFORMANCE_EVALUATION_TYPE : LABEL_PERFORMANCE_EVALUATION_TYPE_BOTH <br>";
243
                                            break;
244
 
4656 efrain 245
                                        case PerformanceEvaluationTest::TYPE_SUPERVISOR :
4398 efrain 246
                                            $agenda .= " LABEL_PERFORMANCE_EVALUATION_TYPE : LABEL_PERFORMANCE_EVALUATION_TYPE_SUPERVISOR <br>";
247
                                            break;
248
 
4656 efrain 249
                                        case PerformanceEvaluationTest::TYPE_EMPLOYEE :
4398 efrain 250
                                            $agenda .= " LABEL_PERFORMANCE_EVALUATION_TYPE : LABEL_PERFORMANCE_EVALUATION_TYPE_EMPLOYEE <br>";
251
                                            break;
252
 
253
 
254
                                    }
255
 
256
                                    if($supervisor) {
257
                                        $agenda .= " LABEL_PERFORMANCE_EVALUATION_SUPERVISOR : " . trim($supervisor->first_name . ' ' . $supervisor->last_name) . " <br>";
258
 
259
                                    }
260
                                    if($employee) {
261
                                        $agenda .= " LABEL_PERFORMANCE_EVALUATION_EMPLOYEE : " . trim($employee->first_name . ' ' . $employee->last_name) . " <br>";
262
 
263
                                    }
264
 
4656 efrain 265
                                    $dtStart = \DateTime::createFromFormat('Y-m-d', $performanceEvaluationTest->last_date);
4398 efrain 266
                                    $agenda .= " LABEL_PERFORMANCE_EVALUATION_LAST_DATE : " . $dtStart->format('Y-m-d') . "<br>" ;
267
 
268
                                    if($hasLink) {
269
                                        $agenda .= "</a><br>";
270
                                    }
271
 
4632 efrain 272
 
273
 
4398 efrain 274
 
275
                                    array_push($events, [
4656 efrain 276
                                        'id'                => $performanceEvaluationTest->uuid,
4398 efrain 277
                                        'title'             =>  $performanceEvaluationForm->name,
278
                                        'agenda'            => $agenda,
4632 efrain 279
                                        'start'             => $dtStart->format('Y-m-d'),
4398 efrain 280
                                        'url'               => '',
281
                                        'backgroundColor'   => $backgroundColor,
282
                                        'textColor'         => $textColor,
4632 efrain 283
                                        'allDay'            => true,
4696 efrain 284
                                        'type'              => 'LABEL_CALENDAR_TASK',
4398 efrain 285
                                    ]);
286
                                }
4300 efrain 287
                            }
288
 
289
                        }
290
 
291
 
292
 
293
 
294
 
295
                        break;
296
 
4141 efrain 297
                    case CalendarEvent::TYPE_ZOOM :
298
                        $zoomMeeting = $zoomMeetingMapper->fetchOne($record->relational_id);
299
                        if($zoomMeeting) {
300
 
4155 efrain 301
                            $backgroundColor = $currentNetwork->css_calendar_zoom_bg_color ;
302
                            $textColor = $currentNetwork->css_calendar_zoom_text_color;
4141 efrain 303
 
4155 efrain 304
                            $dtStart = \DateTime::createFromFormat('Y-m-d H:i:s', $zoomMeeting->start_time);
305
                            $t2 = $dtStart->getTimestamp();
306
 
307
                            if($t2 > $t1) {
308
 
309
                                $t3 = $t1 + $expirePeriod;
310
                                if($t3 > $t2) {
311
                                    $backgroundColor = $currentNetwork->css_calendar_expire_bg_color;
312
                                    $textColor = $currentNetwork->css_calendar_expire_text_color;
313
                                }
314
 
315
                            }
316
 
317
 
318
 
4141 efrain 319
                            if($currentUser->timezone && $currentUser->timezone != $zoomMeeting->timezone) {
320
 
321
                                $start =  str_replace(' ', 'T', Functions::convertDateTimeBetweenTimeZones($zoomMeeting->start_time, $zoomMeeting->timezone, $currentUser->timezone));
322
                                $end =  str_replace(' ', 'T', Functions::convertDateTimeBetweenTimeZones($zoomMeeting->end_time, $zoomMeeting->timezone, $currentUser->timezone));
323
 
324
 
325
 
326
 
327
 
328
                            } else {
329
                                $start = str_replace(' ', 'T', $zoomMeeting->start_time);
330
                                $end = str_replace(' ', 'T', $zoomMeeting->end_time);
331
                            }
332
 
333
 
4155 efrain 334
 
335
 
336
 
337
 
4141 efrain 338
                            $agenda = "<a href=\"{$zoomMeeting->join_url}\" target=\"_blank\">" .  $zoomMeeting->agenda . "<br>" .
339
                                " LABEL_ZOOM_MEETING_START_DATE : " . $dtStart->format('Y-m-d') . "<br>" .
340
                                " LABEL_ZOOM_MEETING_START_TIME : " . $dtStart->format('H:i a') . "<br>" .
341
                                " LABEL_ZOOM_MEETING_TIMEZONE : " . $zoomMeeting->timezone . "<br>" .
342
                                " LABEL_ZOOM_MEETING_TITLE :  " . $zoomMeeting->topic  . "<br>" .
343
                                " LABEL_ZOOM_MEETING_URL : " . $zoomMeeting->join_url . "<br>" .
344
                                " LABEL_ZOOM_MEETING_PASSWORD : " . $zoomMeeting->password . "<br>" .
345
                                "</a>";
346
 
347
                            array_push($events, [
348
                                'id'                => $zoomMeeting->id,
4148 efrain 349
                                'title'             => $zoomMeeting->topic,
4141 efrain 350
                                'agenda'            => $agenda,
351
                                'start'             => $start,
352
                                'end'               => $end,
353
                                'url'               => $zoomMeeting->join_url,
4155 efrain 354
                                'backgroundColor'   => $backgroundColor,
355
                                'textColor'         => $textColor,
4696 efrain 356
                                'type'              => 'LABEL_CALENDAR_EVENT',
4141 efrain 357
                            ]);
358
                        }
359
                        break;
360
 
361
 
362
                }
363
 
364
 
365
 
366
            }
367
 
368
 
369
 
370
 
371
 
372
 
373
 
374
 
4113 efrain 375
 
376
 
4141 efrain 377
            return new JsonModel($events);
4113 efrain 378
 
4141 efrain 379
        } else {
380
            $response = [
381
                'success' => false,
382
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
383
            ];
384
        }
4113 efrain 385
 
4141 efrain 386
        return new JsonModel($response);
4113 efrain 387
    }
388
 
389
 
390
 
391
 
392
}