Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 5223 | Ir a la última revisión | | 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;
22
 
23
class MarketPlaceController extends AbstractActionController
24
{
25
    /**
26
     *
27
     * @var AdapterInterface
28
     */
29
    private $adapter;
30
 
31
 
32
    /**
33
     *
34
     * @var AbstractAdapter
35
     */
36
    private $cache;
37
 
38
    /**
39
     *
40
     * @var  LoggerInterface
41
     */
42
    private $logger;
43
 
44
 
45
    /**
46
     *
47
     * @var array
48
     */
49
    private $config;
50
 
51
    /**
52
     *
53
     * @param AdapterInterface $adapter
54
     * @param AbstractAdapter $cache
55
     * @param LoggerInterface $logger
56
     * @param array $config
57
     */
58
    public function __construct($adapter, $cache , $logger,  $config)
59
    {
60
        $this->adapter      = $adapter;
61
        $this->cache        = $cache;
62
        $this->logger       = $logger;
63
        $this->config       = $config;
64
 
65
    }
66
 
67
    /**
68
     *
69
     * Generación del listado de perfiles
70
     * {@inheritDoc}
71
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
72
     */
73
    public function indexAction()
74
    {
75
 
76
        $request = $this->getRequest();
77
        if($request->isGet()) {
78
            $currentUserPlugin = $this->plugin('currentUserPlugin');
79
            $currentUser = $currentUserPlugin->getUser();
80
 
81
            $headers  = $request->getHeaders();
82
 
83
            $isJson = false;
84
            if($headers->has('Accept')) {
85
                $accept = $headers->get('Accept');
86
 
87
                $prioritized = $accept->getPrioritized();
88
 
89
                foreach($prioritized as $key => $value) {
90
                    $raw = trim($value->getRaw());
91
 
92
                    if(!$isJson) {
93
                        $isJson = strpos($raw, 'json');
94
                    }
95
 
96
                }
97
            }
98
 
99
            if($isJson) {
100
 
101
 
102
 
103
                $companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
104
 
105
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
106
                $queryMapper = QueryMapper::getInstance($this->adapter);
107
                $select = $queryMapper->getSql()->select();
108
                $select->columns(['id', 'uuid', 'name', 'status',  'image', 'order', 'privacy', 'type', 'marketplace']);
109
                $select->from(['c' => CompanyMicrolearningCapsuleMapper::_TABLE]);
110
                $select->join(['t' => CompanyMicrolearningTopicMapper::_TABLE], ' c.topic_id = t.id ', ['topic_uuid' => 'uuid']);
111
                $select->join(['o' => CompanyMapper::_TABLE], ' c.company_id = o.id ', ['company_uuid' => 'uuid']);
112
                $select->where->equalTo('c.privacy', CompanyMicrolearningCapsule::PRIVACY_PUBLIC);
113
                $select->where->equalTo('c.type', CompanyMicrolearningCapsule::TYPE_FREE);
114
                $select->where->equalTo('c.status', CompanyMicrolearningCapsule::STATUS_ACTIVE);
115
 
116
                if($search) {
117
                    $select->where->like('c.name', '%' . $search . '%');
118
                }
119
                $select->order(['name ASC']);
120
 
121
               //echo $select->getSqlString($this->adapter->platform); exit;
122
 
123
                $records = $queryMapper->fetchAll($select);
124
 
125
                $items = [];
126
                foreach($records as $record)
127
                {
128
                    $capsuleUser = $companyMicrolearningCapsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $record['id']);
129
 
130
 
131
                    $params = [
132
                        'company_id' => $record['company_uuid'],
133
                        'topic_id' => $record['topic_uuid'],
134
                        'capsule_id' => $record['uuid']
135
                    ];
136
 
137
 
138
                    $item = [
139
 
140
                        'name' => $record['name'],
141
                        'image' => $this->url()->fromRoute('storage', ['type' => 'microlearning-capsule', 'code' => $record['uuid'], 'filename' => $record['marketplace']]),
142
                        'status' => $capsuleUser ? 'LABEL_ENROLLED' : 'LABEL_AVAILABLE',
143
                        'link_enroll' => $capsuleUser ? '' : $this->url()->fromRoute('marketplace/enroll', $params),
144
                    ];
145
 
146
 
147
                    array_push($items, $item);
148
                }
149
 
150
 
151
 
152
                $response = [
153
                    'success' => true,
154
                    'data' => $items
155
                ];
156
 
157
                return new JsonModel($response);
158
 
159
 
160
            } else {
161
 
162
 
163
                $this->layout()->setTemplate('layout/layout.phtml');
164
                $viewModel = new ViewModel();
165
                $viewModel->setTemplate('leaders-linked/marketplace/index.phtml');
166
                return $viewModel ;
167
            }
168
 
169
        } else {
170
            return new JsonModel([
171
                'success' => false,
172
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
173
            ]);
174
        }
175
    }
176
 
177
    public function enrollAction()
178
    {
179
        $request = $this->getRequest();
180
        if($request->isPost()) {
181
            $currentUserPlugin = $this->plugin('currentUserPlugin');
182
            $currentUser = $currentUserPlugin->getUser();
183
 
184
            $company_id = $this->params()->fromRoute('company_id');
185
            $topic_id = $this->params()->fromRoute('topic_id');
186
            $capsule_id = $this->params()->fromRoute('capsule_id');
187
 
188
            $companyMapper = CompanyMapper::getInstance($this->adapter);
189
            $company = $companyMapper->fetchOneByUuid($company_id);
190
            if(!$company) {
191
 
192
                return new JsonModel([
193
                    'success'   => false,
194
                    'data'   => 'ERROR_COMPANY_NOT_FOUND'
195
                ]);
196
            }
197
 
198
            $topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
199
            $topic = $topicMapper->fetchOneByUuid($topic_id);
200
            if(!$topic) {
201
                return new JsonModel([
202
                    'success'   => false,
203
                    'data'   => 'ERROR_TOPIC_NOT_FOUND'
204
                ]);
205
            }
206
 
207
            if($topic->company_id != $company->id) {
208
                return new JsonModel([
209
                    'success'   => false,
210
                    'data'   => 'ERROR_UNAUTHORIZED'
211
                ]);
212
            }
213
 
214
            $capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
215
            $capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
216
            if(!$capsule) {
217
                return new JsonModel([
218
                    'success'   => false,
219
                    'data'   => 'ERROR_CAPSULE_NOT_FOUND'
220
                ]);
221
            }
222
 
223
            if($capsule->topic_id != $topic->id) {
224
                return new JsonModel([
225
                    'success'   => false,
226
                    'data'   => 'ERROR_UNAUTHORIZED'
227
                ]);
228
            }
229
 
230
            if($capsule->status != CompanyMicrolearningCapsule::STATUS_ACTIVE
231
                || $capsule->privacy != CompanyMicrolearningCapsule::PRIVACY_PUBLIC
232
                || $capsule->type != CompanyMicrolearningCapsule::TYPE_FREE) {
233
 
234
                return new JsonModel([
235
                    'success'   => false,
236
                    'data'   => 'ERROR_UNAUTHORIZED'
237
                ]);
238
            }
239
 
240
 
241
            $capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
242
            $capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
243
 
244
            if($capsuleUser) {
245
                return new JsonModel([
246
                    'success'   => false,
247
                    'data'   => 'ERROR_UNAUTHORIZED'
248
                ]);
249
            }
250
 
251
            $capsuleUser = new CompanyMicrolearningCapsuleUser();
252
            $capsuleUser->company_id = $company->id;
253
            $capsuleUser->topic_id = $topic->id;
254
            $capsuleUser->capsule_id = $capsule->id;
255
            $capsuleUser->user_id = $currentUser->id;
256
            $capsuleUser->access = CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED;
257
 
258
            if($capsuleUserMapper->insert($capsuleUser)) {
259
 
260
 
261
                $capsuleUser = $capsuleUserMapper->fetchOne($capsule->id);
262
                if($capsuleUser) {
263
                    $companyMicrolearningUserMapper = CompanyMicrolearningUserMapper::getInstance($this->adapter);
264
                    $companyMicrolearningUser = $companyMicrolearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
265
                    if($companyMicrolearningUser) {
266
                        $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
267
                        $companyMicrolearningUserMapper->update($companyMicrolearningUser);
268
 
269
                    } else {
270
                        $companyMicrolearningUser = new CompanyMicrolearningUser();
271
                        $companyMicrolearningUser->company_id = $capsuleUser->company_id;
272
                        $companyMicrolearningUser->user_id = $capsuleUser->user_id;
273
                        $companyMicrolearningUser->added_on = $capsuleUser->added_on;
274
                        $companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
275
 
276
                        $companyMicrolearningUserMapper->insert($companyMicrolearningUser);
277
                    }
278
                }
279
 
280
 
281
 
282
 
283
 
284
 
285
 
286
 
287
 
288
 
289
 
290
                return new JsonModel([
291
                    'success'   => true,
292
                    'data'   => 'LABEL_YOU_HAVE_BEEN_SUCCESSFULLY_ENROLLED'
293
                ]);
294
            } else {
295
                return new JsonModel([
296
                    'success'   => false,
297
                    'data'   => 'ERROR_UNAUTHORIZED'
298
                ]);
299
            }
300
 
301
 
302
 
303
 
304
 
305
 
306
        } else {
307
            return new JsonModel([
308
                'success' => false,
309
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
310
            ]);
311
        }
312
 
313
    }
314
 
315
    public function getCategoriesAction()
316
    {
317
        return new JsonModel([
318
            'success' => true,
319
            'data' => [
320
                'capsules' => 'Cápsulas'
321
            ]
322
        ]);
323
    }
324
 
325
}