Proyectos de Subversion LeadersLinked - Services

Rev

Rev 333 | Rev 625 | 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\ViewModel;
11
use Laminas\View\Model\JsonModel;
12
 
13
use LeadersLinked\Mapper\QueryMapper;
14
use LeadersLinked\Mapper\CompanyMapper;
283 www 15
use LeadersLinked\Mapper\MicrolearningTopicMapper;
16
use LeadersLinked\Mapper\MicrolearningCapsuleMapper;
17
use LeadersLinked\Model\MicrolearningCapsule;
18
use LeadersLinked\Model\MicrolearningCapsuleUser;
19
use LeadersLinked\Mapper\MicrolearningCapsuleUserMapper;
20
use LeadersLinked\Mapper\MicrolearningUserMapper;
21
use LeadersLinked\Model\MicrolearningUser;
1 efrain 22
use LeadersLinked\Mapper\EngagementRewardMapper;
23
use LeadersLinked\Model\EngagementReward;
24
use LeadersLinked\Library\Functions;
283 www 25
use LeadersLinked\Library\Storage;
26
use LeadersLinked\Mapper\MicrolearningTopicCapsuleMapper;
1 efrain 27
 
28
class MarketPlaceController extends AbstractActionController
29
{
30
    /**
31
     *
32
     * @var \Laminas\Db\Adapter\AdapterInterface
33
     */
34
    private $adapter;
35
 
36
    /**
37
     *
38
     * @var \LeadersLinked\Cache\CacheInterface
39
     */
40
    private $cache;
41
 
42
 
43
    /**
44
     *
45
     * @var \Laminas\Log\LoggerInterface
46
     */
47
    private $logger;
48
 
49
    /**
50
     *
51
     * @var array
52
     */
53
    private $config;
54
 
55
 
56
    /**
57
     *
58
     * @var \Laminas\Mvc\I18n\Translator
59
     */
60
    private $translator;
61
 
62
 
63
    /**
64
     *
65
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
66
     * @param \LeadersLinked\Cache\CacheInterface $cache
67
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
68
     * @param array $config
69
     * @param \Laminas\Mvc\I18n\Translator $translator
70
     */
71
    public function __construct($adapter, $cache, $logger, $config, $translator)
72
    {
73
        $this->adapter      = $adapter;
74
        $this->cache        = $cache;
75
        $this->logger       = $logger;
76
        $this->config       = $config;
77
        $this->translator   = $translator;
78
    }
79
 
80
    /**
81
     *
82
     * Generación del listado de perfiles
83
     * {@inheritDoc}
84
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
85
     */
86
    public function indexAction()
87
    {
88
 
89
        $request = $this->getRequest();
90
        if($request->isGet()) {
91
            $currentUserPlugin = $this->plugin('currentUserPlugin');
92
            $currentUser = $currentUserPlugin->getUser();
93
 
94
 
95
                $search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));
96
                $entity = Functions::sanitizeFilterString($this->params()->fromQuery('entity', 'capsules'));
97
 
333 www 98
                $storage = Storage::getInstance($this->config, $this->adapter);
1 efrain 99
                if($entity == 'rewards') {
100
 
101
                    $currentUserPlugin = $this->plugin('currentUserPlugin');
102
                    $currentUser = $currentUserPlugin->getUser();
103
 
104
                    $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
105
                    $currentNetwork = $currentNetworkPlugin->getNetwork();
106
 
107
                    $companyMapper = CompanyMapper::getInstance($this->adapter);
108
                    $company = $companyMapper->fetchDefaultForNetworkByNetworkId($currentNetwork->id);
109
 
110
 
111
 
112
                    $queryMapper = QueryMapper::getInstance($this->adapter);
113
                    $select = $queryMapper->getSql()->select( EngagementRewardMapper::_TABLE);
114
                    $select->columns(['uuid', 'name',   'image', 'points']);
115
                    $select->where->equalTo('company_id', $company->id);
116
                    $select->where->equalTo('status', EngagementReward::STATUS_ACTIVE);
117
 
118
                    if($search) {
119
                        $select->where->like('c.name', '%' . $search . '%');
120
                    }
121
 
122
                    $select->order(['name ASC']);
123
 
124
 
283 www 125
                    $path = $storage->getPathEngagementReward();
126
 
1 efrain 127
                    $records = $queryMapper->fetchAll($select);
128
 
129
                    $items = [];
130
                    foreach($records as $record)
131
                    {
132
 
133
 
134
                        $item = [
135
 
136
                            'name' => $record['name'],
283 www 137
                            'image' => $storage->getGenericImage($path, $record['uuid'], $record['image']),
1 efrain 138
                            'points' => $record['points'],
139
                            'link_claim' => $this->url()->fromRoute('marketplace/claim', ['id' => $record['uuid']])
140
                        ];
141
 
142
 
143
                        array_push($items, $item);
144
                    }
145
 
146
 
147
                } else if($entity == 'capsules') {
283 www 148
                    $path = $storage->getPathMicrolearningCapsule();
149
                    $microlearningCapsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
1 efrain 150
 
151
 
152
                    $queryMapper = QueryMapper::getInstance($this->adapter);
153
                    $select = $queryMapper->getSql()->select();
602 stevensc 154
                    $select->columns(['id', 'uuid', 'name', 'status', 'image', 'privacy', 'type', 'marketplace']);
283 www 155
                    $select->from(['c' => MicrolearningCapsuleMapper::_TABLE]);
156
                    $select->join(['t' => MicrolearningTopicMapper::_TABLE], ' c.topic_id = t.id ', ['topic_uuid' => 'uuid']);
1 efrain 157
                    $select->join(['o' => CompanyMapper::_TABLE], ' c.company_id = o.id ', ['company_uuid' => 'uuid']);
283 www 158
                    $select->where->equalTo('c.privacy', MicrolearningCapsule::PRIVACY_PUBLIC);
159
                    $select->where->equalTo('c.type', MicrolearningCapsule::TYPE_FREE);
160
                    $select->where->equalTo('c.status', MicrolearningCapsule::STATUS_ACTIVE);
1 efrain 161
 
162
                    if($search) {
163
                        $select->where->like('c.name', '%' . $search . '%');
164
                    }
165
                    $select->order(['name ASC']);
166
 
167
                   //echo $select->getSqlString($this->adapter->platform); exit;
168
 
169
                    $records = $queryMapper->fetchAll($select);
170
 
171
                    $items = [];
172
                    foreach($records as $record)
173
                    {
283 www 174
                        $capsuleUser = $microlearningCapsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $record['id']);
1 efrain 175
 
176
 
177
                        $params = [
178
                            'company_id' => $record['company_uuid'],
179
                            'topic_id' => $record['topic_uuid'],
180
                            'capsule_id' => $record['uuid']
181
                        ];
182
 
183
                        $item = [
184
                            'name' => $record['name'],
283 www 185
                            'image' => $storage->getGenericImage($path, $record['uuid'],  $record['marketplace']),
1 efrain 186
                            'status' => $capsuleUser ? 'LABEL_ENROLLED' : 'LABEL_AVAILABLE',
187
                            'link_enroll' => $capsuleUser ? '' : $this->url()->fromRoute('marketplace/enroll', $params),
188
                        ];
189
 
190
 
191
                        array_push($items, $item);
192
                    }
193
                }
194
 
195
 
196
 
197
                $response = [
198
                    'success' => true,
199
                    'data' => $items
200
                ];
201
 
202
                return new JsonModel($response);
203
 
204
 
205
        } else {
206
            return new JsonModel([
207
                'success' => false,
208
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
209
            ]);
210
        }
211
    }
212
 
213
    public function enrollAction()
214
    {
215
        $request = $this->getRequest();
216
        if($request->isPost()) {
217
            $currentUserPlugin = $this->plugin('currentUserPlugin');
218
            $currentUser = $currentUserPlugin->getUser();
219
 
220
            $company_id = $this->params()->fromRoute('company_id');
221
            $topic_id = $this->params()->fromRoute('topic_id');
222
            $capsule_id = $this->params()->fromRoute('capsule_id');
223
 
224
            $companyMapper = CompanyMapper::getInstance($this->adapter);
225
            $company = $companyMapper->fetchOneByUuid($company_id);
226
            if(!$company) {
227
 
228
                return new JsonModel([
229
                    'success'   => false,
230
                    'data'   => 'ERROR_COMPANY_NOT_FOUND'
231
                ]);
232
            }
233
 
283 www 234
            $topicMapper = MicrolearningTopicMapper::getInstance($this->adapter);
1 efrain 235
            $topic = $topicMapper->fetchOneByUuid($topic_id);
236
            if(!$topic) {
237
                return new JsonModel([
238
                    'success'   => false,
239
                    'data'   => 'ERROR_TOPIC_NOT_FOUND'
240
                ]);
241
            }
242
 
243
            if($topic->company_id != $company->id) {
244
                return new JsonModel([
245
                    'success'   => false,
246
                    'data'   => 'ERROR_UNAUTHORIZED'
247
                ]);
248
            }
249
 
283 www 250
            $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
1 efrain 251
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
252
            if(!$capsule) {
253
                return new JsonModel([
254
                    'success'   => false,
255
                    'data'   => 'ERROR_CAPSULE_NOT_FOUND'
256
                ]);
257
            }
258
 
283 www 259
            $topicCapsuleMapper = MicrolearningTopicCapsuleMapper::getInstance($this->adapter);
260
            $topicCapsule = $topicCapsuleMapper->fetchOneByTopicIdAndCapsuleId($topic->id, $capsule->id);
261
 
262
            if(!$topicCapsule) {
1 efrain 263
                return new JsonModel([
264
                    'success'   => false,
265
                    'data'   => 'ERROR_UNAUTHORIZED'
266
                ]);
267
            }
268
 
283 www 269
            if($capsule->status != MicrolearningCapsule::STATUS_ACTIVE
270
                || $capsule->privacy != MicrolearningCapsule::PRIVACY_PUBLIC
271
                || $capsule->type != MicrolearningCapsule::TYPE_FREE) {
1 efrain 272
 
273
                return new JsonModel([
274
                    'success'   => false,
275
                    'data'   => 'ERROR_UNAUTHORIZED'
276
                ]);
277
            }
278
 
279
 
283 www 280
            $capsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
1 efrain 281
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
282
 
283
            if($capsuleUser) {
284
                return new JsonModel([
285
                    'success'   => false,
286
                    'data'   => 'ERROR_UNAUTHORIZED'
287
                ]);
288
            }
289
 
283 www 290
            $capsuleUser = new MicrolearningCapsuleUser();
1 efrain 291
            $capsuleUser->company_id = $company->id;
292
            $capsuleUser->topic_id = $topic->id;
293
            $capsuleUser->capsule_id = $capsule->id;
294
            $capsuleUser->user_id = $currentUser->id;
283 www 295
            $capsuleUser->access = MicrolearningCapsuleUser::ACCESS_UNLIMITED;
1 efrain 296
 
297
            if($capsuleUserMapper->insert($capsuleUser)) {
298
 
299
 
300
                $capsuleUser = $capsuleUserMapper->fetchOne($capsule->id);
301
                if($capsuleUser) {
283 www 302
                    $microlearningUserMapper = MicrolearningUserMapper::getInstance($this->adapter);
303
                    $microlearningUser = $microlearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
304
                    if($microlearningUser) {
305
                        $microlearningUser->updated_on = $capsuleUser->updated_on;
306
                        $microlearningUserMapper->update($microlearningUser);
1 efrain 307
 
308
                    } else {
283 www 309
                        $microlearningUser = new MicrolearningUser();
310
                        $microlearningUser->company_id = $capsuleUser->company_id;
311
                        $microlearningUser->user_id = $capsuleUser->user_id;
312
                        $microlearningUser->added_on = $capsuleUser->added_on;
313
                        $microlearningUser->updated_on = $capsuleUser->updated_on;
1 efrain 314
 
283 www 315
                        $microlearningUserMapper->insert($microlearningUser);
1 efrain 316
                    }
317
                }
318
 
319
 
320
 
321
 
322
 
323
 
324
 
325
 
326
 
327
 
328
 
329
                return new JsonModel([
330
                    'success'   => true,
331
                    'data'   => 'LABEL_YOU_HAVE_BEEN_SUCCESSFULLY_ENROLLED'
332
                ]);
333
            } else {
334
                return new JsonModel([
335
                    'success'   => false,
336
                    'data'   => 'ERROR_UNAUTHORIZED'
337
                ]);
338
            }
339
 
340
 
341
 
342
 
343
 
344
 
345
        } else {
346
            return new JsonModel([
347
                'success' => false,
348
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
349
            ]);
350
        }
351
 
352
    }
353
 
354
    public function claimAction()
355
    {
356
        $currentUserPlugin = $this->plugin('currentUserPlugin');
357
        $currentUser = $currentUserPlugin->getUser();
358
 
359
 
360
 
361
        return new JsonModel([
362
            'success' => true,
363
            'data' => 'Por definirse'
364
        ]);
365
    }
366
 
367
    public function getCategoriesAction()
368
    {
369
        $currentUserPlugin = $this->plugin('currentUserPlugin');
370
        $currentUser = $currentUserPlugin->getUser();
371
 
372
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
373
        $allowDailyPuse = $acl->isAllowed($currentUser->usertype_id, 'daily-pulse');
374
 
375
        $data = [
376
            'capsules' => 'LABEL_CAPSULES'
377
        ];
378
 
379
        if( $allowDailyPuse) {
380
            $data['rewards'] = 'LABEL_REWARDS';
381
        }
382
 
383
 
384
        return new JsonModel([
385
            'success' => true,
386
            'data' => $data
387
        ]);
388
    }
389
 
390
}