732 lines
31 KiB
PHP
732 lines
31 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
namespace themes\merakomis\emp;
|
|||
|
|
|
|||
|
|
use themes\merakomis\dictionary\City;
|
|||
|
|
use themes\merakomis\Emp;
|
|||
|
|
use themes\merakomis\Emp\structure\eEmpGroup;
|
|||
|
|
use themes\merakomis\Emp\structure\eEmpType;
|
|||
|
|
use themes\merakomis\Project;
|
|||
|
|
use themes\merakomis\team\Member;
|
|||
|
|
use themes\merakomis\team\Member\structure\eMemberRole;
|
|||
|
|
|
|||
|
|
|
|||
|
|
//Emp::isMeGroup(eEmpGroup::OFFICE_MOSCOW)
|
|||
|
|
//$isTop = Emp::isMeGroup(eEmpGroup::TOP);
|
|||
|
|
//$isStaffGroup = Emp::isMeGroup(eEmpGroup::STAFF);
|
|||
|
|
//$isSuperView = Emp::isSuperView();
|
|||
|
|
//$isAnyRoleDirector = Emp::isMeAnyRoleDirector();
|
|||
|
|
//$isAnyDirector = Emp::isMeAnyDirector();
|
|||
|
|
//$isViewAnalysisProject = Emp::isViewAnalysisProject();
|
|||
|
|
|
|||
|
|
class Rules {
|
|||
|
|
|
|||
|
|
static $rules;
|
|||
|
|
static $roles;
|
|||
|
|
|
|||
|
|
static function getRoles() {
|
|||
|
|
if(isset(self::$roles)) return self::$roles;
|
|||
|
|
return self::$roles = Emp::getMemberRoles(Emp::$AUTH_ID);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
static $mainEngineersRoles = [
|
|||
|
|
eMemberRole::DIRECTOR_ENGINEER,
|
|||
|
|
eMemberRole::DIRECTOR_ENGINEER_OVIK,
|
|||
|
|
eMemberRole::DIRECTOR_ENGINEER_VK,
|
|||
|
|
eMemberRole::DIRECTOR_ENGINEER_EOM,
|
|||
|
|
eMemberRole::DIRECTOR_ENGINEER_SSIAK,
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
static public function getMyRules() {
|
|||
|
|
if(isset(self::$rules)) return self::$rules;
|
|||
|
|
$rules = [];
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
if(self::isUser()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::MY_TABLE,
|
|||
|
|
self::MY_PROJECTS,
|
|||
|
|
self::MY_COMPANY,
|
|||
|
|
self::ANALYSIS_MY,
|
|||
|
|
self::RW_MY_TABLE,
|
|||
|
|
self::RW_CARD_EMP_INFO,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if(self::isRP()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_PROJECTS,
|
|||
|
|
self::ANALYSIS_PROJECTS_PROJECT,
|
|||
|
|
self::ANALYSIS_PROJECTS_SECTION,
|
|||
|
|
self::ANALYSIS_PROJECTS_SUBSECTION,
|
|||
|
|
self::ANALYSIS_PROJECTS_TEAM,
|
|||
|
|
self::ANALYSIS_PROJECTS_FINANCE,
|
|||
|
|
self::ANALYSIS_PROJECTS_SUMMARY,
|
|||
|
|
self::ANALYSIS_YEAR,
|
|||
|
|
self::PROJECTS_LIST,
|
|||
|
|
self::PROJECTS_TEAM_BUTTON,
|
|||
|
|
self::PROJECTS_CONTRACTOR,
|
|||
|
|
self::ARCHIVE_PROJECTS,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
self::RW_PROJECT_EDIT_WITHOUT_RP,
|
|||
|
|
self::RW_PROJECT_EDIT_RP_READ,
|
|||
|
|
self::RW_MEMBER,
|
|||
|
|
self::RW_CONTRACTOR,
|
|||
|
|
self::RW_CARD_EMP_ACTIVE_PROJECTS,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(self::isGIP()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_PROJECTS,
|
|||
|
|
self::ANALYSIS_PROJECTS_PROJECT,
|
|||
|
|
self::ANALYSIS_PROJECTS_SECTION,
|
|||
|
|
self::ANALYSIS_PROJECTS_SUBSECTION,
|
|||
|
|
self::ANALYSIS_PROJECTS_TEAM,
|
|||
|
|
//self::ANALYSIS_PROJECTS_FINANCE,
|
|||
|
|
self::ANALYSIS_PROJECTS_SUMMARY,
|
|||
|
|
self::ANALYSIS_YEAR,
|
|||
|
|
self::PROJECTS_LIST,
|
|||
|
|
self::PROJECTS_TEAM_BUTTON,
|
|||
|
|
self::PROJECTS_CONTRACTOR,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
self::RW_MEMBER,
|
|||
|
|
self::RW_CONTRACTOR,
|
|||
|
|
self::RW_CARD_EMP_ACTIVE_PROJECTS,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isGAP()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_PROJECTS,
|
|||
|
|
self::ANALYSIS_PROJECTS_SECTION,
|
|||
|
|
self::ANALYSIS_PROJECTS_SUBSECTION,
|
|||
|
|
self::ANALYSIS_PROJECTS_TEAM,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isGKP()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_PROJECTS,
|
|||
|
|
self::ANALYSIS_PROJECTS_SECTION,
|
|||
|
|
self::ANALYSIS_PROJECTS_SUBSECTION,
|
|||
|
|
self::ANALYSIS_PROJECTS_TEAM,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isMainEngineer()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_PROJECTS,
|
|||
|
|
self::ANALYSIS_PROJECTS_SUBSECTION,
|
|||
|
|
self::ANALYSIS_PROJECTS_TEAM,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
if(self::isDepartmentDirector()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_PROJECTS,
|
|||
|
|
self::ANALYSIS_PROJECTS_SECTION,
|
|||
|
|
self::ANALYSIS_PROJECTS_SUBSECTION,
|
|||
|
|
self::ANALYSIS_PROJECTS_TEAM,
|
|||
|
|
self::ANALYSIS_PROJECTS_SUMMARY,
|
|||
|
|
self::ANALYSIS_YEAR,
|
|||
|
|
self::ANALYSIS_COMPANY,
|
|||
|
|
//self::ANALYSIS_COMPANY_EMP3,
|
|||
|
|
self::PROJECTS_LIST,
|
|||
|
|
self::PROJECTS_TEAM_BUTTON,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_OTHER_TABLE_WRITE,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
self::RW_MEMBER,
|
|||
|
|
self::RW_CARD_EMP_STAFF,
|
|||
|
|
self::RW_CARD_EMP_ACTIVE_PROJECTS,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if(self::isGroupFinanceEditor()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::MONEY_FOT,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isGroupFinanceViewer()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_FOT,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isGroupProjectEditor()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::PROJECTS_LIST,
|
|||
|
|
self::PROJECTS_ADD_BUTTON,
|
|||
|
|
self::PROJECTS_TEAM_BUTTON,
|
|||
|
|
self::PROJECTS_CONTRACTOR,
|
|||
|
|
self::ARCHIVE_PROJECTS,
|
|||
|
|
self::RW_PROJECT_EDIT_WITHOUT_RP,
|
|||
|
|
self::RW_PROJECT_EDIT_RP_READ,
|
|||
|
|
self::RW_PROJECT_EDIT_RP_WRITE,
|
|||
|
|
self::RW_CONTRACTOR,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isGroupProjectViewer()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::MY_PROJECTS,
|
|||
|
|
self::ANALYSIS_PROJECTS,
|
|||
|
|
self::ANALYSIS_PROJECTS_PROJECT,
|
|||
|
|
self::ANALYSIS_PROJECTS_SECTION,
|
|||
|
|
self::ANALYSIS_PROJECTS_SUBSECTION,
|
|||
|
|
self::ANALYSIS_PROJECTS_TEAM,
|
|||
|
|
self::ANALYSIS_PROJECTS_SUMMARY,
|
|||
|
|
self::ANALYSIS_YEAR,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
self::RW_CARD_EMP_ACTIVE_PROJECTS,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isGroupProjectFinance()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_PROJECTS_FINANCE,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isGroupStaff()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_STAFF,
|
|||
|
|
self::STAFF_EMPLOYEE,
|
|||
|
|
self::STAFF_ABSENCE,
|
|||
|
|
self::STAFF_STATUS,
|
|||
|
|
self::STAFF_ORGTYPE,
|
|||
|
|
self::ARCHIVE_EMPLOYEE,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
self::RW_EMP_WITHOUT_ADMIN,
|
|||
|
|
self::RW_CARD_EMP_STAFF,
|
|||
|
|
self::RW_CARD_EMP_ACTIVE_PROJECTS,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isGroupMoscow()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_MOSCOW,
|
|||
|
|
self::ANALYSIS_COMPANY,
|
|||
|
|
// self::ANALYSIS_COMPANY_EMP3,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_OTHER_TABLE_WRITE,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
self::RW_CARD_EMP_ACTIVE_PROJECTS,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isGroupIvanovo()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_IVANOVO,
|
|||
|
|
self::ANALYSIS_COMPANY,
|
|||
|
|
// self::ANALYSIS_COMPANY_EMP3,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_OTHER_TABLE_WRITE,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
self::RW_CARD_EMP_ACTIVE_PROJECTS,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isGroupNovosibirsk()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_NOVOSIBIRSK,
|
|||
|
|
self::ANALYSIS_COMPANY,
|
|||
|
|
// self::ANALYSIS_COMPANY_EMP3,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_OTHER_TABLE_WRITE,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
self::RW_CARD_EMP_ACTIVE_PROJECTS,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isGroupKrasnodar()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_KRASNODAR,
|
|||
|
|
self::ANALYSIS_COMPANY,
|
|||
|
|
// self::ANALYSIS_COMPANY_EMP3,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_OTHER_TABLE_WRITE,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
self::RW_CARD_EMP_ACTIVE_PROJECTS,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isGroupSemei()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_SEMEI,
|
|||
|
|
self::ANALYSIS_COMPANY,
|
|||
|
|
// self::ANALYSIS_COMPANY_EMP3,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_OTHER_TABLE_WRITE,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
self::RW_CARD_EMP_ACTIVE_PROJECTS,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
if(self::isGroupCompany()){
|
|||
|
|
$rules = array_merge($rules, [
|
|||
|
|
self::ANALYSIS_COMPANY,
|
|||
|
|
self::ANALYSIS_COMPANY_EMP3,
|
|||
|
|
self::RW_OTHER_TABLE_READ,
|
|||
|
|
self::RW_ANALYSIS_TABLE,
|
|||
|
|
self::RW_CARD_EMP_ACTIVE_PROJECTS,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$rules = array_unique($rules);
|
|||
|
|
return self::$rules = $rules;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Список прав доступов
|
|||
|
|
const MY_TABLE = 1;
|
|||
|
|
const MY_PROJECTS = 2;
|
|||
|
|
const MY_COMPANY = 3;
|
|||
|
|
const ANALYSIS_MY = 4; // ФИО
|
|||
|
|
const ANALYSIS_PROJECTS = 5; // Мои проекты (список проектов в сайдбаре)
|
|||
|
|
const ANALYSIS_PROJECTS_PROJECT = 6; // Мои проекты / Проект / Таб Проект (кроме финансов)
|
|||
|
|
const ANALYSIS_PROJECTS_SECTION = 7; // Мои проекты / Проект / Таб Разделы (кроме финансов)
|
|||
|
|
const ANALYSIS_PROJECTS_SUBSECTION = 8; // Мои проекты / Проект / Таб Подразделы (кроме финансов)
|
|||
|
|
const ANALYSIS_PROJECTS_TEAM = 9; // Мои проекты / Проект / Таб Команда (кроме финансов)
|
|||
|
|
const ANALYSIS_PROJECTS_FINANCE = 90; // Финансы в Мои проекты и Мои проекты:годовой отчет
|
|||
|
|
const ANALYSIS_PROJECTS_SUMMARY = 91;// Мои проекты / Сводка (кроме финансов)
|
|||
|
|
const ANALYSIS_YEAR = 10; // Мои проекты: годовой отчет
|
|||
|
|
const ANALYSIS_COMPANY = 11; // Моя компания
|
|||
|
|
const ANALYSIS_STAFF = 12; // Мои кадры
|
|||
|
|
const ANALYSIS_FOT = 13; // Бюджет
|
|||
|
|
const ANALYSIS_MOSCOW = 14;
|
|||
|
|
const ANALYSIS_IVANOVO = 15;
|
|||
|
|
const ANALYSIS_NOVOSIBIRSK = 16;
|
|||
|
|
const ANALYSIS_KRASNODAR = 17;
|
|||
|
|
const ANALYSIS_SEMEI = 18;
|
|||
|
|
const PROJECTS_LIST = 19;
|
|||
|
|
const PROJECTS_ADD_BUTTON = 20;
|
|||
|
|
const PROJECTS_TEAM_BUTTON = 21;
|
|||
|
|
const PROJECTS_CONTRACTOR = 22;
|
|||
|
|
const STAFF_EMPLOYEE = 23;
|
|||
|
|
const STAFF_ABSENCE = 24;
|
|||
|
|
const STAFF_STATUS = 25;
|
|||
|
|
const STAFF_ORGTYPE = 26;
|
|||
|
|
const ARCHIVE_PROJECTS = 27;
|
|||
|
|
const ARCHIVE_EMPLOYEE = 28;
|
|||
|
|
const MONEY_FOT = 29;
|
|||
|
|
const RW_MY_TABLE = 30; // Табель свой
|
|||
|
|
const RW_OTHER_TABLE_READ = 31; // Табель другого пользователя
|
|||
|
|
const RW_OTHER_TABLE_WRITE = 32; // Табель другого пользователя
|
|||
|
|
const RW_ANALYSIS_TABLE = 33; // Аналитика другого пользователя
|
|||
|
|
const RW_PROJECT_EDIT_WITHOUT_RP = 34; // Редактор проекта: кроме поля РП
|
|||
|
|
const RW_PROJECT_EDIT_RP_READ = 36; // Редактор проекта: поле РП
|
|||
|
|
const RW_PROJECT_EDIT_RP_WRITE = 37; // Редактор проекта: поле РП
|
|||
|
|
const RW_PROJECT_BUTTON_ALL_EMP = 38; // Редактор проекта: движок Включает всех сотрудников
|
|||
|
|
const RW_MEMBER = 39; // Редактор члена команды
|
|||
|
|
const RW_CONTRACTOR = 40; // Редактор контрагента
|
|||
|
|
const RW_EMP_WITHOUT_ADMIN = 41; // Редактор сотрудника (кроме блока Администрирование)
|
|||
|
|
const RW_EMP_ADMIN = 42; // Редактор сотрудника. Блок Администрирование
|
|||
|
|
const RW_CARD_EMP_INFO = 43; // Карточка другого сотрудника. Поля: ФИО, email, телефон, Skype, Discord, Должность, Подразделение, Локация
|
|||
|
|
const RW_CARD_EMP_STAFF = 44; // Карточка другого сотрудника. Блок Кадры целиком и поле ДР
|
|||
|
|
const RW_CARD_EMP_ADMIN = 45; // Карточка другого сотрудника. Блок Администрирование
|
|||
|
|
const RW_CARD_EMP_ACTIVE_PROJECTS = 46; // Карточка другого сотрудника. Поле Активные проекты
|
|||
|
|
const ANALYSIS_COMPANY_EMP3 = 47; // Показывать ли раздел "нагрузка на сотрудников 3"
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Типы пользователей
|
|||
|
|
static public function isAdmin(){ return Emp::$data[Emp::$TYPE]==eEmpType::ADMIN; }
|
|||
|
|
static public function isUser(){ return Emp::$data[Emp::$TYPE]==eEmpType::EMP; }
|
|||
|
|
|
|||
|
|
// По ролям
|
|||
|
|
static public function isRP(){ return Emp::isMeAnyDirector(); } // РП
|
|||
|
|
static public function isGIP(){ return in_array(eMemberRole::MAIN_ENGINEER,self::getRoles()); } // ГИП
|
|||
|
|
static public function isGAP(){ return in_array(eMemberRole::MAIN_ARCHITECT,self::getRoles()); } // ГАП
|
|||
|
|
static public function isGKP(){ return in_array(eMemberRole::MAIN_CONSTRUCTOR,self::getRoles()); } // ГКП
|
|||
|
|
static public function isMainEngineer(){ return count(array_intersect(self::$mainEngineersRoles,self::getRoles())) > 0; } // Ведущий инженер
|
|||
|
|
|
|||
|
|
// По ролям в компании
|
|||
|
|
static public function isDepartmentDirector(){
|
|||
|
|
return Emp::isMeAnyDepartmentDirector();
|
|||
|
|
} // Руководитель подразделения
|
|||
|
|
static public function isAnalysysYearBySubEmps(){
|
|||
|
|
return Emp::isMeAnyDepartmentDirector() && !(self::isGIP() || self::isGroupProjectViewer());
|
|||
|
|
//return Emp::isMeAnyDepartmentDirector() && !(self::isRP() || self::isGIP() || self::isGroupProjectViewer());
|
|||
|
|
} // Руководитель подразделения
|
|||
|
|
|
|||
|
|
// По группам
|
|||
|
|
static public function isGroupFinanceEditor(){ return Emp::isMeGroup(eEmpGroup::BUDGET_EDITOR);} // Бюджет: редактор
|
|||
|
|
static public function isGroupFinanceViewer(){ return Emp::isMeGroup(eEmpGroup::BUDGET_VIEWER); } // Бюджет: наблюдатель
|
|||
|
|
static public function isGroupProjectEditor(){ return Emp::isMeGroup(eEmpGroup::PROJECT_EDITOR); } // Проект: редактор
|
|||
|
|
static public function isGroupProjectViewer(){ return Emp::isMeGroup(eEmpGroup::PROJECT_VIEWER); } // Проект: наблюдатель
|
|||
|
|
static public function isGroupProjectFinance(){ return Emp::isMeGroup(eEmpGroup::PROJECT_FINANCE); } // Проект: финансы
|
|||
|
|
static public function isGroupStaff(){ return Emp::isMeGroup(eEmpGroup::STAFF);} // Кадры
|
|||
|
|
static public function isGroupMoscow(){ return Emp::isMeGroup(eEmpGroup::OFFICE_MOSCOW); } // Офис. Москва
|
|||
|
|
static public function isGroupIvanovo(){ return Emp::isMeGroup(eEmpGroup::OFFICE_IVANOVO);} // Офис. Иваново
|
|||
|
|
static public function isGroupNovosibirsk(){ return Emp::isMeGroup(eEmpGroup::OFFICE_NOVOSIBORSK);} // Офис. Новосибирск
|
|||
|
|
static public function isGroupKrasnodar(){ return Emp::isMeGroup(eEmpGroup::OFFICE_KRASNODAR);} // Офис. Краснодар
|
|||
|
|
static public function isGroupSemei(){ return Emp::isMeGroup(eEmpGroup::OFFICE_SEMEI);} // Офис. Семей
|
|||
|
|
static public function isGroupCompany(){ return Emp::isMeGroup(eEmpGroup::COMPANY);} // Компания
|
|||
|
|
|
|||
|
|
//---------------
|
|||
|
|
// Теперь сами права доступов
|
|||
|
|
// Вспомогательные функции
|
|||
|
|
static public function checkRule($rule)
|
|||
|
|
{
|
|||
|
|
if(self::isAdmin()) return true;
|
|||
|
|
return in_array($rule,self::getMyRules());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static $projects;
|
|||
|
|
static function getProjectForAnalysis(){
|
|||
|
|
if(isset(self::$projects)) return self::$projects;
|
|||
|
|
return self::$projects = Project::getListForAnalysis();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
static $cacheMemberRoles = [];
|
|||
|
|
static public function getRoleInProject($pid){
|
|||
|
|
if(isset(self::$cacheMemberRoles[$pid])) return self::$cacheMemberRoles[$pid];
|
|||
|
|
$project = Project::getByID($pid);
|
|||
|
|
$teamId = $project[Project::$TEAM];
|
|||
|
|
$r = Member::select([
|
|||
|
|
\Query::WHERE => new \Where(\Where::_and([
|
|||
|
|
\Where::_operator( Member::$EMP,'=',Emp::$AUTH_ID),
|
|||
|
|
\Where::_operator( Member::$TEAM,'=',$teamId),
|
|||
|
|
])),
|
|||
|
|
\Query::COUNT => 1,
|
|||
|
|
]);
|
|||
|
|
$l = \DB::fetch($r);
|
|||
|
|
return self::$cacheMemberRoles[$pid] = $l[Member::$ROLE];
|
|||
|
|
}
|
|||
|
|
static public function isMeDirector($pid)
|
|||
|
|
{
|
|||
|
|
return Project::getByID(intval($pid))[Project::$DIRECTOR]==Emp::$AUTH_ID;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
static function isGipInProject($pid){
|
|||
|
|
return self::getRoleInProject($pid)==eMemberRole::MAIN_ENGINEER;
|
|||
|
|
}
|
|||
|
|
static function isGapInProject($pid){
|
|||
|
|
return self::getRoleInProject($pid)==eMemberRole::MAIN_ARCHITECT;
|
|||
|
|
}
|
|||
|
|
static function isGkpInProject($pid){
|
|||
|
|
return self::getRoleInProject($pid)==eMemberRole::MAIN_CONSTRUCTOR;
|
|||
|
|
}
|
|||
|
|
static function isMainEngineerInProject($pid){
|
|||
|
|
return in_array(self::getRoleInProject($pid),self::$mainEngineersRoles);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static $subemps;
|
|||
|
|
static public function getSubEmps(){
|
|||
|
|
if(isset(self::$subemps)) return self::$subemps;
|
|||
|
|
return self::$subemps = Emp::getSubEmps(Emp::$AUTH_ID);
|
|||
|
|
}
|
|||
|
|
static public function isSubEmp($emp_id){
|
|||
|
|
return in_array($emp_id,self::getSubEmps());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static function isEmpInMyCity($emp_id)
|
|||
|
|
{
|
|||
|
|
$emp = Emp::getByID($emp_id);
|
|||
|
|
$city = City::getByID(intval( $emp[Emp::$CITY]))[City::$GROUP];
|
|||
|
|
|
|||
|
|
|
|||
|
|
$isMoscow = self::isGroupMoscow() && $city==eEmpGroup::OFFICE_MOSCOW;
|
|||
|
|
$isIvanovo = self::isGroupIvanovo() && $city==eEmpGroup::OFFICE_IVANOVO;
|
|||
|
|
$isNovosibirsk = self::isGroupNovosibirsk() && $city==eEmpGroup::OFFICE_NOVOSIBORSK;
|
|||
|
|
$isKrasnodar = self::isGroupKrasnodar() && $city==eEmpGroup::OFFICE_KRASNODAR;
|
|||
|
|
$isSemei = self::isGroupSemei() && $city==eEmpGroup::OFFICE_SEMEI;
|
|||
|
|
|
|||
|
|
return $isMoscow || $isIvanovo || $isNovosibirsk || $isKrasnodar || $isSemei;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
static $myCitySubEmps;
|
|||
|
|
static function getMyCitySubEmps(){
|
|||
|
|
if(isset(self::$myCitySubEmps)) return self::$myCitySubEmps;
|
|||
|
|
$res = [];
|
|||
|
|
$groups = Group::get(Emp::$AUTH_ID);
|
|||
|
|
if($groups) {
|
|||
|
|
$r = Emp::select([
|
|||
|
|
\Query::SELECT => [Emp::$ID],
|
|||
|
|
\Query::WHERE => new \Where(\Where::_and([
|
|||
|
|
\Where::_inQuery(Emp::$CITY, [
|
|||
|
|
\Query::TABLES => [City::$table_name],
|
|||
|
|
\Query::SELECT => [City::$ID],
|
|||
|
|
\Query::WHERE => new \Where(\Where::_in(City::$GROUP, $groups))
|
|||
|
|
])
|
|||
|
|
]))
|
|||
|
|
]);
|
|||
|
|
while ($l = \DB::fetch($r)) {
|
|||
|
|
$res[] = $l[Emp::$ID];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return self::$myCitySubEmps = $res;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static $readEmpIdsForTableAndAnalysis;
|
|||
|
|
static function getReadEmpIdsForTableAndAnalysis() {
|
|||
|
|
if(isset(self::$readEmpIdsForTableAndAnalysis)) return self::$readEmpIdsForTableAndAnalysis;
|
|||
|
|
$res = self::getSubEmps();
|
|||
|
|
$projects = self::getProjectForAnalysis();
|
|||
|
|
$teamIds = [];
|
|||
|
|
foreach ($projects as $project) {
|
|||
|
|
$teamIds[] = $project[Project::$TEAM];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if($teamIds) {
|
|||
|
|
$r = Member::select([
|
|||
|
|
\Query::SELECT => [Member::$EMP],
|
|||
|
|
\Query::WHERE => new \Where(\Where::_and([
|
|||
|
|
\Where::_in(Member::$TEAM, $teamIds),
|
|||
|
|
]))
|
|||
|
|
]);
|
|||
|
|
while ($l = \DB::fetch($r)) {
|
|||
|
|
$res[] = $l[Member::$EMP];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$res = array_merge($res,self::getMyCitySubEmps());
|
|||
|
|
$res = array_values(array_unique($res));
|
|||
|
|
|
|||
|
|
return self::$readEmpIdsForTableAndAnalysis = array_unique($res);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Личный кабинет
|
|||
|
|
|
|||
|
|
|
|||
|
|
static public function isMyTable() { return self::checkRule(self::MY_TABLE); }
|
|||
|
|
static public function isMyProjects() { return self::checkRule(self::MY_PROJECTS); }
|
|||
|
|
static public function isMyCompany() { return self::checkRule(self::MY_COMPANY); }
|
|||
|
|
static public function isAnalysisMy() { return self::checkRule(self::ANALYSIS_MY); }
|
|||
|
|
static public function isAnalysisProjects() { return self::checkRule(self::ANALYSIS_PROJECTS); }
|
|||
|
|
static public function isAnalysisProjectsProject($PROJECT_ID) {
|
|||
|
|
if(self::isAdmin()) return true;
|
|||
|
|
|
|||
|
|
$role = self::getRoleInProject($PROJECT_ID);
|
|||
|
|
$isRole = in_array($role,[eMemberRole::MAIN_ENGINEER]);
|
|||
|
|
$isRp = self::isMeDirector($PROJECT_ID);
|
|||
|
|
$isProjectViewer = self::isGroupProjectViewer();
|
|||
|
|
return $isRole || $isRp || $isProjectViewer;
|
|||
|
|
}
|
|||
|
|
static public function isAnalysisProjectsSection($PROJECT_ID) {
|
|||
|
|
if(self::isAdmin()) return true;
|
|||
|
|
|
|||
|
|
$role = self::getRoleInProject($PROJECT_ID);
|
|||
|
|
$isRole = in_array($role,[eMemberRole::MAIN_ENGINEER,eMemberRole::MAIN_ARCHITECT,eMemberRole::MAIN_CONSTRUCTOR]);
|
|||
|
|
$isRp = self::isMeDirector($PROJECT_ID);
|
|||
|
|
$isProjectViewer = self::isGroupProjectViewer();
|
|||
|
|
$isDepartment = Emp::isMeAnyDepartmentDirector();
|
|||
|
|
return $isRole || $isRp || $isProjectViewer || $isDepartment;
|
|||
|
|
}
|
|||
|
|
static public function isAnalysisProjectsSubsection($PROJECT_ID) {
|
|||
|
|
if(self::isAdmin()) return true;
|
|||
|
|
|
|||
|
|
$role = self::getRoleInProject($PROJECT_ID);
|
|||
|
|
$isRole = in_array($role,[eMemberRole::MAIN_ENGINEER,eMemberRole::MAIN_ARCHITECT,eMemberRole::MAIN_CONSTRUCTOR]) || in_array($role,self::$mainEngineersRoles);
|
|||
|
|
$isRp = self::isMeDirector($PROJECT_ID);
|
|||
|
|
$isProjectViewer = self::isGroupProjectViewer();
|
|||
|
|
$isDepartment = Emp::isMeAnyDepartmentDirector();
|
|||
|
|
return $isRole || $isRp || $isProjectViewer || $isDepartment;
|
|||
|
|
}
|
|||
|
|
static public function isAnalysisProjectsTeam($PROJECT_ID) {
|
|||
|
|
if(self::isAdmin()) return true;
|
|||
|
|
|
|||
|
|
$role = self::getRoleInProject($PROJECT_ID);
|
|||
|
|
$isRole = in_array($role,[eMemberRole::MAIN_ENGINEER,eMemberRole::MAIN_ARCHITECT,eMemberRole::MAIN_CONSTRUCTOR]) || in_array($role,self::$mainEngineersRoles);
|
|||
|
|
$isRp = self::isMeDirector($PROJECT_ID);
|
|||
|
|
$isProjectViewer = self::isGroupProjectViewer();
|
|||
|
|
$isDepartment = Emp::isMeAnyDepartmentDirector();
|
|||
|
|
return $isRole || $isRp || $isProjectViewer || $isDepartment;
|
|||
|
|
}
|
|||
|
|
static public function isAnalysisProjectsFinance($PROJECT_ID = 0) {
|
|||
|
|
if(self::isAdmin()) return true;
|
|||
|
|
else return true;
|
|||
|
|
$isGroup = self::isGroupProjectFinance();
|
|||
|
|
|
|||
|
|
if(!$PROJECT_ID){
|
|||
|
|
//return $isGroup || Emp::isMeAnyDirector();
|
|||
|
|
return $isGroup || Emp::isMeAnyDirector();
|
|||
|
|
}
|
|||
|
|
$role = self::getRoleInProject($PROJECT_ID);
|
|||
|
|
$isRole = false;//in_array($role,[eMemberRole::MAIN_ENGINEER]);
|
|||
|
|
$isRp = self::isMeDirector($PROJECT_ID);
|
|||
|
|
return $isRole || $isRp || $isGroup;
|
|||
|
|
}
|
|||
|
|
static public function isAnalysisProjectsShowMoney($PROJECT_ID = 0) {
|
|||
|
|
if(self::isAdmin()) return true;
|
|||
|
|
$isGroup = self::isGroupProjectFinance();
|
|||
|
|
$isRp = $PROJECT_ID ? self::isMeDirector($PROJECT_ID) : Emp::isMeAnyDirector();
|
|||
|
|
//if($PROJECT_ID) $isRp = false;
|
|||
|
|
return $isGroup || $isRp;
|
|||
|
|
}
|
|||
|
|
static public function isAnalysisProjectsSummary() {
|
|||
|
|
return self::checkRule(self::ANALYSIS_PROJECTS_SUMMARY);
|
|||
|
|
}
|
|||
|
|
static public function isAnalysisYear() { return self::checkRule(self::ANALYSIS_YEAR); }
|
|||
|
|
static public function isAnalysisCompany() {
|
|||
|
|
return self::checkRule(self::ANALYSIS_COMPANY)
|
|||
|
|
|| self::checkRule(self::ANALYSIS_MOSCOW)
|
|||
|
|
|| self::checkRule(self::ANALYSIS_IVANOVO)
|
|||
|
|
|| self::checkRule(self::ANALYSIS_NOVOSIBIRSK)
|
|||
|
|
|| self::checkRule(self::ANALYSIS_KRASNODAR)
|
|||
|
|
|| self::checkRule(self::ANALYSIS_SEMEI)
|
|||
|
|
|| Emp::isMeAnyDepartmentDirector()
|
|||
|
|
;
|
|||
|
|
}
|
|||
|
|
static public function isAnalysisAllProjects() {
|
|||
|
|
return
|
|||
|
|
self::isAdmin()
|
|||
|
|
|| self::isGroupProjectViewer()
|
|||
|
|
|| Emp::isMeAnyDirector()
|
|||
|
|
;
|
|||
|
|
}
|
|||
|
|
static public function isAnalysisStaff() { return self::checkRule(self::ANALYSIS_STAFF); }
|
|||
|
|
static public function isAnalysisFot() { return self::checkRule(self::ANALYSIS_FOT); }
|
|||
|
|
static public function isAnalysisMoscow() { return self::checkRule(self::ANALYSIS_MOSCOW); }
|
|||
|
|
static public function isAnalysisIvanovo() { return self::checkRule(self::ANALYSIS_IVANOVO); }
|
|||
|
|
static public function isAnalysisNovosibirsk() { return self::checkRule(self::ANALYSIS_NOVOSIBIRSK); }
|
|||
|
|
static public function isAnalysisKrasnodar() { return self::checkRule(self::ANALYSIS_KRASNODAR); }
|
|||
|
|
static public function isAnalysisSemei() { return self::checkRule(self::ANALYSIS_SEMEI); }
|
|||
|
|
static public function isProjectsList() { return self::checkRule(self::PROJECTS_LIST); }
|
|||
|
|
static public function isProjectsAddButton() { return self::checkRule(self::PROJECTS_ADD_BUTTON); }
|
|||
|
|
static public function isProjectsTeamButton() { return self::checkRule(self::PROJECTS_TEAM_BUTTON); }
|
|||
|
|
static public function isProjectsContractor() { return self::checkRule(self::PROJECTS_CONTRACTOR); }
|
|||
|
|
static public function isStaffEmployee() { return self::checkRule(self::STAFF_EMPLOYEE); }
|
|||
|
|
static public function isStaffAbsence() { return self::checkRule(self::STAFF_ABSENCE); }
|
|||
|
|
static public function isStaffStatus() { return self::checkRule(self::STAFF_STATUS); }
|
|||
|
|
static public function isStaffOrgtype() { return self::checkRule(self::STAFF_ORGTYPE); }
|
|||
|
|
static public function isArchiveProjects() { return self::checkRule(self::ARCHIVE_PROJECTS); }
|
|||
|
|
static public function isArchiveEmployee() { return self::checkRule(self::ARCHIVE_EMPLOYEE); }
|
|||
|
|
static public function isMoneyFot() { return self::checkRule(self::MONEY_FOT); }
|
|||
|
|
static public function isRwMyTable() { return self::checkRule(self::RW_MY_TABLE); }
|
|||
|
|
|
|||
|
|
|
|||
|
|
static function isAnalysisCompanyEmp3() { return self::checkRule(self::ANALYSIS_COMPANY_EMP3); }
|
|||
|
|
static function toIntArray(&$arr){foreach ($arr as $k => $v) {$arr[$k] = intval($v);} return $arr;}
|
|||
|
|
static public function readOtherTableRead() {
|
|||
|
|
|
|||
|
|
$isProjectViewer = self::isGroupProjectViewer();
|
|||
|
|
$isStaff = self::isGroupStaff();
|
|||
|
|
$isCompany = self::isGroupCompany();
|
|||
|
|
if($isProjectViewer || $isStaff || $isCompany) return [-1];
|
|||
|
|
$res = self::getReadEmpIdsForTableAndAnalysis();
|
|||
|
|
return self::toIntArray($res);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
static public function writeOtherTableWrite() {
|
|||
|
|
$res = array_merge(self::getSubEmps(),self::getMyCitySubEmps());
|
|||
|
|
$res = array_values(array_unique($res));
|
|||
|
|
return self::toIntArray($res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
static public function readAnalysisTableEmp() {
|
|||
|
|
$isProjectViewer = self::isGroupProjectViewer();
|
|||
|
|
$isStaff = self::isGroupStaff();
|
|||
|
|
$isCompany = self::isGroupCompany();
|
|||
|
|
if($isProjectViewer || $isStaff || $isCompany || self::isAdmin()) return [-1];
|
|||
|
|
$res = self::getReadEmpIdsForTableAndAnalysis();
|
|||
|
|
return self::toIntArray($res);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
static function isWriteOtherTableWrite($emp_id){
|
|||
|
|
if(self::isAdmin()) return true;
|
|||
|
|
if(in_array($emp_id,self::writeOtherTableWrite())) return true;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
static function isReadAnalysisTableEmp($emp_id)
|
|||
|
|
{
|
|||
|
|
if($emp_id==Emp::$AUTH_ID) return true;
|
|||
|
|
if(self::isAdmin()) return true;
|
|||
|
|
if(self::readAnalysisTableEmp()[0]==-1) return true;
|
|||
|
|
if(in_array($emp_id,self::readAnalysisTableEmp())) return true;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
static public function isRwProjectEditWithoutRp($PROJECT_ID) {
|
|||
|
|
if(!$PROJECT_ID) return true;
|
|||
|
|
$isRp = self::isMeDirector($PROJECT_ID);
|
|||
|
|
return $isRp || self::checkRule(self::RW_PROJECT_EDIT_RP_WRITE);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
static public function isRwProjectEditRpRead() { return self::checkRule(self::RW_PROJECT_EDIT_RP_READ); }
|
|||
|
|
static public function isRwProjectEditRpWrite($PROJECT_ID) {
|
|||
|
|
return self::checkRule(self::RW_PROJECT_EDIT_RP_WRITE);
|
|||
|
|
}
|
|||
|
|
static public function isRwProjectButtonAllEmp() { return self::checkRule(self::RW_PROJECT_BUTTON_ALL_EMP); }
|
|||
|
|
static public function isRwMember($team_id,$MEMBER_ID = null) {
|
|||
|
|
if(self::isAdmin()) return true;
|
|||
|
|
|
|||
|
|
|
|||
|
|
$project = Project::getOneEqualByColumn(Project::$TEAM,$team_id);
|
|||
|
|
$projectId = $project[Project::$ID];
|
|||
|
|
$isRp = self::isMeDirector($projectId);
|
|||
|
|
|
|||
|
|
$role = self::getRoleInProject($projectId);
|
|||
|
|
$isRole = in_array($role,[eMemberRole::MAIN_ENGINEER]);
|
|||
|
|
|
|||
|
|
$isDepartment = false;
|
|||
|
|
if($MEMBER_ID) {
|
|||
|
|
$member = Member::getByID($MEMBER_ID);
|
|||
|
|
$subemps = self::getSubEmps();
|
|||
|
|
$isDepartment = in_array($member[Member::$EMP], $subemps);
|
|||
|
|
}else {
|
|||
|
|
$isDepartment = Emp::isMeAnyDepartmentDirector();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
return $isRp || $isRole || $isDepartment;
|
|||
|
|
}
|
|||
|
|
static public function isRwContractor() { return self::checkRule(self::RW_CONTRACTOR); }
|
|||
|
|
static public function isRwEmpWithoutAdmin() { return self::checkRule(self::RW_EMP_WITHOUT_ADMIN); }
|
|||
|
|
static public function isRwEmpAdmin() { return self::checkRule(self::RW_EMP_ADMIN); }
|
|||
|
|
static public function isRwCardEmpInfo() { return self::checkRule(self::RW_CARD_EMP_INFO); }
|
|||
|
|
static public function isRwCardEmpStaff($emp_id) {
|
|||
|
|
$isDepartment = self::isSubEmp($emp_id);
|
|||
|
|
$isStuff = self::isGroupStaff();
|
|||
|
|
$isMe = $emp_id==Emp::$AUTH_ID;
|
|||
|
|
|
|||
|
|
return $isDepartment || $isStuff || $isMe;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
static public function isRwCardEmpAdmin($emp_id) {
|
|||
|
|
return self::isAdmin();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
static public function isRwCardEmpActiveProjects($emp_id) {
|
|||
|
|
|
|||
|
|
$isRp = self::isRP();
|
|||
|
|
$isGip = self::isGip();
|
|||
|
|
$isDepartment = self::isSubEmp($emp_id);
|
|||
|
|
$isProjectViewer = self::isGroupProjectViewer();
|
|||
|
|
$isStuff = self::isGroupStaff();
|
|||
|
|
$isCompany = self::isGroupCompany();
|
|||
|
|
$isInMyCity = self::isEmpInMyCity($emp_id);
|
|||
|
|
$isMe = $emp_id==Emp::$AUTH_ID;
|
|||
|
|
|
|||
|
|
return $isRp || $isGip || $isDepartment || $isProjectViewer || $isStuff || $isCompany || $isInMyCity || $isMe;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|