Rev 6866 | 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\Mvc\Controller\AbstractActionController;use Laminas\Log\LoggerInterface;use Laminas\View\Model\ViewModel;use Laminas\View\Model\JsonModel;use LeadersLinked\Library\Functions;use LeadersLinked\Mapper\CompanyUserMapper;use LeadersLinked\Model\Job;use LeadersLinked\Mapper\LocationMapper;use LeadersLinked\Mapper\JobMapper;use LeadersLinked\Mapper\CompanyMapper;use LeadersLinked\Mapper\JobCategoryMapper;use LeadersLinked\Mapper\JobSkillMapper;use LeadersLinked\Mapper\JobDegreeMapper;use LeadersLinked\Mapper\JobLanguageMapper;use LeadersLinked\Mapper\DegreeMapper;use LeadersLinked\Mapper\LanguageMapper;use LeadersLinked\Mapper\SkillMapper;use LeadersLinked\Mapper\IndustryMapper;use LeadersLinked\Mapper\CompanySizeMapper;use LeadersLinked\Mapper\CompanyLocationMapper;use LeadersLinked\Mapper\JobApplicationMapper;use LeadersLinked\Form\Job\ApplyForm;use LeadersLinked\Model\JobApplication;use LeadersLinked\Mapper\JobSaveMapper;use LeadersLinked\Model\JobSave;use LeadersLinked\Mapper\QueryMapper;use LeadersLinked\Mapper\UserProfileMapper;class JobController 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;}/**** Generación del listado de perfiles* {@inheritDoc}* @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()*/public function indexAction(){return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}public function viewAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$flashMessenger = $this->plugin('FlashMessenger');$request = $this->getRequest();$id = $this->params()->fromRoute('id');if(!$id) {$flashMessenger->addErrorMessage('ERROR_INVALID_PARAMETER');return $this->redirect()->toRoute('dashboard');}$jobMapper = JobMapper::getInstance($this->adapter);$job = $jobMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);if(!$job) {$flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');return $this->redirect()->toRoute('dashboard');}if($job->status != Job::STATUS_ACTIVE) {$flashMessenger->addErrorMessage('ERROR_UNAUTHORIZED');return $this->redirect()->toRoute('dashboard');}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($job->company_id);if(!$company) {$flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');return $this->redirect()->toRoute('dashboard');}if($request->isGet()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);$now = $companyUserMapper->getDatebaseNow();$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');}}}$companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);$jobApplicationMapper = JobApplicationMapper::getInstance($this->adapter);$total_applications = $jobApplicationMapper->fetchTotalApplicationsByJobId($job->id);$job->visits++;$jobMapper->updateVisits($job);//if($companyUser) {// $job_apply_operation = '';//} else {$jobApplication = $jobApplicationMapper->fetchOneByJobIdAndUserId($job->id, $currentUser->id);if($jobApplication) {$job_apply_operation = 'remove-apply';} else {$job_apply_operation = 'apply';}//}$jobSaveMapper = JobSaveMapper::getInstance($this->adapter);$jobSave = $jobSaveMapper->fetchOneByJobIdAndUserId($job->id, $currentUser->id);if($jobSave) {$job_save_operation = 'remove-job-saved';} else {$job_save_operation = 'job-save';}$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;}$degrees = [];$degreeMapper = DegreeMapper::getInstance($this->adapter);$records = $degreeMapper->fetchAllActive();foreach($records as $record){$degrees[$record->uuid] = $record->name;}$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);}$languages = [];$languageMapper = LanguageMapper::getInstance($this->adapter);$records = $languageMapper->fetchAllActive();foreach($records as $record){$languages[$record->id] = $record->name;}$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);}$skills = [];$skillMapper = SkillMapper::getInstance($this->adapter);$records = $skillMapper->fetchAllActive();foreach($records as $record){$skills[$record->uuid] = $record->name;}$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);}$industryMapper = IndustryMapper::getInstance($this->adapter);$industry = $industryMapper->fetchOne($company->industry_id);$companySizeMapper = CompanySizeMapper::getInstance($this->adapter);$companySize = $companySizeMapper->fetchOne($company->company_size_id);$companyLocationMapper = CompanyLocationMapper::getInstance($this->adapter);$companyLocation = $companyLocationMapper->fetchOneMainLocationByCompanyId($company->id);$company_address = '';if($companyLocation) {$mainLocation = $locationMapper->fetchOne($companyLocation->location_id);if($mainLocation) {$company_address = $mainLocation->formatted_address;}}$user_profiles = [];$userProfileMapper = UserProfileMapper::getInstance($this->adapter);$records = $userProfileMapper->fetchAllByUserId($currentUser->id);foreach($records as $record){$user_profiles[$record->uuid] = $record->name;}$timeElapsed = Functions::timeAgo($job->updated_on, $now);if($isJson) {return new JsonModel(['company_uuid' => $company->uuid,'company_image' => $company->image,'job_uuid' => $job->uuid,'job_title' => $job->title,'job_description' => $job->description,'total_applications' => $total_applications,'location' => $location->formatted_address,'employment_type' => $employment_type,'last_date_of_application' => $last_date_of_application,'job_category' => $jobCategory->name,'timeElapsed' => $timeElapsed,'experience' => $job->experience_visible ? $job->experience_min . '-' . $job->experience_max : '','salary' => $job->salary_visible ? $job->salary_min . '-' . $job->salary_max . ' (' . $job->salary_currency . ')' : '','job_degrees' => $job_degrees,'job_languages' => $job_languages,'job_skills' => $job_skills,'job_visits' => $job->visits,'job_apply_operation' => $job_apply_operation,'job_save_operation' => $job_save_operation,'company_name' => $company->name,'company_foundation_year' => $company->foundation_year,'company_website' => $company->website,'company_industry' => $industry->name,'company_size' => $companySize->minimum_no_of_employee . '-' . $companySize->maximum_no_of_employee,'company_address' => $company_address,'user_profiles' => $user_profiles,'skills' => $skills,'languages' => $languages,'degrees' => $degrees,]);} else {$formApply = new ApplyForm($this->adapter, $currentUser->id);$this->layout()->setTemplate('layout/layout.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/job/view.phtml');$viewModel->setVariables(['company_uuid' => $company->uuid,'company_image' => $company->image,'job_uuid' => $job->uuid,'job_title' => $job->title,'job_description' => $job->description,'total_applications' => $total_applications,'location' => $location->formatted_address,'employment_type' => $employment_type,'last_date_of_application' => $last_date_of_application,'job_category' => $jobCategory->name,'timeElapsed' => $timeElapsed,'experience' => $job->experience_visible ? $job->experience_min . '-' . $job->experience_max : '','salary' => $job->salary_visible ? $job->salary_min . '-' . $job->salary_max . ' (' . $job->salary_currency . ')' : '','job_degrees' => $job_degrees,'job_languages' => $job_languages,'job_skills' => $job_skills,'job_visits' => $job->visits,'job_apply_operation' => $job_apply_operation,'job_save_operation' => $job_save_operation,'company_name' => $company->name,'company_foundation_year' => $company->foundation_year,'company_website' => $company->website,'company_industry' => $industry->name,'company_size' => $companySize->minimum_no_of_employee . '-' . $companySize->maximum_no_of_employee,'company_address' => $company_address,'formApply' => $formApply,'user_profiles' => $user_profiles]);}return $viewModel ;} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}return new JsonModel($data);}public function applyJobAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$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->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);if(!$job) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if($job->status != Job::STATUS_ACTIVE) {$data = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($data);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($job->company_id);if(!$company) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if($request->isPost()) {$form = new ApplyForm($this->adapter, $currentUser->id);$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if($form->isValid()) {$dataPost = (array) $form->getData();$userProfileMapper = UserProfileMapper::getInstance($this->adapter);$userProfile = $userProfileMapper->fetchOneByUuid($dataPost['user_profile_id']);$jobApplicationMapper = JobApplicationMapper::getInstance($this->adapter);$jobApplication = $jobApplicationMapper->fetchOneByJobIdAndUserId($job->id, $currentUser->id);$result = true;if(!$jobApplication) {$jobApplication = new JobApplication();$jobApplication->job_id = $job->id;$jobApplication->user_id = $currentUser->id;$jobApplication->user_profile_id = $userProfile->id;$result = $jobApplicationMapper->insert($jobApplication);if($result) {$this->logger->info('El usuario ' . $currentUser->first_name . ' ' . $currentUser->last_name . ' aplico al trabajo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);}}if($result) {$total = $jobApplicationMapper->fetchTotalApplicationsByJobId($job->id);$data = ['success' => true,'data' => 'LABEL_SUCCESSFUL_APPLICATION','total' => $total];} else {$data = ['success' => false,'data' => $jobApplicationMapper->getError()];}return new JsonModel($data);} 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 {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}}public function removeApplyJobAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$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->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);if(!$job) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if($job->status != Job::STATUS_ACTIVE) {$data = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($data);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($job->company_id);if(!$company) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if($request->isPost()) {$jobApplicationMapper = JobApplicationMapper::getInstance($this->adapter);$result = $jobApplicationMapper->deleteByJobIdAndUserId($job->id, $currentUser->id);if($result) {$this->logger->info('El usuario ' . $currentUser->first_name . ' ' . $currentUser->last_name . ' removio su aplicación al trabajo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$total = $jobApplicationMapper->fetchTotalApplicationsByJobId($job->id);$data = ['success' => true,'data' => 'LABEL_APPLICATION_WAS_REMOVED','total' => $total];} else {$data = ['success' => false,'data' => $jobApplicationMapper->getError()];}return new JsonModel($data);} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}}public function removeSaveJobAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$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->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);if(!$job) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if($job->status != Job::STATUS_ACTIVE) {$data = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($data);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($job->company_id);if(!$company) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if($request->isPost()) {$jobSaveMapper = JobSaveMapper::getInstance($this->adapter);$result = $jobSaveMapper->deleteByJobIdAndUserId($job->id, $currentUser->id);if($result) {$this->logger->info('El usuario ' . $currentUser->first_name . ' ' . $currentUser->last_name . ' removio este trabajo salvado ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,''];} else {$data = ['success' => false,'data' => $jobSaveMapper->getError()];}return new JsonModel($data);} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}}public function saveJobAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$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->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);if(!$job) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if($job->status != Job::STATUS_ACTIVE) {$data = ['success' => false,'data' => 'ERROR_UNAUTHORIZED'];return new JsonModel($data);}$companyMapper = CompanyMapper::getInstance($this->adapter);$company = $companyMapper->fetchOne($job->company_id);if(!$company) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if($request->isPost()) {$jobSaveMapper = JobSaveMapper::getInstance($this->adapter);$jobSave = $jobSaveMapper->fetchOneByJobIdAndUserId($job->id, $currentUser->id);if($jobSave) {$result = true;} else {$jobSave = new JobSave();$jobSave->job_id = $job->id;$jobSave->user_id = $currentUser->id;$result = $jobSaveMapper->insert($jobSave);}if($result) {$this->logger->info('El usuario ' . $currentUser->first_name . ' ' . $currentUser->last_name . ' salvo este trabajo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,];} else {$data = ['success' => false,'data' => $jobSaveMapper->getError()];}return new JsonModel($data);} else {$data = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];return new JsonModel($data);}}public function appliedJobsAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$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) {$employment_types = [job::EMPLOYMENT_TYPE_FULL_TIME => 'LABEL_EMPLOYMENT_TYPE_FULL_TIME',Job::EMPLOYMENT_TYPE_PART_TIME => 'LABEL_EMPLOYMENT_TYPE_PART_TIME',Job::EMPLOYMENT_TYPE_TEMPORARY => 'LABEL_EMPLOYMENT_TYPE_TEMPORARY',Job::EMPLOYMENT_TYPE_CONTRACT => 'LABEL_EMPLOYMENT_TYPE_CONTRACT',];$search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));$queryMapper = QueryMapper::getInstance($this->adapter);$select = $queryMapper->getSql()->select();$select->columns(['id', 'uuid', 'title', 'employment_type', 'last_date_of_application']);$select->from(['j' => JobMapper::_TABLE]);$select->join(['ja' => JobApplicationMapper::_TABLE], 'j.id = ja.job_id');$select->where->equalTo('j.network_id', $currentUser->network_id);$select->where->equalTo('j.status', Job::STATUS_ACTIVE);$select->where->equalTo('ja.user_id', $currentUser->id);if($search) {$select->where->like('title', '%' . $search . '%');}$select->order('last_date_of_application DESC');$records = $queryMapper->fetchAll($select);$items = [];foreach($records as $record){$item = ['id' => $record['uuid'],'title' => $record['title'],'employment_type' => $employment_types[$record['employment_type']],'last_date_of_application' => $record['last_date_of_application'],'link_remove' => $this->url()->fromRoute('job/remove-apply-job', ['id' => $record['uuid'] ]),'link_view' => $this->url()->fromRoute('job/view', ['id' => $record['uuid'] ]),];array_push($items, $item);}$response = ['success' => true,'data' => $items];return new JsonModel($response);} else {$this->layout()->setTemplate('layout/layout.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/job/applied-jobs.phtml');return $viewModel ;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}public function savedJobsAction(){$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$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) {$employment_types = [job::EMPLOYMENT_TYPE_FULL_TIME => 'LABEL_EMPLOYMENT_TYPE_FULL_TIME',Job::EMPLOYMENT_TYPE_PART_TIME => 'LABEL_EMPLOYMENT_TYPE_PART_TIME',Job::EMPLOYMENT_TYPE_TEMPORARY => 'LABEL_EMPLOYMENT_TYPE_TEMPORARY',];$search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));$queryMapper = QueryMapper::getInstance($this->adapter);$select = $queryMapper->getSql()->select();$select->columns(['id', 'uuid', 'title', 'employment_type', 'last_date_of_application']);$select->from(['j' => JobMapper::_TABLE]);$select->join(['js' => JobSaveMapper::_TABLE], 'j.id = js.job_id');$select->join(['c' => CompanyMapper::_TABLE], 'j.company_id = c.id',['image', 'comp_uuid'=>'uuid']);$select->where->equalTo('j.network_id', $currentUser->network_id);$select->where->equalTo('j.status', Job::STATUS_ACTIVE);$select->where->equalTo('js.user_id', $currentUser->id);if($search) {$select->where->like('title', '%' . $search . '%');}$select->order('last_date_of_application DESC');// $selectString = $queryMapper->getSql()->buildSqlString($select);// print_r(// $selectString// );$records = $queryMapper->fetchAll($select);// print_r($records);$items = [];foreach($records as $record){$item = ['id' => $record['uuid'],'title' => $record['title'],'employment_type' => $employment_types[$record['employment_type']],'last_date_of_application' => $record['last_date_of_application'],'image' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $record['comp_uuid'], 'filename' => $record['image']]),'link_remove' => $this->url()->fromRoute('job/remove-save-job', ['id' => $record['uuid'] ]),'link_view' => $this->url()->fromRoute('job/view', ['id' => $record['uuid'] ]),];array_push($items, $item);}$response = ['success' => true,'data' => $items];return new JsonModel($response);} else {$this->layout()->setTemplate('layout/layout.phtml');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/job/saved-jobs.phtml');return $viewModel ;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);}}}