Proyectos de Subversion LeadersLinked - Services

Rev

Rev 602 | 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
    {
625 stevensc 88
        $request = $this->getRequest();
1 efrain 89
 
625 stevensc 90
        if(!$request->isGet()) {
91
            return new JsonModel([
92
                'success' => false,
93
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
94
            ]);
95
        }
96
 
97
        $currentUserPlugin = $this->plugin('currentUserPlugin');
98
        $currentUser = $currentUserPlugin->getUser();
99
 
100
        $search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));
101
        $entity = Functions::sanitizeFilterString($this->params()->fromQuery('entity', 'capsules'));
102
 
103
        $storage = Storage::getInstance($this->config, $this->adapter);
104
 
105
        if($entity == 'rewards') {
1 efrain 106
            $currentUserPlugin = $this->plugin('currentUserPlugin');
107
            $currentUser = $currentUserPlugin->getUser();
108
 
625 stevensc 109
            $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
110
            $currentNetwork = $currentNetworkPlugin->getNetwork();
111
 
112
            $companyMapper = CompanyMapper::getInstance($this->adapter);
113
            $company = $companyMapper->fetchDefaultForNetworkByNetworkId($currentNetwork->id);
114
 
115
            $queryMapper = QueryMapper::getInstance($this->adapter);
116
            $select = $queryMapper->getSql()->select( EngagementRewardMapper::_TABLE);
117
            $select->columns(['uuid', 'name',   'image', 'points']);
118
            $select->where->equalTo('company_id', $company->id);
119
            $select->where->equalTo('status', EngagementReward::STATUS_ACTIVE);
120
 
121
            if($search) {
122
                $select->where->like('c.name', '%' . $search . '%');
123
            }
124
 
125
            $select->order(['name ASC']);
126
 
127
 
128
            $path = $storage->getPathEngagementReward();
129
 
130
            $records = $queryMapper->fetchAll($select);
131
 
132
            $items = [];
133
            foreach($records as $record)
134
            {
135
 
1 efrain 136
 
625 stevensc 137
                $item = [
138
 
139
                    'name' => $record['name'],
140
                    'image' => $storage->getGenericImage($path, $record['uuid'], $record['image']),
141
                    'points' => $record['points'],
142
                    'link_claim' => $this->url()->fromRoute('marketplace/claim', ['id' => $record['uuid']])
143
                ];
1 efrain 144
 
625 stevensc 145
 
146
                array_push($items, $item);
147
            }
148
 
149
 
150
        }
1 efrain 151
 
625 stevensc 152
        if($entity == 'capsules') {
153
            $microlearningCapsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
154
            $path = $storage->getPathMicrolearningCapsule();
155
 
156
            $queryMapper = QueryMapper::getInstance($this->adapter);
157
            $select = $queryMapper->getSql()->select();
158
            $select->columns(['id', 'uuid', 'name', 'status', 'image', 'privacy', 'type', 'marketplace']);
159
            $select->from(['c' => MicrolearningCapsuleMapper::_TABLE]);
160
            $select->join(['t' => MicrolearningTopicMapper::_TABLE], ' c.topic_id = t.id ', ['topic_uuid' => 'uuid']);
161
            $select->join(['o' => CompanyMapper::_TABLE], ' c.company_id = o.id ', ['company_uuid' => 'uuid']);
162
            $select->where->equalTo('c.privacy', MicrolearningCapsule::PRIVACY_PUBLIC);
163
            $select->where->equalTo('c.type', MicrolearningCapsule::TYPE_FREE);
164
            $select->where->equalTo('c.status', MicrolearningCapsule::STATUS_ACTIVE);
165
            if($search) {
166
                $select->where->like('c.name', '%' . $search . '%');
167
            }
168
            $select->order(['name ASC']);
169
 
170
            //echo $select->getSqlString($this->adapter->platform); exit;
1 efrain 171
 
625 stevensc 172
            $records = $queryMapper->fetchAll($select);
1 efrain 173
 
625 stevensc 174
            $items = [];
175
            foreach($records as $record)
176
            {
177
                $capsuleUser = $microlearningCapsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $record['id']);
1 efrain 178
 
625 stevensc 179
                $params = [
180
                    'company_id' => $record['company_uuid'],
181
                    'topic_id' => $record['topic_uuid'],
182
                    'capsule_id' => $record['uuid']
183
                ];
1 efrain 184
 
625 stevensc 185
                $item = [
186
                    'name' => $record['name'],
187
                    'image' => $storage->getGenericImage($path, $record['uuid'],  $record['marketplace']),
188
                    'status' => $capsuleUser ? 'LABEL_ENROLLED' : 'LABEL_AVAILABLE',
189
                    'link_enroll' => $capsuleUser ? '' : $this->url()->fromRoute('marketplace/enroll', $params),
1 efrain 190
                ];
191
 
625 stevensc 192
                array_push($items, $item);
193
            }
194
        }
1 efrain 195
 
625 stevensc 196
        $response = [
197
            'success' => true,
198
            'data' => $items
199
        ];
200
 
201
        return new JsonModel($response);
202
 
1 efrain 203
    }
204
 
205
    public function enrollAction()
206
    {
207
        $request = $this->getRequest();
208
        if($request->isPost()) {
209
            $currentUserPlugin = $this->plugin('currentUserPlugin');
210
            $currentUser = $currentUserPlugin->getUser();
211
 
212
            $company_id = $this->params()->fromRoute('company_id');
213
            $topic_id = $this->params()->fromRoute('topic_id');
214
            $capsule_id = $this->params()->fromRoute('capsule_id');
215
 
216
            $companyMapper = CompanyMapper::getInstance($this->adapter);
217
            $company = $companyMapper->fetchOneByUuid($company_id);
218
            if(!$company) {
219
 
220
                return new JsonModel([
221
                    'success'   => false,
222
                    'data'   => 'ERROR_COMPANY_NOT_FOUND'
223
                ]);
224
            }
225
 
283 www 226
            $topicMapper = MicrolearningTopicMapper::getInstance($this->adapter);
1 efrain 227
            $topic = $topicMapper->fetchOneByUuid($topic_id);
228
            if(!$topic) {
229
                return new JsonModel([
230
                    'success'   => false,
231
                    'data'   => 'ERROR_TOPIC_NOT_FOUND'
232
                ]);
233
            }
234
 
235
            if($topic->company_id != $company->id) {
236
                return new JsonModel([
237
                    'success'   => false,
238
                    'data'   => 'ERROR_UNAUTHORIZED'
239
                ]);
240
            }
241
 
283 www 242
            $capsuleMapper = MicrolearningCapsuleMapper::getInstance($this->adapter);
1 efrain 243
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
244
            if(!$capsule) {
245
                return new JsonModel([
246
                    'success'   => false,
247
                    'data'   => 'ERROR_CAPSULE_NOT_FOUND'
248
                ]);
249
            }
250
 
283 www 251
            $topicCapsuleMapper = MicrolearningTopicCapsuleMapper::getInstance($this->adapter);
252
            $topicCapsule = $topicCapsuleMapper->fetchOneByTopicIdAndCapsuleId($topic->id, $capsule->id);
253
 
254
            if(!$topicCapsule) {
1 efrain 255
                return new JsonModel([
256
                    'success'   => false,
257
                    'data'   => 'ERROR_UNAUTHORIZED'
258
                ]);
259
            }
260
 
283 www 261
            if($capsule->status != MicrolearningCapsule::STATUS_ACTIVE
262
                || $capsule->privacy != MicrolearningCapsule::PRIVACY_PUBLIC
263
                || $capsule->type != MicrolearningCapsule::TYPE_FREE) {
1 efrain 264
 
265
                return new JsonModel([
266
                    'success'   => false,
267
                    'data'   => 'ERROR_UNAUTHORIZED'
268
                ]);
269
            }
270
 
271
 
283 www 272
            $capsuleUserMapper = MicrolearningCapsuleUserMapper::getInstance($this->adapter);
1 efrain 273
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
274
 
275
            if($capsuleUser) {
276
                return new JsonModel([
277
                    'success'   => false,
278
                    'data'   => 'ERROR_UNAUTHORIZED'
279
                ]);
280
            }
281
 
283 www 282
            $capsuleUser = new MicrolearningCapsuleUser();
1 efrain 283
            $capsuleUser->company_id = $company->id;
284
            $capsuleUser->topic_id = $topic->id;
285
            $capsuleUser->capsule_id = $capsule->id;
286
            $capsuleUser->user_id = $currentUser->id;
283 www 287
            $capsuleUser->access = MicrolearningCapsuleUser::ACCESS_UNLIMITED;
1 efrain 288
 
289
            if($capsuleUserMapper->insert($capsuleUser)) {
290
 
291
 
292
                $capsuleUser = $capsuleUserMapper->fetchOne($capsule->id);
293
                if($capsuleUser) {
283 www 294
                    $microlearningUserMapper = MicrolearningUserMapper::getInstance($this->adapter);
295
                    $microlearningUser = $microlearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
296
                    if($microlearningUser) {
297
                        $microlearningUser->updated_on = $capsuleUser->updated_on;
298
                        $microlearningUserMapper->update($microlearningUser);
1 efrain 299
 
300
                    } else {
283 www 301
                        $microlearningUser = new MicrolearningUser();
302
                        $microlearningUser->company_id = $capsuleUser->company_id;
303
                        $microlearningUser->user_id = $capsuleUser->user_id;
304
                        $microlearningUser->added_on = $capsuleUser->added_on;
305
                        $microlearningUser->updated_on = $capsuleUser->updated_on;
1 efrain 306
 
283 www 307
                        $microlearningUserMapper->insert($microlearningUser);
1 efrain 308
                    }
309
                }
310
 
311
 
312
 
313
 
314
 
315
 
316
 
317
 
318
 
319
 
320
 
321
                return new JsonModel([
322
                    'success'   => true,
323
                    'data'   => 'LABEL_YOU_HAVE_BEEN_SUCCESSFULLY_ENROLLED'
324
                ]);
325
            } else {
326
                return new JsonModel([
327
                    'success'   => false,
328
                    'data'   => 'ERROR_UNAUTHORIZED'
329
                ]);
330
            }
331
 
332
 
333
 
334
 
335
 
336
 
337
        } else {
338
            return new JsonModel([
339
                'success' => false,
340
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
341
            ]);
342
        }
343
 
344
    }
345
 
346
    public function claimAction()
347
    {
348
        $currentUserPlugin = $this->plugin('currentUserPlugin');
349
        $currentUser = $currentUserPlugin->getUser();
350
 
351
 
352
 
353
        return new JsonModel([
354
            'success' => true,
355
            'data' => 'Por definirse'
356
        ]);
357
    }
358
 
359
    public function getCategoriesAction()
360
    {
361
        $currentUserPlugin = $this->plugin('currentUserPlugin');
362
        $currentUser = $currentUserPlugin->getUser();
363
 
364
        $acl = $this->getEvent()->getViewModel()->getVariable('acl');
365
        $allowDailyPuse = $acl->isAllowed($currentUser->usertype_id, 'daily-pulse');
366
 
367
        $data = [
368
            'capsules' => 'LABEL_CAPSULES'
369
        ];
370
 
371
        if( $allowDailyPuse) {
372
            $data['rewards'] = 'LABEL_REWARDS';
373
        }
374
 
375
 
376
        return new JsonModel([
377
            'success' => true,
378
            'data' => $data
379
        ]);
380
    }
381
 
382
}