Proyectos de Subversion LeadersLinked - Services

Rev

Rev 589 | Rev 667 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 589 Rev 666
Línea 287... Línea 287...
287
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
287
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
288
            ]);
288
            ]);
289
        }
289
        }
290
    }
290
    }
Línea 291... Línea -...
291
 
-
 
292
 
291
 
293
    /**
292
    /**
-
 
293
     * Recupera los mensajes de una conversación específica entre usuarios
294
     * Esta función remueve el usuario del grupo
294
     * 
-
 
295
     * Endpoint: GET /inmail/message/:id
295
     * Es una petición GET el url recuperado en /inmail
296
     * 
-
 
297
     * Parámetros de consulta:
-
 
298
     * - page: número de página para paginación (opcional, por defecto 0)
296
     * [ruta del servidor]/inmail/[uuid]/message
299
     * 
297
     * retorna un json en caso de ser  positivo
300
     * Respuesta exitosa:
298
     * [
301
     * [
299
     *   success: true,
302
     *   success: true,
300
     *      data: [
303
     *   data: [
-
 
304
     *     [
301
     *          [ 
305
     *       uuid: UUID del mensaje,
302
     *              sender_name: nombre de quien que envia el mensaje,
306
     *       sender_name: nombre del remitente,
303
     *              sender_image: imagen de quien que recibe el mensaje,
307
     *       sender_image: URL de la imagen del remitente,
304
     *              sender_profile: url de profile de quien que envia el mensaje,
308
     *       sender_profile: URL del perfil del remitente,
305
     *              receiver_name: nombre de quien que recibe el mensaje,
309
     *       receiver_name: nombre del destinatario,
306
     *              receiver_image: url de la imagen de quien  que recibe el mensaje,
310
     *       receiver_image: URL de la imagen del destinatario,
307
     *              receiver_profile: url del profile de quien recibe el mensaje,
311
     *       receiver_profile: URL del perfil del destinatario,
308
     *              side: left/righ de que lado de la pantalla se mostrara,
312
     *       side: 'left' (mensaje propio) | 'right' (mensaje recibido),
309
     *              message: texto del mensaje,
313
     *       message: contenido del mensaje,
310
     *              type: text|image|video|document,
314
     *       type: 'text' | 'image' | 'video' | 'document',
311
     *              filename: url del archivo enviado,
315
     *       filename: URL del archivo adjunto (si existe),
-
 
316
     *       date: tiempo transcurrido desde el envío,
312
     *              date: cadena que describe hace cuanto se recibio el mensaje
317
     *       url_abuse_report: URL para reportar abuso (solo mensajes recibidos)
313
     *          ]
318
     *     ]
-
 
319
     *   ],
314
     *      ]
320
     *   pagination: información de paginación
-
 
321
     * ]
315
     *   ]
322
     * 
316
     * En caso de ser negativo puede haber 2 formatos
323
     * Respuesta de error:
317
     * [
324
     * [
318
     *  'success' : false,
325
     *   success: false,
319
     *  'data' : mensaje de error
326
     *   data: mensaje de error
-
 
327
     * ]
320
     * ]
328
     * 
321
     * @return \Laminas\View\Model\JsonModel
329
     * @return \Laminas\View\Model\JsonModel
322
     */
330
     */
323
    public function messageAction()
331
    public function messageAction()
324
    {
332
    {
325
        $request = $this->getRequest();
-
 
326
        if ($request->isGet()) {
-
 
327
            $page = intval($this->params()->fromQuery('page', 0), 10);
333
        $request = $this->getRequest();
328
 
-
 
329
            $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
330
            $currentUser = $currentUserPlugin->getUser();
-
 
331
 
-
 
332
            $userMapper = UserMapper::getInstance($this->adapter);
334
        
333
            $now = $userMapper->getDatebaseNow();
-
 
334
 
-
 
335
            $conversationMapper = ConversationMapper::getInstance($this->adapter);
-
 
336
 
-
 
337
            $messageMapper = MessageMapper::getInstance($this->adapter);
-
 
338
 
-
 
339
            $id = $this->params()->fromRoute('id');
-
 
340
            if (!$id) {
-
 
341
                return new JsonModel([
-
 
342
                    'success' => false,
-
 
343
                    'data' => 'ERROR_PARAMETERS_ARE_INVALID'
-
 
344
                ]);
-
 
345
            }
-
 
346
 
-
 
347
            $user = $userMapper->fetchOneByUuid($id);
335
        // Verificar que la petición sea GET
348
            if (!$user) {
336
        if (!$request->isGet()) {
349
                return new JsonModel([
337
            return new JsonModel([
350
                    'success' => false,
338
                'success' => false,
351
                    'data' => 'ERROR_REQUEST_IS_INVALID'
339
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
352
                ]);
340
            ]);
353
            }
-
 
354
 
-
 
355
            $abuseReportMapper = AbuseReportMapper::getInstance($this->adapter);
-
 
356
            $abuse_report_message_ids = $abuseReportMapper->fetchAllDataByUserReportingIdAndTypeReturnIds($currentUser->id, AbuseReport::TYPE_INMAIL_MESSAGE);
-
 
357
 
-
 
358
 
-
 
359
            $conversationMapper = ConversationMapper::getInstance($this->adapter);
-
 
360
            $conversation = $conversationMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
-
 
361
 
-
 
362
            $messages = [];
-
 
363
            if ($conversation) {
-
 
364
                $records = $messageMapper->getAllMessagesPaginatorByConversationId($conversation->id, $page);
-
 
Línea -... Línea 341...
-
 
341
        }
-
 
342
 
-
 
343
        // ========================================
-
 
344
        // INICIALIZACIÓN Y VALIDACIÓN DE PARÁMETROS
365
 
345
        // ========================================
-
 
346
        
-
 
347
        // Obtener parámetros de la petición
-
 
348
        $page = intval($this->params()->fromQuery('page', 0), 10);
-
 
349
        $id = $this->params()->fromRoute('id');
366
 
350
        
367
                foreach ($records as $record) {
351
        // Validar que se proporcione el ID del usuario
368
                    /*
352
        if (!$id) {
369
                    echo '<pre>'; 
353
            return new JsonModel([
-
 
354
                'success' => false,
-
 
355
                'data' => 'ERROR_PARAMETERS_ARE_INVALID'
Línea -... Línea 356...
-
 
356
            ]);
370
                    print_r($record); 
357
        }
-
 
358
 
-
 
359
        // Obtener el usuario actual autenticado
-
 
360
        $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
361
        $currentUser = $currentUserPlugin->getUser();
-
 
362
 
-
 
363
        // Obtener la fecha actual de la base de datos para cálculos de tiempo
-
 
364
        $userMapper = UserMapper::getInstance($this->adapter);
-
 
365
        $now = $userMapper->getDatebaseNow();
-
 
366
 
-
 
367
        // ========================================
-
 
368
        // VALIDACIÓN DEL USUARIO DESTINATARIO
-
 
369
        // ========================================
-
 
370
        
-
 
371
        // Buscar el usuario destinatario por UUID
-
 
372
        $user = $userMapper->fetchOneByUuid($id);
-
 
373
        if (!$user) {
-
 
374
            return new JsonModel([
-
 
375
                'success' => false,
Línea -... Línea 376...
-
 
376
                'data' => 'ERROR_REQUEST_IS_INVALID'
-
 
377
            ]);
-
 
378
        }
-
 
379
 
-
 
380
        // ========================================
-
 
381
        // OBTENCIÓN DE REPORTES DE ABUSO
-
 
382
        // ========================================
-
 
383
        
-
 
384
        // Obtener IDs de mensajes reportados por el usuario actual
-
 
385
        $abuseReportMapper = AbuseReportMapper::getInstance($this->adapter);
-
 
386
        $abuse_report_message_ids = $abuseReportMapper->fetchAllDataByUserReportingIdAndTypeReturnIds(
-
 
387
            $currentUser->id, 
-
 
388
            AbuseReport::TYPE_INMAIL_MESSAGE
-
 
389
        );
-
 
390
 
-
 
391
        // ========================================
-
 
392
        // BÚSQUEDA DE LA CONVERSACIÓN
-
 
393
        // ========================================
-
 
394
        
-
 
395
        $conversationMapper = ConversationMapper::getInstance($this->adapter);
-
 
396
        $messageMapper = MessageMapper::getInstance($this->adapter);
-
 
397
        
-
 
398
        // Buscar la conversación entre los dos usuarios
-
 
399
        $conversation = $conversationMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
-
 
400
        
-
 
401
        $messages = [];
-
 
402
        
-
 
403
        // ========================================
-
 
404
        // PROCESAMIENTO DE MENSAJES
-
 
405
        // ========================================
-
 
406
        
-
 
407
        if ($conversation) {
-
 
408
            // Obtener mensajes paginados de la conversación
-
 
409
            $records = $messageMapper->getAllMessagesPaginatorByConversationId($conversation->id, $page);
-
 
410
 
-
 
411
            foreach ($records as $record) {
-
 
412
                // Calcular tiempo transcurrido desde el envío del mensaje
-
 
413
                $timeElapsedString = $this->timeAgo($record->added_on, $now);
-
 
414
 
-
 
415
                // ========================================
-
 
416
                // MENSAJES ENVIADOS POR EL USUARIO ACTUAL
-
 
417
                // ========================================
-
 
418
                
-
 
419
                if ($record->sender_id == $currentUser->id) {
-
 
420
                    array_push($messages, [
-
 
421
                        'uuid' => $record->uuid,
-
 
422
                        'sender_name' => trim($currentUser->first_name . ' ' . $currentUser->last_name),
-
 
423
                        'sender_image' => $this->url()->fromRoute('storage', [
-
 
424
                            'type' => 'user', 
-
 
425
                            'filename' => $currentUser->image, 
-
 
426
                            'code' => $currentUser->uuid
-
 
427
                        ], ['force_canonical' => true]),
-
 
428
                        'sender_profile' => $this->url()->fromRoute('profile/view', ['id' => $currentUser->uuid]),
-
 
429
                        'receiver_name' => trim($user->first_name . ' ' . $user->last_name),
-
 
430
                        'receiver_image' => $this->url()->fromRoute('storage', [
-
 
431
                            'type' => 'user', 
-
 
432
                            'filename' => $user->image, 
-
 
433
                            'code' => $user->uuid
-
 
434
                        ], ['force_canonical' => true]),
-
 
435
                        'receiver_profile' => $this->url()->fromRoute('profile/view', ['id' => $user->uuid]),
-
 
436
                        'side' => 'left', // Mensaje propio (lado izquierdo)
-
 
437
                        'message' => $record->message,
-
 
438
                        'type' => $record->type,
-
 
439
                        'filename' => $record->filename ? $this->url()->fromRoute('storage', [
-
 
440
                            'type' => 'message', 
-
 
441
                            'filename' => $record->filename, 
-
 
442
                            'code' => $record->uuid
-
 
443
                        ], ['force_canonical' => true]) : '',
-
 
444
                        'date' => $timeElapsedString,
-
 
445
                        'url_abuse_report' => '', // No se puede reportar mensajes propios
-
 
446
                    ]);
-
 
447
                } 
-
 
448
                // ========================================
-
 
449
                // MENSAJES RECIBIDOS DEL OTRO USUARIO
-
 
450
                // ========================================
-
 
451
                else {
-
 
452
                    // Verificar si el mensaje ha sido reportado por abuso
-
 
453
                    if (in_array($record->id, $abuse_report_message_ids)) {
-
 
454
                        // Mensaje reportado - mostrar mensaje de contenido reportado
-
 
455
                        array_push($messages, [
-
 
456
                            'uuid' => $record->uuid,
-
 
457
                            'sender_name' => trim($user->first_name . ' ' . $user->last_name),
-
 
458
                            'sender_image' => $this->url()->fromRoute('storage', [
-
 
459
                                'type' => 'user', 
-
 
460
                                'filename' => $user->image, 
-
 
461
                                'code' => $user->uuid
-
 
462
                            ], ['force_canonical' => true]),
-
 
463
                            'sender_profile' => $this->url()->fromRoute('profile/view', ['id' => $user->uuid]),
-
 
464
                            'receiver_name' => trim($currentUser->first_name . ' ' . $currentUser->last_name),
-
 
465
                            'receiver_image' => $this->url()->fromRoute('storage', [
-
 
466
                                'type' => 'user', 
-
 
467
                                'filename' => $currentUser->image, 
-
 
468
                                'code' => $user->uuid
-
 
469
                            ], ['force_canonical' => true]),
-
 
470
                            'receiver_profile' => $this->url()->fromRoute('profile/view', ['id' => $currentUser->uuid]),
-
 
471
                            'side' => 'right', // Mensaje recibido (lado derecho)
-
 
472
                            'message' => 'LABEL_ABUSE_CONTENT_REPORTED',
-
 
473
                            'type' => Message::TYPE_TEXT,
-
 
474
                            'filename' => '',
-
 
475
                            'date' => $timeElapsedString,
-
 
476
                            'url_abuse_report' => '', // Ya no se puede reportar
-
 
477
                        ]);
-
 
478
                    } else {
-
 
479
                        // Mensaje normal - generar URL para reportar abuso
Línea 371... Línea -...
371
                    echo '</pre>'; */
-
 
372
 
480
                        $url_abuse_report = $this->url()->fromRoute('helpers/abuse-report', [
373
                    $timeElapsedString = $this->timeAgo($record->added_on, $now);
481
                            'type' => 'message', 
374
 
482
                            'id' => $record->uuid
375
 
483
                        ], ['force_canonical' => true]);
-
 
484
 
-
 
485
                        array_push($messages, [
-
 
486
                            'uuid' => $record->uuid,
-
 
487
                            'sender_name' => trim($user->first_name . ' ' . $user->last_name),
376
                    if ($record->sender_id == $currentUser->id) {
488
                            'sender_image' => $this->url()->fromRoute('storage', [
377
                        array_push($messages, [
489
                                'type' => 'user', 
378
                            'uuid' => $record->uuid,
490
                                'filename' => $user->image, 
-
 
491
                                'code' => $user->uuid
-
 
492
                            ], ['force_canonical' => true]),
-
 
493
                            'sender_profile' => $this->url()->fromRoute('profile/view', ['id' => $user->uuid]),
-
 
494
                            'receiver_name' => trim($currentUser->first_name . ' ' . $currentUser->last_name),
379
                            'sender_name' => trim($currentUser->first_name . ' ' . $currentUser->last_name),
495
                            'receiver_image' => $this->url()->fromRoute('storage', [
380
                            'sender_image' => $this->url()->fromRoute('storage', ['type' => 'user', 'filename' => $currentUser->image, 'code' => $currentUser->uuid], ['force_canonical' => true]),
496
                                'type' => 'user', 
381
                            'sender_profile' => $this->url()->fromRoute('profile/view', ['id' => $currentUser->uuid]),
497
                                'filename' => $currentUser->image, 
382
                            'receiver_name' => trim($user->first_name . ' ' . $user->last_name),
498
                                'code' => $user->uuid
383
                            'receiver_image' => $this->url()->fromRoute('storage', ['type' => 'user', 'filename' => $user->image, 'code' => $user->uuid], ['force_canonical' => true]),
499
                            ], ['force_canonical' => true]),
-
 
500
                            'receiver_profile' => $this->url()->fromRoute('profile/view', ['id' => $currentUser->uuid]),
-
 
501
                            'side' => 'right', // Mensaje recibido (lado derecho)
-
 
502
                            'message' => $record->message,
-
 
503
                            'type' => $record->type,
384
                            'receiver_profile' => $this->url()->fromRoute('profile/view', ['id' => $user->uuid]),
504
                            'filename' => $record->filename ? $this->url()->fromRoute('storage', [
385
                            'side' => 'left',
505
                                'type' => 'message', 
386
                            'message' => $record->message,
506
                                'filename' => $record->filename, 
387
                            'type' => $record->type,
-
 
388
                            'filename' => $record->filename ? $this->url()->fromRoute('storage', ['type' => 'message', 'filename' => $record->filename, 'code' => $record->uuid], ['force_canonical' => true]) : '',
-
 
389
                            'date' => $timeElapsedString,
-
 
390
                            'url_abuse_report' => '',
-
 
391
                        ]);
-
 
392
                    } else {
-
 
393
 
-
 
394
                        if (in_array($record->id, $abuse_report_message_ids)) {
-
 
395
 
-
 
396
                            array_push($messages, [
-
 
397
                                'uuid' => $record->uuid,
-
 
398
                                'sender_name' => trim($user->first_name . ' ' . $user->last_name),
-
 
399
                                'sender_image' => $this->url()->fromRoute('storage', ['type' => 'user', 'filename' => $user->image, 'code' => $user->uuid], ['force_canonical' => true]),
-
 
400
                                'sender_profile' => $this->url()->fromRoute('profile/view', ['id' => $user->uuid]),
-
 
401
                                'receiver_name' => trim($currentUser->first_name . ' ' . $currentUser->last_name),
-
 
402
                                'receiver_image' => $this->url()->fromRoute('storage', ['type' => 'user', 'filename' => $currentUser->image, 'code' => $user->uuid], ['force_canonical' => true]),
-
 
403
                                'receiver_profile' => $this->url()->fromRoute('profile/view', ['id' => $currentUser->uuid]),
-
 
404
                                'side' => 'right',
-
 
405
                                'message' => 'LABEL_ABUSE_CONTENT_REPORTED',
-
 
406
                                'type' => Message::TYPE_TEXT,
-
 
407
                                'filename' => '',
-
 
408
                                'date' => $timeElapsedString,
-
 
409
                                'url_abuse_report' => '',
-
 
410
                            ]);
-
 
411
                        } else {
-
 
412
                            $url_abuse_report = $this->url()->fromRoute('helpers/abuse-report', ['type' => 'message', 'id' => $record->uuid], ['force_canonical' => true]);
-
 
413
 
-
 
414
                            array_push($messages, [
-
 
415
                                'uuid' => $record->uuid,
-
 
416
                                'sender_name' => trim($user->first_name . ' ' . $user->last_name),
-
 
417
                                'sender_image' => $this->url()->fromRoute('storage', ['type' => 'user', 'filename' => $user->image, 'code' => $user->uuid], ['force_canonical' => true]),
-
 
418
                                'sender_profile' => $this->url()->fromRoute('profile/view', ['id' => $user->uuid]),
-
 
419
                                'receiver_name' => trim($currentUser->first_name . ' ' . $currentUser->last_name),
-
 
420
                                'receiver_image' => $this->url()->fromRoute('storage', ['type' => 'user', 'filename' => $currentUser->image, 'code' => $user->uuid], ['force_canonical' => true]),
-
 
421
                                'receiver_profile' => $this->url()->fromRoute('profile/view', ['id' => $currentUser->uuid]),
-
 
422
                                'side' => 'right',
-
 
423
                                'message' => $record->message,
-
 
424
                                'type' => $record->type,
-
 
Línea -... Línea 507...
-
 
507
                                'code' => $record->uuid
425
                                'filename' => $record->filename ? $this->url()->fromRoute('storage', ['type' => 'message', 'filename' => $record->filename, 'code' => $record->uuid], ['force_canonical' => true]) : '',
508
                            ], ['force_canonical' => true]) : '',
426
                                'date' => $timeElapsedString,
509
                            'date' => $timeElapsedString,
427
                                'url_abuse_report' => $url_abuse_report,
510
                            'url_abuse_report' => $url_abuse_report,
428
                            ]);
-
 
429
                        }
-
 
430
 
-
 
431
                        $messageMapper->markAsRead($record->id);
-
 
432
                    }
-
 
433
                }
-
 
434
 
511
                        ]);
Línea -... Línea 512...
-
 
512
 
-
 
513
                        // Marcar el mensaje como leído
-
 
514
                        $messageMapper->markAsRead($record->id);
435
                return new JsonModel([
515
                    }
436
                    'success' => true,
516
                }
437
                    'data' => $messages,
517
            }
438
                    'pagination' => $records->getPages()
518
 
439
                ]);
519
            // ========================================
440
            }
-
 
441
 
-
 
442
 
-
 
443
            return new JsonModel([
-
 
444
                'success' => true,
-
 
445
                'data' => $messages,
520
            // RESPUESTA CON MENSAJES Y PAGINACIÓN
446
                'pagination' => 1
521
            // ========================================
-
 
522
            
-
 
523
            return new JsonModel([
-
 
524
                'success' => true,
-
 
525
                'data' => $messages,
-
 
526
                'pagination' => $records->getPages()
-
 
527
            ]);
-
 
528
        }
-
 
529
 
-
 
530
        // ========================================
-
 
531
        // RESPUESTA CUANDO NO EXISTE CONVERSACIÓN
447
            ]);
532
        // ========================================
Línea 448... Línea 533...
448
        } else {
533
        
449
            return new JsonModel([
534
        return new JsonModel([
450
                'success' => false,
535
            'success' => true,