Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev 17049 Rev 17050
Línea 211... Línea 211...
211
        }
211
        }
212
    }
212
    }
Línea -... Línea 213...
-
 
213
    
-
 
214
    
-
 
215
    
-
 
216
    /**
-
 
217
     * Agregar un nuevo emoji para el pulso diario
-
 
218
     * 
-
 
219
     * Este método maneja la creación de un nuevo registro de emoji con su imagen asociada.
-
 
220
     * Valida los datos del formulario, crea el registro del emoji y maneja la carga de la imagen.
213
    
221
     * 
214
    
222
     * @return JsonModel Respuesta con estado de éxito/error y mensaje
-
 
223
     */
215
    
224
    public function addAction()
216
    public function addAction()
225
    {
217
    {
226
        try {
218
        $currentUserPlugin  = $this->plugin('currentUserPlugin');
-
 
219
        $currentUser        = $currentUserPlugin->getUser();
227
            // Validar método de solicitud
Línea 220... Línea -...
220
        $currentCompany     = $currentUserPlugin->getCompany();
-
 
221
        
-
 
222
        $request            = $this->getRequest();
228
            if (!$this->getRequest()->isPost()) {
223
 
-
 
224
        
-
 
225
        if($request->isPost()) {
-
 
226
            $form = new  DailyPulseAddEmojiForm();
-
 
227
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
229
                return $this->createErrorResponse('ERROR_METHOD_NOT_ALLOWED');
228
            $dataPost['status'] = empty($dataPost['status'])  ? DailyPulseEmoji::STATUS_INACTIVE : $dataPost['status'];
-
 
229
            
230
            }
230
            
-
 
231
            $form->setData($dataPost);
-
 
232
            
-
 
233
            if($form->isValid()) {
-
 
234
                $dataPost = (array) $form->getData();
-
 
235
          
-
 
236
                $dailyPulseEmoji = new DailyPulseEmoji();
-
 
237
                $dailyPulseEmoji->company_id = $currentCompany->id;
231
 
238
                $dailyPulseEmoji->name = $dataPost['name'];
-
 
239
                $dailyPulseEmoji->order = $dataPost['order'];
232
            // Obtener y validar datos del formulario
240
                $dailyPulseEmoji->points = $dataPost['points'];
-
 
241
                $dailyPulseEmoji->status = $dataPost['status'];
-
 
242
                $dailyPulseEmoji->type = $dataPost['type'];
-
 
243
                $dailyPulseEmoji->image = '';
-
 
244
                
-
 
245
                $dailyPulseEmojiMapper = DailyPulseEmojiMapper::getInstance($this->adapter);
-
 
246
                if($dailyPulseEmojiMapper->insert($dailyPulseEmoji)) {
-
 
247
                    
-
 
248
                    $dailyPulseEmoji = $dailyPulseEmojiMapper->fetchOne($dailyPulseEmoji->id);
-
 
249
                    
-
 
250
                    $target_size = $this->config['leaderslinked.image_sizes.emoji'];
-
 
Línea 251... Línea -...
251
                    list($target_width, $target_height) = explode('x', $target_size);
-
 
252
                    
233
            $formData = $this->getFormData();
253
                    $storage = Storage::getInstance($this->config, $this->adapter);
-
 
254
                    $storage->setFiles($request->getFiles()->toArray());
-
 
255
 
-
 
256
                    if (!$storage->setCurrentFilename('image')) { 
-
 
257
                        return new JsonModel([
-
 
258
                            'success' => false,
-
 
259
                            'data' => 'ERROR_UPLOAD_FILE'
-
 
260
                        ]);
-
 
261
                    }
-
 
262
                    
-
 
263
                    $source_filename    = $storage->getTmpFilename();
-
 
264
                    $filename           = 'emoji-' . uniqid() . '.png';
-
 
265
                    $target_filename    = $storage->composePathToFilename(Storage::TYPE_DAILY_PULSE, $dailyPulseEmoji->uuid, $filename);
-
 
266
                    
-
 
267
                    if(!$storage->uploadImageCrop($source_filename, $target_filename, $target_width, $target_height)) {
-
 
268
                        return new JsonModel([
-
 
269
                            'success' => false,
234
            if (!$formData['isValid']) {
270
                            'data' => 'ERROR_UPLOAD_FILE'
-
 
271
                        ]);
-
 
272
                    }
-
 
273
 
-
 
274
                    $dailyPulseEmoji->image = $filename;
-
 
275
                    $dailyPulseEmojiMapper->update($dailyPulseEmoji);
-
 
276
                    
-
 
277
                    $this->logger->info('Se agrego el emoji ' . $dailyPulseEmoji->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
-
 
278
                    
235
                return $this->createErrorResponse($formData['messages']);
279
                    $data = [
-
 
280
                        'success'   => true,
-
 
281
                        'data'   => 'LABEL_RECORD_ADDED'
-
 
282
                    ];
-
 
283
                } else {
-
 
284
                    $data = [
-
 
285
                        'success'   => false,
-
 
286
                        'data'      => $dailyPulseEmojiMapper->getError()
-
 
287
                    ];
-
 
288
                    
-
 
289
                }
-
 
290
                
-
 
291
                return new JsonModel($data);
236
            }
292
                
-
 
293
            } else {
-
 
294
                $messages = [];
-
 
295
                $form_messages = (array) $form->getMessages();
-
 
296
                foreach($form_messages  as $fieldname => $field_messages)
-
 
297
                {
-
 
298
                    
-
 
299
                    $messages[$fieldname] = array_values($field_messages);
-
 
300
                }
-
 
301
                
237
 
302
                return new JsonModel([
238
            // Crear y guardar el emoji
-
 
239
            $emoji = $this->createEmoji($formData['data']);
-
 
240
            if (!$emoji) {
-
 
241
                return $this->createErrorResponse('ERROR_CREATING_EMOJI');
303
                    'success'   => false,
242
            }
-
 
243
 
-
 
244
            // Procesar y guardar la imagen
-
 
245
            if (!$this->processAndSaveImage($emoji)) {
-
 
246
                return $this->createErrorResponse('ERROR_UPLOAD_FILE');
-
 
247
            }
-
 
248
 
-
 
249
            // Registrar la acción y retornar éxito
-
 
250
            $this->logEmojiCreation($emoji);
-
 
251
            return $this->createSuccessResponse('LABEL_RECORD_ADDED');
-
 
252
 
-
 
253
        } catch (\Exception $e) {
-
 
254
            $this->logger->error('Error al crear emoji: ' . $e->getMessage());
-
 
255
            return $this->createErrorResponse('ERROR_UNEXPECTED');
-
 
256
        }
-
 
257
    }
-
 
258
    
-
 
259
    /**
-
 
260
     * Obtiene y valida los datos del formulario
-
 
261
     * 
-
 
262
     * @return array Datos validados y estado de validación
-
 
263
     */
-
 
264
    private function getFormData()
-
 
265
    {
-
 
266
        $form = new DailyPulseAddEmojiForm();
-
 
267
        $dataPost = array_merge(
-
 
268
            $this->getRequest()->getPost()->toArray(),
-
 
269
            $this->getRequest()->getFiles()->toArray()
-
 
270
        );
-
 
271
        
-
 
272
        $dataPost['status'] = empty($dataPost['status']) 
-
 
273
            ? DailyPulseEmoji::STATUS_INACTIVE 
304
                    'data'   => $messages
274
            : $dataPost['status'];
305
                ]);
275
        
306
            }
276
        $form->setData($dataPost);
307
            
277
        
308
        } else {
-
 
309
            $data = [
-
 
310
                'success' => false,
278
        if ($form->isValid()) {
-
 
279
            return [
-
 
280
                'isValid' => true,
-
 
281
                'data' => (array) $form->getData()
-
 
282
            ];
-
 
283
        }
-
 
284
 
-
 
285
        $messages = [];
-
 
286
        foreach ((array) $form->getMessages() as $fieldname => $field_messages) {
-
 
287
            $messages[$fieldname] = array_values($field_messages);
-
 
288
        }
-
 
289
 
-
 
290
        return [
-
 
291
            'isValid' => false,
-
 
292
            'messages' => $messages
-
 
293
        ];
-
 
294
    }
-
 
295
 
-
 
296
    /**
-
 
297
     * Crea un nuevo registro de emoji
-
 
298
     * 
-
 
299
     * @param array $data Datos del emoji
Línea -... Línea 300...
-
 
300
     * @return DailyPulseEmoji|null Emoji creado o null si falla
-
 
301
     */
-
 
302
    private function createEmoji(array $data)
-
 
303
    {
-
 
304
        $currentCompany = $this->plugin('currentUserPlugin')->getCompany();
-
 
305
        
-
 
306
        $emoji = new DailyPulseEmoji();
-
 
307
        $emoji->company_id = $currentCompany->id;
-
 
308
        $emoji->name = $data['name'];
-
 
309
        $emoji->order = $data['order'];
-
 
310
        $emoji->points = $data['points'];
-
 
311
        $emoji->status = $data['status'];
-
 
312
        $emoji->type = $data['type'];
-
 
313
        $emoji->image = '';
-
 
314
 
-
 
315
        $mapper = DailyPulseEmojiMapper::getInstance($this->adapter);
-
 
316
        if (!$mapper->insert($emoji)) {
-
 
317
            return null;
-
 
318
        }
-
 
319
 
-
 
320
        return $mapper->fetchOne($emoji->id);
-
 
321
    }
-
 
322
 
-
 
323
    /**
-
 
324
     * Procesa y guarda la imagen del emoji
-
 
325
     * 
-
 
326
     * @param DailyPulseEmoji $emoji Emoji al que se le asignará la imagen
-
 
327
     * @return bool True si la imagen se procesó correctamente
-
 
328
     */
-
 
329
    private function processAndSaveImage(DailyPulseEmoji $emoji)
-
 
330
    {
-
 
331
        $storage = Storage::getInstance($this->config, $this->adapter);
-
 
332
        $storage->setFiles($this->getRequest()->getFiles()->toArray());
-
 
333
 
-
 
334
        if (!$storage->setCurrentFilename('image')) {
-
 
335
            return false;
-
 
336
        }
-
 
337
 
-
 
338
        $target_size = $this->config['leaderslinked.image_sizes.emoji'];
-
 
339
        list($target_width, $target_height) = explode('x', $target_size);
-
 
340
 
-
 
341
        $source_filename = $storage->getTmpFilename();
-
 
342
        $filename = 'emoji-' . uniqid() . '.png';
-
 
343
        $target_filename = $storage->composePathToFilename(
-
 
344
            Storage::TYPE_DAILY_PULSE,
-
 
345
            $emoji->uuid,
-
 
346
            $filename
-
 
347
        );
-
 
348
 
-
 
349
        if (!$storage->uploadImageCrop($source_filename, $target_filename, $target_width, $target_height)) {
-
 
350
            return false;
-
 
351
        }
-
 
352
 
-
 
353
        $emoji->image = $filename;
-
 
354
        return DailyPulseEmojiMapper::getInstance($this->adapter)->update($emoji);
-
 
355
    }
-
 
356
 
-
 
357
    /**
-
 
358
     * Registra la creación del emoji en el log
-
 
359
     * 
-
 
360
     * @param DailyPulseEmoji $emoji Emoji creado
-
 
361
     */
-
 
362
    private function logEmojiCreation(DailyPulseEmoji $emoji)
-
 
363
    {
-
 
364
        $currentUser = $this->plugin('currentUserPlugin')->getUser();
-
 
365
        $this->logger->info(
-
 
366
            'Se agrego el emoji ' . $emoji->name,
-
 
367
            [
-
 
368
                'user_id' => $currentUser->id,
-
 
369
                'ip' => Functions::getUserIP()
-
 
370
            ]
-
 
371
        );
-
 
372
    }
-
 
373
 
-
 
374
    /**
-
 
375
     * Crea una respuesta de error
-
 
376
     * 
-
 
377
     * @param mixed $message Mensaje de error
-
 
378
     * @return JsonModel
-
 
379
     */
-
 
380
    private function createErrorResponse($message)
-
 
381
    {
-
 
382
        return new JsonModel([
-
 
383
            'success' => false,
-
 
384
            'data' => $message
-
 
385
        ]);
-
 
386
    }
-
 
387
 
-
 
388
    /**
-
 
389
     * Crea una respuesta de éxito
311
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
390
     * 
-
 
391
     * @param string $message Mensaje de éxito
-
 
392
     * @return JsonModel
-
 
393
     */
312
            ];
394
    private function createSuccessResponse($message)
Línea 313... Línea 395...
313
            
395
    {
314
            return new JsonModel($data);
396
        return new JsonModel([
315
        }
397
            'success' => true,
Línea 387... Línea 469...
387
        
469
        
388
        return new JsonModel($data);
470
        return new JsonModel($data);
Línea -... Línea 471...
-
 
471
    }
-
 
472
    
-
 
473
    
-
 
474
    /**
-
 
475
     * Editar un emoji existente
-
 
476
     * 
-
 
477
     * Este método maneja la actualización de un emoji existente y su imagen asociada.
-
 
478
     * Valida los datos del formulario, actualiza el registro del emoji y maneja la carga de la imagen.
389
    }
479
     * 
390
    
480
     * @return JsonModel Respuesta con estado de éxito/error y mensaje
391
    
-
 
392
    public function editAction()
481
     */
393
    {
482
    public function editAction()
394
        $currentUserPlugin = $this->plugin('currentUserPlugin');
483
    {
395
        $currentUser    = $currentUserPlugin->getUser();
484
        try {
396
        $currentCompany = $currentUserPlugin->getCompany();
485
            $id = $this->params()->fromRoute('id');
-
 
486
            
-
 
487
            // Obtener y validar el emoji existente
-
 
488
            $emoji = $this->getExistingEmoji($id);
Línea -... Línea 489...
-
 
489
            if (!$emoji) {
-
 
490
                return $this->createErrorResponse('ERROR_RECORD_NOT_FOUND');
-
 
491
            }
-
 
492
 
Línea 397... Línea -...
397
        
-
 
398
        $request    = $this->getRequest();
-
 
399
        $id    = $this->params()->fromRoute('id');
-
 
400
 
-
 
401
 
-
 
402
        $dailyPulseEmojiMapper = DailyPulseEmojiMapper::getInstance($this->adapter);
-
 
403
        $dailyPulseEmoji = $dailyPulseEmojiMapper->fetchOneByUuid($id);
-
 
404
        if(!$dailyPulseEmoji) {
-
 
405
            return new JsonModel([
-
 
406
                'success'   => false,
-
 
407
                'data'   => 'ERROR_RECORD_NOT_FOUND'
-
 
408
            ]);
-
 
409
        }
-
 
410
        
-
 
411
        
-
 
412
        if($dailyPulseEmoji->company_id != $currentCompany->id) {
-
 
413
            return new JsonModel([
-
 
414
                'success'   => false,
-
 
415
                'data'   => 'ERROR_UNAUTHORIZED'
-
 
416
            ]);
493
            // Validar autorización
Línea -... Línea 494...
-
 
494
            if (!$this->isAuthorized($emoji)) {
-
 
495
                return $this->createErrorResponse('ERROR_UNAUTHORIZED');
-
 
496
            }
-
 
497
 
Línea 417... Línea -...
417
        }
-
 
418
        
498
            $request = $this->getRequest();
419
        if($request->isGet()) {
499
            
420
            $storage = Storage::getInstance($this->config, $this->adapter);
-
 
421
            $path = $storage->getPathDailyPulse();
500
            // Manejar solicitud GET
422
            
-
 
423
            
-
 
424
            $data = [
-
 
425
                'success' => true,
-
 
426
                'data' => [
501
            if ($request->isGet()) {
-
 
502
                return $this->getEmojiData($emoji);
427
                    'name' => $dailyPulseEmoji->name,
503
            }
428
                    'order' => $dailyPulseEmoji->order,
504
            
429
                    'status' => $dailyPulseEmoji->status,
505
            // Manejar solicitud POST
-
 
506
            if ($request->isPost()) {
-
 
507
                return $this->updateEmoji($emoji);
430
                    'type' => $dailyPulseEmoji->type,
508
            }
431
                    'points' => $dailyPulseEmoji->points,
-
 
432
                    'image' => $dailyPulseEmoji->image ? $storage->getGenericImage($path,  $dailyPulseEmoji->uuid, $dailyPulseEmoji->image) : '',
-
 
433
                ]
-
 
434
            ];
-
 
435
            
509
 
436
            return new JsonModel($data);
510
            return $this->createErrorResponse('ERROR_METHOD_NOT_ALLOWED');
437
        }
-
 
438
        else if($request->isPost()) {
511
 
439
            $form = new  DailyPulseEditEmojiForm();
-
 
440
            $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
512
        } catch (\Exception $e) {
441
            $dataPost['status'] = empty($dataPost['status'])  ? DailyPulseEmoji::STATUS_INACTIVE : $dataPost['status'];
513
            $this->logger->error('Error al editar emoji: ' . $e->getMessage());
442
            
514
            return $this->createErrorResponse('ERROR_UNEXPECTED');
443
            
515
        }
444
            $form->setData($dataPost);
516
    }
445
            
517
 
-
 
518
    /**
446
            if($form->isValid()) {
519
     * Obtiene un emoji existente por su UUID
447
                $dataPost = (array) $form->getData();
-
 
448
                
520
     * 
449
                $dailyPulseEmoji->name = $dataPost['name'];
521
     * @param string $id UUID del emoji
450
                $dailyPulseEmoji->order = $dataPost['order'];
522
     * @return DailyPulseEmoji|null Emoji encontrado o null
451
                $dailyPulseEmoji->points = $dataPost['points'];
523
     */
452
                $dailyPulseEmoji->status = $dataPost['status'];
524
    private function getExistingEmoji($id)
453
                $dailyPulseEmoji->type = $dataPost['type'];
-
 
454
                
-
 
455
                if($dailyPulseEmojiMapper->update($dailyPulseEmoji)) {
-
 
456
                    
-
 
457
                    
525
    {
458
                    
526
        $mapper = DailyPulseEmojiMapper::getInstance($this->adapter);
459
                    $target_size = $this->config['leaderslinked.image_sizes.emoji'];
527
        return $mapper->fetchOneByUuid($id);
460
                    list($target_width, $target_height) = explode('x', $target_size);
528
    }
461
                   
529
 
-
 
530
    /**
462
                    
531
     * Verifica si el usuario está autorizado para editar el emoji
463
                    
532
     * 
464
                    
533
     * @param DailyPulseEmoji $emoji Emoji a verificar
465
                    $files = $this->getRequest()->getFiles()->toArray();
-
 
466
                    if(isset($files['image']) && empty($files['image']['error'])) {
-
 
467
                        
-
 
468
                        $image = Image::getInstance($this->config);
534
     * @return bool True si está autorizado
-
 
535
     */
469
                        $storage = Storage::getInstance($this->config, $this->adapter);
536
    private function isAuthorized(DailyPulseEmoji $emoji)
470
                        $target_path = $storage->getPathDailyPulse();
-
 
471
                        
537
    {
472
                        $tmp_filename  = $files['image']['tmp_name'];
538
        $currentCompany = $this->plugin('currentUserPlugin')->getCompany();
473
                        $filename      = explode('.',  $files['image']['name']);
539
        return $emoji->company_id === $currentCompany->id;
-
 
540
    }
474
                        $filename       = Functions::normalizeStringFilename(uniqid() . '-' . $filename[0].'.png');
541
 
475
                        
542
    /**
476
                        $crop_to_dimensions = true;
543
     * Obtiene los datos del emoji para la vista
477
                        $full_tmp_filename = $image->uploadProcessChangeSize($tmp_filename, $filename, $target_width, $target_height,  $crop_to_dimensions);
544
     * 
478
                        
-
 
479
                        if($full_tmp_filename ) { 
545
     * @param DailyPulseEmoji $emoji Emoji a obtener datos
480
                            if($dailyPulseEmoji->image) {
546
     * @return JsonModel Datos del emoji
481
                                $storage->deleteFile($target_path, $dailyPulseEmoji->uuid, $dailyPulseEmoji->image);
-
 
482
                                
-
 
483
                                $dailyPulseEmoji->image = $filename;
-
 
484
                                $dailyPulseEmojiMapper->update($dailyPulseEmoji);
547
     */
485
                            }
548
    private function getEmojiData(DailyPulseEmoji $emoji)
486
                            
549
    {
487
                            if($storage->putFile($target_path, $dailyPulseEmoji->uuid, $full_tmp_filename)) {
550
        $storage = Storage::getInstance($this->config, $this->adapter);
488
                               
551
        $path = $storage->getPathDailyPulse();
489
                    
-
 
490
                                
-
 
491
                                $dailyPulseEmoji->image = $filename;
-
 
492
                                $dailyPulseEmojiMapper->update($dailyPulseEmoji);
552
 
-
 
553
        return $this->createSuccessResponse([
-
 
554
            'name' => $emoji->name,
493
                            }
555
            'order' => $emoji->order,
494
                        }
-
 
495
                    }
-
 
496
                    
-
 
497
                    
556
            'status' => $emoji->status,
498
                    
557
            'type' => $emoji->type,
499
                    $this->logger->info('Se edito el emoji' . $dailyPulseEmoji->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
558
            'points' => $emoji->points,
500
                    
559
            'image' => $emoji->image ? $storage->getGenericImage($path, $emoji->uuid, $emoji->image) : ''
501
                    $data = [
560
        ]);
502
                        'success'   => true,
-
 
503
                        'data'   => 'LABEL_RECORD_UPDATED'
-
 
504
                    ];
561
    }
505
                } else {
-
 
506
                    $data = [
562
 
507
                        'success'   => false,
563
    /**
508
                        'data'      => $dailyPulseEmojiMapper->getError()
564
     * Actualiza un emoji existente
509
                    ];
565
     * 
510
                    
566
     * @param DailyPulseEmoji $emoji Emoji a actualizar
511
                }
567
     * @return JsonModel Resultado de la actualización
512
                
568
     */
513
                return new JsonModel($data);
569
    private function updateEmoji(DailyPulseEmoji $emoji)
514
                
570
    {
515
            } else {
571
        // Obtener y validar datos del formulario
516
                $messages = [];
572
        $formData = $this->getEditFormData();
517
                $form_messages = (array) $form->getMessages();
573
        if (!$formData['isValid']) {
518
                foreach($form_messages  as $fieldname => $field_messages)
574
            return $this->createErrorResponse($formData['messages']);
519
                {
575
        }
520
                    
576
 
521
                    $messages[$fieldname] = array_values($field_messages);
577
        // Actualizar datos del emoji
522
                }
578
        $this->updateEmojiData($emoji, $formData['data']);
-
 
579
 
-
 
580
        // Procesar imagen si se proporcionó una nueva
-
 
581
        if ($this->hasNewImage()) {
-
 
582
            if (!$this->processAndUpdateImage($emoji)) {
-
 
583
                return $this->createErrorResponse('ERROR_UPLOAD_FILE');
-
 
584
            }
-
 
585
        }
-
 
586
 
-
 
587
        // Guardar cambios
-
 
588
        if (!$this->saveEmoji($emoji)) {
-
 
589
            return $this->createErrorResponse('ERROR_UPDATING_EMOJI');
-
 
590
        }
-
 
591
 
-
 
592
        // Registrar la acción
-
 
593
        $this->logEmojiUpdate($emoji);
-
 
594
        
-
 
595
        return $this->createSuccessResponse('LABEL_RECORD_UPDATED');
-
 
596
    }
-
 
597
 
-
 
598
    /**
-
 
599
     * Obtiene y valida los datos del formulario de edición
-
 
600
     * 
-
 
601
     * @return array Datos validados y estado de validación
-
 
602
     */
-
 
603
    private function getEditFormData()
-
 
604
    {
-
 
605
        $form = new DailyPulseEditEmojiForm();
-
 
606
        $dataPost = array_merge(
-
 
607
            $this->getRequest()->getPost()->toArray(),
-
 
608
            $this->getRequest()->getFiles()->toArray()
-
 
609
        );
-
 
610
        
523
                
611
        $dataPost['status'] = empty($dataPost['status']) 
524
                return new JsonModel([
612
            ? DailyPulseEmoji::STATUS_INACTIVE 
525
                    'success'   => false,
613
            : $dataPost['status'];
526
                    'data'   => $messages
614
        
527
                ]);
-
 
528
            }
-
 
529
        } else {
615
        $form->setData($dataPost);
-
 
616
        
-
 
617
        if ($form->isValid()) {
-
 
618
            return [
-
 
619
                'isValid' => true,
-
 
620
                'data' => (array) $form->getData()
-
 
621
            ];
-
 
622
        }
-
 
623
 
-
 
624
        $messages = [];
-
 
625
        foreach ((array) $form->getMessages() as $fieldname => $field_messages) {
-
 
626
            $messages[$fieldname] = array_values($field_messages);
-
 
627
        }
-
 
628
 
-
 
629
        return [
-
 
630
            'isValid' => false,
-
 
631
            'messages' => $messages
-
 
632
        ];
-
 
633
    }
-
 
634
 
-
 
635
    /**
-
 
636
     * Actualiza los datos del emoji con la información del formulario
-
 
637
     * 
-
 
638
     * @param DailyPulseEmoji $emoji Emoji a actualizar
-
 
639
     * @param array $data Datos del formulario
-
 
640
     */
-
 
641
    private function updateEmojiData(DailyPulseEmoji $emoji, array $data)
-
 
642
    {
-
 
643
        $emoji->name = $data['name'];
-
 
644
        $emoji->order = $data['order'];
-
 
645
        $emoji->points = $data['points'];
-
 
646
        $emoji->status = $data['status'];
-
 
647
        $emoji->type = $data['type'];
-
 
648
    }
-
 
649
 
-
 
650
    /**
-
 
651
     * Verifica si se proporcionó una nueva imagen
-
 
652
     * 
-
 
653
     * @return bool True si hay una nueva imagen
-
 
654
     */
-
 
655
    private function hasNewImage()
-
 
656
    {
-
 
657
        $files = $this->getRequest()->getFiles()->toArray();
-
 
658
        return isset($files['image']) && empty($files['image']['error']);
-
 
659
    }
-
 
660
 
-
 
661
    /**
-
 
662
     * Procesa y actualiza la imagen del emoji
-
 
663
     * 
-
 
664
     * @param DailyPulseEmoji $emoji Emoji a actualizar
-
 
665
     * @return bool True si la imagen se procesó correctamente
-
 
666
     */
-
 
667
    private function processAndUpdateImage(DailyPulseEmoji $emoji)
-
 
668
    {
-
 
669
        $image = Image::getInstance($this->config);
-
 
670
        $storage = Storage::getInstance($this->config, $this->adapter);
-
 
671
        $target_path = $storage->getPathDailyPulse();
-
 
672
        
-
 
673
        $files = $this->getRequest()->getFiles()->toArray();
-
 
674
        $tmp_filename = $files['image']['tmp_name'];
-
 
675
        $filename = explode('.', $files['image']['name']);
-
 
676
        $filename = Functions::normalizeStringFilename(uniqid() . '-' . $filename[0] . '.png');
-
 
677
        
-
 
678
        $target_size = $this->config['leaderslinked.image_sizes.emoji'];
-
 
679
        list($target_width, $target_height) = explode('x', $target_size);
-
 
680
        
-
 
681
        $crop_to_dimensions = true;
Línea -... Línea 682...
-
 
682
        $full_tmp_filename = $image->uploadProcessChangeSize(
-
 
683
            $tmp_filename,
-
 
684
            $filename,
-
 
685
            $target_width,
-
 
686
            $target_height,
-
 
687
            $crop_to_dimensions
-
 
688
        );
-
 
689
        
-
 
690
        if (!$full_tmp_filename) {
-
 
691
            return false;
-
 
692
        }
-
 
693
 
-
 
694
        // Eliminar imagen anterior si existe
-
 
695
        if ($emoji->image) {
-
 
696
            $storage->deleteFile($target_path, $emoji->uuid, $emoji->image);
-
 
697
        }
-
 
698
 
-
 
699
        // Guardar nueva imagen
-
 
700
        if (!$storage->putFile($target_path, $emoji->uuid, $full_tmp_filename)) {
-
 
701
            return false;
-
 
702
        }
-
 
703
 
-
 
704
        $emoji->image = $filename;
-
 
705
        return true;
-
 
706
    }
-
 
707
 
-
 
708
    /**
530
            $data = [
709
     * Guarda los cambios del emoji en la base de datos
-
 
710
     * 
-
 
711
     * @param DailyPulseEmoji $emoji Emoji a guardar
-
 
712
     * @return bool True si se guardó correctamente
-
 
713
     */
-
 
714
    private function saveEmoji(DailyPulseEmoji $emoji)
-
 
715
    {
-
 
716
        $mapper = DailyPulseEmojiMapper::getInstance($this->adapter);
-
 
717
        return $mapper->update($emoji);
-
 
718
    }
-
 
719
 
-
 
720
    /**
-
 
721
     * Registra la actualización del emoji en el log
-
 
722
     * 
-
 
723
     * @param DailyPulseEmoji $emoji Emoji actualizado
-
 
724
     */
-
 
725
    private function logEmojiUpdate(DailyPulseEmoji $emoji)
-
 
726
    {
531
                'success' => false,
727
        $currentUser = $this->plugin('currentUserPlugin')->getUser();
532
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
-
 
533
            ];
-
 
534
            
728
        $this->logger->info(