meraproject/themes/merakomis/emp/Rules.php

732 lines
31 KiB
PHP
Raw Normal View History

<?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;
}
}