Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 1327 | 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\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 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()
    {
        
        return new JsonModel([
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ]);
    }

    public function viewAction()
    {
        
        $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->fetchOneByUuid($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);
            $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->fetchAllActives();
            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->fetchAllActives();
            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->fetchAllActives();
            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;
            }
            
            
            $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $job->updated_on);
            $timeElapsed = Functions::timeElapsedString($dt->getTimestamp());
            
            $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()
    {
        $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_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()) {
            $currentUserPlugin = $this->plugin('currentUserPlugin');
            $currentUser = $currentUserPlugin->getUser();
            
            $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()
    {
        $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_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()) {
            $currentUserPlugin = $this->plugin('currentUserPlugin');
            $currentUser = $currentUserPlugin->getUser();

            $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()
    {
        $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_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()) {
            $currentUserPlugin = $this->plugin('currentUserPlugin');
            $currentUser = $currentUserPlugin->getUser();
            
            $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()
    {
        $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_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()) {
            $currentUserPlugin = $this->plugin('currentUserPlugin');
            $currentUser = $currentUserPlugin->getUser();
            
            $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',
                ];
                
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
                
                $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.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 = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
                
                $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->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');
                
                $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-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'
            ]);
        }
    }
 
}