Proyectos de Subversion LeadersLinked - Services

Rev

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

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