Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17292 | Rev 17294 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
5992 stevensc 2
 
1 www 3
/**
4
 *
5
 * Controlador: Mis Perfiles
6
 *
7
 */
5992 stevensc 8
 
1 www 9
declare(strict_types=1);
10
 
11
namespace LeadersLinked\Controller;
12
 
13
use Laminas\Db\Adapter\AdapterInterface;
16768 efrain 14
 
1 www 15
use Laminas\Mvc\Controller\AbstractActionController;
16
use Laminas\Log\LoggerInterface;
17
use Laminas\View\Model\ViewModel;
18
use Laminas\View\Model\JsonModel;
19
 
20
use LeadersLinked\Library\Functions;
21
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
22
use LeadersLinked\Library\Image;
23
 
24
use LeadersLinked\Mapper\CompanyLocationMapper;
17002 efrain 25
use LeadersLinked\Form\CompanyProfile\ProfileSocialNetworkForm;
26
use LeadersLinked\Form\CompanyProfile\ProfileLocationForm;
27
use LeadersLinked\Form\CompanyProfile\ProfileExtendedForm;
28
use LeadersLinked\Form\CompanyProfile\ProfileImageForm;
29
use LeadersLinked\Form\CompanyProfile\ProfileCoverForm;
30
use LeadersLinked\Form\CompanyProfile\ProfileHeaderForm;
31
use LeadersLinked\Form\CompanyProfile\ProfileFooterForm;
1 www 32
 
17002 efrain 33
use LeadersLinked\Form\CompanyProfile\ProfileIndustryForm;
34
use LeadersLinked\Form\CompanyProfile\ProfileCompanySizeForm;
35
use LeadersLinked\Form\CompanyProfile\ProfileFoundationYearForm;
36
use LeadersLinked\Form\CompanyProfile\ProfileWebsiteForm;
1 www 37
use LeadersLinked\Model\Location;
38
use LeadersLinked\Model\CompanyLocation;
39
use LeadersLinked\Model\CompanyUser;
40
 
41
use LeadersLinked\Mapper\LocationMapper;
42
use LeadersLinked\Mapper\CompanyFollowerMapper;
43
use LeadersLinked\Mapper\CompanyUserMapper;
44
use LeadersLinked\Mapper\CompanyMapper;
45
use LeadersLinked\Mapper\IndustryMapper;
46
use LeadersLinked\Mapper\CompanySizeMapper;
16766 efrain 47
use LeadersLinked\Mapper\UserMapper;
17002 efrain 48
use LeadersLinked\Library\Storage;
1 www 49
 
50
class ProfileController extends AbstractActionController
51
{
52
    /**
53
     *
16769 efrain 54
     * @var \Laminas\Db\Adapter\AdapterInterface
1 www 55
     */
56
    private $adapter;
17291 ariadna 57
 
1 www 58
    /**
59
     *
16769 efrain 60
     * @var \LeadersLinked\Cache\CacheInterface
1 www 61
     */
16769 efrain 62
    private $cache;
17291 ariadna 63
 
64
 
16769 efrain 65
    /**
66
     *
67
     * @var \Laminas\Log\LoggerInterface
68
     */
1 www 69
    private $logger;
17291 ariadna 70
 
1 www 71
    /**
72
     *
73
     * @var array
74
     */
75
    private $config;
17291 ariadna 76
 
77
 
1 www 78
    /**
79
     *
16769 efrain 80
     * @var \Laminas\Mvc\I18n\Translator
81
     */
82
    private $translator;
17291 ariadna 83
 
84
 
16769 efrain 85
    /**
86
     *
87
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
88
     * @param \LeadersLinked\Cache\CacheInterface $cache
89
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
1 www 90
     * @param array $config
16769 efrain 91
     * @param \Laminas\Mvc\I18n\Translator $translator
1 www 92
     */
16769 efrain 93
    public function __construct($adapter, $cache, $logger, $config, $translator)
1 www 94
    {
16769 efrain 95
        $this->adapter      = $adapter;
96
        $this->cache        = $cache;
97
        $this->logger       = $logger;
98
        $this->config       = $config;
99
        $this->translator   = $translator;
1 www 100
    }
101
 
5992 stevensc 102
 
103
 
1 www 104
    /**
105
     * Presenta el perfil con las opciónes de edición de cada sección
106
     * @return \Laminas\Http\Response|\Laminas\View\Model\ViewModel|\Laminas\View\Model\JsonModel
107
     */
108
    public function indexAction()
109
    {
110
        $currentUserPlugin = $this->plugin('currentUserPlugin');
111
        $currentUser = $currentUserPlugin->getUser();
112
        $currentCompany = $currentUserPlugin->getCompany();
113
 
5992 stevensc 114
 
1 www 115
        $request = $this->getRequest();
5992 stevensc 116
        if ($request->isGet()) {
117
 
1 www 118
            $sandbox = $this->config['leaderslinked.runmode.sandbox'];
5992 stevensc 119
            if ($sandbox) {
1 www 120
                $google_map_key  = $this->config['leaderslinked.google_map.sandbox_api_key'];
121
            } else {
122
                $google_map_key  = $this->config['leaderslinked.google_map.production_api_key'];
123
            }
5992 stevensc 124
 
1 www 125
            $companyMapper = CompanyMapper::getInstance($this->adapter);
126
            $company = $companyMapper->fetchOne($currentCompany->id);
127
 
5992 stevensc 128
 
1 www 129
            $companyLocationMapper = CompanyLocationMapper::getInstance($this->adapter);
130
            $records = $companyLocationMapper->fetchAllLocationByCompanyId($company->id);
131
 
132
 
133
 
5992 stevensc 134
 
1 www 135
            $locations = [];
5992 stevensc 136
            foreach ($records as $record) {
1 www 137
                $location =  [
138
                    'formatted_address'  => $record['formatted_address'],
139
                    'country' => $record['country'],
140
                    'is_main' => $record['is_main'],
5992 stevensc 141
                    'link_edit' => $this->url()->fromRoute('profile/location', ['operation' => 'edit', 'id' =>  $record['company_location_uuid']]),
142
                    'link_delete' => $this->url()->fromRoute('profile/location', ['operation' => 'delete', 'id' => $record['company_location_uuid']])
143
 
1 www 144
                ];
5992 stevensc 145
 
1 www 146
                array_push($locations, $location);
147
            }
5992 stevensc 148
 
1 www 149
            $industryMapper = IndustryMapper::getInstance($this->adapter);
150
            $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
151
 
17002 efrain 152
            $formSocialNetwork = new ProfileSocialNetworkForm();
153
            $formLocation = new ProfileLocationForm();
154
            $formExtended = new ProfileExtendedForm();
155
            $formFoundationYear = new ProfileFoundationYearForm();
156
            $formWebsite = new ProfileWebsiteForm();
157
            $formImage = new ProfileImageForm($this->config);
158
            $formCover = new ProfileCoverForm($this->config);
159
            $formHeader = new ProfileHeaderForm($this->config);
160
            $formFooter = new ProfileFooterForm($this->config);
768 geraldo 161
 
162
 
163
 
17002 efrain 164
            $formCompanySize = new ProfileCompanySizeForm($this->adapter);
165
            $formIndustry = new ProfileIndustryForm($this->adapter);
5992 stevensc 166
 
1 www 167
            $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
168
            $follower = $companyFollowerMapper->getCountFollowers($currentCompany->id);
169
 
170
            $image_size_cover = $this->config['leaderslinked.image_sizes.company_cover_upload'];
171
            $image_size_profile = $this->config['leaderslinked.image_sizes.company_image_upload'];
1101 geraldo 172
            $image_size_header = $this->config['leaderslinked.image_sizes.company_header_pdf_upload'];
5992 stevensc 173
            $image_size_footer = $this->config['leaderslinked.image_sizes.company_footer_pdf_upload'];
174
 
175
 
1 www 176
            $industry = $industryMapper->fetchOne($company->industry_id);
177
            $companySize = $companySizeMapper->fetchOne($company->company_size_id);
5992 stevensc 178
 
179
 
1 www 180
            $this->layout()->setTemplate('layout/layout-backend');
181
            $viewModel = new ViewModel();
182
            $viewModel->setTemplate('leaders-linked/profile/index.phtml');
183
            $viewModel->setVariables([
184
                'google_map_key'        => $google_map_key,
185
                'follower'              => $follower,
186
                'company_id'            => $currentCompany->id,
187
                'company_name'          => $company->name,
188
                'company_uuid'          => $company->uuid,
189
                'name'                  => trim($company->name),
190
                'image'                 => $company->image,
191
                'cover'                 => $company->cover,
782 geraldo 192
                'header'                 => $company->header,
193
                'footer'                 => $company->footer,
5992 stevensc 194
                'overview'              => strip_tags($company->description, 'p'),
1 www 195
                'website'               => $company->website,
196
                'foundation_year'       => $company->foundation_year,
197
                'facebook'              => $company->facebook,
198
                'instagram'             => $company->instagram,
199
                'twitter'               => $company->twitter,
200
                'locations'             => $locations,
201
                'industry'              => $industry->name,
5992 stevensc 202
                'company_size'          => $companySize->name . ' (' . $companySize->minimum_no_of_employee . '-' . $companySize->maximum_no_of_employee . ')',
1 www 203
                'formLocation'          => $formLocation,
204
                'formSocialNetwork'     => $formSocialNetwork,
205
                'formExtended'          => $formExtended,
206
                'formImage'             => $formImage,
207
                'formCover'             => $formCover,
768 geraldo 208
                'formHeader'             => $formHeader,
209
                'formFooter'             => $formFooter,
1 www 210
                'formFoundationYear'    => $formFoundationYear,
211
                'formWebsite'           => $formWebsite,
212
                'formIndustry'          => $formIndustry,
213
                'formCompanySize'       => $formCompanySize,
214
                'image_size_cover'      => $image_size_cover,
215
                'image_size_profile'    => $image_size_profile,
781 geraldo 216
                'image_size_header'    => $image_size_header,
217
                'image_size_footer'    => $image_size_footer,
1 www 218
            ]);
5992 stevensc 219
            return $viewModel;
1 www 220
        } else {
221
            $data = [
222
                'success' => false,
223
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
224
            ];
5992 stevensc 225
 
1 www 226
            return new JsonModel($data);
227
        }
5992 stevensc 228
 
1 www 229
        return new JsonModel($data);
230
    }
5992 stevensc 231
 
232
 
1 www 233
    /**
234
     *
235
     * Borrar un perfil excepto el público
236
     * @return \Laminas\View\Model\JsonModel
237
     */
238
    public function deleteAction()
239
    {
240
 
241
        $currentUserPlugin = $this->plugin('currentUserPlugin');
242
        $currentUser = $currentUserPlugin->getUser();
243
        $currentCompany = $currentUserPlugin->getCompany();
5992 stevensc 244
 
1 www 245
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
246
        $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($currentCompany->id, $currentUser->id);
5992 stevensc 247
 
248
        if (!$companyUser || $companyUser->type != CompanyUser::CREATOR_YES) {
1 www 249
            $response = [
250
                'success' => false,
251
                'data' => 'ERROR_UNAUTHORIZED'
252
            ];
5992 stevensc 253
 
1 www 254
            return new JsonModel($response);
255
        }
5992 stevensc 256
 
257
 
258
        if ($request->isPost()) {
1 www 259
            $companyMapper = CompanyMapper::getInstance($this->adapter);
260
            $result = $companyMapper->delete($companyUser->id);
5992 stevensc 261
            if ($result) {
1 www 262
                $this->logger->info('Se borro la empresa : ' .  $currentCompany->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5992 stevensc 263
 
1 www 264
                $data = [
265
                    'success' => true,
266
                    'data' => 'LABEL_RECORD_DELETED'
267
                ];
268
            } else {
5992 stevensc 269
 
1 www 270
                $data = [
271
                    'success'   => false,
272
                    'data'      => $companyUserMapper->getError()
273
                ];
5992 stevensc 274
 
1 www 275
                return new JsonModel($data);
276
            }
277
        } else {
278
            $data = [
279
                'success' => false,
280
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
281
            ];
5992 stevensc 282
 
1 www 283
            return new JsonModel($data);
284
        }
5992 stevensc 285
 
1 www 286
        return new JsonModel($data);
287
    }
5992 stevensc 288
 
289
 
290
 
1 www 291
    /**
292
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
293
     * @return \Laminas\View\Model\JsonModel
294
     */
295
    public function extendedAction()
296
    {
297
 
298
        $currentUserPlugin = $this->plugin('currentUserPlugin');
299
        $currentUser = $currentUserPlugin->getUser();
300
        $currentCompany = $currentUserPlugin->getCompany();
301
 
302
        $request = $this->getRequest();
5992 stevensc 303
        if ($request->isGet()) {
1 www 304
            $companyMapper = CompanyMapper::getInstance($this->adapter);
305
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 306
 
1 www 307
            $data = [
308
                'success' => true,
309
                'data' => [
310
                    'description' => $company->description,
311
                ]
312
            ];
5992 stevensc 313
 
1 www 314
            return new JsonModel($data);
5992 stevensc 315
        } else if ($request->isPost()) {
17002 efrain 316
            $form = new ProfileExtendedForm();
1 www 317
            $dataPost = $request->getPost()->toArray();
5992 stevensc 318
 
1 www 319
            $form->setData($dataPost);
5992 stevensc 320
 
321
            if ($form->isValid()) {
1 www 322
                $companyMapper = CompanyMapper::getInstance($this->adapter);
323
                $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 324
 
1 www 325
                $dataPost = (array) $form->getData();
5992 stevensc 326
 
1 www 327
                $hydrator = new ObjectPropertyHydrator();
328
                $hydrator->hydrate($dataPost, $company);
5992 stevensc 329
 
1 www 330
                $companyMapper->updateExtended($company);
5992 stevensc 331
 
1 www 332
                $this->logger->info('Se actualizo las descripción de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5992 stevensc 333
 
1 www 334
                return new JsonModel([
335
                    'success'   => true,
336
                    'data' => [
6602 stevensc 337
                        'description' => strip_tags($company->description, 'p')
1 www 338
                    ]
339
                ]);
340
            } else {
341
                $messages = [];
342
                $form_messages = (array) $form->getMessages();
5992 stevensc 343
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 344
                    $messages[$fieldname] = array_values($field_messages);
345
                }
5992 stevensc 346
 
1 www 347
                return new JsonModel([
348
                    'success'   => false,
349
                    'data'   => $messages
350
                ]);
351
            }
352
        }
5992 stevensc 353
 
354
 
1 www 355
        $data = [
356
            'success' => false,
357
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
358
        ];
5992 stevensc 359
 
360
 
1 www 361
        return new JsonModel($data);
362
    }
5992 stevensc 363
 
1 www 364
    /**
365
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
366
     * @return \Laminas\View\Model\JsonModel
367
     */
368
    public function websiteAction()
369
    {
370
        $currentUserPlugin = $this->plugin('currentUserPlugin');
371
        $currentUser = $currentUserPlugin->getUser();
372
        $currentCompany = $currentUserPlugin->getCompany();
373
 
374
        $request = $this->getRequest();
5992 stevensc 375
        if ($request->isGet()) {
1 www 376
            $companyMapper = CompanyMapper::getInstance($this->adapter);
377
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 378
 
1 www 379
            $data = [
380
                'success' => true,
381
                'data' => [
382
                    'website' => $company->website,
383
                ]
384
            ];
5992 stevensc 385
 
1 www 386
            return new JsonModel($data);
5992 stevensc 387
        } else if ($request->isPost()) {
388
 
389
 
17002 efrain 390
            $form = new ProfileWebsiteForm();
1 www 391
            $dataPost = $request->getPost()->toArray();
5992 stevensc 392
 
1 www 393
            $form->setData($dataPost);
5992 stevensc 394
 
395
            if ($form->isValid()) {
1 www 396
                $companyMapper = CompanyMapper::getInstance($this->adapter);
397
                $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 398
 
1 www 399
                $dataPost = (array) $form->getData();
5992 stevensc 400
 
1 www 401
                $hydrator = new ObjectPropertyHydrator();
402
                $hydrator->hydrate($dataPost, $company);
5992 stevensc 403
 
1 www 404
                $companyMapper->updateWebsite($company);
5992 stevensc 405
 
1 www 406
                $this->logger->info('Se actualizo el website de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5992 stevensc 407
 
1 www 408
                return new JsonModel([
409
                    'success'   => true,
410
                    'data' => [
411
                        'website' => $company->website,
412
                    ]
413
                ]);
414
            } else {
415
                $messages = [];
416
                $form_messages = (array) $form->getMessages();
5992 stevensc 417
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 418
                    $messages[$fieldname] = array_values($field_messages);
419
                }
5992 stevensc 420
 
1 www 421
                return new JsonModel([
422
                    'success'   => false,
423
                    'data'   => $messages
424
                ]);
425
            }
426
        }
5992 stevensc 427
 
428
 
1 www 429
        $data = [
430
            'success' => false,
431
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
432
        ];
5992 stevensc 433
 
434
 
1 www 435
        return new JsonModel($data);
436
    }
5992 stevensc 437
 
1 www 438
    /**
439
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
440
     * @return \Laminas\View\Model\JsonModel
441
     */
442
    public function foundationYearAction()
443
    {
5992 stevensc 444
 
1 www 445
        $currentUserPlugin = $this->plugin('currentUserPlugin');
446
        $currentUser = $currentUserPlugin->getUser();
447
        $currentCompany = $currentUserPlugin->getCompany();
448
 
5992 stevensc 449
 
450
 
1 www 451
        $request = $this->getRequest();
5992 stevensc 452
        if ($request->isGet()) {
1 www 453
            $companyMapper = CompanyMapper::getInstance($this->adapter);
454
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 455
 
1 www 456
            $data = [
457
                'success' => true,
458
                'data' => [
459
                    'foundation_year' => $company->foundation_year,
460
                ]
5992 stevensc 461
 
1 www 462
            ];
5992 stevensc 463
 
1 www 464
            return new JsonModel($data);
5992 stevensc 465
        } else if ($request->isPost()) {
466
 
467
 
17002 efrain 468
            $form = new ProfileFoundationYearForm();
1 www 469
            $dataPost = $request->getPost()->toArray();
5992 stevensc 470
 
1 www 471
            $form->setData($dataPost);
5992 stevensc 472
 
473
            if ($form->isValid()) {
1 www 474
                $companyMapper = CompanyMapper::getInstance($this->adapter);
475
                $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 476
 
1 www 477
                $dataPost = (array) $form->getData();
5992 stevensc 478
 
1 www 479
                $hydrator = new ObjectPropertyHydrator();
480
                $hydrator->hydrate($dataPost, $company);
5992 stevensc 481
 
1 www 482
                $companyMapper->updateFoundationYear($company);
5992 stevensc 483
 
1 www 484
                $this->logger->info('Se actualizo el año de fundación de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5992 stevensc 485
 
1 www 486
                return new JsonModel([
487
                    'success'   => true,
488
                    'data' => $company->foundation_year,
489
                ]);
490
            } else {
491
                $messages = [];
492
                $form_messages = (array) $form->getMessages();
5992 stevensc 493
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 494
                    $messages[$fieldname] = array_values($field_messages);
495
                }
5992 stevensc 496
 
1 www 497
                return new JsonModel([
498
                    'success'   => false,
499
                    'data'   => $messages
500
                ]);
501
            }
502
        }
5992 stevensc 503
 
504
 
1 www 505
        $data = [
506
            'success' => false,
507
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
508
        ];
5992 stevensc 509
 
510
 
1 www 511
        return new JsonModel($data);
512
    }
5992 stevensc 513
 
514
 
1 www 515
    /**
516
     * Actualización de la ubucación
517
     * @return \Laminas\View\Model\JsonModel
518
     */
519
    public function locationAction()
520
    {
521
        $currentUserPlugin = $this->plugin('currentUserPlugin');
522
        $currentUser = $currentUserPlugin->getUser();
523
        $currentCompany = $currentUserPlugin->getCompany();
5992 stevensc 524
 
1 www 525
        $operation = $this->params()->fromRoute('operation');
5992 stevensc 526
        if ($operation == 'edit' || $operation == 'delete') {
1 www 527
            $id = $this->params()->fromRoute('id');
5992 stevensc 528
            if (!$id) {
1 www 529
                $response = [
530
                    'success' => false,
531
                    'data' => 'ERROR_INVALID_PARAMETER'
532
                ];
5992 stevensc 533
 
1 www 534
                return new JsonModel($response);
535
            }
536
        } else {
537
            $id = '';
538
        }
539
 
540
        $request = $this->getRequest();
5992 stevensc 541
        if ($request->isPost()) {
1 www 542
            $companyMapper = CompanyMapper::getInstance($this->adapter);
543
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 544
 
1 www 545
            $companyLocationMapper = CompanyLocationMapper::getInstance($this->adapter);
5992 stevensc 546
 
547
 
1 www 548
            $companyLocation = null;
5992 stevensc 549
            if ($id) {
1 www 550
                $companyLocation = $companyLocationMapper->fetchOneByUuid($id);
5992 stevensc 551
                if (!$companyLocation) {
1 www 552
                    $response = [
553
                        'success' => false,
554
                        'data' => 'ERROR_RECORD_NOT_FOUND'
555
                    ];
5992 stevensc 556
 
1 www 557
                    return new JsonModel($response);
558
                }
5992 stevensc 559
 
560
                if ($companyLocation->company_id != $company->id) {
1 www 561
                    $response = [
562
                        'success' => false,
563
                        'data' => 'ERROR_UNAUTHORIZED'
564
                    ];
565
                    return new JsonModel($response);
566
                }
567
            }
5992 stevensc 568
 
1 www 569
            $locationMapper = LocationMapper::getInstance($this->adapter);
570
            $response = [];
571
 
572
 
5992 stevensc 573
 
574
            if ($operation == 'delete' && $companyLocation) {
575
 
576
                if ($companyLocationMapper->delete($companyLocation->id)) {
1 www 577
                    $this->logger->info('Se borrar una ubicación de la empresa: ' . $company->name, ['user_id' => $currentUser->id,  'ip' => Functions::getUserIP()]);
578
                    $locationMapper->delete($companyLocation->location_id);
579
                } else {
580
                    $response = [
581
                        'success'   => false,
582
                        'data' => 'ERROR_THERE_WAS_AN_ERROR'
583
                    ];
584
                }
585
            } else {
17002 efrain 586
                $form = new ProfileLocationForm();
1 www 587
                $dataPost = $request->getPost()->toArray();
5992 stevensc 588
 
589
 
1 www 590
                $dataPost['is_main'] = isset($dataPost['is_main']) ? $dataPost['is_main'] : CompanyLocation::IS_MAIN_NO;
591
 
5992 stevensc 592
 
1 www 593
                $form->setData($dataPost);
5992 stevensc 594
 
595
                if ($form->isValid()) {
596
 
597
                    if ($operation == 'edit') {
1 www 598
                        $location = $locationMapper->fetchOne($companyLocation->location_id);
599
                    } else {
600
                        $location = new Location();
601
                    }
5992 stevensc 602
 
1 www 603
                    $dataPost = (array) $form->getData();
604
                    $hydrator = new ObjectPropertyHydrator();
605
                    $hydrator->hydrate($dataPost, $location);
5992 stevensc 606
 
607
                    if ($operation == 'edit') {
608
 
609
 
1 www 610
                        $companyLocation->is_main = $dataPost['is_main'];
611
                        $companyLocationMapper->update($companyLocation);
5992 stevensc 612
 
613
 
1 www 614
                        $location = $locationMapper->update($location);
5992 stevensc 615
                        $this->logger->info('Se actualizo una ubicación de la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 www 616
                    } else {
5992 stevensc 617
 
1 www 618
                        $result = $locationMapper->insert($location);
5992 stevensc 619
 
620
                        if ($result) {
1 www 621
                            $companyLocation = new CompanyLocation();
622
                            $companyLocation->company_id = $currentCompany->id;
623
                            $companyLocation->location_id = $location->id;
624
                            $companyLocation->is_main = $dataPost['is_main'];
5992 stevensc 625
 
1 www 626
                            $companyLocationMapper->insert($companyLocation);
5992 stevensc 627
                            $this->logger->info('Se agrego una ubicación a la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 www 628
                        } else {
629
                            $response = [
630
                                'success'   => false,
631
                                'data' => 'ERROR_THERE_WAS_AN_ERROR'
632
                            ];
633
                        }
634
                    }
635
                } else {
636
                    return new JsonModel([
637
                        'success'   => false,
638
                        'data'   =>   'ERROR_PLACED_AUTOCOMPLETE_DOES_NOT_CONTAIN_GEOMETRY'
639
                    ]);
640
                }
641
            }
5992 stevensc 642
 
643
            if (!$response) {
1 www 644
                $records = $companyLocationMapper->fetchAllLocationByCompanyId($currentCompany->id);
5992 stevensc 645
 
646
 
1 www 647
                $locations = [];
5992 stevensc 648
                foreach ($records as $record) {
1 www 649
                    $location =  [
650
                        'formatted_address'  => $record['formatted_address'],
651
                        'country' => $record['country'],
652
                        'is_main' => $record['is_main'],
5992 stevensc 653
                        'link_edit' => $this->url()->fromRoute('profile/location', ['id' => $record['company_location_uuid'], 'operation' => 'edit']),
4278 efrain 654
                        'link_delete' => $this->url()->fromRoute('profile/location', ['id' => $record['company_location_uuid'], 'operation' => 'delete'])
5992 stevensc 655
 
1 www 656
                    ];
5992 stevensc 657
 
1 www 658
                    array_push($locations, $location);
659
                }
5992 stevensc 660
 
1 www 661
                $response = [
662
                    'success' => true,
663
                    'data' => $locations
664
                ];
665
            }
5992 stevensc 666
 
1 www 667
            return new JsonModel($response);
5992 stevensc 668
        } else if ($request->isGet() && $operation == 'edit') {
1 www 669
 
5992 stevensc 670
 
671
 
1 www 672
            $companyLocationMapper = CompanyLocationMapper::getInstance($this->adapter);
673
            $companyLocation = $companyLocationMapper->fetchOneByUuid($id);
674
 
5992 stevensc 675
 
676
 
677
            if (!$companyLocation) {
1 www 678
                $response = [
679
                    'success' => false,
680
                    'data' => 'ERROR_RECORD_NOT_FOUND'
681
                ];
5992 stevensc 682
 
1 www 683
                return new JsonModel($response);
684
            }
5992 stevensc 685
 
686
            if ($companyLocation->company_id != $currentCompany->id) {
1 www 687
                $response = [
688
                    'success' => false,
689
                    'data' => 'ERROR_UNAUTHORIZED'
690
                ];
691
                return new JsonModel($response);
692
            }
5992 stevensc 693
 
1 www 694
            $locationMapper = LocationMapper::getInstance($this->adapter);
695
            $location = $locationMapper->fetchOne($companyLocation->location_id);
696
 
697
            $hydrator = new ObjectPropertyHydrator();
698
            $data = $hydrator->extract($location);
5992 stevensc 699
 
1 www 700
            $data['is_main'] = $companyLocation->is_main;
5992 stevensc 701
 
1 www 702
            $response = [
703
                'success' => true,
704
                'data' =>  $data
705
            ];
5992 stevensc 706
 
1 www 707
            return new JsonModel($response);
708
        }
5992 stevensc 709
 
1 www 710
        $response = [
711
            'success' => false,
712
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
713
        ];
5992 stevensc 714
 
715
 
1 www 716
        return new JsonModel($response);
717
    }
5992 stevensc 718
 
1 www 719
    /**
720
     * Actualización de las redes sociales
721
     * @return \Laminas\View\Model\JsonModel
722
     */
723
    public function socialNetworkAction()
724
    {
5992 stevensc 725
 
726
 
1 www 727
        $currentUserPlugin = $this->plugin('currentUserPlugin');
728
        $currentUser = $currentUserPlugin->getUser();
729
        $currentCompany = $currentUserPlugin->getCompany();
730
 
5992 stevensc 731
 
732
 
1 www 733
        $request = $this->getRequest();
5992 stevensc 734
        if ($request->isGet()) {
1 www 735
            $companyMapper = CompanyMapper::getInstance($this->adapter);
736
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 737
 
1 www 738
            $data = [
739
                'success' => true,
740
                'data' => [
741
                    'facebook' => $company->facebook,
742
                    'instagram' => $company->instagram,
743
                    'twitter' => $company->twitter
744
                ]
745
            ];
5992 stevensc 746
 
1 www 747
            return new JsonModel($data);
5992 stevensc 748
        } else if ($request->isPost()) {
749
 
17002 efrain 750
            $form = new ProfileSocialNetworkForm();
1 www 751
            $dataPost = $request->getPost()->toArray();
5992 stevensc 752
 
1 www 753
            $form->setData($dataPost);
5992 stevensc 754
 
755
            if ($form->isValid()) {
1 www 756
                $companyMapper = CompanyMapper::getInstance($this->adapter);
757
                $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 758
 
759
                $this->logger->info('Se actualizaron las redes sociales de la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
760
 
1 www 761
                $dataPost = (array) $form->getData();
5992 stevensc 762
 
1 www 763
                $hydrator = new ObjectPropertyHydrator();
764
                $hydrator->hydrate($dataPost, $company);
5992 stevensc 765
 
1 www 766
                $companyMapper->updateSocialNetwork($company);
767
                return new JsonModel([
768
                    'success'   => true,
769
                    'data' => [
770
                        'facebook' => $company->facebook,
771
                        'instagram' => $company->instagram,
772
                        'twitter' => $company->twitter
773
                    ]
774
                ]);
775
            } else {
776
                $messages = [];
777
                $form_messages = (array) $form->getMessages();
5992 stevensc 778
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 779
                    $messages[$fieldname] = array_values($field_messages);
780
                }
5992 stevensc 781
 
1 www 782
                return new JsonModel([
783
                    'success'   => false,
784
                    'data'   => $messages
785
                ]);
786
            }
787
        }
5992 stevensc 788
 
789
 
1 www 790
        $data = [
791
            'success' => false,
792
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
793
        ];
5992 stevensc 794
 
795
 
1 www 796
        return new JsonModel($data);
797
    }
5992 stevensc 798
 
799
 
800
 
1 www 801
    /**
17291 ariadna 802
     * Maneja las operaciones de imagen para un perfil de empresa, incluyendo carga y eliminación.
803
     *
1 www 804
     * @return \Laminas\View\Model\JsonModel
805
     */
806
    public function imageAction()
807
    {
17291 ariadna 808
        // Recuperar la información del usuario y la empresa actual
1 www 809
        $currentUserPlugin = $this->plugin('currentUserPlugin');
810
        $currentUser = $currentUserPlugin->getUser();
811
        $currentCompany = $currentUserPlugin->getCompany();
5992 stevensc 812
 
17291 ariadna 813
        // Determinar el tipo de operación (carga o eliminación)
1 www 814
        $operation  = $this->params()->fromRoute('operation');
815
 
17291 ariadna 816
        // Obtener el objeto de solicitud
817
        $request = $this->getRequest();
818
        if ($request->isPost()) {
1 www 819
 
17291 ariadna 820
            // Inicializar almacenamiento y rutas para imágenes de empresa y usuario
821
            $storage = Storage::getInstance($this->config, $this->adapter);
822
            $target_company_path = $storage->getPathCompany();
823
            $target_user_path = $storage->getPathUser();
5992 stevensc 824
 
17291 ariadna 825
            // Obtener los detalles de la empresa actual
1 www 826
            $companyMapper = CompanyMapper::getInstance($this->adapter);
827
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 828
 
17291 ariadna 829
            // Manejar la operación de eliminación
5992 stevensc 830
            if ($operation == 'delete') {
831
                $this->logger->info('Se borro la imagen de la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
832
 
17291 ariadna 833
                // Verificar si la empresa tiene una imagen e intentar eliminarla
5992 stevensc 834
                if ($company->image) {
835
 
17291 ariadna 836
                    // Si la eliminación falla, devolver una respuesta de error
837
                    if (!$storage->deleteFile($target_company_path, $company->uuid, $company->image)) {
1 www 838
                        return new JsonModel([
839
                            'success'   => false,
840
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
841
                        ]);
842
                    }
843
                }
5992 stevensc 844
 
17291 ariadna 845
                // Limpiar el campo de imagen en el registro de la empresa
1 www 846
                $company->image = '';
5992 stevensc 847
                if (!$companyMapper->updateImage($company)) {
1 www 848
                    return new JsonModel([
849
                        'success'   => false,
850
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
851
                    ]);
852
                }
17291 ariadna 853
 
854
                // Obtener el propietario de la empresa y actualizar su imagen si es necesario
16766 efrain 855
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
856
                $companyUser = $companyUserMapper->fetchOwnerByCompanyId($company->id);
17291 ariadna 857
 
858
                if ($companyUser) {
16766 efrain 859
                    $userMapper = UserMapper::getInstance($this->adapter);
860
                    $user = $userMapper->fetchOne($companyUser->user_id);
17291 ariadna 861
                    if ($user) {
17002 efrain 862
 
17291 ariadna 863
                        // Eliminar la imagen del usuario si existe
864
                        if ($user->image) {
865
                            $storage->deleteFile($target_user_path, $user->uuid, $user->image);
16766 efrain 866
                        }
17291 ariadna 867
 
868
                        // Limpiar el campo de imagen del usuario
16766 efrain 869
                        $user->image = '';
870
                        $userMapper->updateImage($user);
17291 ariadna 871
 
872
                        // Actualizar el nombre del usuario si difiere del nombre de la empresa
873
                        if ($company->name != $user->first_name) {
16766 efrain 874
                            $user->first_name = $company->name;
875
                            $user->last_name = '';
876
                            $userMapper->updateFirstNameAndLastName($user);
877
                        }
878
                    }
879
                }
1 www 880
            } else {
17291 ariadna 881
                // Manejar la operación de carga de imagen
17002 efrain 882
                $form = new ProfileImageForm($this->config);
5992 stevensc 883
                $data     = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
1 www 884
 
885
                $form->setData($data);
5992 stevensc 886
 
17291 ariadna 887
                // Validar los datos del formulario
5992 stevensc 888
                if ($form->isValid()) {
889
 
17291 ariadna 890
                    // Verificar errores de carga de archivos
1 www 891
                    $files = $request->getFiles()->toArray();
5992 stevensc 892
                    if (!empty($files['image']['error'])) {
893
 
1 www 894
                        return new JsonModel([
895
                            'success'   => false,
896
                            'data'   =>  'ERROR_UPLOAD_FILE'
897
                        ]);
898
                    }
5992 stevensc 899
 
17291 ariadna 900
                    // Inicializar el procesamiento de imágenes
901
                    $storage = Storage::getInstance($this->config, $this->adapter);
902
                    $target_company_path = $storage->getPathCompany();
903
                    $target_user_path = $storage->getPathUser();
5992 stevensc 904
 
17291 ariadna 905
                    // Eliminar la imagen existente de la empresa si está presente
5992 stevensc 906
                    if ($company->image) {
17291 ariadna 907
                        if (!$storage->deleteFile($target_company_path, $company->uuid, $company->image)) {
1 www 908
                            return new JsonModel([
909
                                'success'   => false,
910
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
911
                            ]);
912
                        }
5992 stevensc 913
                    }
1 www 914
 
17292 ariadna 915
                    $storage->setFiles($request->getFiles()->toArray());
1 www 916
 
17292 ariadna 917
                    // Verificar y establecer el nombre de archivo actual
918
                    if (!$storage->setCurrentFilename('image')) {
919
                        return new JsonModel([
920
                            'success'   => false,
921
                            'data'   => 'ERROR_UPLOAD_FILE'
922
                        ]);
923
                    }
924
 
925
 
17291 ariadna 926
                    // Obtener dimensiones objetivo para el redimensionamiento
927
                    list($target_width_str, $target_height_str) = explode('x', $this->config['leaderslinked.image_sizes.company_image_size']);
928
                    $target_width = (int)$target_width_str;
929
                    $target_height = (int)$target_height_str;
930
 
931
                    // Generar nombres de archivo únicos
932
                    $source    = $storage->getTmpFilename();
933
                    $filename           = 'company-image-' . uniqid() . '.png';
934
                    $target_filename    = $storage->composePathToFilename(Storage::TYPE_USER, $company->uuid, $filename);
935
 
936
                    // Subir y redimensionar la imagen
937
                    if (!$storage->uploadImageResize($source, $target_filename, $target_width, $target_height)) {
938
                        return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
1 www 939
                    }
5992 stevensc 940
 
17291 ariadna 941
                    // Eliminar la imagen anterior si existe
942
                    if ($company->image) {
943
                        if (!$storage->deleteFile($target_company_path, $company->uuid, $company->image)) {
944
                            return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
945
                        }
946
                    }
5992 stevensc 947
 
17291 ariadna 948
 
949
                    // Actualizar el perfil con la nueva imagen
1 www 950
                    $company->image = $target_filename;
5992 stevensc 951
                    if (!$companyMapper->updateImage($company)) {
17291 ariadna 952
                        return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
1 www 953
                    }
17291 ariadna 954
 
955
                    // Actualizar la imagen del propietario si es necesario
16766 efrain 956
                    $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
957
                    $companyUser = $companyUserMapper->fetchOwnerByCompanyId($company->id);
17291 ariadna 958
 
959
                    if ($companyUser) {
16766 efrain 960
                        $userMapper = UserMapper::getInstance($this->adapter);
961
                        $user = $userMapper->fetchOne($companyUser->user_id);
17291 ariadna 962
 
963
                        $main_company_filename = 'comany-' . uniqid() . '.png';
964
                        $target_filename_main_company = $storage->composePathToFilename(Storage::TYPE_USER, $user->uuid, $main_company_filename);
965
 
966
                        if ($user) {
967
 
968
                            // Eliminar la imagen existente del usuario si está presente
969
                            if ($user->image) {
970
                                $storage->deleteFile($target_user_path, $user->uuid, $user->image);
16766 efrain 971
                            }
17291 ariadna 972
 
973
                            // Copiar la imagen del perfil para la imagen principal
974
                            if (!$storage->copyFile($target_filename, $target_filename_main_company)) {
975
                                return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
16766 efrain 976
                            }
17291 ariadna 977
 
978
                            // Eliminar la imagen principal anterior si existe
979
                            if ($currentUser->image) {
980
                                if (!$storage->deleteFile($target_company_path, $user->uuid, $currentUser->image)) {
981
                                    return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
982
                                }
16766 efrain 983
                            }
17291 ariadna 984
 
985
                            // Actualizar la imagen principal del usuario
986
                            $currentUser->image = $main_company_filename;
987
                            if (!$userMapper->updateImage($currentUser)) {
988
                                return $this->_createSimpleErrorResponse('ERROR_THERE_WAS_AN_ERROR');
989
                            }
990
 
991
                            // Actualizar el nombre del usuario si difiere del nombre de la empresa
992
                            if ($company->name != $user->first_name) {
16766 efrain 993
                                $user->first_name = $company->name;
994
                                $user->last_name = '';
995
                                $userMapper->updateFirstNameAndLastName($user);
996
                            }
997
                        }
998
                    }
5992 stevensc 999
 
17291 ariadna 1000
                    // Registrar la actualización de la imagen
5992 stevensc 1001
                    $this->logger->info('Se actualizo la imagen de la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 www 1002
                } else {
17291 ariadna 1003
                    // Manejar errores de validación del formulario
1 www 1004
                    $messages = [];
1005
                    $form_messages = (array) $form->getMessages();
5992 stevensc 1006
                    foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1007
                        $messages[$fieldname] = array_values($field_messages);
1008
                    }
5992 stevensc 1009
 
1 www 1010
                    return new JsonModel([
1011
                        'success'   => false,
1012
                        'data'   => $messages
1013
                    ]);
1014
                }
1015
            }
17291 ariadna 1016
 
17018 efrain 1017
            $storage = Storage::getInstance($this->config, $this->adapter);
17291 ariadna 1018
 
1 www 1019
            return new JsonModel([
1020
                'success'   => true,
17293 ariadna 1021
                'data' => $storage->getCompanyImage($company)
5992 stevensc 1022
 
1 www 1023
            ]);
1024
        }
1025
 
17291 ariadna 1026
        // Devolver error si el método de solicitud no está permitido
1 www 1027
        $data = [
1028
            'success' => false,
1029
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1030
        ];
5992 stevensc 1031
 
1 www 1032
        return new JsonModel($data);
1033
    }
5992 stevensc 1034
 
1 www 1035
    /**
1036
     * Cambio de la imagen de fondo superior (cover) del perfil
1037
     * @return \Laminas\View\Model\JsonModel
1038
     */
1039
    public function coverAction()
1040
    {
1041
        $operation          = $this->params()->fromRoute('operation');
1042
 
5992 stevensc 1043
 
1 www 1044
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1045
        $currentUser = $currentUserPlugin->getUser();
1046
        $currentCompany = $currentUserPlugin->getCompany();
1047
 
5992 stevensc 1048
 
1049
 
1050
 
1 www 1051
        $request = $this->getRequest();
5992 stevensc 1052
        if ($request->isPost()) {
17291 ariadna 1053
 
17002 efrain 1054
            $image = Image::getInstance($this->config);
1055
            $target_path = $image->getStorage()->getPathCompany();
5992 stevensc 1056
 
1 www 1057
            $companyMapper = CompanyMapper::getInstance($this->adapter);
1058
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 1059
 
1 www 1060
            $target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $company->uuid;
1061
 
5992 stevensc 1062
 
1063
 
17291 ariadna 1064
 
5992 stevensc 1065
            if ($operation == 'delete') {
1066
                if ($company->cover) {
1067
 
17002 efrain 1068
                    if (!$image->getStorage()->deleteFile($target_path, $company->uuid, $company->cover)) {
1 www 1069
                        return new JsonModel([
1070
                            'success'   => false,
1071
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1072
                        ]);
1073
                    }
1074
                }
5992 stevensc 1075
 
1 www 1076
                $this->logger->info('Se borro el cover de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1077
                $company->cover = '';
5992 stevensc 1078
                if (!$companyMapper->updateCover($company)) {
1 www 1079
                    return new JsonModel([
1080
                        'success'   => false,
1081
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1082
                    ]);
1083
                }
1084
            } else {
17002 efrain 1085
                $form = new ProfileCoverForm($this->config);
5992 stevensc 1086
                $data     = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
1087
 
1 www 1088
                $form->setData($data);
1089
 
5992 stevensc 1090
                if ($form->isValid()) {
1091
 
1092
 
1 www 1093
                    $files = $request->getFiles()->toArray();
5992 stevensc 1094
                    if (!empty($files['cover']['error'])) {
1095
 
1 www 1096
                        return new JsonModel([
1097
                            'success'   => false,
1098
                            'data'   =>  'ERROR_UPLOAD_FILE'
1099
                        ]);
1100
                    }
5992 stevensc 1101
 
1102
                    if ($company->cover) {
1103
 
1104
                        if (!Image::delete($target_path, $company->cover)) {
1 www 1105
                            return new JsonModel([
1106
                                'success'   => false,
1107
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1108
                            ]);
1109
                        }
1110
                    }
5992 stevensc 1111
 
1112
                    list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.company_cover_size']);
1 www 1113
                    $source             = $files['cover']['tmp_name'];
1114
                    $target_filename    = 'company-cover-' . uniqid() . '.png';
1115
                    $crop_to_dimensions = false;
17002 efrain 1116
                    $unlink_source = true;
17291 ariadna 1117
 
1118
                    if ($image->uploadProcessChangeSize($source, $target_path, $company->uuid, $target_filename, $target_width, $target_height, $crop_to_dimensions, $unlink_source)) {
1 www 1119
                        return new JsonModel([
1120
                            'success'   => false,
1121
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1122
                        ]);
1123
                    }
5992 stevensc 1124
 
1125
 
1 www 1126
                    $company->cover = $target_filename;
5992 stevensc 1127
                    if (!$companyMapper->updateCover($company)) {
1 www 1128
                        return new JsonModel([
1129
                            'success'   => false,
1130
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1131
                        ]);
1132
                    }
1133
 
1134
 
5992 stevensc 1135
 
1136
 
1 www 1137
                    $this->logger->info('Se actualizo el cover  de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1138
                } else {
1139
                    $messages = [];
1140
                    $form_messages = (array) $form->getMessages();
5992 stevensc 1141
                    foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1142
                        $messages[$fieldname] = array_values($field_messages);
1143
                    }
5992 stevensc 1144
 
1 www 1145
                    return new JsonModel([
1146
                        'success'   => false,
1147
                        'data'   => $messages
1148
                    ]);
1149
                }
1150
            }
17291 ariadna 1151
 
17018 efrain 1152
            $storage = Storage::getInstance($this->config, $this->adapter);
17291 ariadna 1153
 
1154
 
1 www 1155
            return new JsonModel([
1156
                'success'   => true,
17002 efrain 1157
                'data' => $storage->getCompanyCover($company)
5992 stevensc 1158
 
1 www 1159
            ]);
1160
        }
5992 stevensc 1161
 
1162
 
1 www 1163
        $data = [
1164
            'success' => false,
1165
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1166
        ];
5992 stevensc 1167
 
1168
 
1 www 1169
        return new JsonModel($data);
1170
    }
768 geraldo 1171
 
1172
 
1173
 
5992 stevensc 1174
    /**
768 geraldo 1175
     * Cambio de la imagen de de la cabecera de los reportes
1176
     * @return \Laminas\View\Model\JsonModel
1177
     */
1178
    public function headerAction()
1179
    {
1180
        $operation = $this->params()->fromRoute('operation');
1181
 
5992 stevensc 1182
 
768 geraldo 1183
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1184
        $currentUser = $currentUserPlugin->getUser();
1185
        $currentCompany = $currentUserPlugin->getCompany();
1186
 
5992 stevensc 1187
 
1188
 
1189
 
768 geraldo 1190
        $request = $this->getRequest();
5992 stevensc 1191
        if ($request->isPost()) {
1192
 
768 geraldo 1193
            $companyMapper = CompanyMapper::getInstance($this->adapter);
1194
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 1195
 
17002 efrain 1196
            $image = Image::getInstance($this->config);
1197
            $target_path = $image->getStorage()->getPathCompany();
768 geraldo 1198
 
5992 stevensc 1199
 
1200
 
1201
            if ($operation == 'delete') {
1202
                if ($company->header) {
1203
 
17002 efrain 1204
                    if (!$image->getStorage()->deleteFile($target_path, $company->uuid, $company->header)) {
768 geraldo 1205
                        return new JsonModel([
1206
                            'success'   => false,
1207
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1208
                        ]);
1209
                    }
1210
                }
5992 stevensc 1211
 
768 geraldo 1212
                $this->logger->info('Se borro el header  de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1213
                $company->header = '';
5992 stevensc 1214
                if (!$companyMapper->updateHeader($company)) {
768 geraldo 1215
                    return new JsonModel([
1216
                        'success'   => false,
1217
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1218
                    ]);
1219
                }
1220
            } else {
17002 efrain 1221
                $form = new ProfileHeaderForm($this->config);
768 geraldo 1222
                $data   = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
5992 stevensc 1223
 
768 geraldo 1224
                $form->setData($data);
1225
 
5992 stevensc 1226
                if ($form->isValid()) {
1227
 
1228
 
768 geraldo 1229
                    $files = $request->getFiles()->toArray();
5992 stevensc 1230
                    if (!empty($files['header']['error'])) {
1231
 
768 geraldo 1232
                        return new JsonModel([
1233
                            'success'   => false,
1234
                            'data'   =>  'ERROR_UPLOAD_FILE'
1235
                        ]);
1236
                    }
5992 stevensc 1237
 
1238
                    if ($company->header) {
1239
 
17002 efrain 1240
                        if (!$image->getStorage()->deleteFile($target_path, $company->uuid, $company->header)) {
768 geraldo 1241
                            return new JsonModel([
1242
                                'success'   => false,
1243
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1244
                            ]);
1245
                        }
1246
                    }
5992 stevensc 1247
 
1248
                    list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.company_header_pdf_size']);
768 geraldo 1249
                    $source             = $files['header']['tmp_name'];
1250
                    $target_filename    = 'company-header-' . uniqid() . '.png';
1251
                    $crop_to_dimensions = false;
17002 efrain 1252
                    $unlink_source = true;
17291 ariadna 1253
 
1254
                    if ($image->uploadProcessChangeSize($source, $target_path, $company->uuid, $target_filename, $target_width, $target_height, $crop_to_dimensions, $unlink_source)) {
768 geraldo 1255
                        return new JsonModel([
1256
                            'success'   => false,
1257
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1258
                        ]);
1259
                    }
5992 stevensc 1260
 
1261
 
768 geraldo 1262
                    $company->header = $target_filename;
5992 stevensc 1263
                    if (!$companyMapper->updateHeader($company)) {
768 geraldo 1264
                        return new JsonModel([
1265
                            'success'   => false,
1266
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1267
                        ]);
1268
                    }
5992 stevensc 1269
 
1270
 
768 geraldo 1271
                    $this->logger->info('Se actualizo el header  de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1272
                } else {
1273
                    $messages = [];
1274
                    $form_messages = (array) $form->getMessages();
5992 stevensc 1275
                    foreach ($form_messages  as $fieldname => $field_messages) {
768 geraldo 1276
                        $messages[$fieldname] = array_values($field_messages);
1277
                    }
5992 stevensc 1278
 
768 geraldo 1279
                    return new JsonModel([
1280
                        'success'   => false,
1281
                        'data'   => $messages
1282
                    ]);
1283
                }
1284
            }
17291 ariadna 1285
 
17018 efrain 1286
            $storage = Storage::getInstance($this->config, $this->adapter);
17002 efrain 1287
            $path = $storage->getPathCompany();
17291 ariadna 1288
 
768 geraldo 1289
            return new JsonModel([
1290
                'success'   => true,
17002 efrain 1291
                'data' => $company->header ? $storage->getGenericImage($path, $company->uuid, $company->header) : '',
5992 stevensc 1292
 
768 geraldo 1293
            ]);
1294
        }
5992 stevensc 1295
 
1296
 
768 geraldo 1297
        $data = [
1298
            'success' => false,
1299
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1300
        ];
5992 stevensc 1301
 
1302
 
768 geraldo 1303
        return new JsonModel($data);
1304
    }
1305
 
1306
 
5992 stevensc 1307
    /**
768 geraldo 1308
     * Cambio de la imagen de de la cabecera de los reportes
1309
     * @return \Laminas\View\Model\JsonModel
1310
     */
1311
    public function footerAction()
1312
    {
1313
        $operation          = $this->params()->fromRoute('operation');
1314
 
5992 stevensc 1315
 
768 geraldo 1316
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1317
        $currentUser = $currentUserPlugin->getUser();
1318
        $currentCompany = $currentUserPlugin->getCompany();
1319
 
5992 stevensc 1320
 
1321
 
1322
 
768 geraldo 1323
        $request = $this->getRequest();
5992 stevensc 1324
        if ($request->isPost()) {
1325
 
768 geraldo 1326
            $companyMapper = CompanyMapper::getInstance($this->adapter);
1327
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 1328
 
17002 efrain 1329
            $image = Image::getInstance($this->config);
1330
            $target_path = $image->getStorage()->getPathCompany();
768 geraldo 1331
 
5992 stevensc 1332
 
1333
 
1334
            if ($operation == 'delete') {
1335
                if ($company->footer) {
1336
 
17002 efrain 1337
                    if (!$image->getStorage()->deleteFile($target_path, $company->uuid, $company->footer)) {
768 geraldo 1338
                        return new JsonModel([
1339
                            'success'   => false,
1340
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1341
                        ]);
1342
                    }
1343
                }
5992 stevensc 1344
 
768 geraldo 1345
                $this->logger->info('Se borro el footer  de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1346
                $company->footer = '';
5992 stevensc 1347
                if (!$companyMapper->updateFooter($company)) {
768 geraldo 1348
                    return new JsonModel([
1349
                        'success'   => false,
1350
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1351
                    ]);
1352
                }
1353
            } else {
17002 efrain 1354
                $form = new ProfileFooterForm($this->config);
768 geraldo 1355
                $data   = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
5992 stevensc 1356
 
768 geraldo 1357
                $form->setData($data);
1358
 
5992 stevensc 1359
                if ($form->isValid()) {
1360
 
1361
 
768 geraldo 1362
                    $files = $request->getFiles()->toArray();
5992 stevensc 1363
                    if (!empty($files['footer']['error'])) {
1364
 
768 geraldo 1365
                        return new JsonModel([
1366
                            'success'   => false,
1367
                            'data'   =>  'ERROR_UPLOAD_FILE'
1368
                        ]);
1369
                    }
5992 stevensc 1370
 
1371
                    if ($company->footer) {
1372
 
17002 efrain 1373
                        if (!$image->getStorage()->deleteFile($target_path, $company->uuid, $company->footer)) {
768 geraldo 1374
                            return new JsonModel([
1375
                                'success'   => false,
1376
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1377
                            ]);
1378
                        }
1379
                    }
5992 stevensc 1380
 
1381
                    list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.company_footer_pdf_size']);
768 geraldo 1382
                    $source             = $files['footer']['tmp_name'];
1383
                    $target_filename    = 'company-footer-' . uniqid() . '.png';
1384
                    $crop_to_dimensions = false;
17002 efrain 1385
                    $unlink_source = true;
17291 ariadna 1386
 
1387
                    if ($image->uploadProcessChangeSize($source, $target_path, $company->uuid, $target_filename, $target_width, $target_height, $crop_to_dimensions, $unlink_source)) {
768 geraldo 1388
                        return new JsonModel([
1389
                            'success'   => false,
1390
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1391
                        ]);
1392
                    }
5992 stevensc 1393
 
1394
 
768 geraldo 1395
                    $company->footer = $target_filename;
5992 stevensc 1396
                    if (!$companyMapper->updateFooter($company)) {
768 geraldo 1397
                        return new JsonModel([
1398
                            'success'   => false,
1399
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1400
                        ]);
1401
                    }
1402
 
1403
 
5992 stevensc 1404
 
1405
 
768 geraldo 1406
                    $this->logger->info('Se actualizo el footer  de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1407
                } else {
1408
                    $messages = [];
1409
                    $form_messages = (array) $form->getMessages();
5992 stevensc 1410
                    foreach ($form_messages  as $fieldname => $field_messages) {
768 geraldo 1411
                        $messages[$fieldname] = array_values($field_messages);
1412
                    }
5992 stevensc 1413
 
768 geraldo 1414
                    return new JsonModel([
1415
                        'success'   => false,
1416
                        'data'   => $messages
1417
                    ]);
1418
                }
1419
            }
17291 ariadna 1420
 
17018 efrain 1421
            $storage = Storage::getInstance($this->config, $this->adapter);
17002 efrain 1422
            $path = $storage->getPathCompany();
17291 ariadna 1423
 
768 geraldo 1424
            return new JsonModel([
1425
                'success'   => true,
17002 efrain 1426
                'data' => $company->footer ? $storage->getGenericImage($path, $company->uuid, $company->footer) : '',
5992 stevensc 1427
 
768 geraldo 1428
            ]);
1429
        }
5992 stevensc 1430
 
1431
 
768 geraldo 1432
        $data = [
1433
            'success' => false,
1434
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1435
        ];
5992 stevensc 1436
 
1437
 
768 geraldo 1438
        return new JsonModel($data);
1439
    }
5992 stevensc 1440
 
1 www 1441
    /**
1442
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
1443
     * @return \Laminas\View\Model\JsonModel
1444
     */
1445
    public function industryAction()
1446
    {
5992 stevensc 1447
 
1 www 1448
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1449
        $currentUser = $currentUserPlugin->getUser();
1450
        $currentCompany = $currentUserPlugin->getCompany();
1451
 
5992 stevensc 1452
 
1453
 
1454
 
1455
 
1456
 
1 www 1457
        $request = $this->getRequest();
5992 stevensc 1458
        if ($request->isGet()) {
1 www 1459
            $companyMapper = CompanyMapper::getInstance($this->adapter);
1460
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 1461
 
8367 efrain 1462
            $industries = [];
1 www 1463
            $industryMapper = IndustryMapper::getInstance($this->adapter);
15087 efrain 1464
            $records = $industryMapper->fetchAllActive();
17291 ariadna 1465
 
1466
            foreach ($records as $record) {
8367 efrain 1467
                $industries[$record->uuid] = $record->name;
1468
            }
17291 ariadna 1469
 
1 www 1470
            $industry = $industryMapper->fetchOne($company->industry_id);
5992 stevensc 1471
 
17291 ariadna 1472
 
1473
 
1474
 
1 www 1475
            $data = [
1476
                'success' => true,
1477
                'data' => [
1478
                    'industry_id' => $industry->uuid,
8367 efrain 1479
                    'industries' => $industries
1 www 1480
                ]
1481
            ];
5992 stevensc 1482
 
1 www 1483
            return new JsonModel($data);
5992 stevensc 1484
        } else if ($request->isPost()) {
1485
 
1486
 
17291 ariadna 1487
 
17002 efrain 1488
            $form = new ProfileIndustryForm($this->adapter);
1 www 1489
            $dataPost = $request->getPost()->toArray();
5992 stevensc 1490
 
1 www 1491
            $form->setData($dataPost);
5992 stevensc 1492
 
1493
            if ($form->isValid()) {
1 www 1494
                $companyMapper = CompanyMapper::getInstance($this->adapter);
1495
                $company = $companyMapper->fetchOne($currentCompany->id);
1496
 
1497
                $dataPost = (array) $form->getData();
5992 stevensc 1498
 
1 www 1499
                $industryMapper = IndustryMapper::getInstance($this->adapter);
1500
                $industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);
5992 stevensc 1501
 
1 www 1502
                $company->industry_id = $industry->id;
1503
                $companyMapper->updateIndustry($company);
5992 stevensc 1504
 
1 www 1505
                $this->logger->info('Se actualizo la industria de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5992 stevensc 1506
 
1 www 1507
                $industryMapper = IndustryMapper::getInstance($this->adapter);
1508
                $industry = $industryMapper->fetchOne($company->industry_id);
5992 stevensc 1509
 
1 www 1510
                return new JsonModel([
1511
                    'success'   => true,
1512
                    'data' =>  $industry->name,
5992 stevensc 1513
 
1 www 1514
                ]);
1515
            } else {
17291 ariadna 1516
 
1 www 1517
                $messages = [];
1518
                $form_messages = (array) $form->getMessages();
5992 stevensc 1519
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1520
                    $messages[$fieldname] = array_values($field_messages);
1521
                }
5992 stevensc 1522
 
1 www 1523
                return new JsonModel([
1524
                    'success'   => false,
1525
                    'data'   => $messages
1526
                ]);
1527
            }
1528
        }
5992 stevensc 1529
 
1530
 
1 www 1531
        $data = [
1532
            'success' => false,
1533
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1534
        ];
5992 stevensc 1535
 
1536
 
1 www 1537
        return new JsonModel($data);
1538
    }
5992 stevensc 1539
 
1 www 1540
    /**
1541
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
1542
     * @return \Laminas\View\Model\JsonModel
1543
     */
1544
    public function companySizeAction()
1545
    {
1546
 
1547
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1548
        $currentUser = $currentUserPlugin->getUser();
1549
        $currentCompany = $currentUserPlugin->getCompany();
1550
 
1551
 
5992 stevensc 1552
 
1553
 
1 www 1554
        $request = $this->getRequest();
5992 stevensc 1555
        if ($request->isGet()) {
1 www 1556
            $companyMapper = CompanyMapper::getInstance($this->adapter);
1557
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 1558
 
8367 efrain 1559
            $companySizes = [];
17291 ariadna 1560
 
1 www 1561
            $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
15087 efrain 1562
            $records = $companySizeMapper->fetchAllActive();
17291 ariadna 1563
 
1564
            foreach ($records as $record) {
8367 efrain 1565
                $companySizes[$record->uuid] = $record->name . ' (' . $record->minimum_no_of_employee . '-' . $record->maximum_no_of_employee . ')';
1566
            }
17291 ariadna 1567
 
1568
 
1 www 1569
            $companySize = $companySizeMapper->fetchOne($company->company_size_id);
5992 stevensc 1570
 
1 www 1571
            $data = [
1572
                'success' => true,
1573
                'data' => [
8367 efrain 1574
                    'company_size_id' => $companySize->uuid,
1575
                    'company_sizes' => $companySizes
1 www 1576
                ]
1577
            ];
5992 stevensc 1578
 
1 www 1579
            return new JsonModel($data);
5992 stevensc 1580
        } else if ($request->isPost()) {
1581
 
1582
 
17002 efrain 1583
            $form = new ProfileCompanySizeForm($this->adapter);
1 www 1584
            $dataPost = $request->getPost()->toArray();
5992 stevensc 1585
 
1 www 1586
            $form->setData($dataPost);
5992 stevensc 1587
 
1588
            if ($form->isValid()) {
1 www 1589
                $companyMapper = CompanyMapper::getInstance($this->adapter);
1590
                $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 1591
 
1 www 1592
                $dataPost = (array) $form->getData();
5992 stevensc 1593
 
1 www 1594
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
1595
                $companySize = $companySizeMapper->fetchOneByUuid($dataPost['company_size_id']);
5992 stevensc 1596
 
1 www 1597
                $company->company_size_id = $companySize->id;
14816 efrain 1598
                $companyMapper->updateCompanySize($company);
5992 stevensc 1599
 
1 www 1600
                $this->logger->info('Se actualizo la industria de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5992 stevensc 1601
 
1 www 1602
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
1603
                $companySize = $companySizeMapper->fetchOne($company->company_size_id);
5992 stevensc 1604
 
1 www 1605
                return new JsonModel([
1606
                    'success'   => true,
5992 stevensc 1607
                    'data' => $companySize->name . ' (' . $companySize->minimum_no_of_employee . '-' . $companySize->maximum_no_of_employee . ')',
1608
 
1 www 1609
                ]);
1610
            } else {
1611
                $messages = [];
1612
                $form_messages = (array) $form->getMessages();
5992 stevensc 1613
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1614
                    $messages[$fieldname] = array_values($field_messages);
1615
                }
5992 stevensc 1616
 
1 www 1617
                return new JsonModel([
1618
                    'success'   => false,
1619
                    'data'   => $messages
1620
                ]);
1621
            }
1622
        }
5992 stevensc 1623
 
1624
 
1 www 1625
        $data = [
1626
            'success' => false,
1627
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1628
        ];
5992 stevensc 1629
 
1630
 
1 www 1631
        return new JsonModel($data);
1632
    }
17291 ariadna 1633
 
1634
    private function _createSimpleErrorResponse($errorMessageKey)
1635
    {
1636
        return new JsonModel([
1637
            'success' => false,
1638
            'data'    => $errorMessageKey
1639
        ]);
1640
    }
1 www 1641
}