Rev 14813 | Rev 15349 | 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', 'title'];
$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();
$jobCategories = [];
$jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
$records = $jobCategoryMapper->fetchAllActives();
foreach ($records as $record) {
$jobCategories[$record->uuid] = $record->name;
}
$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,
'job_categories' => $jobCategories,
'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('m/d/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' => $job->description,
'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);
}
$employment_types = [];
$employment_types[Job::EMPLOYMENT_TYPE_FULL_TIME] = 'LABEL_EMPLOYMENT_TYPE_FULL_TIME';
$employment_types[Job::EMPLOYMENT_TYPE_PART_TIME] = 'LABEL_EMPLOYMENT_TYPE_PART_TIME';
$employment_types[Job::EMPLOYMENT_TYPE_CONTRACT] = 'LABEL_EMPLOYMENT_TYPE_CONTRACT';
$employment_types[Job::EMPLOYMENT_TYPE_TEMPORARY] = 'LABEL_EMPLOYMENT_TYPE_TEMPORARY';
$request = $this->getRequest();
if ($request->isGet()) {
$data = [
'success' => true,
'data' => [
'employment_type' => $job->employment_type,
'employment_types' => $employment_types
]
];
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);
}
$jobCategories = [];
$jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
$records = $jobCategoryMapper->fetchAllActives();
foreach ($records as $record) {
$jobCategories[$record->uuid] = $record->name;
}
$jobCategory = $jobCategoryMapper->fetchOne($job->job_category_id);
$request = $this->getRequest();
if ($request->isGet()) {
$data = [
'success' => true,
'data' => [
'job_category' => $jobCategory->uuid,
'job_categories' => $jobCategories
],
];
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);
}
$currencies = [];
$currencyMapper = CurrencyMapper::getInstance($this->adapter);
$records = $currencyMapper->fetchAllActives();
foreach($records as $record)
{
$currencies[$record->currency] = $record->name;
}
$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,
'currencies' => $currencies,
]
];
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()) {
$skills = [];
$skillMapper = SkillMapper::getInstance($this->adapter);
$records = $skillMapper->fetchAllActives();
foreach ($records as $record) {
$skills[$record->uuid] = $record->name;
}
$jobSkillMapper = JobSkillMapper::getInstance($this->adapter);
$skillsByjob = $jobSkillMapper->fetchAllByJobId($job->id);
$items = [];
foreach ($skillsByjob as $skill) {
$skill = $skillMapper->fetchOne($skill->skill_id);
array_push($items, $skill->uuid);
}
$data = [
'success' => true,
'data' => [
'skills_selected' => $items,
'skills_available' => $skills
]
];
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()]);
$languages = [];
$languageMapper = LanguageMapper::getInstance($this->adapter);
$records = $languageMapper->fetchAllActives();
foreach ($records as $record) {
$languages[$record->id] = $record->name;
}
$jobLanguageMapper = JobLanguageMapper::getInstance($this->adapter);
$languagesSelected = $jobLanguageMapper->fetchAllByJobId($job->id);
$items = [];
foreach ($languagesSelected as $language) {
array_push($items, $language->language_id);
}
$data = [
'success' => true,
'data' => [
'languages_selected' => $items,
'languages_available' => $languages
]
];
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()]);
$degrees_available = [];
$degreeMapper = DegreeMapper::getInstance($this->adapter);
$records = $degreeMapper->fetchAllActives();
foreach ($records as $record) {
$degrees_available[$record->uuid] = $record->name;
}
$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' => [
'degrees_selected' => $items,
'degrees_available' => $degrees_available
]
];
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('m/d/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('m/d/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->where->equalTo('ja.job_id', $job->id);
$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);
}
}