Rev 7136 | Rev 8367 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php/**** Controlador: Mis Perfiles**/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\ViewModel;use Laminas\View\Model\JsonModel;use LeadersLinked\Library\Functions;use LeadersLinked\Hydrator\ObjectPropertyHydrator;use LeadersLinked\Mapper\CompanyUserMapper;use LeadersLinked\Model\Job;use LeadersLinked\Model\Location;use LeadersLinked\Mapper\LocationMapper;use LeadersLinked\Mapper\JobMapper;use LeadersLinked\Mapper\CompanyMapper;use LeadersLinked\Model\CompanyUser;use LeadersLinked\Mapper\QueryMapper;use LeadersLinked\Mapper\JobCategoryMapper;use LeadersLinked\Form\CompanyJobExtendedForm;use LeadersLinked\Form\CompanyJobLocationForm;use LeadersLinked\Form\CompanyJobCreateForm;use LeadersLinked\Form\CompanyJobCategoryForm;use LeadersLinked\Form\CompanyJobEmploymentTypeForm;use LeadersLinked\Form\CompanyJobExperienceForm;use LeadersLinked\Form\CompanyJobSalaryForm;use LeadersLinked\Form\CompanyJobDegreeForm;use LeadersLinked\Form\CompanyJobLanguageForm;use LeadersLinked\Form\CompanyJobSkillForm;use LeadersLinked\Form\CompanyJobLastDateOfApplicationForm;use LeadersLinked\Mapper\JobSkillMapper;use LeadersLinked\Model\JobSkill;use LeadersLinked\Model\JobDegree;use LeadersLinked\Mapper\JobDegreeMapper;use LeadersLinked\Model\JobLanguage;use LeadersLinked\Mapper\JobLanguageMapper;use LeadersLinked\Mapper\DegreeMapper;use LeadersLinked\Mapper\LanguageMapper;use LeadersLinked\Mapper\SkillMapper;use LeadersLinked\Mapper\UserMapper;use LeadersLinked\Model\User;use Laminas\Paginator\Adapter\DbSelect;use Laminas\Paginator\Paginator;use LeadersLinked\Mapper\JobApplicationMapper;use LeadersLinked\Mapper\UserProfileMapper;use LeadersLinked\Mapper\IndustryMapper;use LeadersLinked\Mapper\CurrencyMapper;use LeadersLinked\Form\CompanyJobTitleForm;use LeadersLinked\Form\CompanyJobStatusForm;class JobController 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;}/**** Generación del listado de perfiles* {@inheritDoc}* @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()*/public function indexAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();if($request->isGet()) {$sandbox = $this->config['leaderslinked.runmode.sandbox'];if($sandbox) {$google_map_key = $this->config['leaderslinked.google_map.sandbox_api_key'];} else {$google_map_key = $this->config['leaderslinked.google_map.production_api_key'];}$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) {$search = $this->params()->fromQuery('search');$search = empty($search) ? '' : filter_var($search, 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 = ['last_date_of_application', 'titlte'];$order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'last_date_of_application';if(!in_array($order_direction, ['ASC', 'DESC'])) {$order_direction = 'ASC';}$acl = $this->getEvent()->getViewModel()->getVariable('acl');$allowDelete = $acl->isAllowed($currentUser->usertype_id, 'jobs/delete');$allowEdit = $acl->isAllowed($currentUser->usertype_id, 'jobs/edit');$allowUsersWhoApplied = $acl->isAllowed($currentUser->usertype_id, 'jobs/users-who-applied');$jobMapper = JobMapper::getInstance($this->adapter);$jobApplicationMapper = JobApplicationMapper::getInstance($this->adapter);$paginator = $jobMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);$records = $paginator->getCurrentItems();$items = [];foreach($records as $record){switch($record->status) {case Job::STATUS_ACTIVE :$status = 'LABEL_ACTIVE';break;case Job::STATUS_INACTIVE :$status = 'LABEL_INACTIVE';break;case Job::STATUS_DELETED :$status = 'LABEL_DELETED';break;default :$status = '';break;}switch($record->employment_type){case Job::EMPLOYMENT_TYPE_FULL_TIME :$employment_type = 'LABEL_EMPLOYMENT_TYPE_FULL_TIME';break;case Job::EMPLOYMENT_TYPE_PART_TIME :$employment_type = 'LABEL_EMPLOYMENT_TYPE_PART_TIME';break;case Job::EMPLOYMENT_TYPE_CONTRACT :$employment_type = 'LABEL_EMPLOYMENT_TYPE_CONTRACT';break;case Job::EMPLOYMENT_TYPE_TEMPORARY :$employment_type = 'LABEL_EMPLOYMENT_TYPE_TEMPORARY';break;default :$employment_type = '';break;}$users_who_applied = $jobApplicationMapper->fetchTotalApplicationsByJobId($record->id);$dt = \DateTime::createFromFormat('Y-m-d', $record->last_date_of_application );$item = ['last_date_of_application' => $dt->format('d/m/Y') ,'title' => $record->title,'details' => ['status' => $status,'employment_type' => $employment_type,'users_who_applied' => $users_who_applied,],'actions' => ['link_edit' => $allowEdit ? $this->url()->fromRoute('jobs/edit', ['id' => $record->uuid ]) : '' ,'link_delete' => $allowDelete ? $this->url()->fromRoute('jobs/delete', [ 'id' => $record->uuid ]) : '','link_users_who_applied' => $allowUsersWhoApplied && $users_who_applied ? $this->url()->fromRoute('jobs/users-who-applied', ['id' => $record->uuid ]) : '',]];array_push($items, $item);}$response = ['success' => true,'data' => ['items' => $items,'total' => $paginator->getTotalItemCount(),]];return new JsonModel($response);} else {$formAdd = new CompanyJobCreateForm($this->adapter);$formExtended = new CompanyJobExtendedForm();$formLocation = new CompanyJobLocationForm();$formEmploymentType = new CompanyJobEmploymentTypeForm();$formJobCategory = new CompanyJobCategoryForm($this->adapter);$formExperience = new CompanyJobExperienceForm();$formSalary = new CompanyJobSalaryForm($this->adapter);$fromLastDateOfApplication = new CompanyJobLastDateOfApplicationForm();$formDegree = new CompanyJobDegreeForm($this->adapter);$formLanguage = new CompanyJobLanguageForm($this->adapter);$formSkill = new CompanyJobSkillForm($this->adapter);$formStatus = new CompanyJobStatusForm();$formTitle = new CompanyJobTitleForm();$this->layout()->setTemplate('layout/layout-backend');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/jobs/index.phtml');$viewModel->setVariables(['formAdd' => $formAdd,'formLocation' => $formLocation,'formExtended' => $formExtended,'formEmploymentType' => $formEmploymentType,'formJobCategory' => $formJobCategory,'formExperience' => $formExperience,'formSalary' => $formSalary,'fromLastDateOfApplication' => $fromLastDateOfApplication,'formDegree' => $formDegree,'formLanguage' => $formLanguage,'formSkill' => $formSkill,'formStatus' => $formStatus,'formTitle' => $formTitle,'google_map_key' => $google_map_key,]);return $viewModel ;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}/**** Agregar un nuevo perfil* @return \Laminas\View\Model\JsonModel*/public function addAction(){$request = $this->getRequest();$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();if($request->isPost()) {$form = new CompanyJobCreateForm($this->adapter);$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);$dataPost = (array) $form->getData();$jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);$jobCategory = $jobCategoryMapper->fetchOneByUuid( $dataPost['job_category_id']);$hydrator = new ObjectPropertyHydrator();$location = new Location();$hydrator->hydrate($dataPost, $location);$locationMapper= LocationMapper::getInstance($this->adapter);$result = $locationMapper->insert($location);if($result) {$job = new Job();$hydrator->hydrate($dataPost, $job);$job->location_id = $location->id;$job->status = Job::STATUS_INACTIVE;$job->company_id = $company->id;$job->job_category_id = $jobCategory->id;$job->description = '';$last_date_of_application = $job->last_date_of_application;$dt = \DateTime::createFromFormat('d/m/Y', $last_date_of_application);if($dt) {$job->last_date_of_application = $dt->format('Y-m-d');}$jobMapper = JobMapper::getInstance($this->adapter);$result = $jobMapper->insert($job);if($result) {$this->logger->info('Se agrego el empleo : ' . $job->title . ' a la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);switch($job->employment_type){case Job::EMPLOYMENT_TYPE_FULL_TIME :$employment_type = 'LABEL_EMPLOYMENT_TYPE_FULL_TIME';break;case Job::EMPLOYMENT_TYPE_PART_TIME :$employment_type = 'LABEL_EMPLOYMENT_TYPE_PART_TIME';break;case Job::EMPLOYMENT_TYPE_CONTRACT :$employment_type = 'LABEL_EMPLOYMENT_TYPE_CONTRACT';break;case Job::EMPLOYMENT_TYPE_TEMPORARY :$employment_type = 'LABEL_EMPLOYMENT_TYPE_TEMPORARY';break;default :$employment_type = '';break;}$months = [1 => 'LABEL_MONTH_JANUARY',2 => 'LABEL_MONTH_FEBRUARY',3 => 'LABEL_MONTH_MARCH',4 => 'LABEL_MONTH_APRIL',5 => 'LABEL_MONTH_MAY',6 => 'LABEL_MONTH_JUNE',7 => 'LABEL_MONTH_JULY',8 => 'LABEL_MONTH_AUGUST',9 => 'LABEL_MONTH_SEPTEMBER',10 => 'LABEL_MONTH_OCTOBER',11 => 'LABEL_MONTH_NOVEMBER',12 => 'LABEL_MONTH_DECEMBER',];$dt = \DateTime::createFromFormat('Y-m-d', $job->last_date_of_application);$last_date_of_application = $dt->format('d') . ' de ' . $months[$dt->format('n')] . ' de ' . $dt->format('Y');$job = $jobMapper->fetchOne($job->id);//'LABEL_RECORD_ADDED'$response = ['success' => true,'data' => ['title' => $job->title,'status' => 'LABEL_INACTIVE','employment_type' => $employment_type,'job_category' => $jobCategory->name,'last_date_of_application' => $last_date_of_application,'location' => $location->formatted_address,'route_status' => $this->url()->fromRoute('jobs/edit/status', [ 'id' => $job->uuid ]),'route_title' => $this->url()->fromRoute('jobs/edit/title', [ 'id' => $job->uuid ]),'route_extended' => $this->url()->fromRoute('jobs/edit/extended', [ 'id' => $job->uuid ]),'route_location' => $this->url()->fromRoute('jobs/edit/location', [ 'id' => $job->uuid ]),'route_job_category' => $this->url()->fromRoute('jobs/edit/job-category', [ 'id' => $job->uuid ]),'route_employment_type' => $this->url()->fromRoute('jobs/edit/employment-type', [ 'id' => $job->uuid ]),'route_salary' => $this->url()->fromRoute('jobs/edit/salary', [ 'id' => $job->uuid ]),'route_experience' => $this->url()->fromRoute('jobs/edit/experience', [ 'id' => $job->uuid ]),'route_languages' => $this->url()->fromRoute('jobs/edit/languages', [ 'id' => $job->uuid ]),'route_degrees' => $this->url()->fromRoute('jobs/edit/degrees', [ 'id' => $job->uuid ]),'route_skills' => $this->url()->fromRoute('jobs/edit/skills', [ 'id' => $job->uuid ]),'route_last_date_of_application' => $this->url()->fromRoute('jobs/edit/last-date-of-application', [ 'id' => $job->uuid ]),]];} else {$response = ['success' => false,'data' => 'ERROR_THERE_WAS_AN_ERROR'];}} else {$response = ['success' => false,'data' => 'ERROR_THERE_WAS_AN_ERROR'];}} else {$messages = [];$form_messages = (array) $form->getMessages();foreach($form_messages as $fieldname => $field_messages){$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}} else {$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];}return new JsonModel($response);}/**** Borrar un perfil excepto el público* @return \Laminas\View\Model\JsonModel*/public function deleteAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$data = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($data);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$data = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($data);}if($job->company_id != $currentCompany->id) {$data = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($data);}if($request->isPost()) {$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);$result = $jobMapper->delete($job);if($result) {$this->logger->info('Se borro el empleo : ' . $job->title . ' de la empresa : ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,'data' => 'LABEL_RECORD_DELETED'];} else {$data = ['success' => false,'data' => $job->getError()];return new JsonModel($data);}} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}/*** Presenta el perfil con las opciónes de edición de cada sección* @return \Laminas\Http\Response|\Laminas\View\Model\ViewModel|\Laminas\View\Model\JsonModel*/public function editAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$data = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($data);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$data = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($data);}if($job->company_id != $currentCompany->id) {$data = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($data);}if($request->isGet()) {$months = [1 => 'LABEL_MONTH_JANUARY',2 => 'LABEL_MONTH_FEBRUARY',3 => 'LABEL_MONTH_MARCH',4 => 'LABEL_MONTH_APRIL',5 => 'LABEL_MONTH_MAY',6 => 'LABEL_MONTH_JUNE',7 => 'LABEL_MONTH_JULY',8 => 'LABEL_MONTH_AUGUST',9 => 'LABEL_MONTH_SEPTEMBER',10 => 'LABEL_MONTH_OCTOBER',11 => 'LABEL_MONTH_NOVEMBER',12 => 'LABEL_MONTH_DECEMBER',];$dt = \DateTime::createFromFormat('Y-m-d', $job->last_date_of_application);$last_date_of_application = $dt->format('d') . ' de ' . $months[$dt->format('n')] . ' de ' . $dt->format('Y');$locationMapper = LocationMapper::getInstance($this->adapter);$location = $locationMapper->fetchOne($job->location_id);$jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);$jobCategory = $jobCategoryMapper->fetchOne($job->job_category_id);switch($job->employment_type){case Job::EMPLOYMENT_TYPE_FULL_TIME :$employment_type = 'LABEL_EMPLOYMENT_TYPE_FULL_TIME';break;case Job::EMPLOYMENT_TYPE_PART_TIME :$employment_type = 'LABEL_EMPLOYMENT_TYPE_PART_TIME';break;case Job::EMPLOYMENT_TYPE_CONTRACT :$employment_type = 'LABEL_EMPLOYMENT_TYPE_CONTRACT';break;case Job::EMPLOYMENT_TYPE_TEMPORARY :$employment_type = 'LABEL_EMPLOYMENT_TYPE_TEMPORARY';break;default :$employment_type = '';break;}switch($job->status){case Job::STATUS_ACTIVE :$status = 'LABEL_ACTIVE';break;case Job::STATUS_INACTIVE :$status = 'LABEL_INACTIVE';break;default :$status = '';break;}$degreeMapper = DegreeMapper::getInstance($this->adapter);$jobDegreeMapper = JobDegreeMapper::getInstance($this->adapter);$records = $jobDegreeMapper->fetchAllByJobId($job->id);$job_degrees = [];foreach($records as $record){$degree = $degreeMapper->fetchOne($record->degree_id);array_push($job_degrees, $degree->name);}$languageMapper = LanguageMapper::getInstance($this->adapter);$jobLanguageMapper = JobLanguageMapper::getInstance($this->adapter);$records = $jobLanguageMapper->fetchAllByJobId($job->id);$job_languages = [];foreach($records as $record){$language = $languageMapper->fetchOne($record->language_id);array_push($job_languages, $language->name);}$skillMapper = SkillMapper::getInstance($this->adapter);$jobSkillMapper = JobSkillMapper::getInstance($this->adapter);$records = $jobSkillMapper->fetchAllByJobId($job->id);$job_skills = [];foreach($records as $record){$skill = $skillMapper->fetchOne($record->skill_id);array_push($job_skills, $skill->name);}return new JsonModel(['success' => true,'data' => ['title' => $job->title,'status' => $status,'description' => strip_tags($job->description, 'p'),'location' => $location->formatted_address,'employment_type' => $employment_type,'last_date_of_application' => $last_date_of_application,'job_category' => $jobCategory->name,'experience' => $job->experience_visible ? $job->experience_min . '-' . $job->experience_max : '','salary' => $job->salary_visible == Job::SALARY_VISIBLE_YES ? $job->salary_min . '-' . $job->salary_max . ' ' . $job->salary_currency : '','degrees' => $job_degrees,'languages' => $job_languages,'skills' => $job_skills,'route_status' => $this->url()->fromRoute('jobs/edit/status', [ 'id' => $job->uuid ]),'route_title' => $this->url()->fromRoute('jobs/edit/title', [ 'id' => $job->uuid ]),'route_extended' => $this->url()->fromRoute('jobs/edit/extended', [ 'id' => $job->uuid ]),'route_location' => $this->url()->fromRoute('jobs/edit/location', [ 'id' => $job->uuid ]),'route_job_category' => $this->url()->fromRoute('jobs/edit/job-category', [ 'id' => $job->uuid ]),'route_employment_type' => $this->url()->fromRoute('jobs/edit/employment-type', [ 'id' => $job->uuid ]),'route_salary' => $this->url()->fromRoute('jobs/edit/salary', [ 'id' => $job->uuid ]),'route_experience' => $this->url()->fromRoute('jobs/edit/experience', [ 'id' => $job->uuid ]),'route_languages' => $this->url()->fromRoute('jobs/edit/languages', [ 'id' => $job->uuid ]),'route_degrees' => $this->url()->fromRoute('jobs/edit/degrees', [ 'id' => $job->uuid ]),'route_skills' => $this->url()->fromRoute('jobs/edit/skills', [ 'id' => $job->uuid ]),'route_last_date_of_application' => $this->url()->fromRoute('jobs/edit/last-date-of-application', [ 'id' => $job->uuid ]),]]);} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}/*** Actualización de la descripción y cualquier otro campo extendido del perfil a futuro* @return \Laminas\View\Model\JsonModel*/public function extendedAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$response = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($response);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$response = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($response);}if($job->company_id != $currentCompany->id) {$response = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($response);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);if(!$company) {$response = ['success' => false,'data' => 'ERROR_COMPANY_NOT_FOUND'];return new JsonModel($response);}$request = $this->getRequest();if($request->isGet()) {$data = ['success' => true,'data' => ['description' => strip_tags($job->description, 'p'),]];return new JsonModel($data);} else if($request->isPost()) {$form = new CompanyJobExtendedForm();$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$dataPost = (array) $form->getData();$hydrator = new ObjectPropertyHydrator();$hydrator->hydrate($dataPost, $job);$jobMapper->updateExtended($job);$this->logger->info('Se actualizo las descripción del empleo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);return new JsonModel(['success' => true,'data' => ['description' => strip_tags($job->description, 'p'),]]);} else {$messages = [];$form_messages = (array) $form->getMessages();foreach($form_messages as $fieldname => $field_messages){$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}}$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}public function locationAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$response = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($response);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$response = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($response);}if($job->company_id != $currentCompany->id) {$response = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($response);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);if(!$company) {$response = ['success' => false,'data' => 'ERROR_COMPANY_NOT_FOUND'];return new JsonModel($response);}$request = $this->getRequest();if($request->isPost()) {$form = new CompanyJobLocationForm();$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$dataPost = (array) $form->getData();$locationMapper = LocationMapper::getInstance($this->adapter);$location = $locationMapper->fetchOne($job->location_id);$hydrator = new ObjectPropertyHydrator();$hydrator->hydrate($dataPost, $location);if($locationMapper->update($location)) {$this->logger->info('Se actualizo una ubicación del empleo: '. $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$response = ['success' => true,'data' => $location->formatted_address];} else {$response = ['success' => false,'data' => 'ERROR_THERE_WAS_AN_ERROR'];}} else {$response = ['success' => false,'data' => 'ERROR_PLACED_AUTOCOMPLETE_DOES_NOT_CONTAIN_GEOMETRY'];}return new JsonModel($response);}$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($response);}public function employmentTypeAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$response = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($response);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$response = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($response);}if($job->company_id != $currentCompany->id) {$response = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($response);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);if(!$company) {$response = ['success' => false,'data' => 'ERROR_COMPANY_NOT_FOUND'];return new JsonModel($response);}$request = $this->getRequest();if($request->isGet()) {$data = ['success' => true,'data' => $job->employment_type];return new JsonModel($data);} else if($request->isPost()) {$form = new CompanyJobEmploymentTypeForm();$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$dataPost = (array) $form->getData();$hydrator = new ObjectPropertyHydrator();$hydrator->hydrate($dataPost, $job);if($jobMapper->updateEmploymentType($job)) {$this->logger->info('Se actualizo tipo de empleo: '. $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);switch($job->employment_type){case Job::EMPLOYMENT_TYPE_FULL_TIME :$employment_type = 'LABEL_EMPLOYMENT_TYPE_FULL_TIME';break;case Job::EMPLOYMENT_TYPE_PART_TIME :$employment_type = 'LABEL_EMPLOYMENT_TYPE_PART_TIME';break;case Job::EMPLOYMENT_TYPE_CONTRACT :$employment_type = 'LABEL_EMPLOYMENT_TYPE_CONTRACT';break;case Job::EMPLOYMENT_TYPE_TEMPORARY :$employment_type = 'LABEL_EMPLOYMENT_TYPE_TEMPORARY';break;default :$employment_type = '';break;}return new JsonModel(['success' => true,'data' => $employment_type]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_THERE_WAS_AN_ERROR']);}} else {$messages = [];$form_messages = (array) $form->getMessages();foreach($form_messages as $fieldname => $field_messages){$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}}$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}public function jobCategoryAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$response = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($response);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$response = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($response);}if($job->company_id != $currentCompany->id) {$response = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($response);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);if(!$company) {$response = ['success' => false,'data' => 'ERROR_COMPANY_NOT_FOUND'];return new JsonModel($response);}$jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);$jobCategory = $jobCategoryMapper->fetchOne( $job->job_category_id );$request = $this->getRequest();if($request->isGet()) {$data = ['success' => true,'data' => $jobCategory->uuid,];return new JsonModel($data);} else if($request->isPost()) {$form = new CompanyJobCategoryForm($this->adapter);$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$this->logger->info('Se actualizaron la categoría de la empresa: '. $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$dataPost = (array) $form->getData();$jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);$jobCategory = $jobCategoryMapper->fetchOneByUuid( $dataPost['job_category_id'] );$job->job_category_id = $jobCategory->id;if($jobMapper->updateJobCategory($job)) {return new JsonModel(['success' => true,'data' => $jobCategory->name]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_THERE_WAS_AN_ERROR']);}} else {$messages = [];$form_messages = (array) $form->getMessages();foreach($form_messages as $fieldname => $field_messages){$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}}$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}public function salaryAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$response = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($response);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$response = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($response);}if($job->company_id != $currentCompany->id) {$response = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($response);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);if(!$company) {$response = ['success' => false,'data' => 'ERROR_COMPANY_NOT_FOUND'];return new JsonModel($response);}$request = $this->getRequest();if($request->isGet()) {$data = ['success' => true,'data' => ['salary_visible' => $job->salary_visible,'salary_currency' => $job->salary_currency,'salary_min' => $job->salary_min,'salary_max' => $job->salary_max]];return new JsonModel($data);} else if($request->isPost()) {$form = new CompanyJobSalaryForm($this->adapter);$dataPost = $request->getPost()->toArray();$dataPost['salary_visible'] = empty( $dataPost['salary_visible']) ? Job::SALARY_VISIBLE_NO : $dataPost['salary_visible'];$dataPost['salary_currency'] = empty( $dataPost['salary_currency']) ? 'USD' : $dataPost['salary_currency'];$form->setData($dataPost);if($form->isValid()) {$dataPost = (array) $form->getData();$hydrator = new ObjectPropertyHydrator();$hydrator->hydrate($dataPost, $job);$jobMapper->updateSalary($job);$this->logger->info('Se actualizo el salario del empleo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);return new JsonModel(['success' => true,'data' => $job->salary_visible == Job::SALARY_VISIBLE_YES ? $job->salary_min . '-' . $job->salary_max . ' ' . $job->salary_currency: '']);} else {$messages = [];$form_messages = (array) $form->getMessages();foreach($form_messages as $fieldname => $field_messages){$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}}$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}public function experienceAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$response = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($response);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$response = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($response);}if($job->company_id != $currentCompany->id) {$response = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($response);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);if(!$company) {$response = ['success' => false,'data' => 'ERROR_COMPANY_NOT_FOUND'];return new JsonModel($response);}$request = $this->getRequest();if($request->isGet()) {$data = ['success' => true,'data' => ['experience_visible' => $job->experience_visible,'experience_min' => $job->experience_min,'experience_max' => $job->experience_max]];return new JsonModel($data);} else if($request->isPost()) {$form = new CompanyJobExperienceForm();$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$dataPost = (array) $form->getData();$hydrator = new ObjectPropertyHydrator();$hydrator->hydrate($dataPost, $job);$jobMapper->updateExperience($job);$this->logger->info('Se actualizo el experiencia del empleo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);return new JsonModel(['success' => true,'data' => $job->experience_visible ? $job->experience_min . '-' . $job->experience_max . ' LABEL_YEARS' : '']);} else {$messages = [];$form_messages = (array) $form->getMessages();foreach($form_messages as $fieldname => $field_messages){$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}}$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}public function skillAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$response = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($response);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$response = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($response);}if($job->company_id != $currentCompany->id) {$response = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($response);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);if(!$company) {$response = ['success' => false,'data' => 'ERROR_COMPANY_NOT_FOUND'];return new JsonModel($response);}$request = $this->getRequest();if($request->isGet()) {$skillMapper = SkillMapper::getInstance($this->adapter);$jobSkillMapper = JobSkillMapper::getInstance($this->adapter);$skills = $jobSkillMapper->fetchAllByJobId($job->id);$items = [];foreach($skills as $skill){$skill = $skillMapper->fetchOne( $skill->skill_id );array_push($items, $skill->uuid );}$data = ['success' => true,'data' => $items];return new JsonModel($data);} else if($request->isPost()) {$form = new CompanyJobSkillForm($this->adapter);$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$this->logger->info('Se actualizaron las habilidades requeridas del empleo : ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$skillMapper = SkillMapper::getInstance($this->adapter);$jobSkillMapper = JobSkillMapper::getInstance($this->adapter);$jobSkillMapper->deleteByJobId($job->id);$dataPost = (array) $form->getData();$skills = $dataPost['skills'];foreach($skills as $skill_id){$skill = $skillMapper->fetchOneByUuid( $skill_id );$jobSkill = new JobSkill();$jobSkill->job_id = $job->id;$jobSkill->skill_id = $skill->id;$jobSkillMapper->insert($jobSkill);}$items = [];$records = $jobSkillMapper->fetchAllByJobId( $job->id );foreach($records as $record){$skill = $skillMapper->fetchOne($record->skill_id);array_push($items, ['value' => $skill->uuid, 'label' => $skill->name ]);}return new JsonModel(['success' => true,'data' => $items]);} else {$messages = [];$form_messages = (array) $form->getMessages();foreach($form_messages as $fieldname => $field_messages){$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}$jobSkillMapper = JobSkillMapper::getInstance($this->adapter);}$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}public function languageAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$response = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($response);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$response = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($response);}if($job->company_id != $currentCompany->id) {$response = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($response);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);if(!$company) {$response = ['success' => false,'data' => 'ERROR_COMPANY_NOT_FOUND'];return new JsonModel($response);}$request = $this->getRequest();if($request->isGet()) {$this->logger->info('Se actualizaron los idiomas requeridos del empleo : ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$jobLanguageMapper = JobLanguageMapper::getInstance($this->adapter);$languages = $jobLanguageMapper->fetchAllByJobId($job->id);$items = [];foreach($languages as $language){array_push($items, $language->language_id);}$data = ['success' => true,'data' => $items];return new JsonModel($data);} else if($request->isPost()) {$form = new CompanyJobLanguageForm($this->adapter);$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$languageMapper = LanguageMapper::getInstance($this->adapter);$jobLanguageMapper = JobLanguageMapper::getInstance($this->adapter);$jobLanguageMapper->deleteByJobId($job->id);$dataPost = (array) $form->getData();$languages = $dataPost['languages'];foreach($languages as $language_id){$language = $languageMapper->fetchOne($language_id);$jobLanguage = new JobLanguage();$jobLanguage->job_id = $job->id;$jobLanguage->language_id = $language->id;$jobLanguageMapper->insert($jobLanguage);}$items = [];$records = $jobLanguageMapper->fetchAllByJobId($job->id);foreach($records as $record){$language = $languageMapper->fetchOne($record->language_id);array_push($items, ['value' => $language->id, 'label' => $language->name]);}return new JsonModel(['success' => true,'data' => $items]);} else {$messages = [];$form_messages = (array) $form->getMessages();foreach($form_messages as $fieldname => $field_messages){$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}}$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}public function degreeAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$response = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($response);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$response = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($response);}if($job->company_id != $currentCompany->id) {$response = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($response);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);if(!$company) {$response = ['success' => false,'data' => 'ERROR_COMPANY_NOT_FOUND'];return new JsonModel($response);}$request = $this->getRequest();if($request->isGet()) {$this->logger->info('Se actualizaron los idiomas requeridos del empleo : ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$degreeMapper = DegreeMapper::getInstance($this->adapter);$jobDegreeMapper = JobDegreeMapper::getInstance($this->adapter);$records = $jobDegreeMapper->fetchAllByJobId($job->id);$items = [];foreach($records as $record){$degree = $degreeMapper->fetchOne($record->degree_id);array_push($items, $degree->uuid);}$data = ['success' => true,'data' => $items];return new JsonModel($data);} else if($request->isPost()) {$form = new CompanyJobDegreeForm($this->adapter);$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$degreeMapper = DegreeMapper::getInstance($this->adapter);$jobDegreeMapper = JobDegreeMapper::getInstance($this->adapter);$jobDegreeMapper->deleteByJobId($job->id);$dataPost = (array) $form->getData();$degrees = $dataPost['degrees'];foreach($degrees as $degree_id){$degree = $degreeMapper->fetchOneByUuid($degree_id);$jobDegree = new JobDegree();$jobDegree->job_id = $job->id;$jobDegree->degree_id = $degree->id;$jobDegreeMapper->insert($jobDegree);}$items = [];$records = $jobDegreeMapper->fetchAllByJobId($job->id);foreach($records as $record){$degree = $degreeMapper->fetchOne($record->degree_id);array_push($items, ['value' => $degree->uuid, 'label' => $degree->name]);}return new JsonModel(['success' => true,'data' => $items]);} else {$messages = [];$form_messages = (array) $form->getMessages();foreach($form_messages as $fieldname => $field_messages){$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}}$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}public function lastDateOfApplicationAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$response = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($response);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$response = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($response);}if($job->company_id != $currentCompany->id) {$response = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($response);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);if(!$company) {$response = ['success' => false,'data' => 'ERROR_COMPANY_NOT_FOUND'];return new JsonModel($response);}$request = $this->getRequest();if($request->isGet()) {$dt = \DateTime::createFromFormat('Y-m-d', $job->last_date_of_application);$data = ['success' => true,'data' => $dt->format('d/m/Y'),];return new JsonModel($data);} else if($request->isPost()) {$form = new CompanyJobLastDateOfApplicationForm();$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$this->logger->info('Se actualizo la última fecha de aplicación de la empresa: '. $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$dt = \DateTime::createFromFormat('d/m/Y', $form->get('last_date_of_application')->getValue());$job->last_date_of_application = $dt->format('Y-m-d');if($jobMapper->updateLastDateOfApplication($job)) {$months = [1 => 'LABEL_MONTH_JANUARY',2 => 'LABEL_MONTH_FEBRUARY',3 => 'LABEL_MONTH_MARCH',4 => 'LABEL_MONTH_APRIL',5 => 'LABEL_MONTH_MAY',6 => 'LABEL_MONTH_JUNE',7 => 'LABEL_MONTH_JULY',8 => 'LABEL_MONTH_AUGUST',9 => 'LABEL_MONTH_SEPTEMBER',10 => 'LABEL_MONTH_OCTOBER',11 => 'LABEL_MONTH_NOVEMBER',12 => 'LABEL_MONTH_DECEMBER',];$last_date_of_application = $dt->format('d') . ' de ' . $months[$dt->format('n')] . ' de ' . $dt->format('Y');return new JsonModel(['success' => true,'data' => $last_date_of_application]);} else {return new JsonModel(['success' => false,'data' => 'ERROR_THERE_WAS_AN_ERROR']);}} else {$messages = [];$form_messages = (array) $form->getMessages();foreach($form_messages as $fieldname => $field_messages){$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}}$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}public function usersWhoAppliedAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$data = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($data);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$data = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($data);}if($job->company_id != $currentCompany->id) {$data = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($data);}$request = $this->getRequest();if($request->isGet()) {$sandbox = $this->config['leaderslinked.runmode.sandbox'];if($sandbox) {$user_profile_url = $this->config['leaderslinked.frontend.sandbox_user_profile'];} else {$user_profile_url = $this->config['leaderslinked.frontend.production_user_profile'];}$queryMapper = QueryMapper::getInstance($this->adapter);$select = $queryMapper->getSql()->select();$select->columns(['id', 'user_uuid' => 'uuid', 'first_name','last_name', 'email']);$select->from(['u' => UserMapper::_TABLE]);$select->join(['ja' => JobApplicationMapper::_TABLE], 'ja.user_id = u.id', ['user_profile_id']);$select->join(['up' => UserProfileMapper::_TABLE], 'ja.user_profile_id = up.id', ['user_profile_uuid' => 'uuid']);$select->where->equalTo('u.status', User::STATUS_ACTIVE);$select->order(['first_name', 'last_name']);$items = [];$records = $queryMapper->fetchAll($select);foreach($records as $record){$item = ['first_name' => $record['first_name'],'last_name' => $record['last_name'],'email' => $record['email'],'link_view' => str_replace('[uuid]', $record['user_profile_uuid'], $user_profile_url),];array_push($items, $item);}$response = ['success' => true,'data' => $items];return new JsonModel($response);} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function statusAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$response = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($response);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$response = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($response);}if($job->company_id != $currentCompany->id) {$response = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($response);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);if(!$company) {$response = ['success' => false,'data' => 'ERROR_COMPANY_NOT_FOUND'];return new JsonModel($response);}$request = $this->getRequest();if($request->isGet()) {$data = ['success' => true,'data' => ['status' => $job->status,]];return new JsonModel($data);} else if($request->isPost()) {$form = new CompanyJobStatusForm();$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$dataPost = (array) $form->getData();$hydrator = new ObjectPropertyHydrator();$hydrator->hydrate($dataPost, $job);$jobMapper->updateStatus($job);$this->logger->info('Se actualizo el estatus del empleo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);switch($job->status) {case Job::STATUS_ACTIVE :$status = 'LABEL_ACTIVE';break;case Job::STATUS_INACTIVE :$status = 'LABEL_INACTIVE';break;case Job::STATUS_DELETED :$status = 'LABEL_DELETED';break;default :$status = '';break;}return new JsonModel(['success' => true,'data' => ['status' => $status,]]);} else {$messages = [];$form_messages = (array) $form->getMessages();foreach($form_messages as $fieldname => $field_messages){$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}}$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}public function titleAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$currentCompany = $currentUserPlugin->getCompany();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$response = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($response);}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuid($id);if(!$job) {$response = ['success' => false,'data' => 'ERROR_JOB_NOT_FOUND'];return new JsonModel($response);}if($job->company_id != $currentCompany->id) {$response = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($response);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($currentCompany->id);if(!$company) {$response = ['success' => false,'data' => 'ERROR_COMPANY_NOT_FOUND'];return new JsonModel($response);}$request = $this->getRequest();if($request->isGet()) {$data = ['success' => true,'data' => ['title' => $job->title,]];return new JsonModel($data);} else if($request->isPost()) {$form = new CompanyJobTitleForm();$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$dataPost = (array) $form->getData();$hydrator = new ObjectPropertyHydrator();$hydrator->hydrate($dataPost, $job);$jobMapper->updateTitle($job);$this->logger->info('Se actualizo el título del empleo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);return new JsonModel(['success' => true,'data' => ['title' => $job->title,]]);} else {$messages = [];$form_messages = (array) $form->getMessages();foreach($form_messages as $fieldname => $field_messages){$messages[$fieldname] = array_values($field_messages);}return new JsonModel(['success' => false,'data' => $messages]);}}$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}}