AutorÃa | Ultima modificación | Ver Log |
<?php
declare(strict_types=1);
namespace LeadersLinked\Controller;
use Laminas\Db\Adapter\AdapterInterface;
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Log\LoggerInterface;
use Laminas\View\Model\JsonModel;
use LeadersLinked\Form\RecruitmentSelectionInterviewFormForm;
use Laminas\View\Model\RecruitmentSelectionInterviewModel;
use Laminas\View\Mapper\RecruitmentSelectionInterviewMapper;
use Laminas\View\Model\RecruitmentSelectionVacancyModel;
use Laminas\View\Mapper\RecruitmentSelectionVacancyMapper;
use Laminas\View\Model\RecruitmentSelectionCandidateModel;
use Laminas\View\Mapper\RecruitmentSelectionCandidateMapper;
use Laminas\View\Mapper\JobDescriptionMapper;
class RecruitmentSelectionInterviewFormController extends AbstractActionController {
/**
*
* @var AdapterInterface
*/
private $adapter;
/**
*
* @var AbstractAdapter
*/
private $cache;
/**
*
* @var LoggerInterface
*/
private $logger;
/**
*
* @var array
*/
private $config;
/**
*
* @param AdapterInterface $adapter
* @param AbstractAdapter $cache
* @param LoggerInterface $logger
* @param array $config
*/
public function __construct($adapter, $cache, $logger, $config) {
$this->adapter = $adapter;
$this->cache = $cache;
$this->logger = $logger;
$this->config = $config;
}
public function indexAction() {
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentCompany = $currentUserPlugin->getCompany();
$request = $this->getRequest();
if($request->isGet())
{
$headers = $request->getHeaders();
$isJson = false;
if($headers->has('Accept')) {
$accept = $headers->get('Accept');
$prioritized = $accept->getPrioritized();
foreach($prioritized as $key => $value) {
$raw = trim($value->getRaw());
if(!$isJson) {
$isJson = strpos($raw, 'json');
}
}
}
if($isJson) {
$vacancy_uuid = filter_var($this->params()->fromQuery('vacancy_uuid'), FILTER_SANITIZE_STRING);
$candidates_uuid = filter_var($this->params()->fromQuery('candidates_uuid'), FILTER_SANITIZE_STRING);
$data = [
'link_upload' => '',
'items' => [] ,
'total' => 0,
];
if(!$vacancy_uuid) {
return new JsonModel([
'success' => true,
'data' => $data
]);
}
$vacancyMapper = RecruitmentSelectionVacancyMapper::getInstance($this->adapter);
$vacancy = $vacancyMapper->fetchOneByUuid($vacancy_uuid);
if(!$topic) {
return new JsonModel([
'success' => true,
'data' => 'ERROR_TOPIC_NOT_FOUND'
]);
}
if($vacancy->company_id != $currentCompany->id) {
return new JsonModel([
'success' => true,
'data' => 'ERROR_UNAUTHORIZED'
]);
}
if(!$candidates_uuid) {
$candidateMapper = RecruitmentSelectionCandidateMapper::getInstance($this->adapter);
$records = $candidateMapper->fetchAllBySelectionId($vacancy->id);
$candidates = [];
foreach($records as $record)
{
if(!$candidates_uuid) {
$candidates_uuid = $record->uuid;
}
$candidates[ $record->uuid ] = $record->name;
}
$data['candidates'] = $candidates;
}
if(!$candidates_uuid) {
return new JsonModel([
'success' => true,
'data' => $data
]);
}
$candidateMapper = RecruitmentSelectionCandidateMapper::getInstance($this->adapter);
$candidates = $candidateMapper->fetchOneByUuid($candidates_uuid);
if(!$capsule) {
return new JsonModel([
'success' => true,
'data' => 'ERROR_CAPSULE_NOT_FOUND'
]);
}
if($candidates->vacancy_id != $vancancy->id) {
return new JsonModel([
'success' => true,
'data' => 'ERROR_UNAUTHORIZED'
]);
}
$search = $this->params()->fromQuery('search', []);
$search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
$page = intval($this->params()->fromQuery('start', 1), 10);
$records_x_page = intval($this->params()->fromQuery('length', 10), 10);
$order = $this->params()->fromQuery('order', []);
$order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
$order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
$fields = ['uuid', 'name', 'objectives', 'status'];
$order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
if(!in_array($order_direction, ['ASC', 'DESC'])) {
$order_direction = 'ASC';
}
$acl = $this->getEvent()->getViewModel()->getVariable('acl');
$allowAdd = $acl->isAllowed($currentUser->usertype_id, 'recruitment-and-selection/interview/form/add');
$allowEdit = $acl->isAllowed($currentUser->usertype_id, 'recruitment-and-selection/interview/form/edit');
$allowDelete = $acl->isAllowed($currentUser->usertype_id, 'recruitment-and-selection/interview/form/edit');
$queryMapper = QueryMapper::getInstance($this->adapter);
$sql = $queryMapper->getSql();
$select = $sql->select();
$select->columns(['name', 'objectives', 'status']);
$select->from(['tb1' => JobDescriptionMapper::_TABLE] );
$select->where->equalTo('tb1.id', $vancancy->job_description_id);
if($search) {
$select->where->nest()
->like('name', '%' . $search . '%')
->or->like('objectives', '%' . $search . '%')
->unnest();
}
$select->order($order_field . ' ' . $order_direction);
$hydrator = new ArraySerializableHydrator();
$resultset = new HydratingResultSet($hydrator);
$adapter = new DbSelect($select, $sql, $resultset);
$paginator = new Paginator($adapter);
$paginator->setItemCountPerPage($records_x_page);
$paginator->setCurrentPageNumber($page);
$items = [ ];
$records = $paginator->getCurrentItems();
foreach($records as $record)
{
$params = [
'vacancy_uuid' => $vacancy->uuid,
'candidates_uuid' => $candidates->uuid
];
$actions = [];
$item = [
'uuid' => $record['uuid'],
'name' => $record['name'],
'objectives' => $record['objectives'],
'actions' => $actions
];
array_push($items, $item);
}
$data['items'] = $items;
$data['total'] = $paginator->getTotalItemCount();
return new JsonModel([
'success' => true,
'data' => $data
]);
} else {
$vacancyMapper = RecruitmentSelectionVacancyMapper::getInstance($this->adapter);
$vacancy = $vacancyMapper->fetchAllByCompanyId($currentCompany->id);
if($vancancy) {
$vacancy_id = $vancancy[0]->id;
} else {
$vacancy_id = 0;
}
$form = new RecruitmentSelectionInterviewFormForm($this->adapter, $currentCompany->id, $vacancy_id);
$this->layout()->setTemplate('layout/layout-backend');
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/microlearning-access-for-students/index.phtml');
$viewModel->setVariables([
'form' => $form
]);
return $viewModel ;
}
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
}
}