Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
4384 eleazar 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
16768 efrain 8
 
4384 eleazar 9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
4579 eleazar 11
use Laminas\View\Model\ViewModel;
4384 eleazar 12
use Laminas\View\Model\JsonModel;
5027 efrain 13
use LeadersLinked\Library\Functions;
4579 eleazar 14
use LeadersLinked\Mapper\SurveyMapper;
4678 eleazar 15
use LeadersLinked\Mapper\SurveyFormMapper;
4883 eleazar 16
use LeadersLinked\Mapper\SurveyJobDescriptionMapper;
17
use LeadersLinked\Mapper\SurveyIndustryMapper;
5074 eleazar 18
use LeadersLinked\Mapper\SurveySkillMapper;
4883 eleazar 19
use LeadersLinked\Mapper\SurveyLocationMapper;
5074 eleazar 20
use LeadersLinked\Mapper\SurveyLanguageMapper;
4855 eleazar 21
use LeadersLinked\Mapper\IndustryMapper;
22
use LeadersLinked\Mapper\JobDescriptionMapper;
5074 eleazar 23
use LeadersLinked\Mapper\LanguageMapper;
24
use LeadersLinked\Mapper\SkillMapper;
4579 eleazar 25
use LeadersLinked\Form\SurveyForm;
26
use LeadersLinked\Model\Survey;
27
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
5026 efrain 28
use LeadersLinked\Model\SurveyJobDescription;
5074 eleazar 29
use LeadersLinked\Model\SurveySkill;
5027 efrain 30
use LeadersLinked\Model\SurveyIndustry;
5074 eleazar 31
use LeadersLinked\Model\SurveyLanguage;
6376 eleazar 32
use LeadersLinked\Model\SurveyLocation;
4384 eleazar 33
 
34
class SurveyController extends AbstractActionController {
35
 
36
    /**
37
     *
16769 efrain 38
     * @var \Laminas\Db\Adapter\AdapterInterface
4384 eleazar 39
     */
40
    private $adapter;
16768 efrain 41
 
4384 eleazar 42
    /**
43
     *
16769 efrain 44
     * @var \LeadersLinked\Cache\CacheInterface
4384 eleazar 45
     */
16769 efrain 46
    private $cache;
47
 
48
 
49
    /**
50
     *
51
     * @var \Laminas\Log\LoggerInterface
52
     */
4384 eleazar 53
    private $logger;
16768 efrain 54
 
4384 eleazar 55
    /**
56
     *
57
     * @var array
58
     */
59
    private $config;
16768 efrain 60
 
16769 efrain 61
 
4384 eleazar 62
    /**
63
     *
16769 efrain 64
     * @var \Laminas\Mvc\I18n\Translator
65
     */
66
    private $translator;
67
 
68
 
69
    /**
70
     *
71
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
72
     * @param \LeadersLinked\Cache\CacheInterface $cache
73
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
4384 eleazar 74
     * @param array $config
16769 efrain 75
     * @param \Laminas\Mvc\I18n\Translator $translator
4384 eleazar 76
     */
16769 efrain 77
    public function __construct($adapter, $cache, $logger, $config, $translator)
16768 efrain 78
    {
16769 efrain 79
        $this->adapter      = $adapter;
80
        $this->cache        = $cache;
81
        $this->logger       = $logger;
82
        $this->config       = $config;
83
        $this->translator   = $translator;
4384 eleazar 84
    }
85
 
86
    public function indexAction() {
4579 eleazar 87
        $request = $this->getRequest();
88
        $currentUserPlugin = $this->plugin('currentUserPlugin');
89
        $currentCompany = $currentUserPlugin->getCompany();
90
        $currentUser = $currentUserPlugin->getUser();
4384 eleazar 91
 
4579 eleazar 92
 
93
        $request = $this->getRequest();
94
        if ($request->isGet()) {
6341 eleazar 95
            $sandbox = $this->config['leaderslinked.runmode.sandbox'];
96
            if($sandbox) {
97
                $google_map_key  = $this->config['leaderslinked.google_map.sandbox_api_key'];
98
            } else {
99
                $google_map_key  = $this->config['leaderslinked.google_map.production_api_key'];
100
            }
4579 eleazar 101
 
102
            $headers = $request->getHeaders();
103
 
104
            $isJson = false;
105
            if ($headers->has('Accept')) {
106
                $accept = $headers->get('Accept');
107
 
108
                $prioritized = $accept->getPrioritized();
109
 
110
                foreach ($prioritized as $key => $value) {
111
                    $raw = trim($value->getRaw());
112
 
113
                    if (!$isJson) {
114
                        $isJson = strpos($raw, 'json');
115
                    }
116
                }
117
            }
118
 
119
            if ($isJson) {
120
                $search = $this->params()->fromQuery('search', []);
16766 efrain 121
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
4579 eleazar 122
 
15371 efrain 123
                $start = intval($this->params()->fromQuery('start', 0), 10);
4579 eleazar 124
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
15371 efrain 125
                $page =  intval($start / $records_x_page);
126
                $page++;
127
 
4579 eleazar 128
                $order = $this->params()->fromQuery('order', []);
129
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
16766 efrain 130
                $order_direction = empty($order[0]['dir']) ? 'ASC' : Functions::sanitizeFilterString(filter_var($order[0]['dir']));
4579 eleazar 131
 
132
                $fields = ['name'];
133
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
134
 
135
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
136
                    $order_direction = 'ASC';
137
                }
138
 
4661 eleazar 139
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
140
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'survey/edit');
141
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'survey/delete');
15150 efrain 142
 
4579 eleazar 143
                $surveyMapper = SurveyMapper::getInstance($this->adapter);
144
                $paginator = $surveyMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
145
 
146
                $items = [];
147
                $records = $paginator->getCurrentItems();
15150 efrain 148
 
149
                $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
150
 
151
                $forms = [];
152
 
4579 eleazar 153
                foreach ($records as $record) {
15150 efrain 154
 
155
                    if(isset($forms[$record->form_id])) {
156
 
157
                        $surveyForm = $forms[$record->form_id];
158
                    } else {
159
                        $surveyForm = $surveyFormMapper->fetchOne($record->form_id);
160
                        $forms[$record->form_id] = $surveyForm;
161
                    }
162
 
163
                    $dtSinceDate = \DateTime::createFromFormat('Y-m-d', $record->since_date);
164
                    $dtLastDate = \DateTime::createFromFormat('Y-m-d', $record->last_date);
165
 
166
 
167
 
4579 eleazar 168
                    $item = [
169
                        'id' => $record->id,
170
                        'name' => $record->name,
4754 eleazar 171
                        'form' => $surveyForm->name,
15150 efrain 172
                        'since_date' => $dtSinceDate->format('d/m/Y'),
173
                        'last_date' => $dtLastDate->format('d/m/Y'),
4579 eleazar 174
                        'status' => $record->status,
175
                        'actions' => [
15150 efrain 176
                            'link_edit' => $allowEdit ? $this->url()->fromRoute('survey/edit', ['id' => $record->uuid]) : '',
177
                            'link_delete' => $allowDelete  ? $this->url()->fromRoute('survey/delete', ['id' => $record->uuid]) : '',
4579 eleazar 178
                        ]
179
                    ];
180
 
181
                    array_push($items, $item);
182
                }
183
 
184
                return new JsonModel([
185
                    'success' => true,
186
                    'data' => [
187
                        'items' => $items,
188
                        'total' => $paginator->getTotalItemCount(),
189
                    ]
190
                ]);
191
            } else {
192
 
193
                $form = new SurveyForm($this->adapter, $currentCompany->id);
194
 
195
                $this->layout()->setTemplate('layout/layout-backend');
196
                $viewModel = new ViewModel();
197
                $viewModel->setTemplate('leaders-linked/survey/index.phtml');
198
                $viewModel->setVariable('form', $form);
6351 eleazar 199
                $viewModel->setVariable('google_map_key', $google_map_key);
4579 eleazar 200
                return $viewModel;
201
            }
202
        } else {
203
            return new JsonModel([
204
                'success' => false,
205
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
206
            ]);
207
        }
4384 eleazar 208
    }
209
 
4579 eleazar 210
    public function addAction() {
211
        $request = $this->getRequest();
212
        $currentUserPlugin = $this->plugin('currentUserPlugin');
213
        $currentCompany = $currentUserPlugin->getCompany();
214
        $currentUser = $currentUserPlugin->getUser();
12030 eleazar 215
 
4579 eleazar 216
        $request = $this->getRequest();
217
 
218
        if ($request->isPost()) {
219
 
220
            $form = new SurveyForm($this->adapter, $currentCompany->id);
4672 eleazar 221
 
4579 eleazar 222
            $dataPost = $request->getPost()->toArray();
4661 eleazar 223
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : SurveyForm::STATUS_INACTIVE;
6659 eleazar 224
 
4579 eleazar 225
            $form->setData($dataPost);
226
 
227
            if ($form->isValid()) {
228
                $dataPost = (array) $form->getData();
229
 
230
                $hydrator = new ObjectPropertyHydrator();
6376 eleazar 231
 
4579 eleazar 232
                $survey = new Survey();
233
                $hydrator->hydrate($dataPost, $survey);
234
 
235
                if (!$survey->status) {
236
                    $survey->status = Survey::STATUS_INACTIVE;
237
                }
238
                $survey->company_id = $currentCompany->id;
239
 
4677 eleazar 240
                $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
241
                $surveyForm = $surveyFormMapper->fetchOneByUuid($dataPost['form_id']);
242
                $survey->form_id = $surveyForm->id;
4579 eleazar 243
 
4724 eleazar 244
                $surveyMapper = SurveyMapper::getInstance($this->adapter);
5150 eleazar 245
                //$result = $surveyMapper->insert($survey);
246
 
247
                if($surveyMapper->insert($survey)) {
248
                    $survey = $surveyMapper->fetchOne($survey->id);
249
 
6627 eleazar 250
                    if(!empty($dataPost['location_search'])){
15150 efrain 251
                                                $record = new SurveyLocation();
252
                        $record->formatted_address = $dataPost['formatted_address'];
253
                        $record->city1 = $dataPost['city1'];
254
                        $record->city2 = $dataPost['city2'];
255
                        $record->address1 = $dataPost['address1'];
256
                        $record->address2 = $dataPost['address2'];
257
                        $record->country = $dataPost['country'];
258
                        $record->latitude = $dataPost['latitude'];
259
                        $record->longitude = $dataPost['longitude'];
260
                        $record->postal_code = $dataPost['postal_code'];
261
                        $record->state = $dataPost['state'];
262
                        $record->survey_id = $survey->id;
263
 
6627 eleazar 264
                        $surveyLocationMapper = SurveyLocationMapper::getInstance($this->adapter);
15150 efrain 265
                        $surveyLocationMapper->insert($record);
6627 eleazar 266
                    }
6376 eleazar 267
 
5150 eleazar 268
                    if(!empty($dataPost['job_description_id'])){
269
                        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
270
                        $surveyJobDescriptionMapper = SurveyJobDescriptionMapper::getInstance($this->adapter);
271
 
15150 efrain 272
                        foreach($dataPost['job_description_id'] as $jobDescriptionUuid)
273
                        {
5150 eleazar 274
                            $jobDescription = $jobDescriptionMapper->fetchOneByUuid($jobDescriptionUuid);
275
                            if($jobDescription && $jobDescription->company_id == $currentCompany->id) {
276
                                $record = new SurveyJobDescription();
277
                                $record->job_description_id = $jobDescription->id;
278
                                $record->survey_id = $survey->id;
279
 
15150 efrain 280
                                $surveyJobDescriptionMapper->insert($record);
5150 eleazar 281
                            }
282
                        }
283
                    }
284
                    if(!empty($dataPost['skill_id'])){
285
                         $skillMapper = SkillMapper::getInstance($this->adapter);
286
                         $surveySkillMapper = SurveySkillMapper::getInstance($this->adapter);
287
 
15150 efrain 288
                         foreach($dataPost['skill_id'] as $skillUuid)
289
                         {
5150 eleazar 290
                             $skill = $skillMapper->fetchOneByUuid($skillUuid);
291
 
15150 efrain 292
                             if($skill) {
5150 eleazar 293
                                $record = new SurveySkill();
294
                                $record->skill_id = $skill->id;
295
                                $record->survey_id = $survey->id;
296
 
15150 efrain 297
                                $surveySkillMapper->insert($record);
298
                            }
5150 eleazar 299
                         }
300
                     }
301
 
302
                    if(!empty($dataPost['industry_id'])){
303
                         $industryMapper = IndustryMapper::getInstance($this->adapter);
304
                         $surveyIndustryMapper = SurveyIndustryMapper::getInstance($this->adapter);
305
 
15150 efrain 306
                         foreach($dataPost['industry_id'] as $industryUuid)
307
                         {
5150 eleazar 308
                             $industry = $industryMapper->fetchOneByUuid($industryUuid);
15150 efrain 309
                             if($industry) {
5150 eleazar 310
                                 $record = new SurveyIndustry();
311
                                 $record->industry_id = $industry->id;
312
                                 $record->survey_id = $survey->id;
313
 
15150 efrain 314
                                 $surveyIndustryMapper->insert($record);
315
                             }
5150 eleazar 316
                         }
317
                     }
318
 
319
                    if(!empty($dataPost['language_id'])){
15150 efrain 320
                        $languageMapper = LanguageMapper::getInstance($this->adapter);
5150 eleazar 321
                        $surveyLanguageMapper = SurveyLanguageMapper::getInstance($this->adapter);
322
 
15150 efrain 323
                        foreach($dataPost['language_id'] as $language_id)
324
                        {
5150 eleazar 325
 
15150 efrain 326
                            $language = $languageMapper->fetchOne($language_id);
327
                            if($language) {
5150 eleazar 328
                                $record = new SurveyLanguage();
329
                                $record->language_id = $language_id;
330
                                $record->survey_id = $survey->id;
331
 
15150 efrain 332
                                $surveyLanguageMapper->insert($record);
333
                            }
5150 eleazar 334
                        }
15150 efrain 335
                    }
5150 eleazar 336
 
337
                    $data = [
338
                        'success' => true,
339
                        'data' => 'LABEL_RECORD_ADDED'
340
                    ];
341
 
342
                } else {
343
                    $data = [
344
                        'success'   => false,
345
                        'data'      => $surveyMapper->getError()
346
                    ];
347
                }
348
 
5383 eleazar 349
 
4579 eleazar 350
                return new JsonModel($data);
351
            } else {
352
                $messages = [];
353
                $form_messages = (array) $form->getMessages();
354
                foreach ($form_messages as $fieldname => $field_messages) {
355
 
356
                    $messages[$fieldname] = array_values($field_messages);
357
                }
358
 
359
                return new JsonModel([
360
                    'success' => false,
361
                    'data' => $messages
362
                ]);
363
            }
364
        } else {
365
            $data = [
366
                'success' => false,
367
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
368
            ];
369
 
370
            return new JsonModel($data);
371
        }
372
 
373
        return new JsonModel($data);
374
    }
375
 
15150 efrain 376
    /*
4856 eleazar 377
    public function segmentAction() {
4855 eleazar 378
        $request = $this->getRequest();
379
        $currentUserPlugin = $this->plugin('currentUserPlugin');
380
        $currentCompany = $currentUserPlugin->getCompany();
381
        $currentUser = $currentUserPlugin->getUser();
382
 
383
        $request = $this->getRequest();
384
        $uuid = $this->params()->fromRoute('id');
385
 
386
 
387
        if (!$uuid) {
388
            $data = [
389
                'success' => false,
390
                'data' => 'ERROR_INVALID_PARAMETER'
391
            ];
392
 
393
            return new JsonModel($data);
394
        }
395
 
396
        $surveyMapper = SurveyMapper::getInstance($this->adapter);
397
        $survey = $surveyMapper->fetchOneByUuid($uuid);
398
        if (!$survey) {
399
            $data = [
400
                'success' => false,
401
                'data' => 'ERROR_RECORD_NOT_FOUND'
402
            ];
403
 
404
            return new JsonModel($data);
405
        }
406
 
407
        if ($survey->company_id != $currentCompany->id) {
408
            return new JsonModel([
409
                'success' => false,
410
                'data' => 'ERROR_UNAUTHORIZED'
411
            ]);
412
        }
413
 
4863 eleazar 414
        if($request->isPost()){
4865 eleazar 415
            $form = new SurveySegmentedForm($this->adapter, $currentCompany->id);
5039 efrain 416
 
417
 
4855 eleazar 418
            $dataPost = $request->getPost()->toArray();
5006 eleazar 419
            $form->setData($dataPost);
5019 efrain 420
 
4855 eleazar 421
 
5020 efrain 422
 
4855 eleazar 423
            if ($form->isValid()) {
424
                $dataPost = (array) $form->getData();
5029 efrain 425
 
5031 efrain 426
                if(!empty($dataPost['job_description_id'])){
5026 efrain 427
                    $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
428
                    $surveyJobDescriptionMapper = SurveyJobDescriptionMapper::getInstance($this->adapter);
429
 
15150 efrain 430
                    foreach($dataPost['job_description_id'] as $jobDescriptionUuid)
431
                    {
5026 efrain 432
                        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($jobDescriptionUuid);
5034 efrain 433
                        if($jobDescription && $jobDescription->company_id == $currentCompany->id) {
5026 efrain 434
                            $record = new SurveyJobDescription();
435
                            $record->job_description_id = $jobDescription->id;
436
                            $record->survey_id = $survey->id;
15150 efrain 437
 
438
                            $surveyJobDescriptionMapper->insert($record);
4985 eleazar 439
                        }
4916 eleazar 440
                    }
4883 eleazar 441
                }
5028 efrain 442
 
5063 eleazar 443
 
5074 eleazar 444
                if(!empty($dataPost['skill_id'])){
445
                     $skillMapper = SkillMapper::getInstance($this->adapter);
446
                     $surveySkillMapper = SurveySkillMapper::getInstance($this->adapter);
5042 eleazar 447
 
15150 efrain 448
                     foreach($dataPost['skill_id'] as $skillUuid)
449
                     {
5074 eleazar 450
                         $skill = $skillMapper->fetchOneByUuid($skillUuid);
5042 eleazar 451
 
15150 efrain 452
                         if($skill) {
5074 eleazar 453
                            $record = new SurveySkill();
454
                            $record->skill_id = $skill->id;
5053 eleazar 455
                            $record->survey_id = $survey->id;
456
 
15150 efrain 457
                            $surveySkillMapper->insert($record);
458
                         }
5042 eleazar 459
                     }
460
                 }
461
 
462
                if(!empty($dataPost['industry_id'])){
463
 
464
                     $industryMapper = IndustryMapper::getInstance($this->adapter);
465
                     $surveyIndustryMapper = SurveyIndustryMapper::getInstance($this->adapter);
466
 
467
                     $ok = true;
468
 
15150 efrain 469
                     foreach($dataPost['industry_id'] as $industryUuid)
470
                     {
5042 eleazar 471
                         $industry = $industryMapper->fetchOneByUuid($industryUuid);
15150 efrain 472
                         if($industry) {
5042 eleazar 473
                             $record = new SurveyIndustry();
474
                             $record->industry_id = $industry->id;
475
                             $record->survey_id = $survey->id;
476
 
15150 efrain 477
                             $surveyIndustryMapper->insert($record);
478
                          }
5042 eleazar 479
                     }
480
                 }
481
 
5074 eleazar 482
 
5083 eleazar 483
                if(!empty($dataPost['language_id'])){
15150 efrain 484
                    $languageMapper = LanguageMapper::getInstance($this->adapter);
5074 eleazar 485
                    $surveyLanguageMapper = SurveyLanguageMapper::getInstance($this->adapter);
5056 eleazar 486
 
15150 efrain 487
                    foreach($dataPost['language_id'] as $language_id)
488
                    {
489
                        $language = $languageMapper->fetchOne($language_id);
490
                        if($language) {
5074 eleazar 491
                            $record = new SurveyLanguage();
5085 eleazar 492
                            $record->language_id = $language_id;
5056 eleazar 493
                            $record->survey_id = $survey->id;
494
 
15150 efrain 495
                            $surveyLanguageMapper->insert($record);
496
                        }
5056 eleazar 497
                    }
5042 eleazar 498
                 }
499
 
500
                $data = [
501
                    'success' => true,
502
                    'data' => 'LABEL_RECORD_ADDED'
503
                ];
5074 eleazar 504
               // return new JsonModel($data); exit;
505
 
5060 eleazar 506
               // return new JsonModel($data);
4855 eleazar 507
            } else {
5013 eleazar 508
                $messages = [];
4855 eleazar 509
                $form_messages = (array) $form->getMessages();
510
                foreach ($form_messages as $fieldname => $field_messages) {
511
 
512
                    $messages[$fieldname] = array_values($field_messages);
513
                }
514
 
515
                return new JsonModel([
516
                    'success' => false,
5011 eleazar 517
                    'data' => $messages
5013 eleazar 518
                ]);
4855 eleazar 519
            }
520
        } else {
521
            $data = [
522
                'success' => false,
523
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
524
            ];
525
 
526
            return new JsonModel($data);
527
        }
528
 
5060 eleazar 529
       return new JsonModel($data);
4855 eleazar 530
 
15150 efrain 531
    }*/
4855 eleazar 532
 
4579 eleazar 533
    public function editAction() {
534
        $request = $this->getRequest();
535
        $currentUserPlugin = $this->plugin('currentUserPlugin');
536
        $currentCompany = $currentUserPlugin->getCompany();
537
        $currentUser = $currentUserPlugin->getUser();
538
 
539
        $request = $this->getRequest();
540
        $uuid = $this->params()->fromRoute('id');
541
 
6705 eleazar 542
 
4579 eleazar 543
        if (!$uuid) {
544
            $data = [
545
                'success' => false,
546
                'data' => 'ERROR_INVALID_PARAMETER'
547
            ];
548
 
549
            return new JsonModel($data);
550
        }
6691 eleazar 551
 
552
        $surveyMapper = SurveyMapper::getInstance($this->adapter);
553
        $survey = $surveyMapper->fetchOneByUuid($uuid);
6692 eleazar 554
 
4579 eleazar 555
        if (!$survey) {
556
            $data = [
557
                'success' => false,
558
                'data' => 'ERROR_RECORD_NOT_FOUND'
559
            ];
560
 
561
            return new JsonModel($data);
562
        }
563
 
564
        if ($survey->company_id != $currentCompany->id) {
565
            return new JsonModel([
566
                'success' => false,
567
                'data' => 'ERROR_UNAUTHORIZED'
568
            ]);
569
        }
570
 
6705 eleazar 571
 
4579 eleazar 572
        if ($request->isPost()) {
6698 eleazar 573
            $form = new SurveyForm($this->adapter, $currentCompany->id);
4579 eleazar 574
            $dataPost = $request->getPost()->toArray();
575
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : SurveyForm::STATUS_INACTIVE;
6705 eleazar 576
 
4579 eleazar 577
            $form->setData($dataPost);
578
 
579
            if ($form->isValid()) {
580
                $dataPost = (array) $form->getData();
6710 eleazar 581
 
4579 eleazar 582
                $hydrator = new ObjectPropertyHydrator();
583
                $hydrator->hydrate($dataPost, $survey);
584
 
585
                if (!$survey->status) {
586
                    $survey->status = Survey::STATUS_INACTIVE;
587
                }
4749 eleazar 588
 
589
                $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
590
                $surveyForm = $surveyFormMapper->fetchOneByUuid($dataPost['form_id']);
591
                $survey->form_id = $surveyForm->id;
15150 efrain 592
 
6708 eleazar 593
                $result = $surveyMapper->update($survey);
594
                if($result){
6705 eleazar 595
                    $jobDescription = new SurveyJobDescription();
596
                    $skill = new SurveySkill();
597
                    $industry = new SurveyIndustry();
598
                    $language = new SurveyLanguage();
599
 
600
                    if(!empty($dataPost['location_search'])){
601
 
602
                        $surveyLocationMapper = SurveyLocationMapper::getInstance($this->adapter);
15150 efrain 603
                        $surveyLocation = $surveyLocationMapper->fetchOneBySurveyId($survey->id);
6705 eleazar 604
 
15150 efrain 605
                        if($surveyLocation) {
606
                            $surveyLocation->formatted_address = $dataPost['formatted_address'];
607
                            $surveyLocation->city1 = $dataPost['city1'];
608
                            $surveyLocation->city2 = $dataPost['city2'];
609
                            $surveyLocation->address1 = $dataPost['address1'];
610
                            $surveyLocation->address2 = $dataPost['address2'];
611
                            $surveyLocation->country = $dataPost['country'];
612
                            $surveyLocation->latitude = $dataPost['latitude'];
613
                            $surveyLocation->longitude = $dataPost['longitude'];
614
                            $surveyLocation->postal_code = $dataPost['postal_code'];
615
                            $surveyLocation->state = $dataPost['state'];
616
                            $surveyLocationMapper->update($surveyLocation);
617
                        } else {
618
                            $surveyLocation = new SurveyLocation();
619
                            $surveyLocation->formatted_address = $dataPost['formatted_address'];
620
                            $surveyLocation->city1 = $dataPost['city1'];
621
                            $surveyLocation->city2 = $dataPost['city2'];
622
                            $surveyLocation->address1 = $dataPost['address1'];
623
                            $surveyLocation->address2 = $dataPost['address2'];
624
                            $surveyLocation->country = $dataPost['country'];
625
                            $surveyLocation->latitude = $dataPost['latitude'];
626
                            $surveyLocation->longitude = $dataPost['longitude'];
627
                            $surveyLocation->postal_code = $dataPost['postal_code'];
628
                            $surveyLocation->state = $dataPost['state'];
629
                            $surveyLocation->survey_id = $survey->id;
630
                            $surveyLocationMapper->insert($surveyLocation);
6705 eleazar 631
                        }
632
                    }
633
 
634
                    if(!empty($dataPost['job_description_id'])){
635
                        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
636
                        $surveyJobDescriptionMapper = SurveyJobDescriptionMapper::getInstance($this->adapter);
637
 
15150 efrain 638
                        $surveyJobDescriptionMapper->deleteBySurveyId($survey->id);
6705 eleazar 639
 
640
                        foreach($dataPost['job_description_id'] as $jobDescriptionUuid) {
641
 
642
                            $jobDescription = $jobDescriptionMapper->fetchOneByUuid($jobDescriptionUuid);
643
                            if($jobDescription && $jobDescription->company_id == $currentCompany->id) {
644
                                $record = new SurveyJobDescription();
645
                                $record->job_description_id = $jobDescription->id;
646
                                $record->survey_id = $survey->id;
647
 
15150 efrain 648
                                $surveyJobDescriptionMapper->insert($record);
6705 eleazar 649
                            }
650
                        }
651
 
652
                    }
653
 
654
 
655
                    if(!empty($dataPost['skill_id'])){
656
                         $skillMapper = SkillMapper::getInstance($this->adapter);
657
                         $surveySkillMapper = SurveySkillMapper::getInstance($this->adapter);
658
 
6762 eleazar 659
 
15150 efrain 660
                         $surveySkillMapper->deleteBySurveyId($survey->id);
6762 eleazar 661
 
6705 eleazar 662
 
663
                         foreach($dataPost['skill_id'] as $skillUuid) {
664
                             $skill = $skillMapper->fetchOneByUuid($skillUuid);
15150 efrain 665
                             if($skill) {
6705 eleazar 666
                                $record = new SurveySkill();
667
                                $record->skill_id = $skill->id;
668
                                $record->survey_id = $survey->id;
669
 
15150 efrain 670
                                $surveySkillMapper->insert($record);
671
                            }
6705 eleazar 672
                         }
6759 eleazar 673
                    }
6705 eleazar 674
 
675
                    if(!empty($dataPost['industry_id'])){
676
                         $industryMapper = IndustryMapper::getInstance($this->adapter);
677
                         $surveyIndustryMapper = SurveyIndustryMapper::getInstance($this->adapter);
678
 
15150 efrain 679
                         $surveyIndustryMapper->deleteBySurveyId($survey->id);
6705 eleazar 680
 
681
                         foreach($dataPost['industry_id'] as $industryUuid) {
682
                             $industry = $industryMapper->fetchOneByUuid($industryUuid);
683
 
15150 efrain 684
                             if($industry) {
6705 eleazar 685
                                 $record = new SurveyIndustry();
686
                                 $record->industry_id = $industry->id;
687
                                 $record->survey_id = $survey->id;
688
 
15150 efrain 689
                                 $surveyIndustryMapper->insert($record);
690
 
691
                             }
6705 eleazar 692
                         }
6712 eleazar 693
                    }
6705 eleazar 694
 
15150 efrain 695
 
6705 eleazar 696
                    if(!empty($dataPost['language_id'])){
697
 
698
                        $surveyLanguageMapper = SurveyLanguageMapper::getInstance($this->adapter);
15150 efrain 699
                        $surveyLanguageMapper->deleteBySurveyId($survey->id);
6705 eleazar 700
 
15150 efrain 701
                        $languageMapper = LanguageMapper::getInstance($this->adapter);
702
 
703
                        foreach($dataPost['language_id'] as $language_id)
704
                        {
705
                            $language = $languageMapper->fetchOne($language_id);
706
                            if($language) {
6705 eleazar 707
                                $record = new SurveyLanguage();
708
                                $record->language_id = $language_id;
709
                                $record->survey_id = $survey->id;
710
 
711
 
15150 efrain 712
                                $surveyLanguageMapper->insert($record);
713
                            }
6705 eleazar 714
                        }
715
                     }
716
                }
15150 efrain 717
 
6705 eleazar 718
 
4579 eleazar 719
                if ($result) {
720
                    $this->logger->info('Se edito la encuesta ' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
721
                    $data = [
722
                        'success' => true,
723
                        'data' => 'LABEL_RECORD_UPDATED'
724
                    ];
725
                } else {
726
                    $data = [
727
                        'success' => false,
728
                        'data' => $surveyMapper->getError()
729
                    ];
730
                }
731
 
732
                return new JsonModel($data);
733
            } else {
734
                $messages = [];
735
                $form_messages = (array) $form->getMessages();
736
                foreach ($form_messages as $fieldname => $field_messages) {
737
                    $messages[$fieldname] = array_values($field_messages);
738
                }
739
 
740
                return new JsonModel([
741
                    'success' => false,
742
                    'data' => $messages
743
                ]);
744
            }
745
        } else if ($request->isGet()) {
746
            $hydrator = new ObjectPropertyHydrator();
6720 eleazar 747
 
748
            $surveylenguageMapper = SurveyLanguageMapper::getInstance($this->adapter);
749
            $languages  = $surveylenguageMapper->fetchAllBySurveyId($survey->id);
6721 eleazar 750
 
6714 eleazar 751
            $lenguage = [];
752
            foreach($languages as $language)
753
            {
754
                array_push($lenguage, $language->language_id);
755
            }
6735 eleazar 756
 
757
            $surveySkillMapper = SurveySkillMapper::getInstance($this->adapter);
758
            $skills  = $surveySkillMapper->fetchAllBySurveyId($survey->id);
759
 
760
            $skilla = [];
761
            foreach($skills as $skill)
762
            {
6749 eleazar 763
                array_push($skilla, $skill->skill_id);
6735 eleazar 764
            }
6742 eleazar 765
 
6738 eleazar 766
 
767
            $skillMaster = [];
6744 eleazar 768
            foreach($skilla as $skillb)
6738 eleazar 769
            {
6746 eleazar 770
                $skillMapper = SkillMapper::getInstance($this->adapter);
771
                $skillm = $skillMapper->fetchOne($skillb);
6738 eleazar 772
                array_push($skillMaster, $skillm->uuid);
773
            }
6751 eleazar 774
 
775
            $SurveyJobDescriptionMapper = SurveyJobDescriptionMapper::getInstance($this->adapter);
776
            $SurveyJobDescriptions  = $SurveyJobDescriptionMapper->fetchAllBySurveyId($survey->id);
777
 
778
            $SurveyJobDescriptionA = [];
779
            foreach($SurveyJobDescriptions as $SurveyJobDescription)
780
            {
781
                array_push($SurveyJobDescriptionA, $SurveyJobDescription->job_description_id);
782
            }
6765 eleazar 783
 
6751 eleazar 784
            $SurveyJobDescriptionMaster = [];
6752 eleazar 785
            foreach($SurveyJobDescriptionA as $SurveyJobDescriptionB)
6751 eleazar 786
            {
6752 eleazar 787
                $JobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
6754 eleazar 788
                $JobDescriptionm = $JobDescriptionMapper->fetchOne($SurveyJobDescriptionB);
6758 eleazar 789
                array_push($SurveyJobDescriptionMaster, $JobDescriptionm->uuid);
6751 eleazar 790
            }
791
 
6765 eleazar 792
            $surveyIndustryMapper = SurveyIndustryMapper::getInstance($this->adapter);
793
            $industrys = $surveyIndustryMapper->fetchAllBySurveyId($survey->id);
794
 
795
            $industrya = [];
796
            foreach($industrys as $industry)
797
            {
798
                array_push($industrya, $industry->industry_id);
799
            }
800
 
801
 
802
            $industryMaster = [];
803
            foreach($industrya as $industryb)
804
            {
805
                $industryMapper = IndustryMapper::getInstance($this->adapter);
806
                $industrym = $industryMapper->fetchOne($industryb);
807
                array_push($industryMaster, $industrym->uuid);
808
            }
809
 
810
 
6767 eleazar 811
            $surveyLocationMapper = SurveyLocationMapper::getInstance($this->adapter);
15150 efrain 812
            $surveyLocation  = $surveyLocationMapper->fetchOneBySurveyId($survey->id);
6765 eleazar 813
 
814
 
6742 eleazar 815
 
4749 eleazar 816
            $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
817
            $surveyForm = $surveyFormMapper->fetchOne($survey->form_id);
15150 efrain 818
 
4579 eleazar 819
            $data = [
820
                'success' => true,
821
                'data' => [
4653 eleazar 822
                    'name' => $survey->name,
4749 eleazar 823
                    'form_id' => $surveyForm->uuid,
4653 eleazar 824
                    'target' => $survey->target,
825
                    'identity' => $survey->identity,
826
                    'since_date' => $survey->since_date,
827
                    'last_date' => $survey->last_date,
828
                    'status' => $survey->status,
6714 eleazar 829
                    'lenguage_id' => $lenguage,
6738 eleazar 830
                    'skill_id' => $skillMaster,
6752 eleazar 831
                    'job_description_id' => $SurveyJobDescriptionMaster,
6765 eleazar 832
                    'industry_id' => $industryMaster,
15150 efrain 833
 
834
 
835
                    'formatted_address' => $surveyLocation  ? $surveyLocation->formatted_address : '',
836
                    'city1' => $surveyLocation  ? $surveyLocation ->city1 : '',
837
                    'city2' => $surveyLocation  ? $surveyLocation ->city2 : '',
838
                    'address1' => $surveyLocation  ? $surveyLocation ->address1: '',
839
                    'address2' => $surveyLocation  ? $surveyLocation ->address2 : '',
840
                    'country' => $surveyLocation  ? $surveyLocation ->country : '',
841
                    'latitude' => $surveyLocation  ? $surveyLocation ->latitude : '',
842
                    'longitude' => $surveyLocation  ? $surveyLocation ->longitude : '',
843
                    'postal_code' => $surveyLocation  ? $surveyLocation ->postal_code : '',
844
                    'state' => $surveyLocation  ? $surveyLocation ->state : '',
845
 
846
 
4579 eleazar 847
                ]
848
            ];
849
 
850
            return new JsonModel($data);
851
        } else {
852
            $data = [
853
                'success' => false,
854
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
855
            ];
856
 
857
            return new JsonModel($data);
858
        }
859
 
860
        return new JsonModel($data);
861
    }
862
 
863
    public function deleteAction() {
864
        $request = $this->getRequest();
865
        $currentUserPlugin = $this->plugin('currentUserPlugin');
866
        $currentCompany = $currentUserPlugin->getCompany();
867
        $currentUser = $currentUserPlugin->getUser();
868
 
869
        $request = $this->getRequest();
870
        $uuid = $this->params()->fromRoute('id');
871
 
872
        if (!$uuid) {
873
            $data = [
874
                'success' => false,
875
                'data' => 'ERROR_INVALID_PARAMETER'
876
            ];
877
 
878
            return new JsonModel($data);
879
        }
880
 
881
        $surveyMapper = SurveyMapper::getInstance($this->adapter);
882
        $survey = $surveyMapper->fetchOneByUuid($uuid);
883
        if (!$survey) {
884
            $data = [
885
                'success' => false,
886
                'data' => 'ERROR_RECORD_NOT_FOUND'
887
            ];
888
 
889
            return new JsonModel($data);
890
        }
891
 
892
        if ($survey->company_id != $currentCompany->id) {
893
            return new JsonModel([
894
                'success' => false,
895
                'data' => 'ERROR_UNAUTHORIZED'
896
            ]);
897
        }
898
 
899
        if ($request->isPost()) {
900
 
901
            $result = $surveyMapper->delete($survey->id);
902
            if ($result) {
15150 efrain 903
                $this->logger->info('Se borro la encuesta ' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
4579 eleazar 904
 
905
                $data = [
906
                    'success' => true,
907
                    'data' => 'LABEL_RECORD_DELETED'
908
                ];
909
            } else {
910
 
911
                $data = [
912
                    'success' => false,
913
                    'data' => $surveyMapper->getError()
914
                ];
915
 
916
                return new JsonModel($data);
917
            }
918
        } else {
919
            $data = [
920
                'success' => false,
921
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
922
            ];
923
 
924
            return new JsonModel($data);
925
        }
926
 
927
        return new JsonModel($data);
928
    }
929
 
4384 eleazar 930
}