Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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