meraproject/themes/merakomis/emp/Rules.php
keboss-m 5c21d25d45 Initial commit: Merakomis portal, Docker stack and user-reader API.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-24 11:04:05 +03:00

732 lines
31 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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