Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

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