Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 2959 | Rev 3138 | 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
2466 stevensc 2
 
1 www 3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
use LeadersLinked\Model\Page;
14
use LeadersLinked\Mapper\NotificationMapper;
15
use LeadersLinked\Mapper\CompanyMapper;
16
use LeadersLinked\Mapper\CompanyUserMapper;
17
use LeadersLinked\Model\Company;
18
use LeadersLinked\Mapper\PageMapper;
19
use LeadersLinked\Mapper\MessageMapper;
2466 stevensc 20
use LeadersLinked\Mapper\UserMapper;
21
use LeadersLinked\Mapper\UserProfileMapper;
1 www 22
use LeadersLinked\Mapper\CompanyUserRoleMapper;
23
use LeadersLinked\Model\Role;
24
use LeadersLinked\Library\Functions;
2466 stevensc 25
use LeadersLinked\Mapper\ConnectionMapper;
26
use LeadersLinked\Mapper\LocationMapper;
1 www 27
use LeadersLinked\Mapper\PostMapper;
2466 stevensc 28
use LeadersLinked\Mapper\ProfileVisitMapper;
1 www 29
use LeadersLinked\Model\Post;
30
 
31
class HomeController extends AbstractActionController
32
{
33
    /**
34
     *
35
     * @var AdapterInterface
36
     */
37
    private $adapter;
2466 stevensc 38
 
39
 
1 www 40
    /**
41
     *
42
     * @var AbstractAdapter
43
     */
44
    private $cache;
2466 stevensc 45
 
1 www 46
    /**
47
     *
48
     * @var  LoggerInterface
49
     */
50
    private $logger;
51
 
2466 stevensc 52
 
1 www 53
    /**
54
     *
55
     * @var array
56
     */
57
    private $config;
2466 stevensc 58
 
1 www 59
    /**
60
     *
61
     * @param AdapterInterface $adapter
62
     * @param AbstractAdapter $cache
63
     * @param LoggerInterface $logger
64
     * @param array $config
65
     */
2466 stevensc 66
    public function __construct($adapter, $cache, $logger,  $config)
1 www 67
    {
68
        $this->adapter      = $adapter;
69
        $this->cache        = $cache;
70
        $this->logger       = $logger;
71
        $this->config       = $config;
72
    }
2466 stevensc 73
 
74
 
75
 
1 www 76
    public function indexAction()
77
    {
78
 
79
        $authService = new \Laminas\Authentication\AuthenticationService();
2466 stevensc 80
        if ($authService->hasIdentity()) {
81
            return $this->redirect()->toRoute('dashboard');
1 www 82
        } else {
2466 stevensc 83
            return $this->redirect()->toRoute('signin');
1 www 84
        }
85
    }
2466 stevensc 86
 
87
 
1 www 88
    public function dashboardAction()
89
    {
90
        $this->layout()->setTemplate('layout/layout.phtml');
91
        $viewModel = new ViewModel();
92
        $viewModel->setTemplate('leaders-linked/home/dashboard.phtml');
2466 stevensc 93
        return $viewModel;
1 www 94
    }
2466 stevensc 95
 
96
 
97
 
1 www 98
    public function privacyPolicyAction()
99
    {
100
        $pageMapper = PageMapper::getInstance($this->adapter);
101
        $page = $pageMapper->fetchOne(Page::PAGE_ID_PRIVACY_POLICY);
2466 stevensc 102
 
1 www 103
        $this->layout()->setTemplate('layout/layout.phtml');
104
        $viewModel = new ViewModel();
105
        $viewModel->setTemplate('leaders-linked/home/privacy-policy.phtml');
106
        $viewModel->setVariable('page', $page);
2466 stevensc 107
        return $viewModel;
1 www 108
    }
2466 stevensc 109
 
1 www 110
    public function cookiesAction()
111
    {
112
        $pageMapper = PageMapper::getInstance($this->adapter);
113
        $page = $pageMapper->fetchOne(Page::PAGE_ID_COOKIES);
2466 stevensc 114
 
1 www 115
        $this->layout()->setTemplate('layout/layout.phtml');
116
        $viewModel = new ViewModel();
117
        $viewModel->setTemplate('leaders-linked/home/cookies.phtml');
118
        $viewModel->setVariable('page', $page);
2466 stevensc 119
        return $viewModel;
1 www 120
    }
2466 stevensc 121
 
1 www 122
    public function professionalismPolicyAction()
123
    {
124
        //
2466 stevensc 125
 
1 www 126
        $pageMapper = PageMapper::getInstance($this->adapter);
127
        $page = $pageMapper->fetchOne(Page::PAGE_ID_PROFESSIONALISM_POLICY);
2466 stevensc 128
 
1 www 129
        $this->layout()->setTemplate('layout/layout.phtml');
130
        $viewModel = new ViewModel();
131
        $viewModel->setTemplate('leaders-linked/home/professionalism-policy');
132
        $viewModel->setVariable('page', $page);
2466 stevensc 133
        return $viewModel;
1 www 134
    }
2466 stevensc 135
 
136
 
1 www 137
    public function termsAndConditionsAction()
138
    {
139
        $pageMapper = PageMapper::getInstance($this->adapter);
140
        $page = $pageMapper->fetchOne(Page::PAGE_ID_TERMS_AND_CONDITIONS);
2466 stevensc 141
 
1 www 142
        $this->layout()->setTemplate('layout/layout.phtml');
143
        $viewModel = new ViewModel();
144
        $viewModel->setTemplate('leaders-linked/home/terms-and-conditions.phtml');
145
        $viewModel->setVariable('page', $page);
2466 stevensc 146
        return $viewModel;
1 www 147
    }
2466 stevensc 148
 
1 www 149
    public function checkSessionAction()
150
    {
151
 
152
        $request = $this->getRequest();
2466 stevensc 153
        if ($request->isGet()) {
154
 
1 www 155
            $currentUserPlugin = $this->plugin('currentUserPlugin');
2466 stevensc 156
            if (!$currentUserPlugin->hasIdentity()) {
1 www 157
                $flashMessenger = $this->plugin('FlashMessenger');
158
                $flashMessenger->addErrorMessage('ERROR_SESSION_NOT_FOUND');
2466 stevensc 159
 
1 www 160
                $response = [
161
                    'success' => false,
162
                    'data' => [
163
                        'message' =>  'ERROR_SESSION_NOT_FOUND',
164
                        'url' => $this->url()->fromRoute('signout')
165
                    ]
166
                ];
2466 stevensc 167
 
1 www 168
                return new JsonModel($response);
169
            }
2466 stevensc 170
 
1 www 171
            $currentUser = $currentUserPlugin->getUser();
2466 stevensc 172
 
173
 
174
            if ($currentUser->last_activity_on) {
1 www 175
                $last_activity_on = strtotime($currentUser->last_activity_on);
176
            } else {
177
                $last_activity_on = strtotime('-1 day');
178
            }
179
 
180
            $expiry_time = $last_activity_on + $this->config['leaderslinked.security.last_activity_expired'];
181
            if (time() > $expiry_time) {
2466 stevensc 182
                //$flashMessenger = $this->plugin('FlashMessenger');
183
                //$flashMessenger->addErrorMessage('ERROR_SESSION_EXPIRED');
1 www 184
 
185
                $response = [
186
                    'success' => false,
187
                    'data' => [
188
                        'message' => 'ERROR_SESSION_EXPIRED',
189
                        'url' => $this->url()->fromRoute('signout')
190
                    ]
191
                ];
192
            } else {
193
                $notificationMapper = NotificationMapper::getInstance($this->adapter);
194
                $total_notifications = $notificationMapper->fetchUnreadNotificationsCount($currentUser->id);
2466 stevensc 195
 
196
                $messageMapper = MessageMapper::getInstance($this->adapter);
1 www 197
                $total_messages =  $messageMapper->fetchCountUnreadMessagesReceiverId($currentUser->id);
198
                $response = [
199
                    'success' => true,
200
                    'data' => [
201
                        'total_notifications' => $total_notifications,
202
                        'total_messages' => $total_messages
203
                    ]
204
                ];
205
            }
206
        } else {
207
            $response = [
208
                'success' => false,
209
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
210
            ];
211
        }
2466 stevensc 212
 
1 www 213
        return new JsonModel($response);
214
    }
2466 stevensc 215
 
1 www 216
    public function notificationsAction()
217
    {
218
        $request = $this->getRequest();
2466 stevensc 219
        if ($request->isGet()) {
220
 
1 www 221
            $currentUserPlugin = $this->plugin('currentUserPlugin');
222
            $currentUser = $currentUserPlugin->getUser();
2466 stevensc 223
 
224
            $userMapper = UserMapper::getInstance($this->adapter);
225
            $user = $userMapper->fetchOne($currentUser->id);
226
 
227
            $userProfileMapper = UserProfileMapper::getInstance($this->adapter);
228
            $userProfile = $userProfileMapper->fetchOnePublicByUserId($currentUser->id);
229
 
1302 efrain 230
            $headers  = $request->getHeaders();
2466 stevensc 231
 
1302 efrain 232
            $isJson = false;
2466 stevensc 233
            if ($headers->has('Accept')) {
1302 efrain 234
                $accept = $headers->get('Accept');
2466 stevensc 235
 
1302 efrain 236
                $prioritized = $accept->getPrioritized();
2466 stevensc 237
 
238
                foreach ($prioritized as $key => $value) {
1302 efrain 239
                    $raw = trim($value->getRaw());
2466 stevensc 240
 
241
                    if (!$isJson) {
1302 efrain 242
                        $isJson = strpos($raw, 'json');
243
                    }
244
                }
1 www 245
            }
2466 stevensc 246
 
247
            if ($isJson) {
248
 
249
 
1302 efrain 250
                $notificationMapper = NotificationMapper::getInstance($this->adapter);
2957 kerby 251
                $records = $notificationMapper->fetchAllsReadByUserId($currentUser->id);
2466 stevensc 252
 
1302 efrain 253
                $items = [];
2466 stevensc 254
                foreach ($records as $record) {
1302 efrain 255
                    $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
2466 stevensc 256
 
257
                    array_push($items, [
1302 efrain 258
                        'message' => $record->message,
259
                        'link' => $record->url,
2958 kerby 260
                        'time_elapsed' => Functions::timeElapsedString($dt->getTimestamp()),
261
                        'time' => $dt->getTimestamp()
1302 efrain 262
                    ]);
263
                }
2466 stevensc 264
 
2958 kerby 265
                usort($items, function ($a, $b) {
266
 
267
                    if ($a['time'] == $b['time']) {
268
                        return 0;
269
                    } else {
2959 kerby 270
                        return $a['time'] < $b['time'] ? -1 : 1;
2958 kerby 271
                    }
272
 
273
                });
274
 
1302 efrain 275
                $response = [
276
                    'success' => true,
277
                    'data' => $items
278
                ];
279
            } else {
2466 stevensc 280
 
281
                if ($user->location_id) {
282
                    $locationMapper = LocationMapper::getInstance($this->adapter);
283
                    $location = $locationMapper->fetchOne($user->location_id);
284
 
285
                    $country = $location->country;
286
                } else {
287
                    $country = '';
288
                }
289
 
290
                $profileVisitMapper = ProfileVisitMapper::getInstance($this->adapter);
291
                $visits = $profileVisitMapper->getTotalByVisitedId($currentUser->id);
292
 
293
                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
294
                $connections = $connectionMapper->fetchTotalConnectionByUser($currentUser->id);
295
 
1302 efrain 296
                $this->layout()->setTemplate('layout/layout.phtml');
297
                $viewModel = new ViewModel();
2466 stevensc 298
                $viewModel->setVariables([
299
                    'image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),
300
                    'fullname' => trim($user->first_name . ' ' . $user->last_name),
301
                    'description' => empty($userProfile->description) ? '' :  trim($userProfile->description),
302
                    'country' => $country,
303
                    'visits' => $visits,
304
                    'connections' => $connections
305
                ]);
306
 
1302 efrain 307
                $viewModel->setTemplate('leaders-linked/home/notifications.phtml');
2466 stevensc 308
                return $viewModel;
1302 efrain 309
            }
1 www 310
        } else {
311
            $response = [
312
                'success' => false,
313
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
314
            ];
315
        }
2466 stevensc 316
 
1 www 317
        return new JsonModel($response);
318
    }
2466 stevensc 319
 
2960 kerby 320
    public function lastNotificationsAction()
321
    {
322
        $request = $this->getRequest();
323
        if ($request->isGet()) {
2466 stevensc 324
 
2960 kerby 325
            $currentUserPlugin = $this->plugin('currentUserPlugin');
326
            $currentUser = $currentUserPlugin->getUser();
327
 
328
            $notificationMapper = NotificationMapper::getInstance($this->adapter);
329
            $records = $notificationMapper->fetchAllsUnreadByUserId($currentUser->id);
330
 
331
            $items = [];
332
            foreach ($records as $record) {
333
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
334
 
335
                array_push($items, [
336
                    'message' => $record->message,
337
                    'link' => $record->url,
338
                    'time_elapsed' => Functions::timeElapsedString($dt->getTimestamp()),
339
                    'time' => $dt->getTimestamp()
340
                ]);
341
            }
342
 
343
            usort($items, function ($a, $b) {
344
 
345
                if ($a['time'] == $b['time']) {
346
                    return 0;
347
                } else {
348
                    return $a['time'] < $b['time'] ? -1 : 1;
349
                }
350
            });
351
 
352
            $count = $notificationMapper->fetchUnreadNotificationsCount($currentUser->id);
353
 
354
            $response = [
355
                'success' => true,
356
                'data' => $items,
357
                'unreadNotificationsCount' => $count
358
            ];
359
 
360
        } else {
361
            $response = [
362
                'success' => false,
363
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
364
            ];
365
        }
366
 
367
        return new JsonModel($response);
368
    }
369
 
2951 kerby 370
    public function markReadAction()
371
    {
372
 
2956 kerby 373
        $request = $this->getRequest();
2951 kerby 374
 
2956 kerby 375
        if ($request->isPost()) {
2951 kerby 376
 
2956 kerby 377
            $currentUserPlugin = $this->plugin('currentUserPlugin');
378
            $currentUser = $currentUserPlugin->getUser();
2951 kerby 379
 
2956 kerby 380
            $userMapper = UserMapper::getInstance($this->adapter);
2951 kerby 381
 
2956 kerby 382
            $notificationMapper = NotificationMapper::getInstance($this->adapter);
2951 kerby 383
 
2956 kerby 384
            $result = $notificationMapper->markAllNotificationsAsReadByUserId($currentUser->id);
2951 kerby 385
 
2956 kerby 386
            if ($result) {
387
                $this->logger->info('Se marco como leidas las notificaciones de usuario: ' . $currentUser->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
388
                $response = [
389
                    'success' => true,
390
                    'data' => 'LABEL_RECORD_UPDATED'
391
                ];
392
            } else {
393
                $response = [
394
                    'success' => false,
395
                    'data' => $notificationMapper->getError()
396
                ];
397
            }
2951 kerby 398
 
399
 
2956 kerby 400
        }else{
2951 kerby 401
            $response = [
402
                'success' => false,
403
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
404
            ];
405
 
2956 kerby 406
        }
2951 kerby 407
 
408
        return new JsonModel($response);
409
    }
410
 
1 www 411
    public function postAction()
412
    {
413
        $id = $this->params()->fromRoute('id');
2466 stevensc 414
 
1 www 415
        $postMapper = PostMapper::getInstance($this->adapter);
416
        $post = $postMapper->fetchOneByUuid($id);
2466 stevensc 417
 
418
        if (!$post || $post->status != Post::STATUS_ACTIVE) {
1 www 419
            $flashMessenger = $this->plugin('FlashMessenger');
2466 stevensc 420
 
421
            if (!$id) {
1 www 422
                $flashMessenger->addErrorMessage('ERROR_POST_NOT_AVAILABLE');
423
                return $this->redirect()->toRoute('dashboard');
424
            }
425
        }
2466 stevensc 426
 
427
 
1 www 428
        $this->layout()->setTemplate('layout/layout.phtml');
429
        $viewModel = new ViewModel();
430
        $viewModel->setTemplate('leaders-linked/home/post.phtml');
431
        $viewModel->setVariable('post', $post);
2466 stevensc 432
        return $viewModel;
1 www 433
    }
434
}