<?php
class onJobContentBeforeList extends cmsAction {
public function run($data){
list($ctype, $items) = $data;
if ($ctype['name'] != 'job' && $ctype['name'] != 'cv'){ return $data; }
if ($ctype['name'] == 'cv'){
if ($items){
$companies = $this->cms_user->id ? $this->model->
selectOnly('i.id')->
filterEqual('i.user_id', $this->cms_user->id)->
getData('con_job_org') : false;
$companies = $companies ? array_collection_to_list($companies, 'id', 'id') : false;
$events = $this->cms_user->id ? $this->model->
selectOnly('i.id, i.cv_id')->
filterEqual('i.user_id', $this->cms_user->id)->
filterEqual('i.target', 'job')->
filterIn('i.cv_id', $keys)->
filterIsNull('i.closed')->
getData('con_job_events', false, false, function($item, $model){ return $item['cv_id']; }) : false;
// сначала смотрим есть ли записи групп
foreach($items as $id => $item){
$items[$id]['is_private_item'] = false;
if (in_array($item['is_private'], array(100, 101)) && !$this->cms_user->is_admin){
// для гостей показываем общее сообщение
if (!$this->cms_user->is_logged){
$items[$id]['is_private_item'] = true;
$items[$id]['private_item_hint'] = LANG_JOB_PRIVATE_AUTH;
continue;
} else {
$items[$id]['private_item_hint'] = LANG_JOB_PRIVATE_USERS_HINT;
}
// авторам всё показываем
if($this->cms_user->id == $item['user_id']){
$items[$id]['is_private_item'] = false;
continue;
}
// отдельно складываем id если ограничен по компаниям
if($item['is_private'] == 100 && !$companies && !$this->cms_user->is_logged){
$items[$id]['is_private_item'] = true;
$items[$id]['private_item_hint'] = LANG_JOB_PRIVATE_USERS_HINT;
continue;
}
// отдельно складываем id если ограничен по компаниям
if($item['is_private'] == 101){
if($companies){
$items[$id]['is_private_item'] = false;
$items[$id]['private_item_hint'] = LANG_JOB_PRIVATE_ORGS_HINT;
$allow_companies_id = cmsModel::yamlToArray($item['allow_companies_id']);
$is_can_view = $this->cms_user->isUserInGroups($companies, $allow_companies_id);
if (!$is_can_view){
$items[$id]['is_private_item'] = true;
$items[$id]['private_item_hint'] = LANG_JOB_PRIVATE_ORGS_HINT;
}
} else {
$items[$id]['is_private_item'] = true;
$items[$id]['private_item_hint'] = LANG_JOB_PRIVATE_ORGS_HINT;
}
}
}
if ($this->cms_user->id == $item['user_id'] && $events && in_array($id, $events)){ $items[$id]['is_event_exists'] = true;
}
}
}
} else {
if (!empty($ctype['dataJobModel'])){ foreach ($ctype['dataJobModel'] as $key => $val){
$this->model->{$key} = $val;
}
if (empty($ctype['dataJobModel']['join'])){ $this->model->joinLeft('con_job_cats', 'c', 'c.id=i.category_id');
}
$ctype['dataJobMap'] = $this->model->
selectOnly('i.id, i.title, i.slug, i.zp, i.zp_cache, i.address_cache, c.ico as cat_icon')->
get('con_job');
}
if ($items){
$events = $this->cms_user->id ? $this->model->
selectOnly('i.id, i.job_id')->
filterEqual('i.user_id', $this->cms_user->id)->
filterEqual('i.target', 'cv')->
filterIn('i.job_id', $keys)->
filterIsNull('i.closed')->
getData('con_job_events', false, false, function($item, $model){ return $item['job_id']; }) : false;
if ($events){
foreach($items as $id => $item){
if ($this->cms_user->id == $item['user_id'] && in_array($id, $events)){ $items[$id]['is_event_exists'] = true;
}
}
}
}
}
return [$ctype, $items];
}
}