Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6001 | Ir a la última revisión | | 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;
7
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
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
     *
33
     * @var AbstractAdapter
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
55
     * @param AbstractAdapter $cache
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) {
260
 
261
 
262
 
263
 
264
 
265
                    $engagementUserMapper = EngagementUserMapper::getInstance($this->adapter);
266
                    $engagementUser = $engagementUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
267
 
268
                    if($engagementUser) {
269
                        $engagementUser->points = $engagementUser->points + ($engagement ? $engagement->daily_pulse_how_are_you_feel : 0);
270
                        $engagementUserMapper->update( $engagementUser );
271
                    } else {
272
                        $engagementUser = new EngagementUser();
273
                        $engagementUser->company_id = $company->id;
274
                        $engagementUser->user_id = $currentUser->id;
275
                        $engagementUser->points = $engagement ? $engagement->daily_pulse_how_are_you_feel : 0;
276
                        $engagementUserMapper->insert( $engagementUser );
277
                    }
278
 
279
                    $engagementRecord = new EngagementRecord();
280
                    $engagementRecord->company_id = $company->id;
281
                    $engagementRecord->user_id = $currentUser->id;
282
                    $engagementRecord->points = $engagement->daily_pulse_how_are_you_feel;
283
                    $engagementRecord->type = EngagementRecord::TYPE_DAILY_PULSE_HOW_ARE_YOU_FEEL;
284
 
285
                    $engagementRecordMapper = EngagementRecordMapper::getInstance($this->adapter);
286
                    $engagementRecordMapper->insert($engagementRecord);
287
 
288
                    $data = [
289
                        'success' => true,
290
                        'data' => 'LABEL_DAILY_PULSE_EMOJI_ADDED'
291
                    ];
292
                } else {
293
                    $data = [
294
                        'success' => false,
295
                        'data' => $dailyPulseRecordMapper->getError()
296
                    ];
297
                }
298
            }
299
        } else {
300
            $data = [
301
                'success' => false,
302
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
303
            ];
304
        }
305
 
306
        return new JsonModel($data);
307
    }
308
 
309
    public function climateOnYourOrganizationAction()
310
    {
311
        $currentUserPlugin = $this->plugin('currentUserPlugin');
312
        $currentUser = $currentUserPlugin->getUser();
313
 
314
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
315
        $currentNetwork = $currentNetworkPlugin->getNetwork();
316
 
317
        $companyMapper = CompanyMapper::getInstance($this->adapter);
318
        $company = $companyMapper->fetchDefaultForNetworkByNetworkId($currentNetwork->id);
319
 
320
        $id = $this->params()->fromRoute('id');
321
        $emojiMapper = DailyPulseEmojiMapper::getInstance($this->adapter);
322
        $emoji = $emojiMapper->fetchOneByUuid($id);
323
 
324
        if(!$emoji) {
325
 
326
            $data = [
327
                'success' => false,
328
                'data' => 'ERROR_DAILY_PULSE_EMOJI_NOT_FOUND'
329
            ];
330
 
331
            return new JsonModel($data);
332
 
333
        }
334
 
335
        if($emoji->status == DailyPulseEmoji::STATUS_INACTIVE) {
336
            $data = [
337
                'success' => false,
338
                'data' => 'ERROR_DAILY_PULSE_EMOJI_IS_INACTIVE'
339
            ];
340
 
341
            return new JsonModel($data);
342
        }
343
 
344
        if($emoji->type != DailyPulseEmoji::TYPE_CLIMATE_ON_YOUR_ORGANIZATION) {
345
            $data = [
346
                'success' => false,
347
                'data' =>  'ERROR_DAILY_PULSE_EMOJI_IS_WRONG_TYPE'
348
            ];
349
 
350
            return new JsonModel($data);
351
        }
352
 
353
 
354
        if($emoji->company_id != $company->id) {
355
            $data = [
356
                'success' => false,
357
                'data' =>  'ERROR_UNAUTHORIZED'
358
            ];
359
 
360
            return new JsonModel($data);
361
        }
362
 
363
        $request = $this->getRequest();
364
        if($request->isPost()) {
365
            $dailyPulseRecordMapper = DailyPulseRecordMapper::getInstance($this->adapter);
366
            $dailyPulse = $dailyPulseRecordMapper->fetchOneCurrentByUserIdAndType($currentUser->id, DailyPulseRecord::TYPE_CLIMATE_ON_YOUR_ORGANIZATION);
367
 
368
            if($dailyPulse) {
369
                $data = [
370
                    'success' => false,
371
                    'data' => 'ERROR_DAILY_PULSE_RECORD_USER_ALREADY_FOUND'
372
                ];
373
 
374
            } else {
375
                $engagementMapper = EngagementMapper::getInstance($this->adapter);
376
                $engagement = $engagementMapper->fetchOneByCompanyId($company->id);
377
 
378
                $dailyPulse = new DailyPulseRecord();
379
                $dailyPulse->company_id = $company->id;
380
                $dailyPulse->user_id = $currentUser->id;
381
                $dailyPulse->emoji_id = $emoji->id;
382
                $dailyPulse->type = DailyPulseRecord::TYPE_CLIMATE_ON_YOUR_ORGANIZATION;
383
                $dailyPulse->engagement = $engagement ? $engagement->daily_pulse_climate_on_your_organization : 0;
384
                $dailyPulse->points = $emoji->points;
385
 
386
                $result = $dailyPulseRecordMapper->insert($dailyPulse);
387
                if($result) {
388
 
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);
412
 
413
                    $data = [
414
                        'success' => true,
415
                        'data' => 'LABEL_DAILY_PULSE_EMOJI_ADDED'
416
                    ];
417
                } else {
418
                    $data = [
419
                        'success' => false,
420
                        'data' => $dailyPulseRecordMapper->getError()
421
                    ];
422
                }
423
            }
424
        } else {
425
            $data = [
426
                'success' => false,
427
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
428
            ];
429
        }
430
 
431
        return new JsonModel($data);
432
    }
433
 
434
 
435
 
436
 
437
}