Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6849 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
5205 efrain 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
6849 efrain 7
 
5205 efrain 8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\Log\LoggerInterface;
10
use Laminas\View\Model\JsonModel;
11
use LeadersLinked\Mapper\CompanyMapper;
12
use LeadersLinked\Mapper\DailyPulseEmojiMapper;
13
use LeadersLinked\Mapper\DailyPulseRecordMapper;
14
use LeadersLinked\Mapper\EngagementUserMapper;
15
use LeadersLinked\Model\DailyPulseRecord;
16
use LeadersLinked\Model\DailyPulseEmoji;
17
use LeadersLinked\Mapper\EngagementMapper;
18
use LeadersLinked\Model\EngagementUser;
19
use LeadersLinked\Mapper\EngagementRecordMapper;
20
use LeadersLinked\Model\EngagementRecord;
6866 efrain 21
use LeadersLinked\Cache\CacheInterface;
22
use Laminas\Mvc\I18n\Translator;
5205 efrain 23
 
24
class DailyPulseController extends AbstractActionController
25
{
26
    /**
27
     *
6866 efrain 28
     * @var \Laminas\Db\Adapter\AdapterInterface
5205 efrain 29
     */
30
    private $adapter;
6866 efrain 31
 
5205 efrain 32
    /**
33
     *
6866 efrain 34
     * @var \LeadersLinked\Cache\CacheInterface
5205 efrain 35
     */
6866 efrain 36
    private $cache;
37
 
38
 
39
    /**
40
     *
41
     * @var \Laminas\Log\LoggerInterface
42
     */
5205 efrain 43
    private $logger;
6866 efrain 44
 
5205 efrain 45
    /**
6866 efrain 46
     *
5205 efrain 47
     * @var array
48
     */
49
    private $config;
6866 efrain 50
 
51
 
5205 efrain 52
    /**
6866 efrain 53
     *
54
     * @var \Laminas\Mvc\I18n\Translator
55
     */
56
    private $translator;
57
 
58
 
59
    /**
60
     *
61
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
62
     * @param \LeadersLinked\Cache\CacheInterface $cache
63
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
5205 efrain 64
     * @param array $config
6866 efrain 65
     * @param \Laminas\Mvc\I18n\Translator $translator
5205 efrain 66
     */
6866 efrain 67
    public function __construct($adapter, $cache, $logger, $config, $translator)
5205 efrain 68
    {
69
        $this->adapter      = $adapter;
6866 efrain 70
        $this->cache        = $cache;
5205 efrain 71
        $this->logger       = $logger;
72
        $this->config       = $config;
6866 efrain 73
        $this->translator   = $translator;
5205 efrain 74
    }
75
 
76
    public function indexAction()
77
    {
78
        $currentUserPlugin = $this->plugin('currentUserPlugin');
79
        $currentUser = $currentUserPlugin->getUser();
80
 
81
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
82
        $currentNetwork = $currentNetworkPlugin->getNetwork();
83
 
84
        $companyMapper = CompanyMapper::getInstance($this->adapter);
85
        $company = $companyMapper->fetchDefaultForNetworkByNetworkId($currentNetwork->id);
86
 
87
 
88
        $request = $this->getRequest();
89
        if($request->isGet()) {
90
 
91
            $emojiMapper  = DailyPulseEmojiMapper::getInstance($this->adapter);
92
 
93
 
94
 
95
            $engagementUserMapper =  EngagementUserMapper::getInstance($this->adapter);
96
            $engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
97
 
98
            if($engagementUser) {
99
                $points = $engagementUser->points;
100
            } else {
101
                $points = 0;
102
            }
103
 
104
            $dailyRecordMapper = DailyPulseRecordMapper::getInstance($this->adapter);
105
 
106
            $howAreYouFeelRecord = $dailyRecordMapper->fetchOneCurrentByUserIdAndType($currentUser->id, DailyPulseRecord::TYPE_HOW_ARE_YOU_FEEL);
107
            $climateOnYourOrganization = $dailyRecordMapper->fetchOneCurrentByUserIdAndType($currentUser->id, DailyPulseRecord::TYPE_CLIMATE_ON_YOUR_ORGANIZATION);
108
 
109
 
110
            $emojis_how_are_you_feel = [];
111
            $emojis_climate_on_your_organization = [];
112
 
113
            $records = $emojiMapper->fetchAllActiveByCompanyId($company->id);
114
            foreach($records as $record)
115
            {
116
 
117
 
118
 
119
 
120
                if($record->type == DailyPulseEmoji::TYPE_HOW_ARE_YOU_FEEL) {
121
 
122
                    if($howAreYouFeelRecord) {
123
                        $link_save = '';
124
                        if($howAreYouFeelRecord->emoji_id != $record->id) {
125
                            continue;
126
                        }
127
                    } else {
128
                        $link_save =  $this->url()->fromRoute('daily-pulse/how_are_you_feel', ['id' => $record->uuid]);
129
                    }
130
 
131
                    array_push($emojis_how_are_you_feel, [
132
                        'id' => $record->uuid,
133
                        'link_save' => $link_save,
134
                        'image' => $this->url()->fromRoute('storage', ['code' => $record->uuid, 'type' => 'daily-pulse', 'filename' => $record->image]),
135
                    ]);
136
                }
137
 
138
                if($record->type == DailyPulseEmoji::TYPE_CLIMATE_ON_YOUR_ORGANIZATION) {
139
 
140
                    if($climateOnYourOrganization) {
141
                        $link_save = '';
142
                        if($climateOnYourOrganization->emoji_id != $record->id) {
143
                            continue;
144
                        }
145
                    } else {
146
                        $link_save =  $this->url()->fromRoute('daily-pulse/climate_on_your_organization', ['id' => $record->uuid]);
147
                    }
148
 
149
                    array_push($emojis_climate_on_your_organization, [
150
                        'id' => $record->uuid,
151
                        'link_save' => $link_save,
152
                        'image' => $this->url()->fromRoute('storage', ['code' => $record->uuid, 'type' => 'daily-pulse', 'filename' => $record->image]),
153
                    ]);
154
                }
155
            }
156
 
157
 
158
 
159
 
160
 
161
            $data = [
162
                'success' => true,
163
                'data' => [
164
                    'points' => $points,
165
                    'emojis_how_are_you_feel' => $emojis_how_are_you_feel,
166
                    'emojis_climate_on_your_organization' => $emojis_climate_on_your_organization,
167
 
168
                ]
169
            ];
170
 
171
            return new JsonModel($data);
172
 
173
        } else {
174
            $data = [
175
                'success' => false,
176
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
177
            ];
178
 
179
            return new JsonModel($data);
180
        }
181
 
182
        return new JsonModel($data);
183
 
184
 
185
    }
186
 
187
 
188
    public function howAreYouFeelAction()
189
    {
190
        $currentUserPlugin = $this->plugin('currentUserPlugin');
191
        $currentUser = $currentUserPlugin->getUser();
192
 
193
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
194
        $currentNetwork = $currentNetworkPlugin->getNetwork();
195
 
196
        $companyMapper = CompanyMapper::getInstance($this->adapter);
197
        $company = $companyMapper->fetchDefaultForNetworkByNetworkId($currentNetwork->id);
198
 
199
        $id = $this->params()->fromRoute('id');
200
        $emojiMapper = DailyPulseEmojiMapper::getInstance($this->adapter);
201
        $emoji = $emojiMapper->fetchOneByUuid($id);
202
 
203
        if(!$emoji) {
204
 
205
            $data = [
206
                'success' => false,
207
                'data' => 'ERROR_DAILY_PULSE_EMOJI_NOT_FOUND'
208
            ];
209
 
210
            return new JsonModel($data);
211
 
212
        }
213
 
214
        if($emoji->status == DailyPulseEmoji::STATUS_INACTIVE) {
215
            $data = [
216
                'success' => false,
217
                'data' => 'ERROR_DAILY_PULSE_EMOJI_IS_INACTIVE'
218
            ];
219
 
220
            return new JsonModel($data);
221
        }
222
 
223
        if($emoji->type != DailyPulseEmoji::TYPE_HOW_ARE_YOU_FEEL) {
224
            $data = [
225
                'success' => false,
226
                'data' =>  'ERROR_DAILY_PULSE_EMOJI_IS_WRONG_TYPE'
227
            ];
228
 
229
            return new JsonModel($data);
230
        }
231
 
232
 
233
        if($emoji->company_id != $company->id) {
234
            $data = [
235
                'success' => false,
236
                'data' =>  'ERROR_UNAUTHORIZED'
237
            ];
238
 
239
            return new JsonModel($data);
240
        }
241
 
242
        $request = $this->getRequest();
243
        if($request->isPost()) {
244
 
245
            $dailyPulseRecordMapper = DailyPulseRecordMapper::getInstance($this->adapter);
246
            $dailyPulse = $dailyPulseRecordMapper->fetchOneCurrentByUserIdAndType($currentUser->id, DailyPulseRecord::TYPE_HOW_ARE_YOU_FEEL);
247
 
248
            if($dailyPulse) {
249
 
250
                $data = [
251
                    'success' => false,
252
                    'data' => 'ERROR_DAILY_PULSE_RECORD_USER_ALREADY_FOUND'
253
                ];
254
 
255
            } else {
256
                $engagementMapper = EngagementMapper::getInstance($this->adapter);
257
                $engagement = $engagementMapper->fetchOneByCompanyId($company->id);
258
 
259
                $dailyPulse = new DailyPulseRecord();
260
                $dailyPulse->company_id = $company->id;
261
                $dailyPulse->user_id = $currentUser->id;
262
                $dailyPulse->emoji_id = $emoji->id;
263
                $dailyPulse->type = DailyPulseRecord::TYPE_HOW_ARE_YOU_FEEL;
264
                $dailyPulse->engagement = $engagement ? $engagement->daily_pulse_how_are_you_feel : 0;
265
                $dailyPulse->points = $emoji->points;
266
 
267
                $result = $dailyPulseRecordMapper->insert($dailyPulse);
268
                if($result) {
6001 efrain 269
 
270
                    if($engagement) {
271
                        $engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
272
                        $engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
273
 
274
                        if($engagementUser) {
275
                            $engagementUser->points = $engagementUser->points + ($engagement ? $engagement->daily_pulse_how_are_you_feel : 0);
276
                            $engagementUserMapper->update( $engagementUser );
277
                        } else {
278
                            $engagementUser = new EngagementUser();
279
                            $engagementUser->company_id = $company->id;
280
                            $engagementUser->user_id = $currentUser->id;
281
                            $engagementUser->points = $engagement ? $engagement->daily_pulse_how_are_you_feel : 0;
282
                            $engagementUserMapper->insert( $engagementUser );
283
                        }
284
 
285
                        $engagementRecord = new EngagementRecord();
286
                        $engagementRecord->company_id = $company->id;
287
                        $engagementRecord->user_id = $currentUser->id;
288
                        $engagementRecord->points = $engagement->daily_pulse_how_are_you_feel;
289
                        $engagementRecord->type = EngagementRecord::TYPE_DAILY_PULSE_HOW_ARE_YOU_FEEL;
290
 
291
                        $engagementRecordMapper = EngagementRecordMapper::getInstance($this->adapter);
292
                        $engagementRecordMapper->insert($engagementRecord);
5205 efrain 293
 
294
                    }
295
 
296
                    $data = [
297
                        'success' => true,
298
                        'data' => 'LABEL_DAILY_PULSE_EMOJI_ADDED'
299
                    ];
300
                } else {
301
                    $data = [
302
                        'success' => false,
303
                        'data' => $dailyPulseRecordMapper->getError()
304
                    ];
305
                }
306
            }
307
        } else {
308
            $data = [
309
                'success' => false,
310
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
311
            ];
312
        }
313
 
314
        return new JsonModel($data);
315
    }
316
 
317
    public function climateOnYourOrganizationAction()
318
    {
319
        $currentUserPlugin = $this->plugin('currentUserPlugin');
320
        $currentUser = $currentUserPlugin->getUser();
321
 
322
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
323
        $currentNetwork = $currentNetworkPlugin->getNetwork();
324
 
325
        $companyMapper = CompanyMapper::getInstance($this->adapter);
326
        $company = $companyMapper->fetchDefaultForNetworkByNetworkId($currentNetwork->id);
327
 
328
        $id = $this->params()->fromRoute('id');
329
        $emojiMapper = DailyPulseEmojiMapper::getInstance($this->adapter);
330
        $emoji = $emojiMapper->fetchOneByUuid($id);
331
 
332
        if(!$emoji) {
333
 
334
            $data = [
335
                'success' => false,
336
                'data' => 'ERROR_DAILY_PULSE_EMOJI_NOT_FOUND'
337
            ];
338
 
339
            return new JsonModel($data);
340
 
341
        }
342
 
343
        if($emoji->status == DailyPulseEmoji::STATUS_INACTIVE) {
344
            $data = [
345
                'success' => false,
346
                'data' => 'ERROR_DAILY_PULSE_EMOJI_IS_INACTIVE'
347
            ];
348
 
349
            return new JsonModel($data);
350
        }
351
 
352
        if($emoji->type != DailyPulseEmoji::TYPE_CLIMATE_ON_YOUR_ORGANIZATION) {
353
            $data = [
354
                'success' => false,
355
                'data' =>  'ERROR_DAILY_PULSE_EMOJI_IS_WRONG_TYPE'
356
            ];
357
 
358
            return new JsonModel($data);
359
        }
360
 
361
 
362
        if($emoji->company_id != $company->id) {
363
            $data = [
364
                'success' => false,
365
                'data' =>  'ERROR_UNAUTHORIZED'
366
            ];
367
 
368
            return new JsonModel($data);
369
        }
370
 
371
        $request = $this->getRequest();
372
        if($request->isPost()) {
373
            $dailyPulseRecordMapper = DailyPulseRecordMapper::getInstance($this->adapter);
374
            $dailyPulse = $dailyPulseRecordMapper->fetchOneCurrentByUserIdAndType($currentUser->id, DailyPulseRecord::TYPE_CLIMATE_ON_YOUR_ORGANIZATION);
375
 
376
            if($dailyPulse) {
377
                $data = [
378
                    'success' => false,
379
                    'data' => 'ERROR_DAILY_PULSE_RECORD_USER_ALREADY_FOUND'
380
                ];
381
 
382
            } else {
383
                $engagementMapper = EngagementMapper::getInstance($this->adapter);
384
                $engagement = $engagementMapper->fetchOneByCompanyId($company->id);
385
 
386
                $dailyPulse = new DailyPulseRecord();
387
                $dailyPulse->company_id = $company->id;
388
                $dailyPulse->user_id = $currentUser->id;
389
                $dailyPulse->emoji_id = $emoji->id;
390
                $dailyPulse->type = DailyPulseRecord::TYPE_CLIMATE_ON_YOUR_ORGANIZATION;
391
                $dailyPulse->engagement = $engagement ? $engagement->daily_pulse_climate_on_your_organization : 0;
392
                $dailyPulse->points = $emoji->points;
393
 
394
                $result = $dailyPulseRecordMapper->insert($dailyPulse);
395
                if($result) {
396
 
6002 efrain 397
                    if($engagement) {
398
                        $engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
399
                        $engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
400
 
401
                        if($engagementUser) {
402
                            $engagementUser->points = $engagementUser->points + ($engagement ? $engagement->daily_pulse_climate_on_your_organization : 0);
403
                            $engagementUserMapper->update( $engagementUser );
404
 
405
                        } else {
406
                            $engagementUser = new EngagementUser();
407
                            $engagementUser->company_id = $company->id;
408
                            $engagementUser->user_id = $currentUser->id;
409
                            $engagementUser->points = $engagement ? $engagement->daily_pulse_climate_on_your_organization : 0;
410
                            $engagementUserMapper->insert( $engagementUser );
411
                        }
412
 
413
                        $engagementRecord = new EngagementRecord();
414
                        $engagementRecord->company_id = $company->id;
415
                        $engagementRecord->user_id = $currentUser->id;
416
                        $engagementRecord->points = $engagement->daily_pulse_climate_on_your_organization;
417
                        $engagementRecord->type = EngagementRecord::TYPE_DAILY_PULSE_CLIMATE_ON_YOUR_ORGANIZATION;
418
 
419
                        $engagementRecordMapper = EngagementRecordMapper::getInstance($this->adapter);
420
                        $engagementRecordMapper->insert($engagementRecord);
5205 efrain 421
                    }
422
 
423
                    $data = [
424
                        'success' => true,
425
                        'data' => 'LABEL_DAILY_PULSE_EMOJI_ADDED'
426
                    ];
427
                } else {
428
                    $data = [
429
                        'success' => false,
430
                        'data' => $dailyPulseRecordMapper->getError()
431
                    ];
432
                }
433
            }
434
        } else {
435
            $data = [
436
                'success' => false,
437
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
438
            ];
439
        }
440
 
441
        return new JsonModel($data);
442
    }
443
 
444
 
445
 
446
 
447
}