Proyectos de Subversion LeadersLinked - Backend

Rev

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