Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1709 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;
11
use Laminas\View\Model\JsonModel;
12
use LeadersLinked\Form\RecruitmentSelectionInterviewFormForm;
13
use Laminas\View\Model\RecruitmentSelectionInterviewModel;
14
use Laminas\View\Mapper\RecruitmentSelectionInterviewMapper;
15
use Laminas\View\Model\RecruitmentSelectionVacancyModel;
16
use Laminas\View\Mapper\RecruitmentSelectionVacancyMapper;
17
use Laminas\View\Model\RecruitmentSelectionCandidateModel;
18
use Laminas\View\Mapper\RecruitmentSelectionCandidateMapper;
19
use Laminas\View\Mapper\JobDescriptionMapper;
20
 
21
class RecruitmentSelectionInterviewFormController extends AbstractActionController {
22
 
23
    /**
24
     *
25
     * @var AdapterInterface
26
     */
27
    private $adapter;
28
 
29
    /**
30
     *
31
     * @var AbstractAdapter
32
     */
33
    private $cache;
34
 
35
    /**
36
     *
37
     * @var  LoggerInterface
38
     */
39
    private $logger;
40
 
41
    /**
42
     *
43
     * @var array
44
     */
45
    private $config;
46
 
47
    /**
48
     *
49
     * @param AdapterInterface $adapter
50
     * @param AbstractAdapter $cache
51
     * @param LoggerInterface $logger
52
     * @param array $config
53
     */
54
    public function __construct($adapter, $cache, $logger, $config) {
55
        $this->adapter = $adapter;
56
        $this->cache = $cache;
57
        $this->logger = $logger;
58
        $this->config = $config;
59
    }
60
 
61
    public function indexAction() {
62
        $currentUserPlugin = $this->plugin('currentUserPlugin');
63
        $currentUser = $currentUserPlugin->getUser();
64
        $currentCompany = $currentUserPlugin->getCompany();
65
 
66
        $request = $this->getRequest();
67
 
68
        if($request->isGet())
69
        {
70
 
71
            $headers  = $request->getHeaders();
72
 
73
            $isJson = false;
74
            if($headers->has('Accept')) {
75
                $accept = $headers->get('Accept');
76
 
77
                $prioritized = $accept->getPrioritized();
78
 
79
                foreach($prioritized as $key => $value) {
80
                    $raw = trim($value->getRaw());
81
 
82
                    if(!$isJson) {
83
                        $isJson = strpos($raw, 'json');
84
                    }
85
 
86
                }
87
            }
88
 
89
            if($isJson) {
90
                $vacancy_uuid     = filter_var($this->params()->fromQuery('vacancy_uuid'), FILTER_SANITIZE_STRING);
91
                $candidates_uuid   = filter_var($this->params()->fromQuery('candidates_uuid'), FILTER_SANITIZE_STRING);
92
 
93
                $data = [
94
                    'link_upload' => '',
95
                    'items' => [] ,
96
                    'total' => 0,
97
 
98
                ];
99
 
100
 
101
                if(!$vacancy_uuid) {
102
                    return new JsonModel([
103
                        'success' => true,
104
                        'data' => $data
105
                    ]);
106
 
107
                }
108
 
109
 
110
                $vacancyMapper = RecruitmentSelectionVacancyMapper::getInstance($this->adapter);
111
                $vacancy = $vacancyMapper->fetchOneByUuid($vacancy_uuid);
112
                if(!$topic) {
113
                    return new JsonModel([
114
                        'success' => true,
115
                        'data' => 'ERROR_TOPIC_NOT_FOUND'
116
                    ]);
117
                }
118
 
119
                if($vacancy->company_id != $currentCompany->id) {
120
                    return new JsonModel([
121
                        'success' => true,
122
                        'data' => 'ERROR_UNAUTHORIZED'
123
                    ]);
124
                }
125
 
126
 
127
 
128
                if(!$candidates_uuid) {
129
                    $candidateMapper = RecruitmentSelectionCandidateMapper::getInstance($this->adapter);
130
                    $records = $candidateMapper->fetchAllBySelectionId($vacancy->id);
131
 
132
                    $candidates = [];
133
                    foreach($records as $record)
134
                    {
135
                        if(!$candidates_uuid) {
136
                            $candidates_uuid = $record->uuid;
137
                        }
138
 
139
                        $candidates[ $record->uuid ] = $record->name;
140
                    }
141
 
142
                    $data['candidates']  = $candidates;
143
                }
144
 
145
                if(!$candidates_uuid) {
146
                    return new JsonModel([
147
                        'success' => true,
148
                        'data' => $data
149
                    ]);
150
 
151
                }
152
 
153
                $candidateMapper = RecruitmentSelectionCandidateMapper::getInstance($this->adapter);
154
                $candidates = $candidateMapper->fetchOneByUuid($candidates_uuid);
155
 
156
 
157
 
158
                if(!$capsule) {
159
                    return new JsonModel([
160
                        'success' => true,
161
                        'data' => 'ERROR_CAPSULE_NOT_FOUND'
162
                    ]);
163
                }
164
 
165
                if($candidates->vacancy_id != $vancancy->id) {
166
                    return new JsonModel([
167
                        'success' => true,
168
                        'data' => 'ERROR_UNAUTHORIZED'
169
                    ]);
170
                }
171
 
172
                $search = $this->params()->fromQuery('search', []);
173
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
174
 
175
                $page               = intval($this->params()->fromQuery('start', 1), 10);
176
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
177
                $order =  $this->params()->fromQuery('order', []);
178
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
179
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
180
 
181
                $fields =  ['uuid', 'name', 'objectives', 'status'];
182
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
183
 
184
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
185
                    $order_direction = 'ASC';
186
                }
187
 
188
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
189
                $allowAdd = $acl->isAllowed($currentUser->usertype_id, 'recruitment-and-selection/interview/form/add');
190
                $allowEdit = $acl->isAllowed($currentUser->usertype_id,  'recruitment-and-selection/interview/form/edit');
191
                $allowDelete = $acl->isAllowed($currentUser->usertype_id,  'recruitment-and-selection/interview/form/edit');
192
 
193
                $queryMapper = QueryMapper::getInstance($this->adapter);
194
                $sql = $queryMapper->getSql();
195
                $select = $sql->select();
196
                $select->columns(['name', 'objectives', 'status']);
197
                $select->from(['tb1' => JobDescriptionMapper::_TABLE] );
198
                $select->where->equalTo('tb1.id', $vancancy->job_description_id);
199
 
200
                if($search) {
201
                    $select->where->nest()
202
                    ->like('name', '%' . $search . '%')
203
                    ->or->like('objectives', '%' . $search . '%')
204
                    ->unnest();
205
 
206
                }
207
 
208
 
209
                $select->order($order_field . ' ' . $order_direction);
210
 
211
                $hydrator   = new ArraySerializableHydrator();
212
                $resultset  = new HydratingResultSet($hydrator);
213
 
214
                $adapter = new DbSelect($select, $sql, $resultset);
215
                $paginator = new Paginator($adapter);
216
                $paginator->setItemCountPerPage($records_x_page);
217
                $paginator->setCurrentPageNumber($page);
218
 
219
 
220
                $items = [ ];
221
                $records = $paginator->getCurrentItems();
222
                foreach($records as $record)
223
                {
224
                    $params = [
225
                        'vacancy_uuid' => $vacancy->uuid,
226
                        'candidates_uuid' => $candidates->uuid
227
                    ];
228
 
229
                    $actions = [];
230
 
231
                    $item = [
232
                        'uuid' => $record['uuid'],
233
                        'name' => $record['name'],
234
                        'objectives' => $record['objectives'],
235
                        'actions' => $actions
236
                    ];
237
 
238
 
239
                    array_push($items, $item);
240
 
241
 
242
                }
243
 
244
                $data['items'] = $items;
245
                $data['total'] = $paginator->getTotalItemCount();
246
 
247
 
248
                return new JsonModel([
249
                    'success' => true,
250
                    'data' => $data
251
                ]);
252
            } else {
253
                $vacancyMapper = RecruitmentSelectionVacancyMapper::getInstance($this->adapter);
254
                $vacancy = $vacancyMapper->fetchAllByCompanyId($currentCompany->id);
255
 
256
                if($vancancy) {
257
                    $vacancy_id = $vancancy[0]->id;
258
                }  else {
259
                    $vacancy_id = 0;
260
                }
261
 
262
 
263
                $form = new RecruitmentSelectionInterviewFormForm($this->adapter, $currentCompany->id, $vacancy_id);
264
 
265
                $this->layout()->setTemplate('layout/layout-backend');
266
                $viewModel = new ViewModel();
267
                $viewModel->setTemplate('leaders-linked/microlearning-access-for-students/index.phtml');
268
                $viewModel->setVariables([
269
                    'form' => $form
270
                ]);
271
 
272
                return $viewModel ;
273
            }
274
 
275
        } else {
276
            return new JsonModel([
277
                'success' => false,
278
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
279
            ]);
280
        }
281
    }
282
 
283
 
284
}