Línea 67... |
Línea 67... |
67 |
/**
|
67 |
/**
|
68 |
*
|
68 |
*
|
69 |
* @var \Laminas\Db\Adapter\AdapterInterface
|
69 |
* @var \Laminas\Db\Adapter\AdapterInterface
|
70 |
*/
|
70 |
*/
|
71 |
private $adapter;
|
71 |
private $adapter;
|
72 |
|
72 |
|
73 |
/**
|
73 |
/**
|
74 |
*
|
74 |
*
|
75 |
* @var \LeadersLinked\Cache\CacheInterface
|
75 |
* @var \LeadersLinked\Cache\CacheInterface
|
76 |
*/
|
76 |
*/
|
77 |
private $cache;
|
77 |
private $cache;
|
78 |
|
78 |
|
79 |
|
79 |
|
80 |
/**
|
80 |
/**
|
81 |
*
|
81 |
*
|
82 |
* @var \Laminas\Log\LoggerInterface
|
82 |
* @var \Laminas\Log\LoggerInterface
|
83 |
*/
|
83 |
*/
|
84 |
private $logger;
|
84 |
private $logger;
|
85 |
|
85 |
|
86 |
/**
|
86 |
/**
|
87 |
*
|
87 |
*
|
88 |
* @var array
|
88 |
* @var array
|
89 |
*/
|
89 |
*/
|
90 |
private $config;
|
90 |
private $config;
|
91 |
|
91 |
|
92 |
|
92 |
|
93 |
/**
|
93 |
/**
|
94 |
*
|
94 |
*
|
95 |
* @var \Laminas\Mvc\I18n\Translator
|
95 |
* @var \Laminas\Mvc\I18n\Translator
|
96 |
*/
|
96 |
*/
|
97 |
private $translator;
|
97 |
private $translator;
|
98 |
|
98 |
|
99 |
|
99 |
|
100 |
/**
|
100 |
/**
|
101 |
*
|
101 |
*
|
102 |
* @param \Laminas\Db\Adapter\AdapterInterface $adapter
|
102 |
* @param \Laminas\Db\Adapter\AdapterInterface $adapter
|
103 |
* @param \LeadersLinked\Cache\CacheInterface $cache
|
103 |
* @param \LeadersLinked\Cache\CacheInterface $cache
|
104 |
* @param \Laminas\Log\LoggerInterface LoggerInterface $logger
|
104 |
* @param \Laminas\Log\LoggerInterface LoggerInterface $logger
|
Línea 120... |
Línea 120... |
120 |
* {@inheritDoc}
|
120 |
* {@inheritDoc}
|
121 |
* @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
|
121 |
* @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
|
122 |
*/
|
122 |
*/
|
123 |
public function indexAction()
|
123 |
public function indexAction()
|
124 |
{
|
124 |
{
|
- |
|
125 |
// Obtener el usuario actual del sistema
|
125 |
$currentUserPlugin = $this->plugin('currentUserPlugin');
|
126 |
$currentUserPlugin = $this->plugin('currentUserPlugin');
|
126 |
$currentUser = $currentUserPlugin->getUser();
|
127 |
$currentUser = $currentUserPlugin->getUser();
|
Línea -... |
Línea 128... |
- |
|
128 |
|
127 |
|
129 |
// Obtener la petición HTTP
|
128 |
$request = $this->getRequest();
|
130 |
$request = $this->getRequest();
|
- |
|
131 |
if ($request->isGet()) {
|
- |
|
132 |
// Sanitizar el parámetro de búsqueda si existe
|
Línea 129... |
Línea 133... |
129 |
if ($request->isGet()) {
|
133 |
$search = Functions::sanitizeFilterString($this->params()->fromQuery('search'));
|
130 |
|
- |
|
131 |
$search = Functions::sanitizeFilterString($this->params()->fromQuery('search'));
|
- |
|
132 |
|
134 |
|
- |
|
135 |
// Obtener el control de acceso (ACL) para verificar permisos
|
133 |
|
136 |
$acl = $this->getEvent()->getViewModel()->getVariable('acl');
|
134 |
$acl = $this->getEvent()->getViewModel()->getVariable('acl');
|
137 |
// Verificar permisos para diferentes acciones
|
135 |
$allowView = $acl->isAllowed($currentUser->usertype_id, 'profile/view');
|
138 |
$allowView = $acl->isAllowed($currentUser->usertype_id, 'profile/view');
|
136 |
$allowEdit = $acl->isAllowed($currentUser->usertype_id, 'profile/my-profiles/edit');
|
- |
|
137 |
$allowDelete = $acl->isAllowed($currentUser->usertype_id, 'profile/my-profiles/delete');
|
- |
|
138 |
|
- |
|
Línea 139... |
Línea 139... |
139 |
|
139 |
$allowEdit = $acl->isAllowed($currentUser->usertype_id, 'profile/my-profiles/edit');
|
140 |
$storage = Storage::getInstance($this->config, $this->adapter);
|
140 |
$allowDelete = $acl->isAllowed($currentUser->usertype_id, 'profile/my-profiles/delete');
|
141 |
|
- |
|
142 |
$userProfileMapper = UserProfileMapper::getInstance($this->adapter);
|
- |
|
143 |
$records = $userProfileMapper->fetchAllByUserIdAndSearch($currentUser->id, $search);
|
- |
|
144 |
|
- |
|
Línea 145... |
Línea -... |
145 |
|
- |
|
146 |
$items = [];
|
- |
|
147 |
foreach ($records as $record) {
|
141 |
|
148 |
|
142 |
// Inicializar el sistema de almacenamiento para manejar imágenes
|
149 |
$item = [
|
143 |
$storage = Storage::getInstance($this->config, $this->adapter);
|
150 |
'id' => $record->id,
|
144 |
|
151 |
'name' => $record->name,
|
- |
|
152 |
'image' => $storage->getUserProfileImage($currentUser, $record),
|
- |
|
153 |
'link_view' => $allowView ? $this->url()->fromRoute('profile/view', ['id' => $record->uuid]) : '',
|
- |
|
154 |
'link_edit' => $allowEdit ? $this->url()->fromRoute('profile/my-profiles/edit', ['id' => $record->uuid]) : '',
|
- |
|
155 |
'link_delete' => $allowDelete && $record->public == UserProfile::PUBLIC_NO ? $this->url()->fromRoute('profile/my-profiles/delete', ['id' => $record->uuid]) : '',
|
- |
|
Línea -... |
Línea 145... |
- |
|
145 |
// Obtener el mapper de perfiles de usuario
|
- |
|
146 |
$userProfileMapper = UserProfileMapper::getInstance($this->adapter);
|
- |
|
147 |
// Obtener todos los perfiles del usuario actual, opcionalmente filtrados por búsqueda
|
- |
|
148 |
$records = $userProfileMapper->fetchAllByUserIdAndSearch($currentUser->id, $search);
|
- |
|
149 |
|
- |
|
150 |
// Preparar el array de items para la respuesta
|
- |
|
151 |
$items = [];
|
- |
|
152 |
foreach ($records as $record) {
|
- |
|
153 |
// Construir cada item con la información del perfil
|
- |
|
154 |
$item = [
|
- |
|
155 |
'id' => $record->id,
|
- |
|
156 |
'name' => $record->name,
|
Línea -... |
Línea 157... |
- |
|
157 |
'image' => $storage->getUserProfileImage($currentUser, $record),
|
- |
|
158 |
'link_view' => $allowView ? $this->url()->fromRoute('profile/view', ['id' => $record->uuid]) : '',
|
Línea -... |
Línea 159... |
- |
|
159 |
'link_edit' => $allowEdit ? $this->url()->fromRoute('profile/my-profiles/edit', ['id' => $record->uuid]) : '',
|
156 |
];
|
160 |
'link_delete' => $allowDelete && $record->public == UserProfile::PUBLIC_NO ? $this->url()->fromRoute('profile/my-profiles/delete', ['id' => $record->uuid]) : '',
|
157 |
|
161 |
];
|
158 |
array_push($items, $item);
|
162 |
|
159 |
}
|
163 |
array_push($items, $item);
|
Línea 160... |
Línea 164... |
160 |
|
164 |
}
|
161 |
|
- |
|
162 |
|
165 |
|
- |
|
166 |
// Preparar la respuesta exitosa con los items
|
163 |
$response = [
|
167 |
$response = [
|
164 |
'success' => true,
|
168 |
'success' => true,
|
165 |
'data' => $items
|
169 |
'data' => $items
|
166 |
];
|
170 |
];
|
167 |
|
171 |
|
Línea 269... |
Línea 273... |
269 |
}
|
273 |
}
|
Línea 270... |
Línea 274... |
270 |
|
274 |
|
271 |
$userProfileMapper = UserProfileMapper::getInstance($this->adapter);
|
275 |
$userProfileMapper = UserProfileMapper::getInstance($this->adapter);
|
272 |
$userProfile = $userProfileMapper->fetchOneByUuid($id);
|
276 |
$userProfile = $userProfileMapper->fetchOneByUuid($id);
|
273 |
if (!$userProfile) {
|
277 |
if (!$userProfile) {
|
274 |
// Use helper for consistency
|
278 |
// Use helper for consistency
|
275 |
return $this->_createSimpleErrorResponse('ERROR_RECORD_NOT_FOUND');
|
279 |
return $this->_createSimpleErrorResponse('ERROR_RECORD_NOT_FOUND');
|
Línea 276... |
Línea 280... |
276 |
}
|
280 |
}
|
277 |
|
281 |
|
278 |
// Authorize: Check if current user owns the profile
|
282 |
// Authorize: Check if current user owns the profile
|
279 |
if ($currentUser->id != $userProfile->user_id) {
|
283 |
if ($currentUser->id != $userProfile->user_id) {
|
280 |
// Use helper for consistency
|
284 |
// Use helper for consistency
|
Línea 281... |
Línea 285... |
281 |
return $this->_createSimpleErrorResponse('ERROR_UNAUTHORIZED');
|
285 |
return $this->_createSimpleErrorResponse('ERROR_UNAUTHORIZED');
|
282 |
}
|
286 |
}
|
Línea 302... |
Línea 306... |
302 |
}
|
306 |
}
|
303 |
}
|
307 |
}
|
304 |
$cover_deleted = true;
|
308 |
$cover_deleted = true;
|
305 |
if ($userProfile->cover) {
|
309 |
if ($userProfile->cover) {
|
306 |
$cover_deleted = $storage->deleteFile($target_path, $user_uuid, $userProfile->cover);
|
310 |
$cover_deleted = $storage->deleteFile($target_path, $user_uuid, $userProfile->cover);
|
307 |
if (!$cover_deleted) {
|
311 |
if (!$cover_deleted) {
|
308 |
$this->logger->err("Failed to delete profile cover file: {$target_path}/{$user_uuid}/{$userProfile->cover}", ['user_id' => $userProfile->user_id]);
|
312 |
$this->logger->err("Failed to delete profile cover file: {$target_path}/{$user_uuid}/{$userProfile->cover}", ['user_id' => $userProfile->user_id]);
|
309 |
// Decide if this is a critical error. Proceeding with DB deletion for now.
|
313 |
// Decide if this is a critical error. Proceeding with DB deletion for now.
|
310 |
}
|
314 |
}
|
311 |
}
|
315 |
}
|
Línea 332... |
Línea 336... |
332 |
// Return JsonModel for all paths
|
336 |
// Return JsonModel for all paths
|
333 |
return $data instanceof JsonModel ? $data : new JsonModel($data);
|
337 |
return $data instanceof JsonModel ? $data : new JsonModel($data);
|
334 |
}
|
338 |
}
|
Línea 335... |
Línea 339... |
335 |
|
339 |
|
336 |
/**
|
340 |
/**
|
- |
|
341 |
* Presenta el perfil con las opciones de edición de cada sección.
|
- |
|
342 |
* Este método:
|
- |
|
343 |
* - Obtiene y valida el perfil del usuario
|
- |
|
344 |
* - Recopila toda la información relacionada (educación, experiencia, habilidades, etc.)
|
- |
|
345 |
* - Prepara los datos para la vista de edición
|
- |
|
346 |
* - Genera las URLs necesarias para las diferentes acciones de edición
|
337 |
* Presenta el perfil con las opciónes de edición de cada sección
|
347 |
*
|
338 |
* @return \Laminas\Http\Response|\Laminas\View\Model\ViewModel|\Laminas\View\Model\JsonModel
|
348 |
* @return \Laminas\Http\Response|\Laminas\View\Model\ViewModel|\Laminas\View\Model\JsonModel
|
339 |
*/
|
349 |
*/
|
340 |
public function editAction()
|
350 |
public function editAction()
|
- |
|
351 |
{
|
341 |
{
|
352 |
// Obtener el usuario actual del sistema
|
342 |
$currentUserPlugin = $this->plugin('currentUserPlugin');
|
353 |
$currentUserPlugin = $this->plugin('currentUserPlugin');
|
Línea -... |
Línea 354... |
- |
|
354 |
$currentUser = $currentUserPlugin->getUser();
|
343 |
$currentUser = $currentUserPlugin->getUser();
|
355 |
|
Línea 344... |
Línea -... |
344 |
|
- |
|
- |
|
356 |
// Obtener el plugin para mensajes flash
|
345 |
$flashMessenger = $this->plugin('FlashMessenger');
|
357 |
$flashMessenger = $this->plugin('FlashMessenger');
|
346 |
|
358 |
|
Línea 347... |
Línea -... |
347 |
|
- |
|
- |
|
359 |
// Obtener parámetros de la petición
|
348 |
$request = $this->getRequest();
|
360 |
$request = $this->getRequest();
|
349 |
$id = $this->params()->fromRoute('id');
|
361 |
$id = $this->params()->fromRoute('id');
|
350 |
|
362 |
|
351 |
|
363 |
// Validar que se proporcionó un ID
|
Línea 352... |
Línea -... |
352 |
if (!$id) {
|
- |
|
353 |
$flashMessenger->addErrorMessage('ERROR_INVALID_PARAMETER');
|
- |
|
- |
|
364 |
if (!$id) {
|
354 |
return $this->redirect()->toRoute('dashboard');
|
365 |
$flashMessenger->addErrorMessage('ERROR_INVALID_PARAMETER');
|
355 |
}
|
366 |
return $this->redirect()->toRoute('dashboard');
|
Línea -... |
Línea 367... |
- |
|
367 |
}
|
356 |
|
368 |
|
357 |
|
369 |
// Obtener el perfil de usuario correspondiente
|
358 |
|
370 |
$userProfileMapper = UserProfileMapper::getInstance($this->adapter);
|
359 |
$userProfileMapper = UserProfileMapper::getInstance($this->adapter);
|
371 |
$userProfile = $userProfileMapper->fetchOneByUuid($id);
|
Línea -... |
Línea 372... |
- |
|
372 |
|
360 |
$userProfile = $userProfileMapper->fetchOneByUuid($id);
|
373 |
// Validar que el perfil existe
|
361 |
|
374 |
if (!$userProfile) {
|
362 |
if (!$userProfile) {
|
375 |
$flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');
|
363 |
$flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');
|
376 |
return $this->redirect()->toRoute('dashboard');
|
Línea 364... |
Línea -... |
364 |
return $this->redirect()->toRoute('dashboard');
|
- |
|
- |
|
377 |
}
|
365 |
}
|
378 |
|
366 |
|
379 |
// Verificar que el usuario actual es el propietario del perfil
|
367 |
if ($currentUser->id != $userProfile->user_id) {
|
380 |
if ($currentUser->id != $userProfile->user_id) {
|
368 |
$flashMessenger->addErrorMessage('ERROR_UNAUTHORIZED');
|
381 |
$flashMessenger->addErrorMessage('ERROR_UNAUTHORIZED');
|
369 |
return $this->redirect()->toRoute('dashboard');
|
382 |
return $this->redirect()->toRoute('dashboard');
|
370 |
}
|
383 |
}
|
Línea -... |
Línea 384... |
- |
|
384 |
|
371 |
|
385 |
// Determinar la clave de API de Google Maps según el entorno
|
372 |
|
- |
|
- |
|
386 |
$sandbox = $this->config['leaderslinked.runmode.sandbox'];
|
373 |
$sandbox = $this->config['leaderslinked.runmode.sandbox'];
|
387 |
if ($sandbox) {
|
374 |
if ($sandbox) {
|
388 |
$google_map_key = $this->config['leaderslinked.google_map.sandbox_api_key'];
|
375 |
$google_map_key = $this->config['leaderslinked.google_map.sandbox_api_key'];
|
389 |
} else {
|
Línea 376... |
Línea 390... |
376 |
} else {
|
390 |
$google_map_key = $this->config['leaderslinked.google_map.production_api_key'];
|
Línea 388... |
Línea 402... |
388 |
} else {
|
402 |
} else {
|
389 |
$formattedAddress = '';
|
403 |
$formattedAddress = '';
|
390 |
$country = '';
|
404 |
$country = '';
|
391 |
}
|
405 |
}
|
Línea 392... |
Línea -... |
392 |
|
- |
|
393 |
|
- |
|
- |
|
406 |
|
394 |
|
407 |
// Obtener información del usuario
|
395 |
$userMapper = UserMapper::getInstance($this->adapter);
|
408 |
$userMapper = UserMapper::getInstance($this->adapter);
|
Línea -... |
Línea 409... |
- |
|
409 |
$user = $userMapper->fetchOne($userProfile->user_id);
|
396 |
$user = $userMapper->fetchOne($userProfile->user_id);
|
410 |
|
397 |
|
411 |
// Obtener idiomas del usuario
|
398 |
$userLanguages = [];
|
412 |
$userLanguages = [];
|
399 |
$languageMapper = LanguageMapper::getInstance($this->adapter);
|
413 |
$languageMapper = LanguageMapper::getInstance($this->adapter);
|
400 |
$userLanguageMapper = UserLanguageMapper::getInstance($this->adapter);
|
414 |
$userLanguageMapper = UserLanguageMapper::getInstance($this->adapter);
|
401 |
$records = $userLanguageMapper->fetchAllByUserProfileId($userProfile->id);
|
415 |
$records = $userLanguageMapper->fetchAllByUserProfileId($userProfile->id);
|
402 |
foreach ($records as $record) {
|
416 |
foreach ($records as $record) {
|
403 |
$language = $languageMapper->fetchOne($record->language_id);
|
417 |
$language = $languageMapper->fetchOne($record->language_id);
|
Línea 404... |
Línea -... |
404 |
$userLanguages[$language->id] = $language->name;
|
- |
|
- |
|
418 |
$userLanguages[$language->id] = $language->name;
|
405 |
}
|
419 |
}
|
406 |
|
420 |
|
407 |
|
421 |
// Obtener educación del usuario
|
408 |
$locationMapper = LocationMapper::getInstance($this->adapter);
|
422 |
$locationMapper = LocationMapper::getInstance($this->adapter);
|
Línea 409... |
Línea -... |
409 |
$degreeMapper = DegreeMapper::getInstance($this->adapter);
|
- |
|
410 |
$userEducationMapper = UserEducationMapper::getInstance($this->adapter);
|
- |
|
- |
|
423 |
$degreeMapper = DegreeMapper::getInstance($this->adapter);
|
411 |
$userEducations = $userEducationMapper->fetchAllByUserProfileId($userProfile->id);
|
424 |
$userEducationMapper = UserEducationMapper::getInstance($this->adapter);
|
412 |
|
425 |
$userEducations = $userEducationMapper->fetchAllByUserProfileId($userProfile->id);
|
413 |
|
426 |
|
Línea 414... |
Línea 427... |
414 |
|
427 |
// Formatear información de educación
|
Línea 428... |
Línea 441... |
428 |
'link_edit' => $this->url()->fromRoute('profile/my-profiles/education', ['id' => $userProfile->uuid, 'operation' => 'edit', 'user_education_id' => $userEducation->uuid]),
|
441 |
'link_edit' => $this->url()->fromRoute('profile/my-profiles/education', ['id' => $userProfile->uuid, 'operation' => 'edit', 'user_education_id' => $userEducation->uuid]),
|
429 |
'link_delete' => $this->url()->fromRoute('profile/my-profiles/education', ['id' => $userProfile->uuid, 'operation' => 'delete', 'user_education_id' => $userEducation->uuid]),
|
442 |
'link_delete' => $this->url()->fromRoute('profile/my-profiles/education', ['id' => $userProfile->uuid, 'operation' => 'delete', 'user_education_id' => $userEducation->uuid]),
|
430 |
];
|
443 |
];
|
431 |
}
|
444 |
}
|
Línea -... |
Línea 445... |
- |
|
445 |
|
432 |
|
446 |
// Obtener experiencia laboral del usuario
|
433 |
$industryMapper = IndustryMapper::getInstance($this->adapter);
|
447 |
$industryMapper = IndustryMapper::getInstance($this->adapter);
|
434 |
$companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
|
- |
|
435 |
|
448 |
$companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
|
436 |
$userExperienceMapper = UserExperienceMapper::getInstance($this->adapter);
|
449 |
$userExperienceMapper = UserExperienceMapper::getInstance($this->adapter);
|
Línea -... |
Línea 450... |
- |
|
450 |
$userExperiences = $userExperienceMapper->fetchAllByUserProfileId($userProfile->id);
|
437 |
$userExperiences = $userExperienceMapper->fetchAllByUserProfileId($userProfile->id);
|
451 |
|
438 |
|
452 |
// Formatear información de experiencia laboral
|
439 |
foreach ($userExperiences as &$userExperience) {
|
453 |
foreach ($userExperiences as &$userExperience) {
|
440 |
$location = $locationMapper->fetchOne($userExperience->location_id);
|
454 |
$location = $locationMapper->fetchOne($userExperience->location_id);
|
Línea 456... |
Línea 470... |
456 |
'link_edit' => $this->url()->fromRoute('profile/my-profiles/experience', ['id' => $userProfile->uuid, 'operation' => 'edit', 'user_experience_id' => $userExperience->uuid]),
|
470 |
'link_edit' => $this->url()->fromRoute('profile/my-profiles/experience', ['id' => $userProfile->uuid, 'operation' => 'edit', 'user_experience_id' => $userExperience->uuid]),
|
457 |
'link_delete' => $this->url()->fromRoute('profile/my-profiles/experience', ['id' => $userProfile->uuid, 'operation' => 'delete', 'user_experience_id' => $userExperience->uuid])
|
471 |
'link_delete' => $this->url()->fromRoute('profile/my-profiles/experience', ['id' => $userProfile->uuid, 'operation' => 'delete', 'user_experience_id' => $userExperience->uuid])
|
458 |
];
|
472 |
];
|
459 |
}
|
473 |
}
|
Línea -... |
Línea 474... |
- |
|
474 |
|
460 |
|
475 |
// Obtener aptitudes del usuario
|
461 |
$userAptitudes = [];
|
476 |
$userAptitudes = [];
|
462 |
$aptitudeMapper = AptitudeMapper::getInstance($this->adapter);
|
477 |
$aptitudeMapper = AptitudeMapper::getInstance($this->adapter);
|
463 |
$userAptitudeMapper = UserAptitudeMapper::getInstance($this->adapter);
|
478 |
$userAptitudeMapper = UserAptitudeMapper::getInstance($this->adapter);
|
464 |
$records = $userAptitudeMapper->fetchAllByUserProfileId($userProfile->id);
|
479 |
$records = $userAptitudeMapper->fetchAllByUserProfileId($userProfile->id);
|
Línea 467... |
Línea 482... |
467 |
if ($aptitude) {
|
482 |
if ($aptitude) {
|
468 |
$userAptitudes[$aptitude->uuid] = $aptitude->name;
|
483 |
$userAptitudes[$aptitude->uuid] = $aptitude->name;
|
469 |
}
|
484 |
}
|
470 |
}
|
485 |
}
|
Línea -... |
Línea 486... |
- |
|
486 |
|
471 |
|
487 |
// Obtener hobbies e intereses del usuario
|
472 |
$userHobbiesAndInterests = [];
|
488 |
$userHobbiesAndInterests = [];
|
473 |
$hobbyAndInterestMapper = HobbyAndInterestMapper::getInstance($this->adapter);
|
489 |
$hobbyAndInterestMapper = HobbyAndInterestMapper::getInstance($this->adapter);
|
474 |
$userHobbyAndInterestMapper = UserHobbyAndInterestMapper::getInstance($this->adapter);
|
490 |
$userHobbyAndInterestMapper = UserHobbyAndInterestMapper::getInstance($this->adapter);
|
475 |
$records = $userHobbyAndInterestMapper->fetchAllByUserProfileId($userProfile->id);
|
491 |
$records = $userHobbyAndInterestMapper->fetchAllByUserProfileId($userProfile->id);
|
Línea 478... |
Línea 494... |
478 |
if ($hobbyAndInterest) {
|
494 |
if ($hobbyAndInterest) {
|
479 |
$userHobbiesAndInterests[$hobbyAndInterest->uuid] = $hobbyAndInterest->name;
|
495 |
$userHobbiesAndInterests[$hobbyAndInterest->uuid] = $hobbyAndInterest->name;
|
480 |
}
|
496 |
}
|
481 |
}
|
497 |
}
|
Línea 482... |
Línea -... |
482 |
|
- |
|
- |
|
498 |
|
483 |
|
499 |
// Obtener habilidades del usuario
|
484 |
$userSkills = [];
|
500 |
$userSkills = [];
|
485 |
$userSkillMapper = UserSkillMapper::getInstance($this->adapter);
|
501 |
$userSkillMapper = UserSkillMapper::getInstance($this->adapter);
|
486 |
$skillMapper = SkillMapper::getInstance($this->adapter);
|
502 |
$skillMapper = SkillMapper::getInstance($this->adapter);
|
487 |
$records = $userSkillMapper->fetchAllByUserProfileId($userProfile->id);
|
503 |
$records = $userSkillMapper->fetchAllByUserProfileId($userProfile->id);
|
488 |
foreach ($records as $record) {
|
504 |
foreach ($records as $record) {
|
489 |
$skill = $skillMapper->fetchOne($record->skill_id);
|
505 |
$skill = $skillMapper->fetchOne($record->skill_id);
|
490 |
$userSkills[$skill->uuid] = $skill->name;
|
506 |
$userSkills[$skill->uuid] = $skill->name;
|
Línea 491... |
Línea -... |
491 |
}
|
- |
|
- |
|
507 |
}
|
492 |
|
508 |
|
493 |
|
509 |
// Obtener estadísticas de conexiones
|
Línea 494... |
Línea 510... |
494 |
$companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
|
510 |
$companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
|
495 |
$following = $companyFollowerMapper->getCountFollowing($user->id);
|
511 |
$following = $companyFollowerMapper->getCountFollowing($user->id);
|
Línea 496... |
Línea -... |
496 |
|
- |
|
- |
|
512 |
|
497 |
$connectionMapper = ConnectionMapper::getInstance($this->adapter);
|
513 |
$connectionMapper = ConnectionMapper::getInstance($this->adapter);
|
498 |
$follower = $connectionMapper->fetchTotalConnectionByUser($user->id);
|
514 |
$follower = $connectionMapper->fetchTotalConnectionByUser($user->id);
|
Línea -... |
Línea 515... |
- |
|
515 |
|
499 |
|
516 |
// Obtener configuraciones de tamaño de imágenes
|
Línea -... |
Línea 517... |
- |
|
517 |
$image_size_cover = $this->config['leaderslinked.image_sizes.user_cover_upload'];
|
500 |
|
518 |
$image_size_profile = $this->config['leaderslinked.image_sizes.user_upload'];
|
501 |
$image_size_cover = $this->config['leaderslinked.image_sizes.user_cover_upload'];
|
519 |
|
502 |
$image_size_profile = $this->config['leaderslinked.image_sizes.user_upload'];
|
520 |
// Inicializar el sistema de almacenamiento
|
503 |
|
521 |
$storage = Storage::getInstance($this->config, $this->adapter);
|
504 |
$storage = Storage::getInstance($this->config, $this->adapter);
|
522 |
|
505 |
|
523 |
// Preparar datos para la respuesta
|
506 |
$data = [
|
524 |
$data = [
|
507 |
'following' => $following,
|
525 |
'following' => $following,
|
508 |
'follower' => $follower,
|
526 |
'follower' => $follower,
|
509 |
'user_id' => $user->id,
|
527 |
'user_id' => $user->id,
|
510 |
'user_uuid' => $user->uuid,
|
528 |
'user_uuid' => $user->uuid,
|
511 |
'full_name' => trim($user->first_name . ' ' . $user->last_name),
|
529 |
'full_name' => trim($user->first_name . ' ' . $user->last_name),
|
512 |
'user_profile_id' => $userProfile->id,
|
530 |
'user_profile_id' => $userProfile->id,
|
513 |
'user_profile_uuid' => $userProfile->uuid,
|
531 |
'user_profile_uuid' => $userProfile->uuid,
|
514 |
'image' => $storage->getUserProfileImage($currentUser, $userProfile),
|
532 |
'image' => $storage->getUserProfileImage($currentUser, $userProfile),
|
515 |
'cover' => $storage->getUserProfileCover($currentUser, $userProfile),
|
533 |
'cover' => $storage->getUserProfileCover($currentUser, $userProfile),
|
516 |
'overview' => $userProfile->description,
|
534 |
'overview' => $userProfile->description,
|
517 |
'facebook' => $userProfile->facebook,
|
535 |
'facebook' => $userProfile->facebook,
|
518 |
'instagram' => $userProfile->instagram,
|
536 |
'instagram' => $userProfile->instagram,
|
519 |
'twitter' => $userProfile->twitter,
|
537 |
'twitter' => $userProfile->twitter,
|
520 |
'formatted_address' => $formattedAddress,
|
538 |
'formatted_address' => $formattedAddress,
|
521 |
'country' => $country,
|
539 |
'country' => $country,
|
522 |
'user_skills' => $userSkills,
|
540 |
'user_skills' => $userSkills,
|
523 |
'user_languages' => $userLanguages,
|
541 |
'user_languages' => $userLanguages,
|
524 |
'user_educations' => $userEducations,
|
542 |
'user_educations' => $userEducations,
|
- |
|
543 |
'user_experiences' => $userExperiences,
|
525 |
'user_experiences' => $userExperiences,
|
544 |
'user_aptitudes' => $userAptitudes,
|
526 |
'user_aptitudes' => $userAptitudes,
|
545 |
'user_hobbies_and_interests' => $userHobbiesAndInterests,
|
527 |
'user_hobbies_and_interests' => $userHobbiesAndInterests,
|
546 |
'image_size_cover' => $image_size_cover,
|
528 |
'image_size_cover' => $image_size_cover,
|
547 |
'image_size_profile' => $image_size_profile,
|
529 |
'image_size_profile' => $image_size_profile,
|
548 |
|
530 |
|
549 |
// Generar URLs para las diferentes acciones de edición
|
531 |
'link_extended' => $this->url()->fromRoute('profile/my-profiles/extended', ['id' => $userProfile->uuid] ),
|
550 |
'link_extended' => $this->url()->fromRoute('profile/my-profiles/extended', ['id' => $userProfile->uuid]),
|
532 |
'link_image_upload' => $this->url()->fromRoute('profile/my-profiles/image', ['id' => $userProfile->uuid, 'operation' => 'upload']),
|
551 |
'link_image_upload' => $this->url()->fromRoute('profile/my-profiles/image', ['id' => $userProfile->uuid, 'operation' => 'upload']),
|
533 |
'link_image_delete' => $this->url()->fromRoute('profile/my-profiles/image', ['id' => $userProfile->uuid, 'operation' => 'delete']),
|
552 |
'link_image_delete' => $this->url()->fromRoute('profile/my-profiles/image', ['id' => $userProfile->uuid, 'operation' => 'delete']),
|
534 |
'link_cover_upload' => $this->url()->fromRoute('profile/my-profiles/cover', ['id' => $userProfile->uuid, 'operation' => 'upload']),
|
553 |
'link_cover_upload' => $this->url()->fromRoute('profile/my-profiles/cover', ['id' => $userProfile->uuid, 'operation' => 'upload']),
|
535 |
'link_cover_delete' => $this->url()->fromRoute('profile/my-profiles/cover', ['id' => $userProfile->uuid, 'operation' => 'delete']),
|
554 |
'link_cover_delete' => $this->url()->fromRoute('profile/my-profiles/cover', ['id' => $userProfile->uuid, 'operation' => 'delete']),
|
536 |
'link_experience_add' => $this->url()->fromRoute('profile/my-profiles/experience', ['id' => $userProfile->uuid, 'operation' => 'add']),
|
555 |
'link_experience_add' => $this->url()->fromRoute('profile/my-profiles/experience', ['id' => $userProfile->uuid, 'operation' => 'add']),
|
537 |
'link_education_add' => $this->url()->fromRoute('profile/my-profiles/education', ['id' => $userProfile->uuid, 'operation' => 'add']),
|
556 |
'link_education_add' => $this->url()->fromRoute('profile/my-profiles/education', ['id' => $userProfile->uuid, 'operation' => 'add']),
|
538 |
'link_language' => $this->url()->fromRoute('profile/my-profiles/language', ['id' => $userProfile->uuid]),
|
- |
|
539 |
'link_location' => $this->url()->fromRoute('profile/my-profiles/location', ['id' => $userProfile->uuid]),
|
557 |
'link_language' => $this->url()->fromRoute('profile/my-profiles/language', ['id' => $userProfile->uuid]),
|
Línea 540... |
Línea 558... |
540 |
'link_skill' => $this->url()->fromRoute('profile/my-profiles/skill', ['id' => $userProfile->uuid] ),
|
558 |
'link_location' => $this->url()->fromRoute('profile/my-profiles/location', ['id' => $userProfile->uuid]),
|
541 |
'link_social_network' => $this->url()->fromRoute('profile/my-profiles/social-network', ['id' => $userProfile->uuid]),
|
- |
|
542 |
'link_aptitude' => $this->url()->fromRoute('profile/my-profiles/aptitude', ['id' => $userProfile->uuid] ),
|
559 |
'link_skill' => $this->url()->fromRoute('profile/my-profiles/skill', ['id' => $userProfile->uuid]),
|
- |
|
560 |
'link_social_network' => $this->url()->fromRoute('profile/my-profiles/social-network', ['id' => $userProfile->uuid]),
|
543 |
'link_hobby_and_interest' => $this->url()->fromRoute('profile/my-profiles/hobby-and-interest', ['id' => $userProfile->uuid]),
|
561 |
'link_aptitude' => $this->url()->fromRoute('profile/my-profiles/aptitude', ['id' => $userProfile->uuid]),
|
544 |
|
562 |
'link_hobby_and_interest' => $this->url()->fromRoute('profile/my-profiles/hobby-and-interest', ['id' => $userProfile->uuid]),
|
545 |
];
|
563 |
];
|
546 |
|
564 |
|
Línea 1089... |
Línea 1107... |
1089 |
|
1107 |
|
1090 |
return new JsonModel($data);
|
1108 |
return new JsonModel($data);
|
Línea 1091... |
Línea 1109... |
1091 |
}
|
1109 |
}
|
Línea 1092... |
Línea 1110... |
1092 |
|
1110 |
|
1093 |
|
1111 |
|
1094 |
|
1112 |
|
1095 |
|
1113 |
|
Línea 1581... |
Línea 1599... |
1581 |
|
1599 |
|
1582 |
return new JsonModel($data);
|
1600 |
return new JsonModel($data);
|
Línea 1583... |
Línea 1601... |
1583 |
}
|
1601 |
}
|
- |
|
1602 |
|
- |
|
1603 |
/**
|
1584 |
|
1604 |
* Maneja la subida y eliminación de la imagen del perfil de usuario.
|
- |
|
1605 |
* Este método permite:
|
- |
|
1606 |
* - Subir una nueva imagen de perfil
|
- |
|
1607 |
* - Eliminar la imagen existente
|
1585 |
/**
|
1608 |
* - Actualizar la imagen principal del usuario si el perfil es público
|
1586 |
* Cambio de la imagen del image del perfil
|
1609 |
*
|
1587 |
* @return \Laminas\View\Model\JsonModel
|
1610 |
* @return \Laminas\View\Model\JsonModel
|
1588 |
*/
|
1611 |
*/
|
- |
|
1612 |
public function imageAction()
|
1589 |
public function imageAction()
|
1613 |
{
|
1590 |
{
|
1614 |
// Obtener el usuario actual del sistema
|
Línea -... |
Línea 1615... |
- |
|
1615 |
$currentUserPlugin = $this->plugin('currentUserPlugin');
|
1591 |
$currentUserPlugin = $this->plugin('currentUserPlugin');
|
1616 |
$currentUser = $currentUserPlugin->getUser();
|
1592 |
$currentUser = $currentUserPlugin->getUser();
|
1617 |
|
Línea -... |
Línea 1618... |
- |
|
1618 |
// Obtener parámetros de la ruta: ID del perfil y operación (upload/delete)
|
1593 |
|
1619 |
$user_profile_id = $this->params()->fromRoute('id');
|
1594 |
$user_profile_id = $this->params()->fromRoute('id');
|
- |
|
1595 |
$operation = $this->params()->fromRoute('operation');
|
1620 |
$operation = $this->params()->fromRoute('operation');
|
- |
|
1621 |
|
- |
|
1622 |
// Obtener el perfil de usuario correspondiente
|
1596 |
|
1623 |
$userProfileMapper = UserProfileMapper::getInstance($this->adapter);
|
1597 |
$userProfileMapper = UserProfileMapper::getInstance($this->adapter);
|
- |
|
1598 |
|
1624 |
$userProfile = $userProfileMapper->fetchOneByUuid($user_profile_id);
|
1599 |
$userProfile = $userProfileMapper->fetchOneByUuid($user_profile_id);
|
1625 |
|
Línea 1600... |
Línea 1626... |
1600 |
if (!$userProfile) {
|
1626 |
// Validar que el perfil existe
|
1601 |
// Use helper
|
1627 |
if (!$userProfile) {
|
1602 |
return $this->_createSimpleErrorResponse('ERROR_INVALID_PARAMETER');
|
- |
|
1603 |
}
|
1628 |
return $this->_createSimpleErrorResponse('ERROR_INVALID_PARAMETER');
|
1604 |
|
1629 |
}
|
Línea -... |
Línea 1630... |
- |
|
1630 |
|
1605 |
// Authorize: Check if current user owns the profile
|
1631 |
// Verificar que el usuario actual es el propietario del perfil
|
1606 |
if ($currentUser->id != $userProfile->user_id) {
|
1632 |
if ($currentUser->id != $userProfile->user_id) {
|
1607 |
// Use helper
|
- |
|
- |
|
1633 |
return $this->_createSimpleErrorResponse('ERROR_UNAUTHORIZED');
|
1608 |
return $this->_createSimpleErrorResponse('ERROR_UNAUTHORIZED');
|
1634 |
}
|
1609 |
}
|
1635 |
|
1610 |
|
1636 |
// Procesar solo peticiones POST
|
1611 |
$request = $this->getRequest();
|
1637 |
$request = $this->getRequest();
|
- |
|
1638 |
if ($request->isPost()) {
|
1612 |
if ($request->isPost()) {
|
1639 |
// Inicializar el sistema de almacenamiento
|
- |
|
1640 |
$storage = Storage::getInstance($this->config, $this->adapter);
|
1613 |
|
1641 |
$target_path = $storage->getPathUser();
|
Línea -... |
Línea 1642... |
- |
|
1642 |
$user_uuid = $currentUser->uuid;
|
1614 |
$storage = Storage::getInstance($this->config, $this->adapter);
|
1643 |
|
1615 |
$target_path = $storage->getPathUser();
|
- |
|
1616 |
$user_uuid = $currentUser->uuid; // Assuming user UUID for path
|
1644 |
// Manejar la eliminación de la imagen
|
1617 |
|
- |
|
1618 |
if ($operation == 'delete') {
|
1645 |
if ($operation == 'delete') {
|
1619 |
$this->logger->info('Se borro el image del perfil ' . ($userProfile->public == UserProfile::PUBLIC_YES ? 'público' : $userProfile->name), ['user_id' => $userProfile->user_id, 'ip' => Functions::getUserIP()]);
|
1646 |
// Registrar la acción en el log
|
1620 |
|
1647 |
$this->logger->info('Se borro el image del perfil ' . ($userProfile->public == UserProfile::PUBLIC_YES ? 'público' : $userProfile->name), ['user_id' => $userProfile->user_id, 'ip' => Functions::getUserIP()]);
|
Línea 1621... |
Línea 1648... |
1621 |
if ($userProfile->image) {
|
1648 |
|
1622 |
// Attempt deletion
|
1649 |
// Si existe una imagen, intentar eliminarla
|
1623 |
if (!$storage->deleteFile($target_path, $user_uuid, $userProfile->image)) {
|
1650 |
if ($userProfile->image) {
|
1624 |
// Use helper
|
- |
|
1625 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1651 |
if (!$storage->deleteFile($target_path, $user_uuid, $userProfile->image)) {
|
1626 |
}
|
1652 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1627 |
}
|
1653 |
}
|
- |
|
1654 |
}
|
1628 |
|
1655 |
|
1629 |
// Clear image field and update DB
|
1656 |
// Limpiar el campo de imagen y actualizar la base de datos
|
Línea 1630... |
Línea 1657... |
1630 |
$userProfile->image = '';
|
1657 |
$userProfile->image = '';
|
Línea 1631... |
Línea 1658... |
1631 |
if (!$userProfileMapper->updateImage($userProfile)) {
|
1658 |
if (!$userProfileMapper->updateImage($userProfile)) {
|
1632 |
// Use helper
|
- |
|
- |
|
1659 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1633 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1660 |
}
|
1634 |
}
|
- |
|
1635 |
} else { // Handle upload
|
1661 |
} else {
|
1636 |
$form = new ImageForm($this->config);
|
- |
|
1637 |
$data = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
|
1662 |
// Manejar la subida de una nueva imagen
|
1638 |
|
1663 |
$form = new ImageForm($this->config);
|
Línea 1639... |
Línea 1664... |
1639 |
$form->setData($data);
|
1664 |
$data = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
|
1640 |
|
1665 |
|
1641 |
if ($form->isValid()) {
|
1666 |
$form->setData($data);
|
1642 |
|
1667 |
|
1643 |
$storage->setFiles($request->getFiles()->toArray());
|
1668 |
if ($form->isValid()) {
|
- |
|
1669 |
// Configurar el archivo para procesamiento
|
1644 |
// *** FIX: Use correct input field name 'image' ***
|
1670 |
$storage->setFiles($request->getFiles()->toArray());
|
1645 |
if (!$storage->setCurrentFilename('image')) {
|
1671 |
if (!$storage->setCurrentFilename('image')) {
|
1646 |
// Use helper
|
1672 |
return $this->_createSimpleErrorResponse('ERROR_UPLOAD_FILE');
|
1647 |
return $this->_createSimpleErrorResponse('ERROR_UPLOAD_FILE');
|
1673 |
}
|
1648 |
}
|
1674 |
|
1649 |
|
1675 |
// Obtener dimensiones objetivo para el redimensionamiento
|
1650 |
// Prepare for resize and save
|
- |
|
1651 |
list($target_width_str, $target_height_str) = explode('x', $this->config['leaderslinked.image_sizes.user_size']);
|
1676 |
list($target_width_str, $target_height_str) = explode('x', $this->config['leaderslinked.image_sizes.user_size']);
|
1652 |
$target_width = (int)$target_width_str;
|
1677 |
$target_width = (int)$target_width_str;
|
1653 |
$target_height = (int)$target_height_str;
|
1678 |
$target_height = (int)$target_height_str;
|
1654 |
|
1679 |
|
1655 |
$source_filename = $storage->getTmpFilename();
|
1680 |
// Generar nombres de archivo únicos
|
1656 |
$filename = 'user-profile-' . uniqid() . '.png';
|
1681 |
$source_filename = $storage->getTmpFilename();
|
1657 |
$target_filename = $storage->composePathToFilename(Storage::TYPE_USER, $user_uuid, $filename);
|
- |
|
1658 |
|
1682 |
$filename = 'user-profile-' . uniqid() . '.png';
|
1659 |
// Upload, resize, save
|
1683 |
$target_filename = $storage->composePathToFilename(Storage::TYPE_USER, $user_uuid, $filename);
|
1660 |
if (!$storage->uploadImageResize($source_filename, $target_filename, $target_width, $target_height)) {
|
1684 |
|
Línea 1661... |
Línea 1685... |
1661 |
// Use helper
|
1685 |
// Subir y redimensionar la imagen
|
1662 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1686 |
if (!$storage->uploadImageResize($source_filename, $target_filename, $target_width, $target_height)) {
|
1663 |
}
|
1687 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1664 |
|
- |
|
1665 |
// Delete old image if exists
|
1688 |
}
|
1666 |
if ($userProfile->image) {
|
1689 |
|
Línea 1667... |
Línea 1690... |
1667 |
if (!$storage->deleteFile($target_path, $user_uuid, $userProfile->image)) {
|
1690 |
// Eliminar la imagen anterior si existe
|
1668 |
// Use helper
|
1691 |
if ($userProfile->image) {
|
1669 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
- |
|
1670 |
}
|
1692 |
if (!$storage->deleteFile($target_path, $user_uuid, $userProfile->image)) {
|
1671 |
}
|
- |
|
1672 |
|
1693 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1673 |
// Update profile model and DB
|
1694 |
}
|
1674 |
$userProfile->image = $filename;
|
1695 |
}
|
1675 |
if (!$userProfileMapper->updateImage($userProfile)) {
|
1696 |
|
1676 |
// Use helper
|
- |
|
1677 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1697 |
// Actualizar el perfil con la nueva imagen
|
1678 |
}
|
1698 |
$userProfile->image = $filename;
|
1679 |
|
1699 |
if (!$userProfileMapper->updateImage($userProfile)) {
|
1680 |
// Special handling: If this is the PUBLIC profile, also update the main user image
|
1700 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1681 |
if ($userProfile->public == UserProfile::PUBLIC_YES) {
|
1701 |
}
|
1682 |
|
1702 |
|
1683 |
$main_user_filename = 'user-' . uniqid() . '.png'; // Use different name for safety?
|
- |
|
1684 |
// $source_filename_for_copy = $target_filename; // The newly saved profile image
|
1703 |
// Si es un perfil público, actualizar también la imagen principal del usuario
|
1685 |
$target_filename_main_user = $storage->composePathToFilename(Storage::TYPE_USER, $user_uuid, $main_user_filename);
|
1704 |
if ($userProfile->public == UserProfile::PUBLIC_YES) {
|
1686 |
|
1705 |
$main_user_filename = 'user-' . uniqid() . '.png';
|
Línea 1687... |
Línea 1706... |
1687 |
// Copy the *newly processed* profile image to be the main user image
|
1706 |
$target_filename_main_user = $storage->composePathToFilename(Storage::TYPE_USER, $user_uuid, $main_user_filename);
|
1688 |
if (!$storage->copyFile($target_filename, $target_filename_main_user)) { // Source is the *new* profile image
|
1707 |
|
1689 |
// Use helper
|
1708 |
// Copiar la imagen del perfil para la imagen principal
|
1690 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1709 |
if (!$storage->copyFile($target_filename, $target_filename_main_user)) {
|
1691 |
}
|
- |
|
1692 |
|
1710 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1693 |
// Delete the old main user image if it exists
|
1711 |
}
|
1694 |
if ($currentUser->image) {
|
1712 |
|
Línea -... |
Línea 1713... |
- |
|
1713 |
// Eliminar la imagen principal anterior si existe
|
1695 |
if (!$storage->deleteFile($target_path, $user_uuid, $currentUser->image)) {
|
1714 |
if ($currentUser->image) {
|
1696 |
// Use helper
|
1715 |
if (!$storage->deleteFile($target_path, $user_uuid, $currentUser->image)) {
|
1697 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1716 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1698 |
}
|
1717 |
}
|
1699 |
}
|
1718 |
}
|
1700 |
|
1719 |
|
1701 |
// Update current user model and DB
|
1720 |
// Actualizar la imagen principal del usuario
|
1702 |
$currentUser->image = $main_user_filename;
|
1721 |
$currentUser->image = $main_user_filename;
|
1703 |
$userMapper = UserMapper::getInstance($this->adapter);
|
- |
|
1704 |
if (!$userMapper->updateImage($currentUser)) {
|
1722 |
$userMapper = UserMapper::getInstance($this->adapter);
|
1705 |
// Use helper
|
1723 |
if (!$userMapper->updateImage($currentUser)) {
|
1706 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1724 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1707 |
}
|
1725 |
}
|
1708 |
}
|
1726 |
}
|
1709 |
|
1727 |
|
1710 |
$this->logger->info('Se actualizo el image del perfil ' . ($userProfile->public == UserProfile::PUBLIC_YES ? 'público' : $userProfile->name), ['user_id' => $userProfile->user_id, 'ip' => Functions::getUserIP()]);
|
1728 |
// Registrar la actualización en el log
|
1711 |
} else {
|
1729 |
$this->logger->info('Se actualizo el image del perfil ' . ($userProfile->public == UserProfile::PUBLIC_YES ? 'público' : $userProfile->name), ['user_id' => $userProfile->user_id, 'ip' => Functions::getUserIP()]);
|
1712 |
// Use helper for form errors
|
1730 |
} else {
|
1713 |
return $this->_createFormErrorResponse($form);
|
1731 |
// Devolver errores de validación del formulario
|
Línea 1714... |
Línea 1732... |
1714 |
}
|
1732 |
return $this->_createFormErrorResponse($form);
|
1715 |
} // End upload/delete logic
|
- |
|
1716 |
|
1733 |
}
|
1717 |
// Success response (for both upload and delete)
|
1734 |
}
|
Línea 1718... |
Línea 1735... |
1718 |
// Instantiate storage again just to be safe, though the instance from above should be okay
|
1735 |
|
1719 |
$storage = Storage::getInstance($this->config, $this->adapter);
|
1736 |
// Devolver respuesta exitosa con las URLs actualizadas
|
Línea 1764... |
Línea 1781... |
1764 |
$request = $this->getRequest();
|
1781 |
$request = $this->getRequest();
|
1765 |
if ($request->isPost()) {
|
1782 |
if ($request->isPost()) {
|
1766 |
$storage = Storage::getInstance($this->config, $this->adapter);
|
1783 |
$storage = Storage::getInstance($this->config, $this->adapter);
|
1767 |
$target_path = $storage->getPathUser(); // Base path for user-specific files
|
1784 |
$target_path = $storage->getPathUser(); // Base path for user-specific files
|
1768 |
$user_uuid = $currentUser->uuid;
|
1785 |
$user_uuid = $currentUser->uuid;
|
1769 |
|
1786 |
|
1770 |
// Handle cover deletion operation
|
1787 |
// Handle cover deletion operation
|
1771 |
if ($operation == 'delete') {
|
1788 |
if ($operation == 'delete') {
|
1772 |
if ($userProfile->cover) {
|
1789 |
if ($userProfile->cover) {
|
1773 |
// Attempt to delete the existing cover file from storage
|
1790 |
// Attempt to delete the existing cover file from storage
|
1774 |
if (!$storage->deleteFile($target_path, $user_uuid, $userProfile->cover)) {
|
1791 |
if (!$storage->deleteFile($target_path, $user_uuid, $userProfile->cover)) {
|
Línea 1776... |
Línea 1793... |
1776 |
}
|
1793 |
}
|
1777 |
}
|
1794 |
}
|
1778 |
// Log the deletion action
|
1795 |
// Log the deletion action
|
1779 |
$this->logger->info('Se borro el cover del perfil ' . ($userProfile->public == UserProfile::PUBLIC_YES ? 'público' : $userProfile->name), ['user_id' => $userProfile->user_id, 'ip' => Functions::getUserIP()]);
|
1796 |
$this->logger->info('Se borro el cover del perfil ' . ($userProfile->public == UserProfile::PUBLIC_YES ? 'público' : $userProfile->name), ['user_id' => $userProfile->user_id, 'ip' => Functions::getUserIP()]);
|
1780 |
$userProfile->cover = ''; // Clear the cover field in the profile model
|
1797 |
$userProfile->cover = ''; // Clear the cover field in the profile model
|
1781 |
|
1798 |
|
1782 |
// Persist the cleared cover information to the database
|
1799 |
// Persist the cleared cover information to the database
|
1783 |
if (!$userProfileMapper->updateCover($userProfile)) {
|
1800 |
if (!$userProfileMapper->updateCover($userProfile)) {
|
1784 |
// Handle error if database update fails for deletion
|
1801 |
// Handle error if database update fails for deletion
|
1785 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1802 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1786 |
}
|
1803 |
}
|
Línea 1810... |
Línea 1827... |
1810 |
|
1827 |
|
1811 |
// Upload, resize, and save the image
|
1828 |
// Upload, resize, and save the image
|
1812 |
if (!$storage->uploadImageResize($source_filename, $target_filename, $target_width, $target_height)) {
|
1829 |
if (!$storage->uploadImageResize($source_filename, $target_filename, $target_width, $target_height)) {
|
1813 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1830 |
return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
|
1814 |
}
|
1831 |
}
|
1815 |
|
1832 |
|
1816 |
// If an old cover exists, delete it from storage
|
1833 |
// If an old cover exists, delete it from storage
|
1817 |
if ($userProfile->cover) {
|
1834 |
if ($userProfile->cover) {
|
1818 |
if (!$storage->deleteFile($target_path, $user_uuid, $userProfile->cover)) {
|
1835 |
if (!$storage->deleteFile($target_path, $user_uuid, $userProfile->cover)) {
|
1819 |
// Decide if this is a critical error. Original code returns error.
|
1836 |
// Decide if this is a critical error. Original code returns error.
|
Línea 1834... |
Línea 1851... |
1834 |
} else {
|
1851 |
} else {
|
1835 |
// Form is invalid, return validation messages
|
1852 |
// Form is invalid, return validation messages
|
1836 |
return $this->_createFormErrorResponse($form);
|
1853 |
return $this->_createFormErrorResponse($form);
|
1837 |
}
|
1854 |
}
|
1838 |
} // End of upload/delete specific logic
|
1855 |
} // End of upload/delete specific logic
|
1839 |
|
1856 |
|
1840 |
// Successful operation (upload or delete has been handled and persisted)
|
1857 |
// Successful operation (upload or delete has been handled and persisted)
|
1841 |
// Return success response with the current cover URL (new, or default after delete)
|
1858 |
// Return success response with the current cover URL (new, or default after delete)
|
1842 |
// The $storage instance from the beginning of the POST block is still valid.
|
1859 |
// The $storage instance from the beginning of the POST block is still valid.
|
1843 |
return new JsonModel([
|
1860 |
return new JsonModel([
|
1844 |
'success' => true,
|
1861 |
'success' => true,
|
Línea 2105... |
Línea 2122... |
2105 |
*/
|
2122 |
*/
|
2106 |
private function _createSimpleErrorResponse($errorMessageKey)
|
2123 |
private function _createSimpleErrorResponse($errorMessageKey)
|
2107 |
{
|
2124 |
{
|
2108 |
return new JsonModel([
|
2125 |
return new JsonModel([
|
2109 |
'success' => false,
|
2126 |
'success' => false,
|
2110 |
'data' => $errorMessageKey
|
2127 |
'data' => $errorMessageKey
|
2111 |
]);
|
2128 |
]);
|
2112 |
}
|
2129 |
}
|
Línea 2113... |
Línea 2130... |
2113 |
|
2130 |
|
2114 |
/**
|
2131 |
/**
|