Proyectos de Subversion LeadersLinked - Backend

Rev

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