Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 2956 | Rev 2958 | 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,
260
                        'time_elapsed' => Functions::timeElapsedString($dt->getTimestamp())
261
                    ]);
262
                }
2466 stevensc 263
 
1302 efrain 264
                $response = [
265
                    'success' => true,
266
                    'data' => $items
267
                ];
268
            } else {
2466 stevensc 269
 
270
                if ($user->location_id) {
271
                    $locationMapper = LocationMapper::getInstance($this->adapter);
272
                    $location = $locationMapper->fetchOne($user->location_id);
273
 
274
                    $country = $location->country;
275
                } else {
276
                    $country = '';
277
                }
278
 
279
                $profileVisitMapper = ProfileVisitMapper::getInstance($this->adapter);
280
                $visits = $profileVisitMapper->getTotalByVisitedId($currentUser->id);
281
 
282
                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
283
                $connections = $connectionMapper->fetchTotalConnectionByUser($currentUser->id);
284
 
1302 efrain 285
                $this->layout()->setTemplate('layout/layout.phtml');
286
                $viewModel = new ViewModel();
2466 stevensc 287
                $viewModel->setVariables([
288
                    'image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),
289
                    'fullname' => trim($user->first_name . ' ' . $user->last_name),
290
                    'description' => empty($userProfile->description) ? '' :  trim($userProfile->description),
291
                    'country' => $country,
292
                    'visits' => $visits,
293
                    'connections' => $connections
294
                ]);
295
 
1302 efrain 296
                $viewModel->setTemplate('leaders-linked/home/notifications.phtml');
2466 stevensc 297
                return $viewModel;
1302 efrain 298
            }
1 www 299
        } else {
300
            $response = [
301
                'success' => false,
302
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
303
            ];
304
        }
2466 stevensc 305
 
1 www 306
        return new JsonModel($response);
307
    }
2466 stevensc 308
 
309
 
2951 kerby 310
    public function markReadAction()
311
    {
312
 
2956 kerby 313
        $request = $this->getRequest();
2951 kerby 314
 
2956 kerby 315
        if ($request->isPost()) {
2951 kerby 316
 
2956 kerby 317
            $currentUserPlugin = $this->plugin('currentUserPlugin');
318
            $currentUser = $currentUserPlugin->getUser();
2951 kerby 319
 
2956 kerby 320
            $userMapper = UserMapper::getInstance($this->adapter);
2951 kerby 321
 
2956 kerby 322
            $notificationMapper = NotificationMapper::getInstance($this->adapter);
2951 kerby 323
 
2956 kerby 324
            $result = $notificationMapper->markAllNotificationsAsReadByUserId($currentUser->id);
2951 kerby 325
 
2956 kerby 326
            if ($result) {
327
                $this->logger->info('Se marco como leidas las notificaciones de usuario: ' . $currentUser->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
328
                $response = [
329
                    'success' => true,
330
                    'data' => 'LABEL_RECORD_UPDATED'
331
                ];
332
            } else {
333
                $response = [
334
                    'success' => false,
335
                    'data' => $notificationMapper->getError()
336
                ];
337
            }
2951 kerby 338
 
339
 
2956 kerby 340
        }else{
2951 kerby 341
            $response = [
342
                'success' => false,
343
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
344
            ];
345
 
2956 kerby 346
        }
2951 kerby 347
 
348
        return new JsonModel($response);
349
    }
350
 
1 www 351
    public function postAction()
352
    {
353
        $id = $this->params()->fromRoute('id');
2466 stevensc 354
 
1 www 355
        $postMapper = PostMapper::getInstance($this->adapter);
356
        $post = $postMapper->fetchOneByUuid($id);
2466 stevensc 357
 
358
        if (!$post || $post->status != Post::STATUS_ACTIVE) {
1 www 359
            $flashMessenger = $this->plugin('FlashMessenger');
2466 stevensc 360
 
361
            if (!$id) {
1 www 362
                $flashMessenger->addErrorMessage('ERROR_POST_NOT_AVAILABLE');
363
                return $this->redirect()->toRoute('dashboard');
364
            }
365
        }
2466 stevensc 366
 
367
 
1 www 368
        $this->layout()->setTemplate('layout/layout.phtml');
369
        $viewModel = new ViewModel();
370
        $viewModel->setTemplate('leaders-linked/home/post.phtml');
371
        $viewModel->setVariable('post', $post);
2466 stevensc 372
        return $viewModel;
1 www 373
    }
374
}