Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
11339 nelberth 1
<?php
16181 anderson 2
 
3
declare(strict_types=1);
4
 
11339 nelberth 5
namespace LeadersLinked\Controller;
6
 
16247 anderson 7
use LeadersLinked\Library\Zoom;
11339 nelberth 8
use Laminas\Log\LoggerInterface;
9
use Laminas\View\Model\JsonModel;
10
use Laminas\View\Model\ViewModel;
16247 anderson 11
use LeadersLinked\Model\ChatUser;
12
use LeadersLinked\Model\ChatGroup;
13
use LeadersLinked\Model\Connection;
11339 nelberth 14
use LeadersLinked\Library\Functions;
15
use LeadersLinked\Mapper\UserMapper;
16247 anderson 16
use LeadersLinked\Mapper\UtilMapper;
17
use LeadersLinked\Model\ChatMessage;
18
use LeadersLinked\Model\ZoomMeeting;
19
use LeadersLinked\Model\ChatGroupUser;
20
use Laminas\Db\Adapter\AdapterInterface;
21
use LeadersLinked\Form\Chat\ZoomAddForm;
22
use LeadersLinked\Mapper\ChatUserMapper;
23
use LeadersLinked\Model\ZoomMeetingUser;
24
use LeadersLinked\Mapper\ChatGroupMapper;
25
use LeadersLinked\Model\ChatGroupMessage;
16182 anderson 26
use LeadersLinked\Mapper\ConnectionMapper;
16247 anderson 27
use LeadersLinked\Form\CreateChatGroupForm;
16182 anderson 28
use LeadersLinked\Mapper\ChatMessageMapper;
16247 anderson 29
use LeadersLinked\Mapper\ZoomMeetingMapper;
30
use LeadersLinked\Mapper\ChatGroupUserMapper;
31
use LeadersLinked\Model\ChatGroupUserMessage;
32
use LeadersLinked\Mapper\ZoomMeetingUserMapper;
16182 anderson 33
use LeadersLinked\Mapper\ChatGroupMessageMapper;
16247 anderson 34
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
35
use Laminas\Mvc\Controller\AbstractActionController;
16182 anderson 36
use LeadersLinked\Mapper\ChatGroupUserMessageMapper;
11339 nelberth 37
 
38
 
39
class ChatController extends AbstractActionController
16181 anderson 40
{
11339 nelberth 41
    /**
42
     *
43
     * @var AdapterInterface
44
     */
45
    private $adapter;
46
 
47
    /**
48
     *
49
     * @var AbstractAdapter
50
     */
51
    private $cache;
52
 
53
    /**
54
     *
55
     * @var LoggerInterface
56
     */
57
    private $logger;
58
 
59
    /**
60
     *
61
     * @var array
62
     */
63
    private $config;
64
 
65
    /**
66
     *
67
     * @param AdapterInterface $adapter
68
     * @param AbstractAdapter $cache
69
     * @param LoggerInterface $logger
70
     * @param array $config
71
     */
72
    public function __construct($adapter, $cache, $logger, $config)
73
    {
74
        $this->adapter  = $adapter;
75
        $this->cache    = $cache;
76
        $this->logger   = $logger;
77
        $this->config   = $config;
16181 anderson 78
    }
11339 nelberth 79
 
80
    /**
81
     *
82
     * Ruta usada para mostrar el chat en pantalla completa usada en los moviles
83
     *
84
     */
85
    public function indexAction()
86
    {
87
        $currentUserPlugin = $this->plugin('currentUserPlugin');
88
        $currentUser = $currentUserPlugin->getUser();
16181 anderson 89
 
90
        $connectionMapper = ConnectionMapper::getInstance($this->adapter);
91
        $connectionIds = $connectionMapper->fetchAllConnectionsByUserReturnIds($currentUser->id);
92
 
11339 nelberth 93
        $contacts = [];
16181 anderson 94
        if ($connectionIds) {
11339 nelberth 95
            $userMapper = UserMapper::getInstance($this->adapter);
96
            $users = $userMapper->fetchAllByIds($connectionIds);
16181 anderson 97
 
98
            foreach ($users as $user) {
11339 nelberth 99
                $username = trim($user->first_name . ' ' . $user->last_name);
14590 efrain 100
                $status = $user->online ? 'Online' : 'Offline';
11339 nelberth 101
                $user_image = $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]);
16181 anderson 102
 
103
                array_push($contacts, ['id' => $user->uuid, 'status' => $status, 'name' => $username, 'image' => $user_image]);
11339 nelberth 104
            }
105
        }
16181 anderson 106
 
11339 nelberth 107
        $groups = [];
108
        $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
109
        $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
16181 anderson 110
 
11339 nelberth 111
        $results = $chatGroupUserMapper->fetchAllByUserId($currentUser->id);
16181 anderson 112
        if (is_array($results)) {
113
            foreach ($results as $r) {
114
 
11339 nelberth 115
                $chatOwner = $chatGroupUserMapper->fetchOwnerByGroupId($r->group_id);
16181 anderson 116
                $userOwner = $userMapper->fetchOne($chatOwner->user_id);
11339 nelberth 117
                $chatGroup = $chatGroupMapper->fetchOne($r->group_id);
16181 anderson 118
 
119
                array_push($groups, ['id' => $chatGroup->uuid, 'name' => $chatGroup->name, 'owner_id' => $userOwner->uuid]);
11339 nelberth 120
            }
121
        }
16181 anderson 122
 
11339 nelberth 123
        /*
124
        $this->layout()->setTemplate('layout/layout-chat.phtml');
125
        $this->layout()->setVariables([
126
            'is_chat' => true
127
        ]);*/
11428 nelberth 128
        $this->layout()->setTemplate('layout/layout-backend');
11339 nelberth 129
        $viewModel = new ViewModel();
130
        $viewModel->setTemplate('leaders-linked/chat/chat.phtml');
131
        $viewModel->setVariables([
16181 anderson 132
            'contacts' => $contacts,
133
            'groups' => $groups,
11339 nelberth 134
            'user_id' => $currentUser->id,
135
            'is_chat' => true
136
        ]);
16181 anderson 137
        return $viewModel;
11339 nelberth 138
    }
16181 anderson 139
 
11339 nelberth 140
    /**
141
     * Recuperamos los contactos y grupos
142
     * tiene que enviarse un petición GET a la siguiente url: /chat/heart-beat
143
     * retorna un json en caso de ser  positivo
144
     * [
145
     *  'success' : true,
146
     *  'data' : [
147
     *     [
148
     *       'url_leave'                                => 'url para abandonar el grupo en caso de no ser el propietario',
149
     *       'url_delete'                               => 'url para borrar el grupo si es el propietario',
150
     *       'url_add_user_to_group'                    => 'url para agregar un usuario al grupo si es el propietario',
151
     *       'url_get_contacts_availables_for_group'    => 'url para obtener los usuarios disponibles para agregarlos al grupo',
152
     *       'url_get_contact_group_list'               => 'url para obtener los usuarios del grupo si es el propietario',
153
     *       'url_clear'                                => 'url para limpiar los mensajes del grupo',
14692 efrain 154
     *       'url_close'                                => 'url para marcar como cerrado el chat',
155
     *       'url_open'                                 => 'url para marcar como abierto el chat',
11339 nelberth 156
     *       'url_send'                                 => 'url para enviar un mensaje',
157
     *       'url_upload'                               => 'url para subir un archivo, imagen o video',
158
     *       'url_get_all_messages'                     => 'url para para obtener los mensajes',
159
     *       'url_mark_seen'                            => 'url para marcar los mensajes como vistos'
160
     *       'url_mark_received'                        => 'url para marcar los mensajes como recibios'
161
     *       'id'                                       => 'id del grupo encriptado',
162
     *       'name'                                     => 'nombre del grupo',
163
     *       'type'                                     => 'group', //fixed
164
     *       'is_open'                                  => 'true/false',
165
     *       'unsee_messages'                           => 'true/false',
166
     *       'unread_messages'                          => 'true/false'
167
     *      ],
168
     *      [
169
     *        'url_clear'               => 'url para limpiar los mensajes del grupo',
14692 efrain 170
     *        'url_close'               => 'url para marcar como cerrado el chat',
171
     *        'url_open'                => 'url para marcar como abierto el chat',
11339 nelberth 172
     *        'url_send'                => 'url para enviar un mensaje',
173
     *        'url_upload'              => 'url para subir un archivo, imagen o video',
174
     *        'url_get_all_messages'    => 'url para para obtener los mensajes',
14692 efrain 175
     *        'url_mark_seen'           => 'url para marcar los mensajes como vistos'
176
     *        'url_mark_received'       => 'url para marcar los mensajes como recibios'
11339 nelberth 177
     *        'id'                      => 'id del usuario encriptado',
178
     *        'name'                    => 'nombre del usuario',
179
     *        'image'                   => 'imagen del usuario',
180
     *        'type'                    => 'user' //fixed,
181
     *        'profile'                 => 'url del profile',
182
     *        'online'                  => 'true/false',
183
     *        'is_open'                 => 'true/false',
184
     *        'unsee_messages'          => 'true/false'
185
     *        'unread_messages'         => 'true/false'
186
     *     ]
187
     * ]
188
     * En caso de ser negativo puede haber 2 formatos
189
     * [
190
     *  'success' : false,
191
     *  'data' : mensaje de error
192
     * ]
193
     * o
194
     * [
195
     *  'success' : false,
196
     *  'data' : [
197
     *      'fieldname' : [
198
     *          'mensaje de error'
199
     *      ]
200
     *  ]
201
     * ]
202
     * @return \Laminas\View\Model\JsonModel
203
     */
204
    public function heartBeatAction()
205
    {
16181 anderson 206
 
11339 nelberth 207
        $request    = $this->getRequest();
16181 anderson 208
        if ($request->isGet()) {
209
 
210
 
11339 nelberth 211
            $currentUserPlugin = $this->plugin('currentUserPlugin');
212
            $currentUser = $currentUserPlugin->getUser();
213
 
214
            $userMapper = UserMapper::getInstance($this->adapter);
215
            $userMapper->updateChatOnlineStatus($currentUser->id);
216
 
217
            $chats      = [];
16181 anderson 218
 
11339 nelberth 219
            $chatGroupMapper            = ChatGroupMapper::getInstance($this->adapter);
220
            $chatGroupUserMapper        = ChatGroupUserMapper::getInstance($this->adapter);
221
            $chatGroupUserMessageMapper = ChatGroupUserMessageMapper::getInstance($this->adapter);
16181 anderson 222
 
223
 
11339 nelberth 224
            $results = $chatGroupUserMapper->fetchAllByUserId($currentUser->id);
16181 anderson 225
 
11339 nelberth 226
            if (is_array($results)) {
16181 anderson 227
                foreach ($results as $r) {
228
 
229
                    $chatGroup = $chatGroupMapper->fetchOne($r->group_id);
11339 nelberth 230
                    $chatUserOwner = $chatGroupUserMapper->fetchOwnerByGroupId($chatGroup->id);
14627 efrain 231
                    $chatUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
16181 anderson 232
 
233
 
14627 efrain 234
                    $is_open = $chatUser->open == ChatUser::OPEN_YES;
11339 nelberth 235
                    $not_seen_messages     = $chatGroupUserMessageMapper->existNotSeenMessages($chatGroup->id, $currentUser->id);
236
                    $not_received_messages = $chatGroupUserMessageMapper->existNotReceivedMessages($chatGroup->id, $currentUser->id);
16181 anderson 237
                    if ($chatGroup->high_performance_team_group_id != NULL) {
11339 nelberth 238
                        $chat = [
239
                            'url_leave'                             => '',
11711 nelberth 240
                            'url_delete'                            => '',
241
                            'url_add_user_to_group'                 => '',
11716 nelberth 242
                            'url_get_contact_group_list'            => '',
11715 nelberth 243
                            'url_get_contacts_availables_for_group' => '',
11339 nelberth 244
                            'url_clear'                             => $this->url()->fromRoute('chat/clear', ['id' => $chatGroup->uuid]),
245
                            'url_close'                             => $this->url()->fromRoute('chat/close', ['id' => $chatGroup->uuid]),
14692 efrain 246
                            'url_open'                              => $this->url()->fromRoute('chat/open', ['id' => $chatGroup->uuid]),
11339 nelberth 247
                            'url_send'                              => $this->url()->fromRoute('chat/send', ['id' => $chatGroup->uuid]),
248
                            'url_upload'                            => $this->url()->fromRoute('chat/upload', ['id' => $chatGroup->uuid]),
249
                            'url_get_all_messages'                  => $this->url()->fromRoute('chat/get-all-messages', ['id' => $chatGroup->uuid]),
250
                            'url_mark_seen'                         => $this->url()->fromRoute('chat/mark-seen', ['id' => $chatGroup->uuid]),
251
                            'url_mark_received'                     => $this->url()->fromRoute('chat/mark-received', ['id' => $chatGroup->uuid]),
252
                            'id'                                    => $chatGroup->uuid,
253
                            'name'                                  => $chatGroup->name,
254
                            'type'                                  => 'group',
255
                            'is_open'                               => $is_open ? 1 : 0,
256
                            'not_seen_messages'                     => $not_seen_messages,
257
                            'not_received_messages'                 => $not_received_messages,
16181 anderson 258
 
11339 nelberth 259
                        ];
16181 anderson 260
                    } else {
261
                        if ($chatUserOwner->user_id == $currentUser->id) {
262
 
11711 nelberth 263
                            $chat = [
264
                                'url_leave'                             => '',
265
                                'url_delete'                            => $this->url()->fromRoute('chat/delete-group', ['group_id' => $chatGroup->uuid]),
266
                                'url_add_user_to_group'                 => $this->url()->fromRoute('chat/add-user-to-group', ['group_id' => $chatGroup->uuid]),
267
                                'url_get_contact_group_list'            => $this->url()->fromRoute('chat/get-contact-group-list', ['group_id' => $chatGroup->uuid]),
268
                                'url_get_contacts_availables_for_group' => $this->url()->fromRoute('chat/get-contacts-availables-for-group', ['group_id' => $chatGroup->uuid]),
269
                                'url_clear'                             => $this->url()->fromRoute('chat/clear', ['id' => $chatGroup->uuid]),
270
                                'url_close'                             => $this->url()->fromRoute('chat/close', ['id' => $chatGroup->uuid]),
14692 efrain 271
                                'url_open'                              => $this->url()->fromRoute('chat/open', ['id' => $chatGroup->uuid]),
11711 nelberth 272
                                'url_send'                              => $this->url()->fromRoute('chat/send', ['id' => $chatGroup->uuid]),
273
                                'url_upload'                            => $this->url()->fromRoute('chat/upload', ['id' => $chatGroup->uuid]),
274
                                'url_get_all_messages'                  => $this->url()->fromRoute('chat/get-all-messages', ['id' => $chatGroup->uuid]),
275
                                'url_mark_seen'                         => $this->url()->fromRoute('chat/mark-seen', ['id' => $chatGroup->uuid]),
276
                                'url_mark_received'                     => $this->url()->fromRoute('chat/mark-received', ['id' => $chatGroup->uuid]),
277
                                'id'                                    => $chatGroup->uuid,
278
                                'name'                                  => $chatGroup->name,
279
                                'type'                                  => 'group',
280
                                'is_open'                               => $is_open ? 1 : 0,
281
                                'not_seen_messages'                     => $not_seen_messages,
282
                                'not_received_messages'                 => $not_received_messages,
16181 anderson 283
 
11711 nelberth 284
                            ];
285
                        } else {
16181 anderson 286
 
11711 nelberth 287
                            $chat = [
288
                                'url_delete'                    => '',
289
                                'url_add_user_to_group'         => '',
290
                                'url_get_contact_group_list'    => $this->url()->fromRoute('chat/get-contact-group-list', ['group_id' => $chatGroup->uuid]),
291
                                'url_leave'                     => $this->url()->fromRoute('chat/leave-group', ['group_id' => $chatGroup->uuid]),
292
                                'url_clear'                     => $this->url()->fromRoute('chat/clear', ['id' => $chatGroup->uuid]),
293
                                'url_close'                     => $this->url()->fromRoute('chat/close', ['id' => $chatGroup->uuid]),
14692 efrain 294
                                'url_open'                      => $this->url()->fromRoute('chat/open', ['id' => $chatGroup->uuid]),
11711 nelberth 295
                                'url_send'                      => $this->url()->fromRoute('chat/send', ['id' => $chatGroup->uuid]),
296
                                'url_upload'                    => $this->url()->fromRoute('chat/upload', ['id' => $chatGroup->uuid]),
297
                                'url_get_all_messages'          => $this->url()->fromRoute('chat/get-all-messages', ['id' => $chatGroup->uuid]),
298
                                'url_mark_seen'                 => $this->url()->fromRoute('chat/mark-seen', ['id' => $chatGroup->uuid]),
299
                                'url_mark_received'             => $this->url()->fromRoute('chat/mark-received', ['id' => $chatGroup->uuid]),
300
                                'id'                            => $chatGroup->uuid,
301
                                'name'                          => $chatGroup->name,
302
                                'type'                          => 'group',
303
                                'is_open'                       => $is_open ? 1 : 0,
304
                                'not_seen_messages'             => $not_seen_messages,
305
                                'not_received_messages'         => $not_received_messages,
306
                            ];
307
                        }
11339 nelberth 308
                    }
309
 
16181 anderson 310
 
311
                    array_push($chats, $chat);
11339 nelberth 312
                }
313
            }
16181 anderson 314
 
11339 nelberth 315
            $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
316
            $chatMessageMapper = ChatMessageMapper::getInstance($this->adapter);
16181 anderson 317
 
11339 nelberth 318
            $connectionMapper = ConnectionMapper::getInstance($this->adapter);
319
            $connectionIds = $connectionMapper->fetchAllConnectionsByUserReturnIds($currentUser->id);
320
 
16181 anderson 321
 
322
 
11339 nelberth 323
            if ($connectionIds) {
16181 anderson 324
 
11339 nelberth 325
                $userMapper = UserMapper::getInstance($this->adapter);
326
                $users = $userMapper->fetchAllByIds($connectionIds);
14590 efrain 327
 
16181 anderson 328
                foreach ($users as $user) {
329
 
330
 
331
 
11339 nelberth 332
                    $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
16181 anderson 333
 
334
 
335
                    if ($chatUser) {
336
 
337
                        if ($currentUser->id == $chatUser->user_id1) {
14627 efrain 338
                            $is_open = $chatUser->user_open1 == ChatUser::OPEN_YES;
339
                        } else {
340
                            $is_open = $chatUser->user_open2 == ChatUser::OPEN_YES;
341
                        }
11339 nelberth 342
                        $not_received_messages = $chatMessageMapper->existNotReceivedMessagesByChatIdAndToId($chatUser->id, $currentUser->id);
343
                        $not_seen_messages = $chatMessageMapper->existNotSeenMessagesByChatIdAndToId($chatUser->id, $currentUser->id);
344
                    } else {
345
                        $is_open = false;
346
                        $not_seen_messages = false;
347
                        $not_received_messages = false;
348
                    }
16181 anderson 349
 
350
 
11339 nelberth 351
                    $chat = [
352
                        'url_clear'                 => $this->url()->fromRoute('chat/clear', ['id' => $user->uuid]),
353
                        'url_close'                 => $this->url()->fromRoute('chat/close', ['id' => $user->uuid]),
14692 efrain 354
                        'url_open'                  => $this->url()->fromRoute('chat/open', ['id' => $user->uuid]),
11339 nelberth 355
                        'url_send'                  => $this->url()->fromRoute('chat/send', ['id' => $user->uuid]),
356
                        'url_upload'                => $this->url()->fromRoute('chat/upload', ['id' => $user->uuid]),
357
                        'url_mark_seen'             => $this->url()->fromRoute('chat/mark-seen', ['id' => $user->uuid]),
358
                        'url_mark_received'         => $this->url()->fromRoute('chat/mark-received', ['id' => $user->uuid]),
359
                        'url_get_all_messages'      => $this->url()->fromRoute('chat/get-all-messages', ['id' => $user->uuid]),
16252 anderson 360
                        'url_zoom'                  => $this->url()->fromRoute('chat/zoom', ['id' => $user->uuid, 'type' => 'chat']),
11339 nelberth 361
                        'id'                        => $user->uuid,
362
                        'name'                      => trim($user->first_name . ' ' . $user->last_name),
363
                        'image'                     => $this->url()->fromRoute('storage', ['code' => $user->uuid, 'type' => 'user', 'filename' => $user->image]),
11366 nelberth 364
                        /*'profile'                   => $this->url()->fromRoute('profile/view', ['id' =>$user->uuid]),*/
365
                        'type'                      => 'user',
14590 efrain 366
                        'online'                    => $user->online ? 1 : 0,
11365 nelberth 367
                        'is_open'                   => $is_open ? 1 : 0,
368
                        'not_seen_messages'         => $not_seen_messages,
369
                        'not_received_messages'     => $not_received_messages,
11339 nelberth 370
                    ];
16181 anderson 371
 
11339 nelberth 372
                    array_push($chats, $chat);
373
                }
374
            }
16181 anderson 375
 
11339 nelberth 376
            $userMapper->updateLastHeartBeat($currentUser->id);
377
 
378
            $response = [
379
                'success' => true,
380
                'data' => $chats
381
            ];
382
        } else {
383
            $response = [
384
                'success' => false,
385
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
386
            ];
387
        }
16181 anderson 388
 
11339 nelberth 389
        return new JsonModel($response);
390
    }
391
 
16181 anderson 392
 
393
 
11339 nelberth 394
    /**
395
     * Esta función crea un grupo y asigna al usuario actual como el owner del mismo,
396
     * tiene que enviarse un petición POST a la siguiente url: /chat/create-group
397
     * con el siguiente parámetro
398
     * name = un string con un máximo de 50 carácteres
399
     * retorna un json en caso de ser  positivo
400
     * [
401
     *  'success' : true,
402
     *  'data' : ID del grupo encriptado
403
     * ]
404
     * En caso de ser negativo puede haber 2 formatos
405
     * [
406
     *  'success' : false,
407
     *  'data' : mensaje de error
408
     * ]
409
     * o
410
     * [
411
     *  'success' : false,
412
     *  'data' : [
413
     *      'fieldname' : [
414
     *          'mensaje de error'
415
     *      ]
416
     *  ]
417
     * ]
418
     * @return \Laminas\View\Model\JsonModel
419
     */
420
    public function createGroupAction()
421
    {
422
        $request    = $this->getRequest();
16181 anderson 423
        if ($request->isPost()) {
11589 nelberth 424
            $form = new  CreateChatGroupForm();
11339 nelberth 425
            $form->setData($request->getPost()->toArray());
16181 anderson 426
 
427
            if ($form->isValid()) {
11339 nelberth 428
                $dataPost = (array) $form->getData();
429
                $name = $dataPost['name'];
16181 anderson 430
 
431
 
11339 nelberth 432
                $currentUserPlugin = $this->plugin('currentUserPlugin');
433
                $currentUser = $currentUserPlugin->getUser();
16181 anderson 434
 
11339 nelberth 435
                $chatGroup = new ChatGroup();
436
                $chatGroup->name = $name;
437
 
438
 
439
                $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
440
                $result = $chatGroupMapper->insert($chatGroup);
441
                if ($result) {
442
                    $chatGroup = $chatGroupMapper->fetchOne($chatGroup->id);
16181 anderson 443
 
444
 
445
 
11339 nelberth 446
                    $chatGroupUser = new ChatGroupUser();
447
                    $chatGroupUser->group_id = $chatGroup->id;
448
                    $chatGroupUser->user_id = $currentUser->id;
449
                    $chatGroupUser->owner = ChatGroupUser::OWNER_YES;
16181 anderson 450
 
11339 nelberth 451
                    $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
452
                    $result = $chatGroupUserMapper->insert($chatGroupUser);
16181 anderson 453
 
454
                    if ($result) {
11339 nelberth 455
                        $fullpath_chat = $this->config['leaderslinked.fullpath.chat'];
456
                        $dirpath = $fullpath_chat . $chatGroup->uuid;
16181 anderson 457
                        if (!file_exists($dirpath)) {
11339 nelberth 458
                            mkdir($dirpath, 0777, true);
459
                            chmod($dirpath, 0777);
460
                        }
16181 anderson 461
 
11339 nelberth 462
                        $response = [
463
                            'success' => true,
464
                            'data' => $chatGroup->uuid,
465
                        ];
466
                    } else {
467
                        $response = [
468
                            'success' => false,
469
                            'data' => $chatGroupUserMapper->getError(),
470
                        ];
471
                    }
472
                } else {
473
                    $response = [
474
                        'success' => false,
475
                        'data' => $chatGroupMapper->getError(),
476
                    ];
477
                }
478
            } else {
479
                $messages = [];
480
                $form_messages = (array) $form->getMessages();
16181 anderson 481
                foreach ($form_messages  as $fieldname => $field_messages) {
482
 
11339 nelberth 483
                    $messages[$fieldname] = array_values($field_messages);
484
                }
16181 anderson 485
 
11339 nelberth 486
                return new JsonModel([
487
                    'success'   => false,
488
                    'data'   => $messages
489
                ]);
490
            }
491
        } else {
492
            $response = [
493
                'success' => false,
494
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
495
            ];
496
        }
497
 
498
        return new JsonModel($response);
499
    }
500
 
501
    /**
502
     * Esta función crea un grupo y asigna al usuario al mismo, solo el owner puede hacerlo
503
     * Es una petición POST el url que contiene el ID encriptado del chat (/chat/add-user-to-group/:group_id)
504
     * Parámetros del route
505
     * :group_id = id del grupo encriptado
506
     * Parámetro post
507
     * uid = id encriptado del usuario
508
     * retorna un json en caso de ser  positivo
509
     * [
510
     *  'success' : true,
511
     *  'data' : [
512
     *     [
513
     *       'url_remove_from_group' => 'url para remover el usuario del grupo',
514
     *       'id'                    => 'id del usuario encriptado',
515
     *       'name'                  => 'nombre del usuario',
516
     *       'image'                 => 'imagen del usuario',
517
     *       'type'                  => 'user' //fixed,
518
     *       'online'                => $online,
519
     *     ]
520
     * ]
521
     * En caso de ser negativo puede haber 2 formatos
522
     * [
523
     *  'success' : false,
524
     *  'data' : mensaje de error
525
     * ]
526
     * o
527
     * [
528
     *  'success' : false,
529
     *  'data' : [
530
     *      'fieldname' : [
531
     *          'mensaje de error'
532
     *      ]
533
     *  ]
534
     * ]
535
     * @return \Laminas\View\Model\JsonModel
536
     */
537
    public function addUserToGroupAction()
538
    {
539
        $request    = $this->getRequest();
16181 anderson 540
        if ($request->isPost()) {
11339 nelberth 541
            $currentUserPlugin = $this->plugin('currentUserPlugin');
542
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 543
 
11339 nelberth 544
            $group_id   = $this->params()->fromRoute('group_id');
545
            $user_id    = $this->params()->fromPost('uid');
16181 anderson 546
 
547
            if (empty($group_id) || empty($user_id)) {
11339 nelberth 548
                return new JsonModel([
549
                    'success' => false,
550
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
551
                ]);
552
            }
16181 anderson 553
 
11339 nelberth 554
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
555
            $chatGroup = $chatGroupMapper->fetchOneByUuid($group_id);
16181 anderson 556
            if (!$chatGroup) {
11339 nelberth 557
                return new JsonModel([
558
                    'success' => false,
559
                    'data' => 'ERROR_CHAT_GROUP_NOT_FOUND'
560
                ]);
561
            }
16181 anderson 562
            if ($chatGroup->high_performance_team_group_id != NULL) {
11722 nelberth 563
                return new JsonModel([
564
                    'success' => false,
565
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
566
                ]);
567
            }
11339 nelberth 568
            $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
569
            $chatGroupOwner = $chatGroupUserMapper->fetchOwnerByGroupId($chatGroup->id);
16181 anderson 570
 
571
            if ($chatGroupOwner->user_id != $currentUser->id) {
11339 nelberth 572
                return new JsonModel([
573
                    'success' => false,
574
                    'data' => 'ERROR_CHAT_GROUP_YOU_ARE_NOT_OWNER'
575
                ]);
576
            }
16181 anderson 577
 
11339 nelberth 578
            $userMapper = UserMapper::getInstance($this->adapter);
579
            $user = $userMapper->fetchOneByUuid($user_id);
16181 anderson 580
 
581
            if (!$user) {
11339 nelberth 582
                return new JsonModel([
583
                    'success' => false,
584
                    'data' => 'ERROR_USER_NOT_FOUND'
585
                ]);
586
            }
16181 anderson 587
 
588
            if ($chatGroupOwner->user_id == $user->id) {
11339 nelberth 589
                return new JsonModel([
590
                    'success' => false,
591
                    'data' => 'ERROR_CHAT_I_CAN_NOT_ADD_HIMSELF'
592
                ]);
593
            }
16181 anderson 594
 
595
 
11339 nelberth 596
            $connectionMapper = ConnectionMapper::getInstance($this->adapter);
597
            $connection = $connectionMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
16181 anderson 598
            if (!$connection) {
11339 nelberth 599
                return new JsonModel([
600
                    'success' => false,
601
                    'data' => 'ERROR_THIS_USER_IS_NOT_A_CONNECTION'
602
                ]);
603
            }
16181 anderson 604
 
11339 nelberth 605
            $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $user->id);
16181 anderson 606
            if ($chatGroupUser) {
11339 nelberth 607
                return new JsonModel([
608
                    'success' => false,
609
                    'data' => 'ERROR_THIS_USER_ALREADY_EXISTS_IN_THIS_GROUP'
610
                ]);
611
            }
612
 
16181 anderson 613
 
11339 nelberth 614
            $chatGroupUser = new ChatGroupUser();
615
            $chatGroupUser->group_id    = $chatGroup->id;
616
            $chatGroupUser->user_id     = $user->id;
617
            $chatGroupUser->owner       = ChatGroupUser::OWNER_NO;
16181 anderson 618
 
11339 nelberth 619
            $result = $chatGroupUserMapper->insert($chatGroupUser);
16181 anderson 620
            if (!$result) {
11339 nelberth 621
                return new JsonModel([
622
                    'success' => false,
623
                    'data' => $chatGroupUserMapper->getError()
624
                ]);
625
            }
16181 anderson 626
 
627
 
628
 
629
 
11339 nelberth 630
            return new JsonModel([
631
                'success' => true,
632
                'data' => [
633
                    'url_remove_from_group' => $this->url()->fromRoute('chat/remove-user-from-group', ['group_id' => $chatGroup->uuid, 'user_id' => $user->uuid]),
634
                    'id'        => $user->uuid,
635
                    'name'      => trim($user->first_name . ' ' . $user->last_name),
636
                    'image'     => $this->url()->fromRoute('storage', ['code' => $user->uuid, 'type' => 'user', 'filename' => $user->image]),
637
                    'type'      => 'user',
14590 efrain 638
                    'online'    => $user->online,
11339 nelberth 639
                ]
16181 anderson 640
            ]);
11339 nelberth 641
        } else {
642
            return new JsonModel([
643
                'success' => false,
644
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
645
            ]);
646
        }
647
    }
648
 
649
    /**
650
     * Esta función remueve el usuario del grupo
651
     * Es una petición POST el url que contiene el ID encriptado del chat (/chat/remove-user-from-group/:group_id/:user_id)
652
     * y la cuál se recibe en la función heartBeat.
653
     * Parámetros del route
654
     * group_id= id encriptado del grupo
655
     * user_id = id encriptado del usuario
656
     * retorna un json en caso de ser  positivo
657
     * [
658
     *  'success' : true,
659
     * ]
660
     * En caso de ser negativo puede haber 2 formatos
661
     * [
662
     *  'success' : false,
663
     *  'data' : mensaje de error
664
     * ]
665
     * @return \Laminas\View\Model\JsonModel
666
     */
667
    public function removeUserFromGroupAction()
668
    {
669
        $request    = $this->getRequest();
16181 anderson 670
        if ($request->isPost()) {
671
 
11339 nelberth 672
            $currentUserPlugin = $this->plugin('currentUserPlugin');
673
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 674
 
11339 nelberth 675
            $user_id = $this->params()->fromRoute('user_id');
676
            $group_id = $this->params()->fromRoute('group_id');
16181 anderson 677
 
678
            if (empty($group_id) || empty($user_id)) {
11339 nelberth 679
                return new JsonModel([
680
                    'success' => false,
681
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
682
                ]);
683
            }
16181 anderson 684
 
11339 nelberth 685
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
686
            $chatGroup = $chatGroupMapper->fetchOneByUuid($group_id);
16181 anderson 687
            if (!$chatGroup) {
11339 nelberth 688
                return new JsonModel([
689
                    'success' => false,
690
                    'data' => 'ERROR_CHAT_GROUP_NOT_FOUND'
691
                ]);
692
            }
16181 anderson 693
            if ($chatGroup->high_performance_team_group_id != NULL) {
11722 nelberth 694
                return new JsonModel([
695
                    'success' => false,
696
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
697
                ]);
698
            }
11339 nelberth 699
            $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
700
            $chatGroupOwner = $chatGroupUserMapper->fetchOwnerByGroupId($chatGroup->id);
16181 anderson 701
 
702
            if ($chatGroupOwner->user_id != $currentUser->id) {
11339 nelberth 703
                return new JsonModel([
704
                    'success' => false,
705
                    'data' => 'ERROR_CHAT_GROUP_YOU_ARE_NOT_OWNER'
706
                ]);
707
            }
16181 anderson 708
 
11339 nelberth 709
            $userMapper = UserMapper::getInstance($this->adapter);
710
            $user = $userMapper->fetchOneByUuid($user_id);
16181 anderson 711
 
712
            if (!$user) {
11339 nelberth 713
                return new JsonModel([
714
                    'success' => false,
715
                    'data' => 'ERROR_USER_NOT_FOUND'
716
                ]);
717
            }
16181 anderson 718
 
719
            if ($chatGroupOwner->user_id == $user->id) {
11339 nelberth 720
                return new JsonModel([
721
                    'success' => false,
722
                    'data' => 'ERROR_CHAT_I_CAN_NOT_REMOVE_MYSELF'
723
                ]);
724
            }
725
 
16181 anderson 726
 
727
 
728
 
11339 nelberth 729
            $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $user->id);
16181 anderson 730
            if (!$chatGroupUser) {
11339 nelberth 731
                return new JsonModel([
732
                    'success' => false,
733
                    'data' => 'ERROR_CHAT_GROUP_YOU_NOT_MEMBER'
734
                ]);
735
            }
736
 
16181 anderson 737
 
11339 nelberth 738
            $response = $chatGroupUserMapper->deleteByGroupIdAndUserId($chatGroup->id, $user->id);
16181 anderson 739
            if ($response) {
11339 nelberth 740
                return new JsonModel([
741
                    'success' => true
742
                ]);
743
            } else {
744
                return new JsonModel([
745
                    'success' => false,
746
                    'data' => $chatGroupMapper->getError()
747
                ]);
748
            }
749
        } else {
750
            return new JsonModel([
751
                'success' => false,
752
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
753
            ]);
754
        }
755
    }
756
 
16181 anderson 757
 
11339 nelberth 758
    /**
759
     * Abandonar un grupo
760
     * Es una petición POST el url que contiene el ID encriptado del chat (/chat/leave-group/:group_id) y la cuál se recibe en la función heartBeat.
761
     * Parámetros del route
762
     * :group_id = id del grupo encriptado
763
     * En caso de una respuesta positiva
764
     * [
765
     *      'success' => true,
766
     * ]
767
     * En caso de un respuesta negativa
768
     * [
769
     *      'success' => false,
770
     *      'data' => (string) 'mensaje_de_error'
771
     * ]
772
     * @return \Laminas\View\Model\JsonModel
773
     */
774
    public function leaveGroupAction()
775
    {
776
        $request    = $this->getRequest();
16181 anderson 777
        if ($request->isPost()) {
11339 nelberth 778
            $currentUserPlugin = $this->plugin('currentUserPlugin');
779
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 780
 
11339 nelberth 781
            $result = false;
782
            $group_id = $this->params()->fromRoute('group_id');
16181 anderson 783
 
784
 
785
            if (empty($group_id)) {
11339 nelberth 786
                return new JsonModel([
787
                    'success' => false,
788
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
789
                ]);
790
            }
16181 anderson 791
 
792
 
11339 nelberth 793
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
794
            $chatGroup = $chatGroupMapper->fetchOneByUuid($group_id);
16181 anderson 795
            if (!$chatGroup) {
11339 nelberth 796
                return new JsonModel([
797
                    'success' => false,
798
                    'data' => 'ERROR_GROUP_NOT_FOUND'
799
                ]);
800
            }
16181 anderson 801
            if ($chatGroup->high_performance_team_group_id != NULL) {
11722 nelberth 802
                return new JsonModel([
803
                    'success' => false,
804
                    'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
805
                ]);
806
            }
11339 nelberth 807
            $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
808
            $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
16181 anderson 809
            if (!$chatGroupUser) {
11339 nelberth 810
                return new JsonModel([
811
                    'success' => false,
812
                    'data' => 'ERROR_CHAT_GROUP_YOU_NOT_MEMBER'
813
                ]);
814
            }
16181 anderson 815
 
816
            if ($chatGroupUser->owner == ChatGroupUser::OWNER_YES) {
11339 nelberth 817
                return new JsonModel([
818
                    'success' => false,
819
                    'data' => 'ERROR_CHAT_GROUP_YOU_ARE_OWNER'
820
                ]);
821
            }
16181 anderson 822
 
823
 
11339 nelberth 824
            $result = $chatGroupUserMapper->deleteByGroupIdAndUserId($chatGroupUser->group_id, $chatGroupUser->user_id);
16181 anderson 825
            if ($result) {
11339 nelberth 826
                return new JsonModel([
827
                    'success' => true
828
                ]);
829
            } else {
830
                return new JsonModel([
831
                    'success' => false,
832
                    'data' => $chatGroupMapper->getError()
833
                ]);
834
            }
835
        } else {
836
            return new JsonModel([
837
                'success' => false,
838
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
839
            ]);
840
        }
16181 anderson 841
    }
11339 nelberth 842
 
843
    /**
844
     *
845
     * @param ChatGroup $chatGroup
846
     * @param int $page
847
     * @return array
848
     */
849
    private function getAllMessagesForChatGroup($chatGroup, $page = 0)
850
    {
851
        $currentUserPlugin = $this->plugin('currentUserPlugin');
852
        $currentUser = $currentUserPlugin->getUser();
16181 anderson 853
 
11339 nelberth 854
        $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
855
        $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
16181 anderson 856
 
857
        if (!$chatGroupUser) {
11339 nelberth 858
            return [
859
                'success' => false,
860
                'data' => 'ERROR_CHAT_GROUP_YOU_NOT_MEMBER'
861
            ];
862
        }
14692 efrain 863
 
11339 nelberth 864
        $chatGroupMessageMapper = ChatGroupMessageMapper::getInstance($this->adapter);
865
        $paginator = $chatGroupMessageMapper->getPaginatorByGroupId($chatGroup->id, $page);
16181 anderson 866
 
11339 nelberth 867
        $pages = $paginator->count();
868
        $page  = $paginator->getCurrentPageNumber();
16181 anderson 869
 
11339 nelberth 870
        $items = [];
871
        $users = [];
872
        $userMapper = UserMapper::getInstance($this->adapter);
16181 anderson 873
 
14590 efrain 874
        $utilMapper = UtilMapper::getInstance($this->adapter);
875
        $now = $utilMapper->getDatebaseNow();
11339 nelberth 876
 
16181 anderson 877
        foreach ($paginator as $m) {
878
 
11339 nelberth 879
            if (isset($users[$m->sender_id])) {
880
                $userdata_from = $users[$m->sender_id];
881
            } else {
882
                $userdata_from = $userMapper->fetchOne($m->sender_id);
16181 anderson 883
                $users[$m->sender_id] = $userdata_from;
11339 nelberth 884
            }
16181 anderson 885
 
11339 nelberth 886
            $pic_from = $this->url()->fromRoute('storage', [
887
                'code' => $userdata_from->uuid,
888
                'type' => 'user',
889
                'filename' => $userdata_from->image
890
            ]);
891
            $u =  $userdata_from->id == $currentUser->id ? 1 : 2;
16181 anderson 892
            if ($m->type == ChatGroupMessage::TYPE_TEXT) {
11339 nelberth 893
                $content = $this->sanitize($m->content);
894
            } else {
895
                $content = $this->url()->fromRoute('storage', ['code' => $chatGroup->uuid, 'type' => 'chat', 'filename' => $m->content]);
896
            }
16181 anderson 897
 
14590 efrain 898
            $msgtime = $this->timeAgo($m->added_on, $now);
11339 nelberth 899
            array_push($items, [
16181 anderson 900
                'user_name' => trim($userdata_from->first_name . ' ' . $userdata_from->last_name),
11339 nelberth 901
                'user_id' => $userdata_from->uuid,
902
                'user_image' => $pic_from,
903
                'u' => $u,
904
                'mtype' => $m->type,
905
                'm' => $content,
906
                'time' => $msgtime,
907
                'id' => $m->uuid
908
            ]);
909
        }
16181 anderson 910
 
11339 nelberth 911
        return [
912
            'success' => true,
913
            'data' => [
914
                'page' => $page,
915
                'pages' => $pages,
916
                'items' => $items
917
            ]
918
        ];
919
    }
16181 anderson 920
 
11339 nelberth 921
    /**
922
     *
923
     * @param ChatUser $chatUser
924
     * @param int $page
925
     * @return array
926
     */
927
    private function getAllMessagesForChatUser($chatUser, $page = 0)
928
    {
929
        $currentUserPlugin = $this->plugin('currentUserPlugin');
930
        $currentUser = $currentUserPlugin->getUser();
14692 efrain 931
 
932
 
11339 nelberth 933
        $chatMessageMapper = ChatMessageMapper::getInstance($this->adapter);
934
        $paginator = $chatMessageMapper->getAllMessagesPaginatorByChatId($chatUser->id, $page);
935
        $pages = $paginator->count();
936
        $page = $paginator->getCurrentPageNumber();
16181 anderson 937
 
11339 nelberth 938
        $items = [];
939
        $users = [];
940
        $userMapper = UserMapper::getInstance($this->adapter);
16181 anderson 941
 
14590 efrain 942
        $utilMapper = UtilMapper::getInstance($this->adapter);
943
        $now = $utilMapper->getDatebaseNow();
16181 anderson 944
 
945
 
11339 nelberth 946
        $messages = $paginator->getCurrentItems();
947
        foreach ($messages as $m) {
948
            $from_id = (int) $m->from_id;
949
            $to_id = (int) $m->to_id;
16181 anderson 950
 
11339 nelberth 951
            if (isset($users[$from_id])) {
952
                $userdata_from = $users[$from_id];
953
            } else {
954
                $userdata_from = $userMapper->fetchOne($from_id);
955
                $users[$from_id] = $userdata_from;
956
            }
16181 anderson 957
 
11339 nelberth 958
            $pic_from = $this->url()->fromRoute('storage', [
959
                'code' => $userdata_from->uuid,
960
                'type' => 'user',
961
                'filename' => $userdata_from->image
962
            ]);
16181 anderson 963
 
11339 nelberth 964
            if (isset($users[$to_id])) {
965
                $userdata_to = $users[$to_id];
966
            } else {
967
                $userdata_to = $userMapper->fetchOne($to_id);
16181 anderson 968
                $users[$to_id] = $userdata_to;
11339 nelberth 969
            }
16181 anderson 970
 
11339 nelberth 971
            $u = $m->from_id == $currentUser->id ? 1 : 2;
16181 anderson 972
 
973
 
974
            if ($m->type == ChatMessage::TYPE_TEXT) {
11339 nelberth 975
                $content = $this->sanitize($m->content);
976
            } else {
977
                $content = $this->url()->fromRoute('storage', ['code' => $chatUser->uuid, 'type' => 'chat', 'filename' => $m->content]);
978
            }
16181 anderson 979
 
980
 
981
 
14590 efrain 982
            $msgtime = $this->timeAgo($m->added_on, $now);
11339 nelberth 983
            array_push($items, [
984
                'user_name' => ($userdata_from->first_name . ' ' . $userdata_from->last_name),
985
                'user_id' => $userdata_from->uuid,
986
                'user_image' => $pic_from,
987
                'u' => $u,
988
                'mtype' => $m->type,
989
                'm' => $content,
990
                'time' => $msgtime,
991
                'id' => $m->uuid,
992
            ]);
993
        }
14590 efrain 994
 
16181 anderson 995
 
996
 
997
 
11339 nelberth 998
        return [
999
            'success' => true,
1000
            'data' => [
1001
                'page' => $page,
1002
                'pages' => $pages,
1003
                'items' => $items,
14590 efrain 1004
                'online' => 1
11339 nelberth 1005
            ]
1006
        ];
1007
    }
1008
 
1009
    /**
1010
     * Recupera los mensajes de un chat individual o grupal
1011
     * Es una petición GET el url que contiene el ID encriptado del chat (/chat/get-all-messages/:id) y la cuál se recibe en la función heartBeat.
1012
     * En caso de una respuesta positiva
1013
     * [
1014
     *      'success' => true,
1015
     *      'data' => [
1016
     *          'page' => 'entero número de página actúal',
1017
     *          'pages' => 'entero número total de páginaS',
1018
     *              'items' => [
1019
     *              'user_name' => 'nombre del usuario que envia',
1020
     *              'user_id_encript' => 'id encriptado del usuario que envia',
1021
     *              'user_image' => 'ruta de la imagén del usuario que envia',
1022
     *              'u' => '1 = si el usuario que envia es el usuario actual , 2 si no lo es',
1023
     *              'mtype' => 'text | file',
1024
     *              'm' => 'texto del mensaje o url del archivo',
1025
     *              'time' => 'cadena que da el tiempo del mensaje ejemplo 1seg',
1026
     *          ],
1027
     *          'online' => 'true/false'
1028
     *      ]
1029
     * ]
1030
     * En caso de un respuesta negativa
1031
     * [
1032
     *      'success' => false,
1033
     *      'data' => (string) 'mensaje_de_error'
1034
     * ]
1035
     * @return \Laminas\View\Model\JsonModel
1036
     */
1037
    public function getAllMessagesAction()
1038
    {
16181 anderson 1039
 
11339 nelberth 1040
        $request    = $this->getRequest();
16181 anderson 1041
        if ($request->isGet()) {
11339 nelberth 1042
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1043
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 1044
 
1045
 
11339 nelberth 1046
            $id     = $this->params()->fromRoute('id');
1047
            $page   = filter_var($this->params()->fromQuery('page', 0), FILTER_SANITIZE_NUMBER_INT);
16181 anderson 1048
 
1049
            if (!$id) {
11339 nelberth 1050
                return new JsonModel([
1051
                    'success' => false,
1052
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
1053
                ]);
1054
            }
16181 anderson 1055
 
11339 nelberth 1056
            /**** Mensajes de un chat grupal ****/
1057
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
1058
            $chatGroup = $chatGroupMapper->fetchOneByUuid($id);
1059
            if ($chatGroup) {
1060
                $response = $this->getAllMessagesForChatGroup($chatGroup, $page);
1061
                return new JsonModel($response);
1062
            } else {
16181 anderson 1063
 
11339 nelberth 1064
                $userMapper = UserMapper::getInstance($this->adapter);
1065
                $user = $userMapper->fetchOneByUuid($id);
16181 anderson 1066
                if (!$user) {
11339 nelberth 1067
                    return new JsonModel([
1068
                        'success' => false,
1069
                        'data' => 'ERROR_USER_NOT_FOUND'
1070
                    ]);
1071
                }
1072
 
16181 anderson 1073
 
1074
 
1075
 
1076
 
1077
 
11339 nelberth 1078
                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
1079
                $connection = $connectionMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
16181 anderson 1080
                if (!$connection || $connection->status != Connection::STATUS_ACCEPTED) {
1081
 
11339 nelberth 1082
                    return new JsonModel([
1083
                        'success' => false,
1084
                        'data' => 'ERROR_THIS_USER_IS_NOT_A_CONNECTION'
1085
                    ]);
1086
                }
1087
                $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
1088
                $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
16181 anderson 1089
                if (!$chatUser) {
11339 nelberth 1090
                    $chatUser = new ChatUser();
1091
                    $chatUser->user_id1 = $currentUser->id;
1092
                    $chatUser->user_id2 = $user->id;
16181 anderson 1093
 
11339 nelberth 1094
                    $response = $chatUserMapper->insert($chatUser);
16181 anderson 1095
 
1096
 
1097
                    if (!$response) {
11339 nelberth 1098
                        return new JsonModel([
1099
                            'success' => false,
1100
                            'data' => $chatUserMapper->getError()
1101
                        ]);
1102
                    }
16181 anderson 1103
 
11339 nelberth 1104
                    $chatUser = $chatUserMapper->fetchOne($chatUser->id);
1105
                    $fullpath_chat = $this->config['leaderslinked.fullpath.chat'];
1106
                    $dirpath = $fullpath_chat . $chatUser->uuid;
16181 anderson 1107
                    if (!file_exists($dirpath)) {
11339 nelberth 1108
                        mkdir($dirpath, 0777, true);
1109
                        chmod($dirpath, 0777);
1110
                    }
1111
                }
16181 anderson 1112
 
1113
 
1114
 
11339 nelberth 1115
                $response = $this->getAllMessagesForChatUser($chatUser, $page);
1116
                return new JsonModel($response);
1117
            }
1118
        } else {
1119
            return new JsonModel([
1120
                'success' => false,
1121
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1122
            ]);
1123
        }
1124
    }
1125
 
1126
    /**
1127
     * Envia un mensaje a un chat individual o grupal
1128
     * Es una petición POST el url que contiene el ID encriptado del chat (/chat/send/:id) y la cuál se recibe en la función heartBeat.
1129
     * Parámetros del route
1130
     * :id = id del chat encriptado
1131
     * Como parámentro solo se espera un campo
1132
     * message: string
1133
     * En caso de una respuesta positiva
1134
     * [
1135
     *      'success' => true,
1136
     *      'user_name' => 'nombre del usuario que envia',
1137
     *      'user_id_encripted' => 'id encriptado del usuario que envia',
1138
     *      'user_image' => 'ruta de la imagén del usuario que envia',
1139
     *      'u' => '1 = si el usuario que envia es el usuario actual , 2 si no lo es',
1140
     *      'mtype' => 'text | file',
1141
     *      'm' => 'texto del mensaje o url del archivo',
1142
     *      'time' => 'cadena que da el tiempo del mensaje ejemplo 1seg',
16181 anderson 1143
     * ]
11339 nelberth 1144
     * En caso de un respuesta negativa
1145
     * [
1146
     *      'success' => false,
1147
     *      'data' => (string) 'mensaje_de_error'
1148
     * ]
1149
     * @return \Laminas\View\Model\JsonModel
1150
     */
1151
    public function sendAction()
1152
    {
16181 anderson 1153
 
11339 nelberth 1154
        $request    = $this->getRequest();
16181 anderson 1155
        if ($request->isPost()) {
11339 nelberth 1156
            $id         = $this->params()->fromRoute('id');
1157
            $message    = trim(filter_var($this->params()->fromPost('message', ''), FILTER_SANITIZE_STRING));
16181 anderson 1158
 
1159
            if (!$id || empty($message)) {
11339 nelberth 1160
                return new JsonModel([
1161
                    'success' => false,
1162
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
1163
                ]);
16181 anderson 1164
            }
1165
 
14590 efrain 1166
            $utilMapper = UtilMapper::getInstance($this->adapter);
1167
            $now = $utilMapper->getDatebaseNow();
16181 anderson 1168
 
11339 nelberth 1169
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1170
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 1171
 
11339 nelberth 1172
            $userMapper = UserMapper::getInstance($this->adapter);
1173
            $sender_result = $userMapper->fetchOne($currentUser->id);
1174
            $sender_name = trim($sender_result->first_name . ' ' . $sender_result->last_name);
1175
            $sender_pic = $this->url()->fromRoute('storage', [
1176
                'code' => $sender_result->uuid,
1177
                'type' => 'user',
1178
                'filename' => $sender_result->image
1179
            ]);
16181 anderson 1180
 
11339 nelberth 1181
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
1182
            $chatGroup = $chatGroupMapper->fetchOneByUuid($id);
16181 anderson 1183
            if ($chatGroup) {
1184
 
11339 nelberth 1185
                $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
1186
                $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
16181 anderson 1187
 
1188
                if (!$chatGroupUser) {
11339 nelberth 1189
                    return new JsonModel([
1190
                        'success' => false,
1191
                        'data' => 'ERROR_CHAT_GROUP_YOU_NOT_MEMBER'
1192
                    ]);
1193
                }
16181 anderson 1194
 
11339 nelberth 1195
                $chatGroupMessage = new ChatGroupMessage();
1196
                $chatGroupMessage->sender_id = $currentUser->id;
1197
                $chatGroupMessage->group_id = $chatGroup->id;
1198
                $chatGroupMessage->content = $message;
1199
                $chatGroupMessage->type = ChatGroupMessage::TYPE_TEXT;
16181 anderson 1200
 
11339 nelberth 1201
                $chatGroupMessageMapper = ChatGroupMessageMapper::getInstance($this->adapter);
1202
                $result = $chatGroupMessageMapper->insert($chatGroupMessage);
16181 anderson 1203
                if (!$result) {
11339 nelberth 1204
                    return new JsonModel([
1205
                        'success' => false,
1206
                        'data' => $chatGroupMessageMapper->getError()
1207
                    ]);
1208
                }
1209
                $chatGroupMessage = $chatGroupMessageMapper->fetchOne($chatGroupMessage->id);
1210
 
16181 anderson 1211
 
11339 nelberth 1212
                $chatGroupUserMessage = new ChatGroupUserMessage();
1213
                $chatGroupUserMessage->group_id = $chatGroupMessage->group_id;
1214
                $chatGroupUserMessage->message_id = $chatGroupMessage->id;
1215
                $chatGroupUserMessage->receiver_id = $currentUser->id;
1216
                $chatGroupUserMessage->recd = ChatGroupUserMessage::RECD_YES;
1217
                $chatGroupUserMessage->seen = ChatGroupUserMessage::SEEN_NO;
16181 anderson 1218
 
11339 nelberth 1219
                $chatGroupUserMessageMapper = ChatGroupUserMessageMapper::getInstance($this->adapter);
1220
                $result = $chatGroupUserMessageMapper->insert($chatGroupUserMessage);
16181 anderson 1221
                if (!$result) {
11339 nelberth 1222
                    return new JsonModel([
1223
                        'success' => false,
1224
                        'data' => $chatGroupUserMessageMapper->getError()
1225
                    ]);
1226
                }
16181 anderson 1227
 
1228
 
11339 nelberth 1229
                $results = $chatGroupUserMapper->fetchAllByGroupId($chatGroup->id);
16181 anderson 1230
                foreach ($results as $r) {
11339 nelberth 1231
                    if ($r->user_id != $currentUser->id) {
1232
                        $chatGroupUserMessage               = new ChatGroupUserMessage();
1233
                        $chatGroupUserMessage->group_id     = $chatGroupMessage->group_id;
1234
                        $chatGroupUserMessage->message_id   = $chatGroupMessage->id;
1235
                        $chatGroupUserMessage->receiver_id  = $r->user_id;
1236
                        $chatGroupUserMessage->recd         = ChatGroupUserMessage::RECD_NO;
1237
                        $chatGroupUserMessage->seen         = ChatGroupUserMessage::SEEN_NO;
16181 anderson 1238
 
11339 nelberth 1239
                        $result = $chatGroupUserMessageMapper->insert($chatGroupUserMessage);
16181 anderson 1240
                        if (!$result) {
11339 nelberth 1241
                            return new JsonModel([
1242
                                'success' => false,
1243
                                'data' => $chatGroupUserMessageMapper->getError()
1244
                            ]);
1245
                        }
1246
                    }
1247
                }
16181 anderson 1248
 
14627 efrain 1249
                $userMapper->updateLastActivity($currentUser->id);
16181 anderson 1250
 
14590 efrain 1251
                $msgtime = $this->timeAgo($now, $now);
11339 nelberth 1252
                return new JsonModel([
1253
                    'success' => true,
1254
                    'data' => [
1255
                        'user_name'         => $sender_name,
1256
                        'user_id_encripted' => $sender_result->uuid,
1257
                        'user_image'        => $sender_pic,
1258
                        'u'                 => 1,
1259
                        'mtype'             => 'text',
1260
                        'm'                 => $message,
1261
                        'time'              => $msgtime,
1262
                        'id'                => $chatGroupMessage->uuid,
1263
                    ]
1264
                ]);
1265
            } else {
1266
                $userMapper = UserMapper::getInstance($this->adapter);
1267
                $user = $userMapper->fetchOneByUuid($id);
16181 anderson 1268
                if (!$user) {
11339 nelberth 1269
                    return new JsonModel([
1270
                        'success' => false,
1271
                        'data' => 'ERROR_USER_NOT_FOUND'
1272
                    ]);
1273
                }
16181 anderson 1274
 
1275
 
11339 nelberth 1276
                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
1277
                $connection = $connectionMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
16181 anderson 1278
                if (!$connection || $connection->status != Connection::STATUS_ACCEPTED) {
1279
 
11339 nelberth 1280
                    return new JsonModel([
1281
                        'success' => false,
1282
                        'data' => 'ERROR_THIS_USER_IS_NOT_A_CONNECTION'
1283
                    ]);
1284
                }
1285
                $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
1286
                $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
16181 anderson 1287
                if (!$chatUser) {
11339 nelberth 1288
                    $chatUser = new ChatUser();
1289
                    $chatUser->user_id1 = $currentUser->id;
1290
                    $chatUser->user_id2 = $user->id;
16181 anderson 1291
 
11339 nelberth 1292
                    $response = $chatUserMapper->insert($chatUser);
16181 anderson 1293
                    if (!$response) {
11339 nelberth 1294
                        return new JsonModel([
1295
                            'success' => false,
1296
                            'data' => $chatUserMapper->getError()
1297
                        ]);
1298
                    }
16181 anderson 1299
 
11339 nelberth 1300
                    $chatUser = $chatUserMapper->fetchOne($chatUser->id);
1301
                    $fullpath_chat = $this->config['leaderslinked.fullpath.chat'];
1302
                    $dirpath = $fullpath_chat . $chatUser->uuid;
16181 anderson 1303
                    if (!file_exists($dirpath)) {
11339 nelberth 1304
                        mkdir($dirpath, 0777, true);
1305
                        chmod($dirpath, 0777);
1306
                    }
1307
                }
16181 anderson 1308
 
1309
 
1310
 
11339 nelberth 1311
                $chatMessage = new ChatMessage();
1312
                $chatMessage->chat_id   = $chatUser->id;
1313
                $chatMessage->from_id   = $currentUser->id;
1314
                $chatMessage->to_id     = $user->id;
1315
                $chatMessage->content   = $message;
1316
                $chatMessage->type      = ChatMessage::TYPE_TEXT;
1317
                $chatMessage->recd      = ChatMessage::RECD_NO;
1318
                $chatMessage->seen      = ChatMessage::SEEN_NO;
16181 anderson 1319
 
11339 nelberth 1320
                $chatMessageMapper = ChatMessageMapper::getInstance($this->adapter);
1321
                $result = $chatMessageMapper->insert($chatMessage);
16181 anderson 1322
                if (!$result) {
11339 nelberth 1323
                    return new JsonModel([
1324
                        'success' => false,
1325
                        'data' => $chatMessageMapper->getError()
1326
                    ]);
1327
                }
16181 anderson 1328
 
11339 nelberth 1329
                $chatMessage = $chatMessageMapper->fetchOne($chatMessage->id);
16181 anderson 1330
 
14590 efrain 1331
                $msgtime = $this->timeAgo($chatMessage->added_on, $now);
14627 efrain 1332
                $userMapper->updateLastActivity($currentUser->id);
16181 anderson 1333
 
1334
                if ($currentUser->id == $chatUser->user_id1) {
14688 efrain 1335
                    $chatUserMapper->markIsOpen2($chatUser->id);
14687 efrain 1336
                } else {
14688 efrain 1337
                    $chatUserMapper->markIsOpen1($chatUser->id);
14687 efrain 1338
                }
16181 anderson 1339
 
11339 nelberth 1340
                return new JsonModel([
1341
                    'success' => true,
1342
                    'data' => [
1343
                        'user_name'     => $sender_name,
1344
                        'user_id'       => $sender_result->uuid,
1345
                        'user_image'    => $sender_pic,
1346
                        'u'             => 1,
1347
                        'mtype'         => ChatMessage::TYPE_TEXT,
1348
                        'm'             => $message,
1349
                        'time'          => $msgtime,
1350
                        'id'            => $chatMessage->uuid,
1351
                    ]
16181 anderson 1352
                ]);
11339 nelberth 1353
            }
1354
            return new JsonModel($response);
1355
        } else {
1356
            return new JsonModel([
1357
                'success' => false,
1358
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1359
            ]);
1360
        }
16181 anderson 1361
    }
11339 nelberth 1362
 
1363
    /**
1364
     * Esta función recuperar los contactos disponibles para agregarlos a un grupo
1365
     * Es una petición GET el url que contiene el ID encriptado del chat (/chat/get-contacts-availables-for-group/:group_id) y la cuál se recibe en la función heartBeat.
1366
     * con el siguiente parámetro
1367
     * uid = id encriptado del usuario
1368
     * retorna un json en caso de ser  positivo
1369
     * [
1370
     *  'success' : true,
1371
     *  'data' : [
1372
     *     [
1373
     *       'id'                    => 'id del usuario encriptado',
1374
     *       'name'                  => 'nombre del usuario',
1375
     *       'image'                 => 'imagen del usuario',
1376
     *       'type'                  => 'user' //fixed,
1377
     *       'online'                => $online,
1378
     *     ]
1379
     * ]
1380
     * En caso de ser negativo puede haber 2 formatos
1381
     * [
1382
     *  'success' : false,
1383
     *  'data' : mensaje de error
1384
     * ]
1385
     * @return \Laminas\View\Model\JsonModel
1386
     */
1387
    public function contactAvailableGroupListAction()
1388
    {
1389
        $request    = $this->getRequest();
16181 anderson 1390
        if ($request->isGet()) {
11339 nelberth 1391
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1392
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 1393
 
11339 nelberth 1394
            $id = $this->params()->fromRoute('group_id');
16181 anderson 1395
            if (!$id) {
11339 nelberth 1396
                return new JsonModel([
1397
                    'success' => false,
1398
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
1399
                ]);
16181 anderson 1400
            }
1401
 
11339 nelberth 1402
            $userMapper = UserMapper::getInstance($this->adapter);
1403
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
1404
            $chatGroup = $chatGroupMapper->fetchOneByUuid($id);
16181 anderson 1405
 
1406
            if (!$chatGroup) {
11339 nelberth 1407
                return new JsonModel([
1408
                    'success' => false,
1409
                    'data' => 'ERROR_GROUP_NOT_FOUND'
1410
                ]);
1411
            }
16181 anderson 1412
 
11339 nelberth 1413
            $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
1414
            $chatGroupOwner = $chatGroupUserMapper->fetchOwnerByGroupId($chatGroup->id);
16181 anderson 1415
 
1416
            if ($chatGroupOwner->user_id != $currentUser->id) {
11339 nelberth 1417
                return new JsonModel([
1418
                    'success' => false,
1419
                    'data' => 'ERROR_CHAT_GROUP_YOU_ARE_NOT_OWNER'
1420
                ]);
1421
            }
16181 anderson 1422
 
1423
 
1424
 
11339 nelberth 1425
            $contact_ids = [];
1426
            $contacts = $chatGroupUserMapper->fetchAllByGroupId($chatGroup->id);
16181 anderson 1427
            foreach ($contacts as $contact) {
11339 nelberth 1428
                array_push($contact_ids, $contact->user_id);
1429
            }
16181 anderson 1430
 
11339 nelberth 1431
            $connectionMapper = ConnectionMapper::getInstance($this->adapter);
1432
            $connection_ids = $connectionMapper->fetchAllConnectionsByUserReturnIds($currentUser->id);
16181 anderson 1433
            $connection_ids = array_filter($connection_ids, function ($var) use ($contact_ids) {
1434
                return !in_array($var, $contact_ids);
11339 nelberth 1435
            });
16181 anderson 1436
 
1437
 
11339 nelberth 1438
            $items = [];
16181 anderson 1439
            foreach ($connection_ids as $connection_id) {
11339 nelberth 1440
                $user = $userMapper->fetchOne($connection_id);
16181 anderson 1441
                if (!$user) {
11339 nelberth 1442
                    continue;
1443
                }
16181 anderson 1444
 
11339 nelberth 1445
                $name   = trim($user->first_name . ' ' . $user->last_name);
1446
                $image  = $this->url()->fromRoute('storage', [
1447
                    'code' => $user->uuid,
1448
                    'type' => 'user',
1449
                    'filename' => $user->image
1450
                ]);
1451
 
14590 efrain 1452
 
11339 nelberth 1453
 
16181 anderson 1454
 
11339 nelberth 1455
                array_push($items, [
1456
                    'id'        => $user->uuid,
1457
                    'name'      => $name,
1458
                    'image'     => $image,
14590 efrain 1459
                    'online'    => $user->online,
11339 nelberth 1460
                ]);
16181 anderson 1461
            }
1462
 
14627 efrain 1463
            $userMapper->updateLastActivity($currentUser->id);
16181 anderson 1464
 
11339 nelberth 1465
            return new JsonModel([
1466
                'success' => true,
1467
                'data' => $items,
1468
            ]);
1469
        } else {
1470
            return new JsonModel([
1471
                'success' => false,
1472
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1473
            ]);
1474
        }
1475
    }
1476
 
1477
    /**
1478
     * Esta función recuperar los contactos de un grupo
1479
     * Es una petición GET el url que contiene el ID encriptado del chat (/chat/get-contact-group-list/:group_id) y la cuál se recibe en la función heartBeat.
1480
     * con el siguiente parámetro
1481
     * uid = id encriptado del usuario
1482
     * retorna un json en caso de ser  positivo
1483
     * [
1484
     *  'success' : true,
1485
     *  'data' : [
1486
     *     [
1487
     *       'url_remove_from_group' => 'url para remover el usuario del grupo',
1488
     *       'id'                    => 'id del usuario encriptado',
1489
     *       'name'                  => 'nombre del usuario',
1490
     *       'image'                 => 'imagen del usuario',
1491
     *       'type'                  => 'user' //fixed,
1492
     *       'online'                => $online,
1493
     *     ]
1494
     * ]
1495
     * En caso de ser negativo puede haber 2 formatos
1496
     * [
1497
     *  'success' : false,
1498
     *  'data' : mensaje de error
1499
     * ]
1500
     * o
1501
     * [
1502
     *  'success' : false,
1503
     *  'data' : [
1504
     *      'fieldname' : [
1505
     *          'mensaje de error'
1506
     *      ]
1507
     *  ]
1508
     * ]
1509
     * @return \Laminas\View\Model\JsonModel
1510
     */
1511
 
1512
    public function contactGroupListAction()
1513
    {
16181 anderson 1514
 
11339 nelberth 1515
        $request    = $this->getRequest();
16181 anderson 1516
        if ($request->isGet()) {
11339 nelberth 1517
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1518
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 1519
 
11339 nelberth 1520
            $id = $this->params()->fromRoute('group_id');
16181 anderson 1521
            if (!$id) {
11339 nelberth 1522
                return new JsonModel([
1523
                    'success' => false,
1524
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
1525
                ]);
16181 anderson 1526
            }
1527
 
11339 nelberth 1528
            $userMapper = UserMapper::getInstance($this->adapter);
1529
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
1530
            $chatGroup = $chatGroupMapper->fetchOneByUuid($id);
16181 anderson 1531
 
1532
            if (!$chatGroup) {
11339 nelberth 1533
                return new JsonModel([
1534
                    'success' => false,
1535
                    'data' => 'ERROR_GROUP_NOT_FOUND'
1536
                ]);
1537
            }
16181 anderson 1538
 
11339 nelberth 1539
            $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
16181 anderson 1540
 
11339 nelberth 1541
            $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
16181 anderson 1542
 
1543
            if (!$chatGroupUser) {
11339 nelberth 1544
                return new JsonModel([
1545
                    'success' => false,
1546
                    'data' => 'ERROR_CHAT_GROUP_USER_NOT_FOUND'
1547
                ]);
1548
            }
1549
 
1550
            $items = [];
1551
            $chatGroupUsers = $chatGroupUserMapper->fetchAllByGroupId($chatGroup->id);
16181 anderson 1552
            foreach ($chatGroupUsers as $chatGroupUser) {
11339 nelberth 1553
                $user = $userMapper->fetchOne((int) $chatGroupUser->user_id);
16181 anderson 1554
                if (!$user) {
11339 nelberth 1555
                    continue;
1556
                }
16181 anderson 1557
 
11339 nelberth 1558
                $name   = trim($user->first_name . ' ' . $user->last_name);
1559
                $image  = $this->url()->fromRoute('storage', [
1560
                    'code' => $user->uuid,
1561
                    'type' => 'user',
1562
                    'filename' => $user->image
1563
                ]);
16181 anderson 1564
 
1565
 
1566
                if ($chatGroupUser->owner == ChatGroupUser::OWNER_YES) {
11339 nelberth 1567
                    $url_remove_from_group = '';
1568
                } else {
16181 anderson 1569
                    $url_remove_from_group = $this->url()->fromRoute('chat/remove-user-from-group', ['group_id' => $chatGroup->uuid, 'user_id' => $user->uuid]);
11339 nelberth 1570
                }
1571
 
14590 efrain 1572
 
16181 anderson 1573
 
1574
 
11339 nelberth 1575
                array_push($items, [
1576
                    'url_remove_from_group' => $url_remove_from_group,
1577
                    'id'                    => $user->uuid,
1578
                    'name'                  => $name,
1579
                    'image'                 => $image,
14590 efrain 1580
                    'online'                => $user->online,
11339 nelberth 1581
                ]);
1582
            }
16181 anderson 1583
 
14627 efrain 1584
            $userMapper->updateLastActivity($currentUser->id);
16181 anderson 1585
 
11339 nelberth 1586
            return new JsonModel([
16181 anderson 1587
                'success' => true,
11339 nelberth 1588
                'data' => $items,
1589
            ]);
1590
        } else {
1591
            return new JsonModel([
1592
                'success' => false,
1593
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1594
            ]);
1595
        }
1596
    }
16181 anderson 1597
 
11339 nelberth 1598
    /**
1599
     * Elimina un grupo de chat, solo el owner puede realizarla
1600
     * Es una petición POST el url que contiene el ID encriptado del chat (/chat/delete-group/:group_id) y la cuál se recibe en la función heartBeat.
1601
     * Parámetros del route
1602
     * :group_id = id del grupo encriptado
1603
     * En caso de una respuesta positiva
1604
     * [
1605
     *      'success' => true,
1606
     *      'data'=> (int) registros_borrados
1607
     * ]
1608
     * En caso de un respuesta negativa
1609
     * [
1610
     *      'success' => false,
1611
     *      'data' => (string) 'mensaje_de_error'
1612
     * ]
1613
     * @return \Laminas\View\Model\JsonModel
1614
     */
1615
    public function deleteGroupAction()
1616
    {
16181 anderson 1617
 
11339 nelberth 1618
        $request    = $this->getRequest();
16181 anderson 1619
        if ($request->isPost()) {
11339 nelberth 1620
 
1621
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1622
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 1623
 
11339 nelberth 1624
            $id = trim(filter_var($this->params()->fromRoute('group_id'), FILTER_SANITIZE_STRING));
16181 anderson 1625
            if (!$id) {
11339 nelberth 1626
                return new JsonModel([
1627
                    'success' => false,
1628
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
1629
                ]);
16181 anderson 1630
            }
11339 nelberth 1631
 
16181 anderson 1632
 
1633
 
11339 nelberth 1634
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
1635
            $chatGroup = $chatGroupMapper->fetchOneByUuid($id);
16181 anderson 1636
 
1637
            if (!$chatGroup) {
11339 nelberth 1638
                return new JsonModel([
1639
                    'success' => false,
1640
                    'data' => 'ERROR_GROUP_NOT_FOUND'
1641
                ]);
1642
            }
16181 anderson 1643
 
11339 nelberth 1644
            $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
1645
            $chatGroupOwner = $chatGroupUserMapper->fetchOwnerByGroupId($chatGroup->id);
16181 anderson 1646
 
1647
            if ($chatGroupOwner->user_id != $currentUser->id) {
11339 nelberth 1648
                return new JsonModel([
1649
                    'success' => false,
1650
                    'data' => 'ERROR_CHAT_GROUP_YOU_ARE_NOT_OWNER'
1651
                ]);
1652
            }
1653
 
1654
 
1655
            $chatGroupUserMessageMapper = ChatGroupUserMessageMapper::getInstance($this->adapter);
1656
            $result = $chatGroupUserMessageMapper->deleteAllByGroupId($chatGroup->id);
16181 anderson 1657
            if (!$result) {
11339 nelberth 1658
                return new JsonModel([
1659
                    'success' => false,
1660
                    'data' => $chatGroupUserMessageMapper->getError()
1661
                ]);
1662
            }
16181 anderson 1663
 
11339 nelberth 1664
            $chatGroupMessageMapper = ChatGroupMessageMapper::getInstance($this->adapter);
1665
            $result = $chatGroupMessageMapper->deleteAllByGroupId($chatGroup->id);
16181 anderson 1666
            if (!$result) {
11339 nelberth 1667
                return new JsonModel([
1668
                    'success' => false,
1669
                    'data' => $chatGroupMessageMapper->getError()
1670
                ]);
1671
            }
16181 anderson 1672
 
11339 nelberth 1673
            $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
1674
            $result = $chatGroupUserMapper->deleteAllByGroupId($chatGroup->id);
16181 anderson 1675
            if (!$result) {
11339 nelberth 1676
                return new JsonModel([
1677
                    'success' => false,
1678
                    'data' => $chatGroupUserMapper->getError()
1679
                ]);
1680
            }
16181 anderson 1681
 
11339 nelberth 1682
            $chatGroupMapper->deleteByGroupId($chatGroup->id);
16181 anderson 1683
            if (!$result) {
11339 nelberth 1684
                return new JsonModel([
1685
                    'success' => false,
1686
                    'data' => $chatGroupMapper->getError()
1687
                ]);
1688
            }
16181 anderson 1689
 
1690
 
11339 nelberth 1691
            $fullpath_chat = $this->config['leaderslinked.fullpath.chat'];
1692
            $dirpath = $fullpath_chat . $chatGroup->uuid;
16181 anderson 1693
 
11339 nelberth 1694
            Functions::rmDirRecursive($dirpath);
16181 anderson 1695
 
14627 efrain 1696
            $userMapper = UserMapper::getInstance($this->adapter);
1697
            $userMapper->updateLastActivity($currentUser->id);
16181 anderson 1698
 
11339 nelberth 1699
            return new JsonModel([
1700
                'success' => true
1701
            ]);
1702
        } else {
1703
            return new JsonModel([
1704
                'success' => false,
1705
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1706
            ]);
1707
        }
1708
    }
1709
 
1710
    /**
1711
     * Cerrar el chat, consiste en borrar de la variable de sessión para que el mismo no se presente la siguiente vez abierto ,
1712
     * al menos que tenga mensajes sin leer
1713
     * Es una petición POST el url que contiene el ID encriptado del chat (/chat/close/:id)  y la cuál se recibe en la función heartBeat.
1714
     * Parámetros del route
1715
     * :id = id del chat encriptado
1716
     * En caso de una respuesta positiva
1717
     * [
1718
     *  'success' => true
1719
     * ]
1720
     * En caso de un respuesta negativa
1721
     * [
1722
     *  'success' => false,
1723
     *  'data'  => mensaje_de_error
1724
     * ]
1725
     * @return \Laminas\View\Model\JsonModel
1726
     */
1727
    public function closeAction()
1728
    {
1729
        $request    = $this->getRequest();
16181 anderson 1730
        if ($request->isPost()) {
11339 nelberth 1731
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1732
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 1733
 
11339 nelberth 1734
            $id = filter_var($this->params()->fromRoute('id'), FILTER_SANITIZE_STRING);
16181 anderson 1735
 
11339 nelberth 1736
            if (!$id) {
1737
                return new JsonModel([
1738
                    'success' => false,
1739
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
1740
                ]);
1741
            }
16181 anderson 1742
 
1743
 
11339 nelberth 1744
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
1745
            $chatGroup = $chatGroupMapper->fetchOneByUuid($id);
1746
            if ($chatGroup) {
14627 efrain 1747
                $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
14692 efrain 1748
                $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
16181 anderson 1749
 
1750
                if (!$chatGroupUser) {
14692 efrain 1751
                    return new JsonModel([
1752
                        'success' => false,
1753
                        'data' =>  'ERROR_CHAT_GROUP_YOU_NOT_MEMBER'
1754
                    ]);
1755
                }
16181 anderson 1756
 
14627 efrain 1757
                $chatGroupUserMapper->markIsClose($chatGroup->id, $currentUser->id);
11339 nelberth 1758
            } else {
16181 anderson 1759
 
11339 nelberth 1760
                $userMapper = UserMapper::getInstance($this->adapter);
1761
                $user = $userMapper->fetchOneByUuid($id);
16181 anderson 1762
                if (!$user) {
11339 nelberth 1763
                    return new JsonModel([
1764
                        'success' => false,
1765
                        'data' => 'ERROR_USER_NOT_FOUND'
1766
                    ]);
1767
                }
16181 anderson 1768
 
1769
 
11339 nelberth 1770
                $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
1771
                $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
16181 anderson 1772
                if ($chatUser) {
1773
                    if ($currentUser->id == $chatUser->user_id1) {
14686 efrain 1774
                        $chatUserMapper->markIsClose1($currentUser->id);
14685 efrain 1775
                    } else {
16181 anderson 1776
 
14686 efrain 1777
                        $chatUserMapper->markIsClose2($currentUser->id);
14627 efrain 1778
                    }
11339 nelberth 1779
                }
1780
            }
16181 anderson 1781
 
14627 efrain 1782
            $userMapper->updateLastActivity($currentUser->id);
1783
 
16181 anderson 1784
 
1785
 
11339 nelberth 1786
            return new JsonModel([
1787
                'success' => true
1788
            ]);
1789
        } else {
1790
            return new JsonModel([
1791
                'success' => false,
1792
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1793
            ]);
1794
        }
1795
    }
1796
 
1797
    /**
1798
     * Clear como su nombre lo indica es borrar los mensajes entre el usuario actual y otro usuario con quien sostiene el chat
1799
     * Es una petición POST el url que contiene el ID encriptado del chat (/chat/clear/:id) y la cuál se recibe en la función heartBeat.
1800
     * Parámetros del route
1801
     * :id = id del usuario encriptado
1802
     * En caso de una respuesta positiva
1803
     * [
1804
     *      'success' => true,
1805
     *      'data'=> (int) registros_borrados
1806
     * ]
1807
     * En caso de un respuesta negativa
1808
     * [
1809
     *      'success' => false,
1810
     *      'data' => (string) 'mensaje_de_error'
1811
     * ]
1812
     * @return \Laminas\View\Model\JsonModel
1813
     */
1814
    public function clearAction()
1815
    {
1816
        $request    = $this->getRequest();
16181 anderson 1817
        if ($request->isPost()) {
11339 nelberth 1818
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1819
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 1820
 
11339 nelberth 1821
            $id = filter_var($this->params()->fromRoute('id'), FILTER_SANITIZE_STRING);
16181 anderson 1822
 
11339 nelberth 1823
            if (!$id) {
1824
                return new JsonModel([
1825
                    'success' => false,
1826
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
1827
                ]);
1828
            }
14627 efrain 1829
 
16181 anderson 1830
 
1831
 
11339 nelberth 1832
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
1833
            $chatGroup = $chatGroupMapper->fetchOneByUuid($id);
1834
            if ($chatGroup) {
14627 efrain 1835
                $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
14692 efrain 1836
                $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
16181 anderson 1837
 
1838
                if (!$chatGroupUser) {
14692 efrain 1839
                    return new JsonModel([
1840
                        'success' => false,
1841
                        'data' =>  'ERROR_CHAT_GROUP_YOU_NOT_MEMBER'
1842
                    ]);
1843
                }
16181 anderson 1844
 
14627 efrain 1845
                $chatGroupUserMapper->markIsClose($chatGroup->id, $currentUser->id);
11339 nelberth 1846
            } else {
16181 anderson 1847
 
11339 nelberth 1848
                $userMapper = UserMapper::getInstance($this->adapter);
1849
                $user = $userMapper->fetchOneByUuid($id);
16181 anderson 1850
                if (!$user) {
11339 nelberth 1851
                    return new JsonModel([
1852
                        'success' => false,
1853
                        'data' => 'ERROR_USER_NOT_FOUND'
1854
                    ]);
1855
                }
16181 anderson 1856
 
1857
 
11339 nelberth 1858
                $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
1859
                $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
16181 anderson 1860
                if ($chatUser) {
1861
                    if ($currentUser->id == $chatUser->user_id1) {
14686 efrain 1862
                        $chatUserMapper->markIsClose1($currentUser->id);
1863
                    } else {
14685 efrain 1864
                        $chatUserMapper->markIsClose2($currentUser->id);
14627 efrain 1865
                    }
11339 nelberth 1866
                }
1867
            }
16181 anderson 1868
 
14627 efrain 1869
            $userMapper->updateLastActivity($currentUser->id);
1870
 
16181 anderson 1871
 
11339 nelberth 1872
            return new JsonModel([
1873
                'success' => true
1874
            ]);
1875
        } else {
1876
            return new JsonModel([
1877
                'success' => false,
1878
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1879
            ]);
1880
        }
1881
    }
16181 anderson 1882
 
14692 efrain 1883
    /**
1884
     * Marca como abierto el caht
1885
     * Es una petición POST el url que contiene el ID encriptado del chat (/chat/open/:id) y la cuál se recibe en la función heartBeat.
1886
     * Parámetros del route
1887
     * :id = id del usuario encriptado
1888
     * En caso de una respuesta positiva
1889
     * [
1890
     *      'success' => true,
1891
     *      'data'=> (int) registros_borrados
1892
     * ]
1893
     * En caso de un respuesta negativa
1894
     * [
1895
     *      'success' => false,
1896
     *      'data' => (string) 'mensaje_de_error'
1897
     * ]
1898
     * @return \Laminas\View\Model\JsonModel
1899
     */
1900
    public function openAction()
1901
    {
1902
        $request    = $this->getRequest();
16181 anderson 1903
        if ($request->isPost()) {
14692 efrain 1904
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1905
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 1906
 
14692 efrain 1907
            $id = filter_var($this->params()->fromRoute('id'), FILTER_SANITIZE_STRING);
16181 anderson 1908
 
14692 efrain 1909
            if (!$id) {
1910
                return new JsonModel([
1911
                    'success' => false,
1912
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
1913
                ]);
1914
            }
16181 anderson 1915
 
1916
 
14692 efrain 1917
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
1918
            $chatGroup = $chatGroupMapper->fetchOneByUuid($id);
1919
            if ($chatGroup) {
1920
                $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
1921
                $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
16181 anderson 1922
 
1923
                if (!$chatGroupUser) {
14692 efrain 1924
                    return new JsonModel([
1925
                        'success' => false,
1926
                        'data' =>  'ERROR_CHAT_GROUP_YOU_NOT_MEMBER'
1927
                    ]);
1928
                }
16181 anderson 1929
 
14692 efrain 1930
                $chatGroupUserMapper->markIsOpen($chatGroup->id, $currentUser->id);
1931
            } else {
16181 anderson 1932
 
14692 efrain 1933
                $userMapper = UserMapper::getInstance($this->adapter);
1934
                $user = $userMapper->fetchOneByUuid($id);
16181 anderson 1935
                if (!$user) {
14692 efrain 1936
                    return new JsonModel([
1937
                        'success' => false,
1938
                        'data' => 'ERROR_USER_NOT_FOUND'
1939
                    ]);
1940
                }
16181 anderson 1941
 
1942
 
14692 efrain 1943
                $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
1944
                $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
16181 anderson 1945
                if ($chatUser) {
1946
                    if ($currentUser->id == $chatUser->user_id1) {
14692 efrain 1947
                        $chatUserMapper->markIsOpen1($chatUser->id);
1948
                    } else {
1949
                        $chatUserMapper->markIsOpen2($chatUser->id);
1950
                    }
1951
                }
1952
            }
16181 anderson 1953
 
1954
 
14692 efrain 1955
            $userMapper->updateLastActivity($currentUser->id);
16181 anderson 1956
 
14692 efrain 1957
            return new JsonModel([
1958
                'success' => true
1959
            ]);
1960
        } else {
1961
            return new JsonModel([
1962
                'success' => false,
1963
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1964
            ]);
1965
        }
1966
    }
16181 anderson 1967
 
11339 nelberth 1968
    public function uploadAction()
1969
    {
1970
        $request    = $this->getRequest();
16181 anderson 1971
        if ($request->isPost()) {
11339 nelberth 1972
            $currentUserPlugin = $this->plugin('currentUserPlugin');
1973
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 1974
 
11339 nelberth 1975
            $id = filter_var($this->params()->fromRoute('id'), FILTER_SANITIZE_STRING);
1976
            if (!$id) {
1977
                return new JsonModel([
1978
                    'success' => false,
1979
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
1980
                ]);
1981
            }
16181 anderson 1982
 
11339 nelberth 1983
            $files = $this->getRequest()->getFiles()->toArray();
16181 anderson 1984
            if (!isset($files['file']) || !empty($files['file']['error'])) {
11339 nelberth 1985
                return new JsonModel([
1986
                    'success' => false,
1987
                    'data' => 'ERROR_FILE_NOT_UPLOAD'
1988
                ]);
1989
            }
16181 anderson 1990
 
11339 nelberth 1991
            $tmp_filename   = $files['file']['tmp_name'];
16181 anderson 1992
            if (!$this->validMimeType($tmp_filename)) {
11339 nelberth 1993
                return new JsonModel([
1994
                    'success' => false,
1995
                    'data' => 'ERROR_FILE_UPLODED_IS_NOT_VALID'
1996
                ]);
1997
            }
1998
 
16181 anderson 1999
 
11339 nelberth 2000
            $extensions     = explode('.', $files['file']['name']);
2001
            $extension      = strtolower(trim($extensions[count($extensions) - 1]));
2002
            $filename       = uniqid() . '.' . $extension;
2003
 
16181 anderson 2004
 
11339 nelberth 2005
            $mime_type = mime_content_type($tmp_filename);
16181 anderson 2006
            if ($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
11339 nelberth 2007
                $file_type = 'image';
16181 anderson 2008
            } else if ($mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
11339 nelberth 2009
                $file_type = 'video';
16181 anderson 2010
            } else if ($mime_type == 'application/pdf') {
11339 nelberth 2011
                $file_type = 'document';
2012
            }
16181 anderson 2013
 
2014
 
11339 nelberth 2015
            $userMapper = UserMapper::getInstance($this->adapter);
2016
            $sender_result = $userMapper->fetchOne($currentUser->id);
2017
            $sender_from = trim($sender_result->first_name . ' ' . $sender_result->last_name);
2018
            $sender_pic = $this->url()->fromRoute('storage', [
2019
                'code' => $sender_result->uuid,
2020
                'type' => 'user',
2021
                'filename' => $sender_result->image
2022
            ]);
16181 anderson 2023
 
11339 nelberth 2024
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
2025
            $chatGroup = $chatGroupMapper->fetchOneByUuid($id);
16181 anderson 2026
            if ($chatGroup) {
2027
 
11339 nelberth 2028
                $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
2029
                $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
16181 anderson 2030
 
2031
                if (!$chatGroupUser) {
11339 nelberth 2032
                    return new JsonModel([
2033
                        'success' => false,
2034
                        'data' => 'ERROR_CHAT_GROUP_YOU_NOT_MEMBER'
2035
                    ]);
2036
                }
2037
 
16181 anderson 2038
 
11339 nelberth 2039
                $fullpath_chat = $this->config['leaderslinked.fullpath.chat'];
2040
                $dirpath = $fullpath_chat . $chatGroup->uuid;
16181 anderson 2041
                if (!file_exists($dirpath)) {
11339 nelberth 2042
                    mkdir($dirpath, 0777, true);
2043
                    chmod($dirpath, 0777);
2044
                }
16181 anderson 2045
 
11339 nelberth 2046
                $full_filename = $dirpath . DIRECTORY_SEPARATOR . $filename;
16181 anderson 2047
                if (!move_uploaded_file($tmp_filename, $full_filename)) {
11339 nelberth 2048
                    return new JsonModel([
2049
                        'success' => false,
2050
                        'data' => 'ERROR_FILE_UPLOADED_NOT_MOVE'
2051
                    ]);
2052
                }
16181 anderson 2053
 
11339 nelberth 2054
                $chatGroupMessage = new ChatGroupMessage();
2055
                $chatGroupMessage->sender_id    = $currentUser->id;
2056
                $chatGroupMessage->group_id     = $chatGroup->id;
2057
                $chatGroupMessage->content      = $filename;
2058
                $chatGroupMessage->type         = $file_type;
16181 anderson 2059
 
11339 nelberth 2060
                $chatGroupMessageMapper = ChatGroupMessageMapper::getInstance($this->adapter);
2061
                $result = $chatGroupMessageMapper->insert($chatGroupMessage);
16181 anderson 2062
                if (!$result) {
11339 nelberth 2063
                    return new JsonModel([
2064
                        'success' => false,
2065
                        'data' => $chatGroupMessageMapper->getError()
2066
                    ]);
2067
                }
16181 anderson 2068
 
11339 nelberth 2069
                $chatGroupMessage = $chatGroupMessageMapper->fetchOne($chatGroupMessage->id);
16181 anderson 2070
 
2071
 
11339 nelberth 2072
                $chatGroupUserMessage = new ChatGroupUserMessage();
2073
                $chatGroupUserMessage->group_id = $chatGroupMessage->group_id;
2074
                $chatGroupUserMessage->message_id = $chatGroupMessage->id;
2075
                $chatGroupUserMessage->receiver_id = $currentUser->id;
2076
                $chatGroupUserMessage->recd = ChatGroupUserMessage::RECD_YES;
2077
                $chatGroupUserMessage->seen = ChatGroupUserMessage::SEEN_YES;
16181 anderson 2078
 
2079
 
11339 nelberth 2080
                $chatGroupUserMessageMapper = ChatGroupUserMessageMapper::getInstance($this->adapter);
2081
                $result = $chatGroupUserMessageMapper->insert($chatGroupUserMessage);
16181 anderson 2082
                if (!$result) {
11339 nelberth 2083
                    return new JsonModel([
2084
                        'success' => false,
2085
                        'data' => $chatGroupUserMessageMapper->getError()
2086
                    ]);
2087
                }
16181 anderson 2088
 
2089
 
2090
 
11339 nelberth 2091
                $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
16181 anderson 2092
 
11339 nelberth 2093
                $results = $chatGroupUserMapper->fetchAllByGroupId($chatGroup->id);
16181 anderson 2094
                foreach ($results as $r) {
11339 nelberth 2095
                    if ($r->user_id != $currentUser->id) {
2096
                        $chatGroupUserMessage = new ChatGroupUserMessage();
2097
                        $chatGroupUserMessage->group_id = $chatGroupMessage->group_id;
2098
                        $chatGroupUserMessage->message_id = $chatGroupMessage->id;
16181 anderson 2099
                        $chatGroupUserMessage->receiver_id = $r->user_id;
11339 nelberth 2100
                        $chatGroupUserMessage->recd = ChatGroupUserMessage::RECD_NO;
2101
                        $chatGroupUserMessage->seen = ChatGroupUserMessage::SEEN_NO;
16181 anderson 2102
 
11339 nelberth 2103
                        $result = $chatGroupUserMessageMapper->insert($chatGroupUserMessage);
16181 anderson 2104
                        if (!$result) {
11339 nelberth 2105
                            return new JsonModel([
2106
                                'success' => false,
2107
                                'data' => $chatGroupUserMessageMapper->getError()
2108
                            ]);
2109
                        }
2110
                    }
2111
                }
16181 anderson 2112
 
14627 efrain 2113
                $userMapper->updateLastActivity($currentUser->id);
16181 anderson 2114
 
14590 efrain 2115
                $utilMapper = UtilMapper::getInstance($this->adapter);
2116
                $now = $utilMapper->getDatebaseNow();
16181 anderson 2117
 
14590 efrain 2118
                $msgtime = $this->timeAgo($now, $now);
11339 nelberth 2119
                return new JsonModel([
2120
                    'success' => true,
2121
                    'data' => [
2122
                        'user_name'     => $sender_from,
2123
                        'user_id'       => $currentUser->uuid,
2124
                        'user_image'    => $sender_pic,
2125
                        'u'             => 1,
2126
                        'mtype'         => $file_type,
2127
                        'm'             => $this->url()->fromRoute('storage', ['code' => $chatGroup->uuid, 'type' => 'chat', 'filename' => $filename]),
2128
                        'time'          => $msgtime,
2129
                        'id'            => $chatGroupMessage->uuid
2130
                    ]
2131
                ]);
16181 anderson 2132
            } else {
11339 nelberth 2133
 
2134
                $user = $userMapper->fetchOneByUuid($id);
16181 anderson 2135
                if (!$user) {
11339 nelberth 2136
                    return new JsonModel([
2137
                        'success' => false,
2138
                        'data' => 'ERROR_USER_NOT_FOUND'
2139
                    ]);
2140
                }
16181 anderson 2141
 
11339 nelberth 2142
                $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
2143
                $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
16181 anderson 2144
                if (!$chatUser) {
11339 nelberth 2145
                    return new JsonModel([
2146
                        'success' => false,
2147
                        'data' => 'ERROR_CHAT_NOT_FOUND'
2148
                    ]);
2149
                }
16181 anderson 2150
 
11339 nelberth 2151
                $fullpath_chat = $this->config['leaderslinked.fullpath.chat'];
2152
                $dirpath = $fullpath_chat . $chatUser->uuid;
16181 anderson 2153
 
2154
                if (!file_exists($dirpath)) {
11339 nelberth 2155
                    mkdir($dirpath, 0777, true);
2156
                    chmod($dirpath, 0777);
2157
                }
16181 anderson 2158
 
11339 nelberth 2159
                $full_filename = $dirpath . DIRECTORY_SEPARATOR . $filename;
16181 anderson 2160
                if (!move_uploaded_file($tmp_filename, $full_filename)) {
11339 nelberth 2161
                    return new JsonModel([
2162
                        'success' => false,
2163
                        'data' => 'ERROR_FILE_UPLOADED_NOT_MOVE'
2164
                    ]);
2165
                }
2166
 
2167
                $chatMessage = new ChatMessage();
2168
                $chatMessage->chat_id = $chatUser->id;
2169
                $chatMessage->from_id = $currentUser->id;
2170
                $chatMessage->to_id = $user->id;
2171
                $chatMessage->content = $filename;
2172
                $chatMessage->type = $file_type;
2173
                $chatMessage->recd = ChatMessage::RECD_NO;
2174
                $chatMessage->seen = ChatMessage::SEEN_NO;
16181 anderson 2175
 
2176
 
11339 nelberth 2177
                $chatMessageMapper = ChatMessageMapper::getInstance($this->adapter);
2178
                $result = $chatMessageMapper->insert($chatMessage);
16181 anderson 2179
                if (!$result) {
11339 nelberth 2180
                    return new JsonModel([
2181
                        'success' => false,
2182
                        'data' =>  $chatMessageMapper->getError()
2183
                    ]);
2184
                }
16181 anderson 2185
 
2186
 
14627 efrain 2187
                $userMapper->updateLastActivity($currentUser->id);
16181 anderson 2188
 
11339 nelberth 2189
                $chatMessage = $chatMessageMapper->fetchOne($chatMessage->id);
16181 anderson 2190
 
14590 efrain 2191
                $utilMapper = UtilMapper::getInstance($this->adapter);
2192
                $now = $utilMapper->getDatebaseNow();
16181 anderson 2193
 
14590 efrain 2194
                $msgtime = $this->timeAgo($chatMessage->added_on, $now);
11339 nelberth 2195
                return new JsonModel([
2196
                    'success' => true,
2197
                    'data' => [
2198
                        'user_name' => $sender_from,
2199
                        'user_id' => $currentUser->uuid,
2200
                        'user_image' => $sender_pic,
2201
                        'u' => 1,
2202
                        'mtype' => $file_type,
2203
                        'm' => $this->url()->fromRoute('storage', ['code' => $currentUser->uuid, 'type' => 'chat', 'filename' => $filename]),
2204
                        'time' => $msgtime,
2205
                        'id' => $chatMessage->uuid
2206
                    ]
2207
                ]);
2208
            }
2209
        } else {
2210
            return new JsonModel([
2211
                'success' => false,
2212
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
2213
            ]);
2214
        }
2215
    }
2216
 
2217
    public function markSeenAction()
2218
    {
2219
        $request = $this->getRequest();
16181 anderson 2220
        if ($request->isPost()) {
11339 nelberth 2221
            $currentUserPlugin = $this->plugin('currentUserPlugin');
2222
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 2223
 
11339 nelberth 2224
            $id = $this->params()->fromRoute('id');
2225
            if (!$id) {
2226
                return new JsonModel([
2227
                    'success' => false,
2228
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
2229
                ]);
2230
            }
16181 anderson 2231
 
11339 nelberth 2232
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
2233
            $chatGroup =  $chatGroupMapper->fetchOneByUuid($id);
16181 anderson 2234
 
2235
            if ($chatGroup) {
2236
 
11339 nelberth 2237
                $charGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
2238
                $chatGroupUser = $charGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
16181 anderson 2239
 
2240
                if (!$chatGroupUser) {
11339 nelberth 2241
                    return new JsonModel([
2242
                        'success' => false,
2243
                        'data' =>  'ERROR_CHAT_GROUP_YOU_NOT_MEMBER'
2244
                    ]);
2245
                }
16181 anderson 2246
 
11339 nelberth 2247
                $charGroupUserMessage = ChatGroupUserMessageMapper::getInstance($this->adapter);
2248
                $result = $charGroupUserMessage->markAsSeenByGroupIdAndUserId($chatGroup->id, $currentUser->id);
16181 anderson 2249
                if ($result) {
11339 nelberth 2250
                    return new JsonModel([
2251
                        'success' => true,
2252
                    ]);
2253
                } else {
2254
                    return new JsonModel([
2255
                        'success' => false,
2256
                        'data' =>  $charGroupUserMessage->getError()
2257
                    ]);
2258
                }
2259
            } else {
2260
                $userMapper = UserMapper::getInstance($this->adapter);
2261
                $user = $userMapper->fetchOneByUuid($id);
16181 anderson 2262
 
2263
                if (!$user) {
11339 nelberth 2264
                    return new JsonModel([
2265
                        'success' => false,
2266
                        'data' => 'ERROR_USER_NOT_FOUND'
2267
                    ]);
2268
                }
16181 anderson 2269
 
11339 nelberth 2270
                $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
2271
                $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
16181 anderson 2272
                if (!$chatUser) {
11339 nelberth 2273
                    return new JsonModel([
2274
                        'success' => false,
2275
                        'data' => 'ERROR_CHAT_NOT_FOUND'
2276
                    ]);
2277
                }
16181 anderson 2278
 
11339 nelberth 2279
                $chatMessageMapper = ChatMessageMapper::getInstance($this->adapter);
2280
                $result = $chatMessageMapper->markAsSeenByChatIdAndToId($chatUser->id, $currentUser->id);
16181 anderson 2281
                if ($result) {
11339 nelberth 2282
                    return new JsonModel([
2283
                        'success' => true,
2284
                    ]);
2285
                } else {
2286
                    return new JsonModel([
2287
                        'success' => false,
2288
                        'data' =>  $charGroupUserMessage->getError()
2289
                    ]);
2290
                }
2291
            }
2292
        } else {
2293
            $response = [
2294
                'success' => false,
2295
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
2296
            ];
2297
        }
2298
 
2299
        return new JsonModel($response);
2300
    }
16181 anderson 2301
 
2302
 
11339 nelberth 2303
    public function markReceivedAction()
2304
    {
2305
        $request = $this->getRequest();
16181 anderson 2306
        if ($request->isPost()) {
11339 nelberth 2307
            $currentUserPlugin = $this->plugin('currentUserPlugin');
2308
            $currentUser = $currentUserPlugin->getUser();
16181 anderson 2309
 
11339 nelberth 2310
            $id = $this->params()->fromRoute('id');
2311
            if (!$id) {
2312
                return new JsonModel([
2313
                    'success' => false,
2314
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
2315
                ]);
2316
            }
16181 anderson 2317
 
11339 nelberth 2318
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
2319
            $chatGroup =  $chatGroupMapper->fetchOneByUuid($id);
16181 anderson 2320
 
2321
            if ($chatGroup) {
2322
 
11339 nelberth 2323
                $charGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
2324
                $chatGroupUser = $charGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
16181 anderson 2325
 
2326
                if (!$chatGroupUser) {
11339 nelberth 2327
                    return new JsonModel([
2328
                        'success' => false,
2329
                        'data' =>  'ERROR_CHAT_GROUP_YOU_NOT_MEMBER'
2330
                    ]);
2331
                }
16181 anderson 2332
 
11339 nelberth 2333
                $charGroupUserMessage = ChatGroupUserMessageMapper::getInstance($this->adapter);
2334
                $result = $charGroupUserMessage->markAsReceivedByGroupIdAndUserId($chatGroup->id, $currentUser->id);
16181 anderson 2335
                if ($result) {
11339 nelberth 2336
                    return new JsonModel([
2337
                        'success' => true,
2338
                    ]);
2339
                } else {
2340
                    return new JsonModel([
2341
                        'success' => false,
2342
                        'data' =>  $charGroupUserMessage->getError()
2343
                    ]);
2344
                }
2345
            } else {
2346
                $userMapper = UserMapper::getInstance($this->adapter);
2347
                $user = $userMapper->fetchOneByUuid($id);
16181 anderson 2348
 
2349
                if (!$user) {
11339 nelberth 2350
                    return new JsonModel([
2351
                        'success' => false,
2352
                        'data' => 'ERROR_USER_NOT_FOUND'
2353
                    ]);
2354
                }
16181 anderson 2355
 
11339 nelberth 2356
                $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
2357
                $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
16181 anderson 2358
                if (!$chatUser) {
11339 nelberth 2359
                    return new JsonModel([
2360
                        'success' => false,
2361
                        'data' => 'ERROR_CHAT_NOT_FOUND'
2362
                    ]);
2363
                }
16181 anderson 2364
 
11339 nelberth 2365
                $chatMessageMapper = ChatMessageMapper::getInstance($this->adapter);
2366
                $result = $chatMessageMapper->markAsReceivedByChatIdAndToId($chatUser->id, $currentUser->id);
16181 anderson 2367
                if ($result) {
11339 nelberth 2368
                    return new JsonModel([
2369
                        'success' => true,
2370
                    ]);
2371
                } else {
2372
                    return new JsonModel([
2373
                        'success' => false,
2374
                        'data' =>  $charGroupUserMessage->getError()
2375
                    ]);
2376
                }
2377
            }
2378
        } else {
2379
            $response = [
2380
                'success' => false,
2381
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
2382
            ];
2383
        }
16181 anderson 2384
 
11339 nelberth 2385
        return new JsonModel($response);
2386
    }
2387
 
2388
 
16181 anderson 2389
 
11339 nelberth 2390
    /**
2391
     *
2392
     * @param string $file
2393
     * @return boolean
2394
     */
2395
    private function validMimeType($file)
2396
    {
2397
        /*
2398
         * image/jpeg jpeg jpg jpe
2399
         * image/gif gif
2400
         * image/png png
2401
         * video/mp4
2402
         * audio/mpeg mpga mp2 mp2a mp3 m2a m3a
2403
         * video/x-flv flv
2404
         * application/msword doc dot
2405
         * application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
2406
         * application/vnd.ms-excel xls xlm xla xlc xlt xlw
2407
         * application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
2408
         * application/vnd.ms-powerpoint ppt pps pot
2409
         * application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
2410
         * application/pdf pdf
2411
         */
2412
        $mime = mime_content_type($file);
2413
        $valid = false;
2414
        $types = [
2415
            'image/jpeg',
2416
            'image/gif',
2417
            'image/png',
2418
            'video/mp4',
2419
            'audio/mpeg',
2420
            'video/x-flv',
2421
            'application/msword',
2422
            'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
2423
            'application/vnd.ms-excel',
2424
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
2425
            'application/vnd.ms-powerpoint',
2426
            'application/vnd.openxmlformats-officedocument.presentationml.presentation',
2427
            'application/pdf'
2428
        ];
2429
        foreach ($types as $t) {
2430
            if (strpos($mime, $t) !== false) {
2431
                $valid = true;
2432
                break;
2433
            }
2434
        }
2435
        return $valid;
2436
    }
2437
 
2438
    /**
2439
     *
2440
     * @param string $text
2441
     * @return string
2442
     */
2443
    private function sanitize($text)
2444
    {
2445
        $text = htmlspecialchars($text, ENT_QUOTES);
2446
        $text = str_replace("\n\r", "\n", $text);
2447
        $text = str_replace("\r\n", "\n", $text);
2448
        $text = str_replace("\n", "<br>", $text);
2449
        return $text;
2450
    }
2451
 
2452
    /**
14590 efrain 2453
     *
11339 nelberth 2454
     * @param string $timestamp
14590 efrain 2455
     * @param string $now
11339 nelberth 2456
     * @return string
2457
     */
14590 efrain 2458
    private function timeAgo($timestamp, $now = '')
11339 nelberth 2459
    {
16181 anderson 2460
 
2461
        if ($now) {
14590 efrain 2462
            $datetime1 = \DateTime::createFromFormat('Y-m-d H:i:s', $now);
2463
        } else {
2464
            $now = date('Y-m-d H:i:s');
2465
            $datetime1 = date_create($now);
2466
        }
11339 nelberth 2467
        $datetime2 = date_create($timestamp);
16181 anderson 2468
 
11339 nelberth 2469
        $diff = date_diff($datetime1, $datetime2);
2470
        $timemsg = '';
2471
        if ($diff->y > 0) {
14590 efrain 2472
            $timemsg = $diff->y . ' año' . ($diff->y > 1 ? "s" : '');
11339 nelberth 2473
        } else if ($diff->m > 0) {
14590 efrain 2474
            $timemsg = $diff->m . ' mes' . ($diff->m > 1 ? "es" : '');
11339 nelberth 2475
        } else if ($diff->d > 0) {
2476
            $timemsg = $diff->d . ' dia' . ($diff->d > 1 ? "s" : '');
2477
        } else if ($diff->h > 0) {
2478
            $timemsg = $diff->h . ' hora' . ($diff->h > 1 ? "s" : '');
2479
        } else if ($diff->i > 0) {
2480
            $timemsg = $diff->i . ' minuto' . ($diff->i > 1 ? "s" : '');
2481
        } else if ($diff->s > 0) {
2482
            $timemsg = $diff->s . ' segundo' . ($diff->s > 1 ? "s" : '');
2483
        }
2484
        if (!$timemsg) {
2485
            $timemsg = "Ahora";
2486
        } else {
2487
            $timemsg = $timemsg . '';
2488
        }
2489
        return $timemsg;
2490
    }
2491
 
2492
    /**
2493
     *
2494
     * @param string $timestamp
2495
     * @return boolean
2496
     */
2497
    private function isInactiveConnection($timestamp)
2498
    {
2499
        if (empty($timestamp)) {
2500
            return true;
2501
        }
2502
 
2503
        $now = date('Y-m-d H:i:s');
2504
        $datetime1 = date_create($now);
2505
        $datetime2 = date_create($timestamp);
2506
        $diff = date_diff($datetime1, $datetime2);
2507
 
2508
        if ($diff->y > 0 || $diff->m > 0 || $diff->d > 0 || $diff->h > 0 || $diff->i > 0) {
2509
            return true;
2510
        }
2511
 
2512
        return ($diff->s) > 15 ? true : false;
2513
    }
16247 anderson 2514
 
2515
    public function zoomAction()
2516
    {
2517
        $request = $this->getRequest();
2518
        if ($request->isPost()) {
2519
            $currentUserPlugin = $this->plugin('currentUserPlugin');
2520
            $currentUser = $currentUserPlugin->getUser();
2521
            $id = $this->params()->fromRoute('id');
2522
 
2523
            if (!$id) {
2524
                return new JsonModel([
2525
                    'success' => false,
2526
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
2527
                ]);
2528
            }
2529
 
2530
            $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
2531
            $chatGroupMapper = ChatGroupMapper::getInstance($this->adapter);
2532
            $chatUser = null;
2533
            $chatGroup = $chatGroupMapper->fetchOneByUuid($id);
2534
 
2535
            if ($chatGroup) {
2536
                $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
2537
                $chatGroupUser = $chatGroupUserMapper->fetchOneByGroupIdAndUserId($chatGroup->id, $currentUser->id);
2538
 
2539
                if (!$chatGroupUser) {
2540
                    $data = [
2541
                        'success' => false,
2542
                        'data' =>  'ERROR_ZOOM_CHAT_UNAUTHORIZE'
2543
                    ];
2544
                    return new JsonModel($data);
2545
                }
2546
            } else {
2547
                $userMapper = UserMapper::getInstance($this->adapter);
2548
                $user = $userMapper->fetchOneByUuid($id);
2549
 
2550
                if (!$user) {
2551
                    return new JsonModel([
2552
                        'success' => false,
2553
                        'data' => 'ERROR_USER_NOT_FOUND'
2554
                    ]);
2555
                }
2556
 
2557
                $connectionMapper = ConnectionMapper::getInstance($this->adapter);
2558
                $connection = $connectionMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
2559
 
2560
                if (!$connection || $connection->status != Connection::STATUS_ACCEPTED) {
2561
 
2562
                    return new JsonModel([
2563
                        'success' => false,
2564
                        'data' => 'ERROR_THIS_USER_IS_NOT_A_CONNECTION'
2565
                    ]);
2566
                }
2567
 
2568
                $chatUserMapper = ChatUserMapper::getInstance($this->adapter);
2569
                $chatUser = $chatUserMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
2570
 
2571
                if (!$chatUser) {
2572
                    $chatUser = new ChatUser();
2573
                    $chatUser->user_id1 = $currentUser->id;
2574
                    $chatUser->user_id2 = $user->id;
2575
                    $response = $chatUserMapper->insert($chatUser);
2576
 
2577
                    if (!$response) {
2578
                        return new JsonModel([
2579
                            'success' => false,
2580
                            'data' => $chatUserMapper->getError()
2581
                        ]);
2582
                    }
2583
 
2584
                    $chatUser = $chatUserMapper->fetchOne($chatUser->id);
2585
                    $fullpath_chat = $this->config['leaderslinked.fullpath.chat'];
2586
                    $dirpath = $fullpath_chat . $chatUser->uuid;
2587
 
2588
                    if (!file_exists($dirpath)) {
2589
                        mkdir($dirpath, 0777, true);
2590
                        chmod($dirpath, 0777);
2591
                    }
2592
                }
2593
            }
2594
 
2595
            if (!$chatUser && !$chatGroup) {
2596
                $data = [
2597
                    'success' => false,
2598
                    'data' => 'ERROR_ZOOM_CHAT_NOT_FOUND'
2599
                ];
2600
                return new JsonModel($data);
2601
            }
2602
 
2603
            $dataPost = $request->getPost()->toArray();
2604
            $form = new ZoomAddForm();
2605
            $form->setData($dataPost);
2606
 
2607
            if ($form->isValid()) {
2608
                $dataPost = (array) $form->getData();
2609
                $dtStart = \DateTime::createFromFormat('Y-m-d H:i:s', $dataPost['date'] . ' ' . $dataPost['time']);
2610
                if (!$dtStart) {
2611
                    return new JsonModel([
2612
                        'success' => false,
2613
                        'data' => 'ERROR_PARAMETERS_ARE_INVALID'
2614
                    ]);
2615
                }
2616
 
2617
                $dtEnd = \DateTime::createFromFormat('Y-m-d H:i:s', $dataPost['date'] . ' ' . $dataPost['time']);
2618
                $dtEnd->add(new \DateInterval('PT' . $dataPost['duration'] . 'M'));
2619
                $start_time = $dtStart->format('Y-m-d\TH:i:s');
2620
                $zoom = new Zoom($this->adapter, $this->config, $this->cache);
2621
                $response =  $zoom->getOAuthAccessToken();
2622
 
2623
                if ($response['success']) {
2624
                    $access_token = $response['data'];
2625
                    $result = $zoom->addMeeting($access_token, $dataPost['title'], $dataPost['description'], $dataPost['type'], $start_time, $dataPost['duration'], $dataPost['timezone'], $dataPost['password']);
2626
                } else {
2627
                    return new JsonModel([
2628
                        'success' => false,
2629
                        'data' => 'ERROR_ZOOM_CREATING_NEW_MEETING'
2630
                    ]);
2631
                }
2632
 
2633
                if ($result['success']) {
2634
                    $zoomMeetingMapper = ZoomMeetingMapper::getInstance($this->adapter);
2635
                    $zoomMeeting = $zoomMeetingMapper->fetchOne($result['data']['id']);
2636
 
2637
                    if (!$zoomMeeting) {
2638
                        $zoomMeeting = new ZoomMeeting();
2639
                        $zoomMeeting->id = $result['data']['id'];
2640
                        $zoomMeeting->topic = $dataPost['title'];
2641
                        $zoomMeeting->agenda = $dataPost['description'];
2642
                        $zoomMeeting->duration = $dataPost['duration'];
2643
                        $zoomMeeting->join_url = $result['data']['join_url'];
2644
                        $zoomMeeting->start_time = $dtStart->format('Y-m-d H:i:s');
2645
                        $zoomMeeting->end_time = $dtEnd->format('Y-m-d H:i:s');
2646
                        $zoomMeeting->timezone = $dataPost['timezone'];
2647
                        $zoomMeeting->type = $dataPost['type'];
2648
                        $zoomMeeting->uuid = $result['data']['uuid'];
2649
                        $zoomMeeting->password = $dataPost['password'];
2650
 
2651
                        if (!$zoomMeetingMapper->insert($zoomMeeting)) {
2652
                            return new JsonModel([
2653
                                'success' => false,
2654
                                'data' => $zoomMeetingMapper->getError()
2655
                            ]);
2656
                        }
2657
                    }
2658
 
2659
                    $chatMessageContent = "LABEL_ZOOM_MEETING \r\n" .
2660
                        " LABEL_ZOOM_MEETING_START_DATE : " . $dtStart->format('Y-m-d') . "\r\n" .
2661
                        " LABEL_ZOOM_MEETING_START_TIME : " . $dtStart->format('H:i a') . "\r\n" .
2662
                        " LABEL_ZOOM_MEETING_TIMEZONE : " . $zoomMeeting->timezone . "\r\n" .
2663
                        " LABEL_ZOOM_MEETING_TITLE :  " . $zoomMeeting->topic  . "\r\n" .
2664
                        " LABEL_ZOOM_MEETING_URL : " . $zoomMeeting->join_url . "\r\n" .
2665
                        " LABEL_ZOOM_MEETING_PASSWORD : " . $zoomMeeting->password . "\r\n";
2666
                    $zoomMeetingUserMapper = ZoomMeetingUserMapper::getInstance($this->adapter);
2667
                    $zoomMeetingUser = $zoomMeetingUserMapper->fetchOneByZoomMeetingIdAndUserId($zoomMeeting->id, $currentUser->id);
2668
 
2669
                    if (!$zoomMeetingUser) {
2670
                        $zoomMeetingUser = new ZoomMeetingUser();
2671
                        $zoomMeetingUser->zoom_meeting_id = $zoomMeeting->id;
2672
                        $zoomMeetingUser->user_id = $currentUser->id;
2673
                        $zoomMeetingUser->type = ZoomMeetingUser::TYPE_CREATOR;
2674
                        $zoomMeetingUserMapper->insert($zoomMeetingUser);
2675
                    }
2676
 
2677
                    if ($chatUser) {
2678
                        if ($chatUser->user_id1 == $currentUser->id) {
2679
                            $zoomMeetingUser = $zoomMeetingUserMapper->fetchOneByZoomMeetingIdAndUserId($zoomMeeting->id, $chatUser->user_id2);
2680
 
2681
                            if (!$zoomMeetingUser) {
2682
                                $zoomMeetingUser = new ZoomMeetingUser();
2683
                                $zoomMeetingUser->zoom_meeting_id = $zoomMeeting->id;
2684
                                $zoomMeetingUser->user_id = $chatUser->user_id2;
2685
                                $zoomMeetingUser->type = ZoomMeetingUser::TYPE_CREATOR;
2686
                                $zoomMeetingUserMapper->insert($zoomMeetingUser);
2687
                            }
2688
                        } else {
2689
                            $zoomMeetingUser = $zoomMeetingUserMapper->fetchOneByZoomMeetingIdAndUserId($zoomMeeting->id, $chatUser->user_id1);
2690
 
2691
                            if (!$zoomMeetingUser) {
2692
                                $zoomMeetingUser = new ZoomMeetingUser();
2693
                                $zoomMeetingUser->zoom_meeting_id = $zoomMeeting->id;
2694
                                $zoomMeetingUser->user_id = $chatUser->user_id1;
2695
                                $zoomMeetingUser->type = ZoomMeetingUser::TYPE_CREATOR;
2696
                                $zoomMeetingUserMapper->insert($zoomMeetingUser);
2697
                            }
2698
                        }
2699
 
2700
                        $chatMessage = new ChatMessage();
2701
                        $chatMessage->recd = ChatMessage::RECD_NO;
2702
                        $chatMessage->seen = ChatMessage::SEEN_NO;
2703
                        $chatMessage->type = ChatMessage::TYPE_TEXT;
2704
                        $chatMessage->content = $chatMessageContent;
2705
                        $chatMessage->from_id = $currentUser->id;
2706
                        $chatMessage->to_id = $chatUser->user_id1 == $currentUser->id ? $chatUser->user_id2 : $chatUser->user_id1;
2707
                        $chatMessage->chat_id = $chatUser->id;
2708
                        $chatMessageMapper = ChatMessageMapper::getInstance($this->adapter);
2709
                        $chatMessageMapper->insert($chatMessage);
2710
                        $chatUserMapper->markIsOpen1($chatUser->id);
2711
                        $chatUserMapper->markIsOpen2($chatUser->id);
2712
                    } else if ($chatGroup) {
2713
 
2714
                        $chatGroupMessage = new ChatGroupMessage();
2715
                        $chatGroupMessage->group_id = $chatGroup->id;
2716
                        $chatGroupMessage->content = $chatMessageContent;
2717
                        $chatGroupMessage->sender_id = $currentUser->id;
2718
                        $chatGroupMessage->type = ChatGroupMessage::TYPE_TEXT;
2719
                        $chatGroupMessageMapper = ChatGroupMessageMapper::getInstance($this->adapter);
2720
 
2721
                        if ($chatGroupMessageMapper->insert($chatGroupMessage)) {
2722
                            $chatGroupUserMapper = ChatGroupUserMapper::getInstance($this->adapter);
2723
                            $groupUsers =   $chatGroupUserMapper->fetchAllByGroupId($chatGroup->id);
2724
                            $chatGroupUserMessageMapper = ChatGroupUserMessageMapper::getInstance($this->adapter);
2725
                            foreach ($groupUsers as $groupUser) {
2726
                                if ($groupUser->user_id != $currentUser->id) {
2727
                                    $zoomMeetingUser = $zoomMeetingUserMapper->fetchOneByZoomMeetingIdAndUserId($zoomMeeting->id, $groupUser->user_id);
2728
 
2729
                                    if (!$zoomMeetingUser) {
2730
                                        $zoomMeetingUser = new ZoomMeetingUser();
2731
                                        $zoomMeetingUser->zoom_meeting_id = $zoomMeeting->id;
2732
                                        $zoomMeetingUser->user_id = $groupUser->user_id;
2733
                                        $zoomMeetingUser->type = ZoomMeetingUser::TYPE_CREATOR;
2734
                                        $zoomMeetingUserMapper->insert($zoomMeetingUser);
2735
                                    }
2736
                                }
2737
 
2738
                                $chatGroupUserMessage = new ChatGroupUserMessage();
2739
                                $chatGroupUserMessage->group_id = $chatGroup->id;
2740
                                $chatGroupUserMessage->message_id = $chatGroupMessage->id;
2741
                                $chatGroupUserMessage->receiver_id = $groupUser->user_id;
2742
                                $chatGroupUserMessage->recd = ChatGroupUserMessage::RECD_NO;
2743
                                $chatGroupUserMessage->seen = ChatGroupUserMessage::SEEN_NO;
2744
                                $chatGroupUserMessageMapper->insert($chatGroupUserMessage);
2745
                                $chatGroupUserMapper->markIsOpen($groupUser->group_id, $groupUser->user_id);
2746
                            }
2747
                        }
2748
                    }
2749
 
2750
                    return new JsonModel([
2751
                        'success' => true,
2752
                        'data' => 'LABEL_ZOOM_NEW_MEETING_SUCCESSFULLY'
2753
                    ]);
2754
                } else {
2755
                    return new JsonModel([
2756
                        'success' => false,
2757
                        'data' => 'ERROR_ZOOM_CREATING_NEW_MEETING'
2758
                    ]);
2759
                }
2760
            } else {
2761
                $messages = [];
2762
                $form_messages = (array) $form->getMessages();
2763
                foreach ($form_messages  as $fieldname => $field_messages) {
2764
                    $messages[$fieldname] = array_values($field_messages);
2765
                }
2766
 
2767
                return new JsonModel([
2768
                    'success'   => false,
2769
                    'data'   => $messages
2770
                ]);
2771
 
2772
                return new JsonModel($response);
2773
            }
2774
        } else {
2775
            $response = [
2776
                'success' => false,
2777
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
2778
            ];
2779
        }
2780
 
2781
        return new JsonModel($response);
2782
    }
11339 nelberth 2783
}