Proyectos de Subversion LeadersLinked - Backend

Rev

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