Proyectos de Subversion LeadersLinked - Backend

Rev

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