Rev 512 | Rev 516 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(strict_types=1);namespace LeadersLinked\Controller;use Smalot\PdfParser\Parser;use Laminas\Mvc\Controller\AbstractActionController;use Laminas\View\Model\ViewModel;use Laminas\View\Model\JsonModel;use Laminas\Db\Adapter\AdapterInterface;use Laminas\Db\Sql\Select;use Laminas\Db\Adapter\Adapter;use Laminas\Db\Sql\Sql;use Laminas\Db\ResultSet\HydratingResultSet;use Laminas\Hydrator\ArraySerializableHydrator;use LeadersLinked\Mapper\RecruitmentSelectionVacancyMapper;use LeadersLinked\Mapper\JobDescriptionMapper;use LeadersLinked\Mapper\JobCategoryMapper;use LeadersLinked\Mapper\LocationMapper;use LeadersLinked\Mapper\QueryMapper;use ArrayObject;class RecruitmentCreateJobDescriptionController extends AbstractActionController{/**** @var \Laminas\Db\Adapter\AdapterInterface*/private $adapter;/**** @var \LeadersLinked\Cache\CacheInterface*/private $cache;/**** @var \Laminas\Log\LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @var \Laminas\Mvc\I18n\Translator*/private $translator;/**** @param \Laminas\Db\Adapter\AdapterInterface $adapter* @param \LeadersLinked\Cache\CacheInterface $cache* @param \Laminas\Log\LoggerInterface LoggerInterface $logger* @param array $config* @param \Laminas\Mvc\I18n\Translator $translator*/public function __construct($adapter, $cache, $logger, $config, $translator){$this->adapter = $adapter;$this->cache = $cache;$this->logger = $logger;$this->config = $config;$this->translator = $translator;}public function indexAction(){$request = $this->getRequest();// 🔹 Obtener el ID desde la ruta (URL) con el formato /endpoint/:id$vacancyId = $this->params()->fromRoute('id');// 🔹 Verificar si el ID es válidoif (!$vacancyId) {return new JsonModel(['success' => false,'message' => 'Missing vacancy ID']);}// 🔹 Obtener usuario y permisos ACL$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$acl = $this->getEvent()->getViewModel()->getVariable('acl');// 🔹 Verificar si el usuario tiene permiso para extraer criteriosif (!$acl->isAllowed($currentUser->usertype_id, '')) {return new JsonModel(['success' => false,'message' => 'Access denied']);}if ($request->isGet()) {// Llamar a la función que obtiene los archivos de la vacante$candidates = $this->getSelectionPreAplicationCandidates($vacancyId);return new JsonModel(['success' => true,'data' => $candidates]);}if ($request->isPost()) {// 🔹 Obtener los CVs en Base64 desde el cuerpo de la solicitud$bodyParams = json_decode($this->getRequest()->getContent(), true);$cvs = $bodyParams['cvs'] ?? [];// 🔹 Verificar si hay CVsif (empty($cvs)) {return new JsonModel(['success' => false,'message' => 'Missing CVs data']);}// 🔹 Obtener criterios desde la base de datos$criteria = $this->getSelectionCriteriaVacancy($vacancyId);// 🔹 Verificar si los criterios existenif (!$criteria) {return new JsonModel(['success' => false,'message' => 'No selection criteria found for this vacancy']);}// 🔹 Procesar los CVs y analizar compatibilidad con los criteriostry {$processedCvs = $this->processCvs($cvs, $criteria, $vacancyId);return new JsonModel(['success' => true,'data' => $processedCvs]);} catch (\Exception $e) {return new JsonModel(['success' => false,'message' => 'Error processing CVs: ' . $e->getMessage()]);}}// Si el método no es GET ni POSTreturn new JsonModel(['success' => false,'message' => 'Invalid request method']);}}