Proyectos de Subversion LeadersLinked - Services

Rev

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

Rev 696 Rev 697
Línea 223... Línea 223...
223
            'success' => true,
223
            'success' => true,
224
            'data' => $conversations
224
            'data' => $conversations
225
        ]);
225
        ]);
226
    }
226
    }
Línea 227... Línea -...
227
 
-
 
228
    /**
-
 
229
     * Recupera los mensajes de una conversación específica entre usuarios
-
 
230
     * 
-
 
231
     * Endpoint: GET /inmail/messages/:uuid
-
 
232
     * 
-
 
233
     * Parámetros de consulta:
-
 
234
     * - page: número de página para paginación (opcional, por defecto 0)
227
 
235
     * 
-
 
236
     * Respuesta exitosa:
-
 
237
     * [
-
 
238
     *   success: true,
-
 
239
     *   data: [
-
 
240
     *     [
-
 
241
     *       uuid: UUID del mensaje,
-
 
242
     *       sender_name: nombre del remitente,
-
 
243
     *       sender_image: URL de la imagen del remitente,
-
 
244
     *       sender_profile: URL del perfil del remitente,
-
 
245
     *       receiver_name: nombre del destinatario,
-
 
246
     *       receiver_image: URL de la imagen del destinatario,
-
 
247
     *       receiver_profile: URL del perfil del destinatario,
-
 
248
     *       side: 'left' (mensaje propio) | 'right' (mensaje recibido),
-
 
249
     *       message: contenido del mensaje,
-
 
250
     *       type: 'text' | 'image' | 'video' | 'document',
-
 
251
     *       filename: URL del archivo adjunto (si existe),
-
 
252
     *       date: tiempo transcurrido desde el envío,
-
 
253
     *       url_abuse_report: URL para reportar abuso (solo mensajes recibidos)
-
 
254
     *     ]
-
 
255
     *   ],
-
 
256
     *   pagination: información de paginación
-
 
257
     * ]
-
 
258
     * 
-
 
259
     * Respuesta de error:
-
 
260
     * [
-
 
261
     *   success: false,
-
 
262
     *   data: mensaje de error
-
 
263
     * ]
-
 
264
     * 
-
 
265
     * @return \Laminas\View\Model\JsonModel
-
 
266
     */
228
 
267
    public function getMessagesAction()
229
    public function getMessagesAction()
268
    {
230
    {
Línea 269... Línea -...
269
        $request = $this->getRequest();
-
 
270
        
231
        $request = $this->getRequest();
271
        // Verificar que la petición sea GET
232
        
272
        if (!$request->isGet()) {
233
        if (!$request->isGet()) {
273
            return new JsonModel([
234
            return new JsonModel([
274
                'success' => false,
235
                'success' => false,
275
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
236
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
Línea 276... Línea -...
276
            ]);
-
 
277
        }
237
            ]);
278
        
238
        }
Línea 279... Línea -...
279
        // Obtener parámetros de la petición
-
 
280
        $page = intval($this->params()->fromQuery('page', 0), 10);
239
        
281
        $uuid = $this->params()->fromRoute('uuid');
240
        $page = intval($this->params()->fromQuery('page', 0), 10);
282
        
241
        $uuid = $this->params()->fromRoute('uuid');
283
        // Validar que se proporcione el UUID del usuario
242
        
284
        if (!$uuid) {
243
        if (!$uuid) {
285
            return new JsonModel([
244
            return new JsonModel([
Línea 286... Línea -...
286
                'success' => false,
-
 
287
                'data' => 'ERROR_PARAMETERS_ARE_INVALID'
245
                'success' => false,
288
            ]);
246
                'data' => 'ERROR_PARAMETERS_ARE_INVALID'
Línea 289... Línea -...
289
        }
-
 
290
 
247
            ]);
291
        // Obtener el usuario actual autenticado
248
        }
Línea 292... Línea -...
292
        $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
293
        $currentUser = $currentUserPlugin->getUser();
249
 
294
 
250
        $currentUserPlugin = $this->plugin('currentUserPlugin');
295
        // Obtener la fecha actual de la base de datos para cálculos de tiempo
251
        $currentUser = $currentUserPlugin->getUser();
296
        $userMapper = UserMapper::getInstance($this->adapter);
252
 
297
        $now = $userMapper->getDatebaseNow();
253
        $userMapper = UserMapper::getInstance($this->adapter);
298
 
254
        $now = $userMapper->getDatebaseNow();
299
        // Buscar el usuario destinatario por UUID
255
 
Línea 300... Línea -...
300
        $user = $userMapper->fetchOneByUuid($uuid);
-
 
301
        if (!$user) {
256
        $user = $userMapper->fetchOneByUuid($uuid);
302
            return new JsonModel([
257
        if (!$user) {
303
                'success' => false,
258
            return new JsonModel([
304
                'data' => 'ERROR_REQUEST_IS_INVALID'
259
                'success' => false,
305
            ]);
260
                'data' => 'ERROR_REQUEST_IS_INVALID'
Línea 306... Línea 261...
306
        }
261
            ]);
307
 
262
        }
Línea 308... Línea -...
308
        // Obtener IDs de mensajes reportados por el usuario actual
-
 
309
        $abuseReportMapper = AbuseReportMapper::getInstance($this->adapter);
263
 
Línea 310... Línea 264...
310
        $abuse_report_message_ids = $abuseReportMapper->fetchAllDataByUserReportingIdAndTypeReturnIds(
264
        $abuseReportMapper = AbuseReportMapper::getInstance($this->adapter);
Línea 311... Línea 265...
311
            $currentUser->id, 
265
        $abuse_report_message_ids = $abuseReportMapper->fetchAllDataByUserReportingIdAndTypeReturnIds(
312
            AbuseReport::TYPE_INMAIL_MESSAGE
-
 
313
        );
266
            $currentUser->id, 
Línea 314... Línea 267...
314
 
267
            AbuseReport::TYPE_INMAIL_MESSAGE
315
        $conversationMapper = ConversationMapper::getInstance($this->adapter);
-
 
316
        $messageMapper = MessageMapper::getInstance($this->adapter);
268
        );
Línea 317... Línea 269...
317
        
269
 
318
        // Buscar la conversación entre los dos usuarios
270
        $conversationMapper = ConversationMapper::getInstance($this->adapter);
319
        $conversation = $conversationMapper->fetchOneByUserId1AndUserId2($currentUser->id, $user->id);
271
        $messageMapper = MessageMapper::getInstance($this->adapter);
Línea 343... Línea 295...
343
                            'type' => 'user', 
295
                            'type' => 'user', 
344
                            'filename' => $user->image, 
296
                            'filename' => $user->image, 
345
                            'code' => $user->uuid
297
                            'code' => $user->uuid
346
                        ], ['force_canonical' => true]),
298
                        ], ['force_canonical' => true]),
347
                        'receiver_profile' => $this->url()->fromRoute('profile/view', ['id' => $user->uuid]),
299
                        'receiver_profile' => $this->url()->fromRoute('profile/view', ['id' => $user->uuid]),
348
                        'side' => 'left', // Mensaje propio (lado izquierdo)
300
                        'side' => 'left',
349
                        'message' => $record->message,
301
                        'message' => $record->message,
350
                        'type' => $record->type,
302
                        'type' => $record->type,
351
                        'filename' => $record->filename ? $this->url()->fromRoute('storage', [
303
                        'filename' => $record->filename ? $this->url()->fromRoute('storage', [
352
                            'type' => 'message', 
304
                            'type' => 'message', 
353
                            'filename' => $record->filename, 
305
                            'filename' => $record->filename, 
Línea 356... Línea 308...
356
                        'date' => $timeElapsedString,
308
                        'date' => $timeElapsedString,
357
                        'url_abuse_report' => '', // No se puede reportar mensajes propios
309
                        'url_abuse_report' => '', // No se puede reportar mensajes propios
358
                    ]);
310
                    ]);
359
                } 
311
                } 
360
                else {
312
                else {
361
                    // Verificar si el mensaje ha sido reportado por abuso
-
 
362
                    if (in_array($record->id, $abuse_report_message_ids)) {
313
                    if (in_array($record->id, $abuse_report_message_ids)) {
363
                        // Mensaje reportado - mostrar mensaje de contenido reportado
-
 
364
                        array_push($messages, [
314
                        array_push($messages, [
365
                            'uuid' => $record->uuid,
315
                            'uuid' => $record->uuid,
366
                            'sender_name' => trim($user->first_name . ' ' . $user->last_name),
316
                            'sender_name' => trim($user->first_name . ' ' . $user->last_name),
367
                            'sender_image' => $this->url()->fromRoute('storage', [
317
                            'sender_image' => $this->url()->fromRoute('storage', [
368
                                'type' => 'user', 
318
                                'type' => 'user', 
Línea 375... Línea 325...
375
                                'type' => 'user', 
325
                                'type' => 'user', 
376
                                'filename' => $currentUser->image, 
326
                                'filename' => $currentUser->image, 
377
                                'code' => $user->uuid
327
                                'code' => $user->uuid
378
                            ], ['force_canonical' => true]),
328
                            ], ['force_canonical' => true]),
379
                            'receiver_profile' => $this->url()->fromRoute('profile/view', ['id' => $currentUser->uuid]),
329
                            'receiver_profile' => $this->url()->fromRoute('profile/view', ['id' => $currentUser->uuid]),
380
                            'side' => 'right', // Mensaje recibido (lado derecho)
330
                            'side' => 'right',
381
                            'message' => 'LABEL_ABUSE_CONTENT_REPORTED',
331
                            'message' => 'LABEL_ABUSE_CONTENT_REPORTED',
382
                            'type' => Message::TYPE_TEXT,
332
                            'type' => Message::TYPE_TEXT,
383
                            'filename' => '',
333
                            'filename' => '',
384
                            'date' => $timeElapsedString,
334
                            'date' => $timeElapsedString,
385
                            'url_abuse_report' => '', // Ya no se puede reportar
335
                            'url_abuse_report' => '', // Ya no se puede reportar
386
                        ]);
336
                        ]);
387
                    } else {
337
                    } else {
388
                        // Mensaje normal - generar URL para reportar abuso
-
 
389
                        $url_abuse_report = $this->url()->fromRoute('helpers/abuse-report', [
338
                        $url_abuse_report = $this->url()->fromRoute('helpers/abuse-report', [
390
                            'type' => 'message', 
339
                            'type' => 'message', 
391
                            'id' => $record->uuid
340
                            'id' => $record->uuid
392
                        ], ['force_canonical' => true]);
341
                        ], ['force_canonical' => true]);
Línea 405... Línea 354...
405
                                'type' => 'user', 
354
                                'type' => 'user', 
406
                                'filename' => $currentUser->image, 
355
                                'filename' => $currentUser->image, 
407
                                'code' => $user->uuid
356
                                'code' => $user->uuid
408
                            ], ['force_canonical' => true]),
357
                            ], ['force_canonical' => true]),
409
                            'receiver_profile' => $this->url()->fromRoute('profile/view', ['id' => $currentUser->uuid]),
358
                            'receiver_profile' => $this->url()->fromRoute('profile/view', ['id' => $currentUser->uuid]),
410
                            'side' => 'right', // Mensaje recibido (lado derecho)
359
                            'side' => 'right',
411
                            'message' => $record->message,
360
                            'message' => $record->message,
412
                            'type' => $record->type,
361
                            'type' => $record->type,
413
                            'filename' => $record->filename ? $this->url()->fromRoute('storage', [
362
                            'filename' => $record->filename ? $this->url()->fromRoute('storage', [
414
                                'type' => 'message', 
363
                                'type' => 'message', 
415
                                'filename' => $record->filename, 
364
                                'filename' => $record->filename, 
Línea 417... Línea 366...
417
                            ], ['force_canonical' => true]) : '',
366
                            ], ['force_canonical' => true]) : '',
418
                            'date' => $timeElapsedString,
367
                            'date' => $timeElapsedString,
419
                            'url_abuse_report' => $url_abuse_report,
368
                            'url_abuse_report' => $url_abuse_report,
420
                        ]);
369
                        ]);
Línea 421... Línea -...
421
 
-
 
422
                        // Marcar el mensaje como leído
370
 
423
                        $messageMapper->markAsRead($record->id);
371
                        $messageMapper->markAsRead($record->id);
424
                    }
372
                    }
425
                }
373
                }