Proyectos de Subversion LeadersLinked - Backend

Rev

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