meraproject/themes/merakomis/controller.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

778 lines
44 KiB
PHP
Raw 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.

<?
namespace controller\themes\merakomis;
use common\Image;
use core\lang\structure\LangVariable as V;
use ModuleBZ\Form;
use ModuleBZ\Form\Input\Text;
use ModuleBZ\Form\Input\Textarea;
use ModuleBZ\Layout\Row;
use ms\ms\structure\msTo;
use ms\Portal;
use ms\portal\Section;
use ms\table\Filter;
use themes\Merakomis;
use themes\merakomis\Emp;
use themes\merakomis\emp\Rules;
use themes\merakomis\Emp\structure\eEmpGroup;
use themes\merakomis\structure\eContentPage;
use themes\merakomis as Theme;
use themes\merakomis\Team\structure\Lang as Vars;
class Api {
static function ping(){
echo 'pong';
}
static function migrate(){
$q = "SHOW FULL PROCESSLIST";
$r = \DB::executeString($q);
while($l = \DB::fetch($r)){
echo '<pre>';
echo var_dump($l);
echo '</pre>';
}
exit;
//$q = "SELECT * FROM `tmerakomisemp` LIMIT 100";
$q = "SHOW COLUMNS FROM `tmerakomisemp`";
$q = "ALTER TABLE tmerakomisemp CHANGE tMerakomisEmp_tg_acc tMerakomisEmp_tg_acc VARCHAR(31) NOT NULL DEFAULT ''";
$r = \DB::executeString($q);
echo '<pre>';
echo var_dump($q,$r,mysqli_error(\DB::$DB));
echo '</pre>';
while($l = \DB::fetch($r)){
echo '<pre>';
echo var_dump($l);
echo '</pre>';
}
}
static function replaceTableNames(){
exit;
//*
// Показывать ли все ошибки
error_reporting(E_ALL);
ini_set('display_errors',true);
/*/
ini_set('display_errors','Off');
/**/
$x = file_get_contents("C:\Users\Helios 300\Desktop\merakomis to module (1).sql");
echo '<pre>';
echo var_dump(strlen($x));
echo '</pre>';
foreach (Merakomis::$modules as $m){
$class = Merakomis::$module_prefix.'\\'.$m;
$tb = $class::$table_name;
$tb2 = strtolower($tb);
$x = str_replace($tb2,$tb,$x);
}
file_put_contents("C:\Users\Helios 300\Desktop\merakomis to module (2).sql",$x);
}
static function getNotifyCount(){
$res = ['view'=>true];
if($_COOKIE['viewed'.date('Ymd')]) {
$res['view'] = false;
} else {
$x = Emp::getBirthday();
$res['view'] = boolval( count($x['dates']) );
}
echo je($res);
}
static function viewedNotify(){
\Core::setCookie('viewed'.date('Ymd'),'1',time()+60*60*24);
}
static function test(){
//$r = Merakomis::mail("v.gvozdikov@merakom.ru","Виктор","111",'222');;
//$r = Merakomis::mail("starosta-91@ya.ru","Виктор","111",'222');;
$res= [];
$x = Merakomis::encryptNumber(50000);
$y = Merakomis::decryptNumber($x);
echo '[';
for($i=0;$i<100;$i++){
$res[] = Merakomis::encryptNumber($i);
echo $i.' => "'.$res[$i].'",';
}
echo ']';
$x = [0 => "ZjRTRHliUDJJZlMvb1BVNHRzOERtdz09",1 => "eVgxVnNxTmkxMUd0ZWcvSzFaSXdqQT09",2 => "UGF0eXNqcFVtTFpaajE0b1RTWE8zdz09",3 => "RThRdE1FNmpIci85QTZ3YmFwUjZWdz09",4 => "eGovemV5S2xWTGZSSWs0a2I4dGh5UT09",5 => "T0pWQUdTcndGbjRMWG5KdkxCSG54dz09",6 => "TkNPMUVtSWF1R2gyd1duUXBxcVcxQT09",7 => "UGZDeG40dU9vSEZiMHJFWEMvVTJTUT09",8 => "VVRzb1V5Mk1SK0JQM0tOWDFzVkV1QT09",9 => "Zzk4dGZYRGNPNjNJVm0vWnlQd05Hdz09",10 => "YlYvcXF5WGJPMUpxVXBNemRkLzlVQT09",11 => "TllpTEd1QWtWbCtuU3hGN243NzJtdz09",12 => "WDkzL2wwTHlnRVhVWTBFT3d2VVJPUT09",13 => "QjFrRW1tOTQ1K1B5cWRpRXpkMXFmUT09",14 => "NWQ4QjZvN2hrOGhvOTl1RDcyVStxQT09",15 => "NThDbVdISXN4YU85cWcxSHpxMWFUdz09",16 => "eDFVeUFxT3pTNVpqYXVRMXRpUUFrZz09",17 => "K1VZU3dmUWNjcWg3QzJydytTK1J4dz09",18 => "c0xKZUg3bThVcitBdGhYRW0xbm5aZz09",19 => "VXdpN1Fkd3Q4SytFb2VvQmdGQVBsZz09",20 => "MFRWVG9rR1c3dy9ZUXRCekluU1Ridz09",21 => "UG1odlBwZFFhVE5zc2JLWmI2ZDl3UT09",22 => "VXJYeFBZSDJYMmQ5SkhvU3BIRGZudz09",23 => "S0FkcXM5N2FmVzFNM3lCZS8vTG8yUT09",24 => "VDdwSnZlK25OSjVMQmlTWHZYaWMzQT09",25 => "VUNYUmQwOW4vUUtyYnRnRXJsV3kzdz09",26 => "eVpURnEwaEtITUEvaS9GZ1oyeHVnQT09",27 => "aEs2a3c1NFhmOG1CRjhtcEEyUnIrZz09",28 => "d1FqbnZaTU05T1c0WVJTS0xYcDBNQT09",29 => "VC9uVEZuUm16VnZPTWc3RXYzSTYvQT09",30 => "Sk9ySWhaNmdHU0ZVVk9Od1VTMWduUT09",31 => "NWxVaVFiWDBCc2NGYkRORzZxM1Fydz09",32 => "djdwSDMyK21tMlMyK3o4OUhTblpFZz09",33 => "YzZiU0NBcVpUd0ZXcmNqQ1dYOXowdz09",34 => "b3IveGFaT0ZHMlh5UjVCazhHQkJqQT09",35 => "Vm16T0FlSnNaenFlN1l0WU1rcVZudz09",36 => "YjhadzZPQ1pVVy9lYS9EYlkyRXp2dz09",37 => "aUxibDZnRktPVEg2VWFtUzYzTTZRQT09",38 => "c1NEcnhJQWk4UTk0WEU4Z0JMRyswZz09",39 => "N0d2T1F2Q2tqamVpeHhzdEtTZ2p0QT09",40 => "aXZDV1RTN3oxa2p2TVFwSjRRRXJOUT09",41 => "V1FZZWlpcFR2UUlFR0FpUExUZHVMQT09",42 => "aXdYUHU4OE1SbzlHeHV5RDdlVWZndz09",43 => "Z0NzYkl3TFRnUDNLT09yMTZ6V0d5UT09",44 => "dDJ3NFlBT3kzeVNBWGNLT3ZCMjlmUT09",45 => "b3M3Nld0SlZGYTFQcEpUSXg1cEdmUT09",46 => "NHQxM29oTExwUERHZk9iQkxnT3dNdz09",47 => "WXdUTjhOeUd1QUc2YkxLeUIzUVBIQT09",48 => "QmZrb2xyRUQ4ajVaMkg1TUw1NmZxdz09",49 => "bGVxUU1aUUdqVUVkbHN3SWF0MTRvZz09",50 => "dVA5OU9BT09sOTg5Znhycmw0aUYvQT09",51 => "TCtGRTRaZWs1UE1FeFZ3RFE3MFJJQT09",52 => "OVJsOSt2NXZLWWIveG5EZjlCcThPdz09",53 => "c3JOeHJIbFVDT2NVMUlpaHhyOU1NQT09",54 => "c3NNcXBja2RKUjVXWksvN0JLUGNHZz09",55 => "cnBDNTFzTFE2OU12dXpzMVJUdEpudz09",56 => "b3J5VU9lNEFMdVFTUExRVHFYRENTQT09",57 => "cWdTUThYcVJMYk5CTmdML1h5SlpMQT09",58 => "cjBWT2w2bEtuODdxUVBJb1ROT3E1QT09",59 => "ZGRUTnM3blNSZWt5cDVqYUJzWGJUUT09",60 => "NEtDa1pteG1pZFBzUGNNNTMyNU1xZz09",61 => "SWlZaHNZTXhtaUJ2NlYyREJYVUZMUT09",62 => "UzR6K0RGZjk4cUF5cFp3VTFWSGZxUT09",63 => "ZFVaTkcxcWdSOGlicjBkWVgrYTVRZz09",64 => "cURWVmkrTlVtSUhuR1ZqU2xyejErdz09",65 => "UWdpU0d3QzA5NDVlNUI0M09QbnB0QT09",66 => "bDZNKzYxZ090SEZmL3o2V1Axd0h6UT09",67 => "RkExUVpqTU81N1VhMGZuMTBwSzdNZz09",68 => "cCtCU2pQdmFBNjNmc3ozVFo5aDVNdz09",69 => "UnY0ZTVUNTB4citGMytjQmMvVSs5QT09",70 => "SkdTWUpqY1Q3dGdvODlJNFZYeGk0dz09",71 => "aTJtSzNRelQzekYzQVdZcEFXN056UT09",72 => "ZVE5dkRmUjlLUktXME45WHhDTzlaZz09",73 => "TTYwdHJTeTk3a0JNUEhEa3RIZ0E1UT09",74 => "THJzWHNWV01aT3NiaEpLdXhyYnJadz09",75 => "UXI4L3JUUkp0MmkxQyttMnpGWVlzZz09",76 => "dHBaMERmWDBEMW1iTkhIWS9STE5BQT09",77 => "Y1hMdTdycVFoYzk1SjVEbTV4U29CUT09",78 => "VTkwVzJ5ZEtBWms3WnZjTFdIdWtrZz09",79 => "UXpkNllxN3crbVBmQk1tQXJvbzA3dz09",80 => "R3p6ZE1TNm5WZ3pjSDA1WFVKRE5uZz09",81 => "SlZpcndhalhuMzBOWi9DcWZ1UmF2QT09",82 => "QTY4QzFyN0t1WjQzTjR0MURqZHNOdz09",83 => "OVhJejdac2RmTXpFYzhUWmZJZzdMZz09",84 => "eDZ3SWtWTHZhQnFjT3RXK1ExaVdmUT09",85 => "L0pRUldJTEZ5TE1WU1VkUGNBSm9TZz09",86 => "bDk5M0dxWXRTeEwwK3BXeGgxYlRIUT09",87 => "M1cyL01WRThFNHZya1RiQm1sWnZmdz09",88 => "WExTeFRLNTFzeDVLUGxLM24vMzdSdz09",89 => "bk9iQVZwNUg1RlQyU3ZCWVBvNDVIUT09",90 => "VUwza0VMbUdpWTJoUWVLc2t1WGdnQT09",91 => "bUNMUndxWnJhT244SFFLUnFxRmhQQT09",92 => "MzlReTcyQmlMTm1RREtjeDNGbWFYZz09",93 => "SndLZ2J1NVAxMFBhSE9hQXM2OFljUT09",94 => "Q3B5a1RDdlY2dWFpcUVtY24rRlpidz09",95 => "cUUxZjdPZGlTdktFWTJ0TTJ3allzQT09",96 => "NjdyQlFEeTV6Sm5hNU5SclFaUVp2Zz09",97 => "NExCb1FnY2xuVVN3cXdmSmZvSWFIQT09",98 => "S3U1cng3U1RqUzgxSGtvbnRHVFRoZz09",99 => "eUVtS3Q5Y2wzTEEvakRhQVFHcUZpUT09",];
foreach($x as $v){
echo $v.'-'.Merakomis::decryptNumber($v).'<br/>';
}
}
static function setTitleEdit(){
$res = [];
if(Emp::$IS_AUTH){
}
echo je($res);
}
static function getTitleEdit(){
$res = [];
$res['title'] = Merakomis::$data[$_POST['title']];
$res['text'] = Merakomis::$data[$_POST['text']];
$form = new Form();
$form->addRow((new Row())
->addColumn(((new Text())
->setName($_POST['title'])
->setValue($res['title'])
->setClassAll('c-100')
->setLabel($c = 'Заголовок')
->setPlaceholder($c)
))
->addColumn(((new Textarea())
->setName($_POST['text'])
->setValue($res['text'])
->setClassAll('c-100')
->setLabel($c = 'Текст')
->setPlaceholder($c)
->setIsHtmlEditor(true)
->setTinyMCEApiKey(Theme::$TINY_MCE_KEY)
->setTinyMCEImageUploadUrl(Theme::$TINY_MCE_IMAGE_UPLOAD_URL)
))
->addColumn(((new Form\Input\Submit())
->setClassAll('c-100')
->setClassName('blue')
->setPlaceholder($c = 'Сохранить')
))
);
$res['form'] = $form->toJSON();
echo je($res);
}
static function sendFeedback(){
$res =[];
if(Emp::$IS_AUTH) {
$mess = [
'Новая обратная связь',
'Тема: '.$_POST['title'],
'Текст: '.$_POST['text'],
'Сотрудник: '.Emp::$data[Emp::$NAME],
'Skype: '.Emp::$data[Emp::$SKYPE],
'Email: '.Emp::$data[Emp::$EMAIL],
];
$mess = implode("<br/>",$mess);
$res['mess'] = $mess;
$r = Theme::sendMailAdmin($mess,"Новая обратная связь");
if($r['send']) {
$res['notify']['content'] = 'Сообщение отправлено';
$res['notify']['color'] = 0;
} else {
$res['notify']['content'] = 'Не удалось отправить сообщение ';
$res['notify']['color'] = 1;
}
}
echo je($res);
}
static function upload_image(){
$res =[];
if(Emp::$IS_AUTH) {
$res = Image::upload(['base64' => false]);
}
echo je($res);
}
static function upload_pdf(){
$res =[];
if(Emp::$IS_AUTH) {
$res = Image::upload(['base64' => true,'isFile'=>true]);
}
echo je($res);
}
static function formThankYou(){
include_once(\Site::$absPath.'/jade/windows/thankyou.php');
}
static function sendForm(){
$mess =
(($c = $_POST['name']) ?'<b>Тема</b>: '.$c.'<br/>':'').
(($c = $_POST['comment']) ?'<b>Комментарий</b>: '.nl2br($c).'<br/>':'').
'';
$files = [];
foreach ($_FILES as $v){
$file = dirname(__FILE__).'/'.$v['name'];
if (move_uploaded_file($v['tmp_name'], $file)) {
$files[] = $file;
}
}
$res['mess'] = $mess;
try {
Theme::sendMailAdmin($mess,'Новая обратная связь',$files);
} finally {
foreach ($files as $v) {
unlink($v);
}
}
/**/
echo je($res);
}
static function saveFilter(){
$res = [];
if(Emp::$IS_AUTH){
$res = Filter::addFilterForToOid(
$_POST['name'],
$_POST['data']['table'],
$_POST['filter'],
msTo::MERAKOMBIS_EMP,
Emp::$AUTH_ID
);
}
echo je($res);
}
static function updateFilter(){
$res = [];
if(Emp::$IS_AUTH){
$id = intval($_POST['id']);
$filter = Filter::getByID($id);
if($filter[Filter::$OID]==Emp::$AUTH_ID and $filter[Filter::$TO]==msTo::MERAKOMBIS_EMP) {
Filter::updateById($id, [
Filter::$DATA => je($_POST['data'])
]);
$res['notify']['content'] = 'Успешно обновлено';
}
}
echo je($res);
}
static function removeFilter(){
$res = [];
if(Emp::$IS_AUTH){
$id = intval($_POST['id']);
$filter = Filter::getByID($id);
if($filter[Filter::$OID]==Emp::$AUTH_ID and $filter[Filter::$TO]==msTo::MERAKOMBIS_EMP) {
$res = Filter::deleteByID($id);
}
}
echo je($res);
}
static function setNewOptions(){
$data = [
Merakomis::$_STAFF_SUBTITLE_1 => 'Сводные данные',
Merakomis::$_STAFF_SUBTITLE_2 => 'Заработная плата и ставка',
Merakomis::$_STAFF_SUBTITLE_3 => 'Информация о детях',
Merakomis::$_STAFF_SUBTITLE_4 => 'Аттестация сотрудников в регулирующих органах',
Merakomis::$_STAFF_SUBTITLE_5 => 'Анализ нерабочих дней',
Merakomis::$_STAFF_TEXT_1 => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.',
Merakomis::$_STAFF_TEXT_2 => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.',
Merakomis::$_STAFF_TEXT_3 => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.',
Merakomis::$_STAFF_TEXT_4 => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.',
Merakomis::$_STAFF_TEXT_5 => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.',
Merakomis::$_ANALYSIS_MY_1_SUBTITLE => 'Работа над проектами',
Merakomis::$_ANALYSIS_MY_2_SUBTITLE => 'Отсутствие на рабочем месте',
Merakomis::$_CARD_SUBTITLE => 'Карточка сотрудника',
Merakomis::$_CARD_TEXT => 'В таблице представлены все данные вашей карточки сотрудника. Просим вас их проверить, и, при выявлении неточностей, написать о ней администратору, нажав ссылку «Сообщить об ошибке». Пожалуйста, поддерживайте информацию в актуальном виде. Особенно это касается номера телефона и имени аккаунта Skype, которые вы можете поправить самостоятельно.',
Merakomis::$_PROJECT_SUBTITLE => 'Информация о проекте',
Merakomis::$_PROJECT_TEXT => 'Карточка проекта, в разработке которого вы принимаете участие',
Merakomis::$_ANALYSIS_TEAM_1_SUBTITLE => 'Анализ затрат на проекты - 1',
Merakomis::$_ANALYSIS_TEAM_2_SUBTITLE => 'Анализ затрат на проекты - 2',
Merakomis::$_ANALYSIS_TEAM_3_SUBTITLE => 'Подразделы',
Merakomis::$_ANALYSIS_TEAM_4_SUBTITLE => 'Разделы',
Merakomis::$_ANALYSIS_TEAM_5_SUBTITLE => 'Команда проекта',
Merakomis::$_ANALYSIS_YEAR_1_SUBTITLE => 'Сводка часов за календарный год',
Merakomis::$_ANALYSIS_YEAR_2_SUBTITLE => 'Сводка затрат за календарный год',
Merakomis::$_ANALYSIS_COMPANY_1_SUBTITLE => 'Нагрузка на подразделения',
Merakomis::$_ANALYSIS_COMPANY_2_SUBTITLE => 'Нагрузка на сотрудников - 1',
Merakomis::$_ANALYSIS_COMPANY_3_SUBTITLE => 'Нагрузка на сотрудников - 2',
Merakomis::$_ANALYSIS_COMPANY_4_SUBTITLE => 'Анализ нерабочих дней сотрудников вашей компании',
Merakomis::$_ANALYSIS_COMPANY_4_SUBTITLE_2 => 'Анализ нерабочих дней сотрудников офиса',
];
$_POST['data'] = $data;
self::savePortalOptions();
}
static function savePortalOptions(){
$res = [];
if(Emp::$IS_AUTH){
$data = json_decode(\Site::$section[Section::$DATA],true);
foreach ($_POST['data'] as $k=>$v){
if(in_array($k,[
//MerakomBase::$_PARTNERS
])) continue;
$data[$k] = $v;
}
$r = Section::updateById(\Site::$section_id,[
Section::$DATA => je($data)
]);
$res['notify']['content'] = 'Успешно сохранено';
}
echo je($res);
}
static function getFormSettings(){
echo je(Merakomis::getFormSettings());
}
static function getAppStructure(){
//if(!Emp::$IS_AUTH) return [];
$res = [];
$isLocal = $_SERVER['HTTP_ORIGIN'] == 'http://localhost:3000';
$isTest = $isLocal;
$isAdmin = true;
$token_hash = (Emp::$IS_AUTH?Merakomis::getUploadToken():'');
//$token_hash = null;
//$profile_id = Emp::$AUTH_ID;
$panel_path = $isLocal ? '/' : '/';
$logotype = [
//'url'=>\Site::sectionUrl('content/merakomis/pics/logo/logo.black.svg',true),
'url'=>\Site::sectionUrl('content/merakomru/pics/logo/logo.black.svg',true),
'url'=>\Site::sectionUrl('content/merakomis/pics/logo_meraproject.svg',true),
//'title'=>'MeraProject',
//'subtitle'=>"MERAKOM PROJECT\nMANAGER",
];
$main_crumbs = [['name'=>'Главная','link'=>'/']];
$sortable_table = [
'sortable' => true,
'show_filter' => false,
'show_search' => false,
'show_count' => false,
'show_pagination' => false,
];
$isCanEditProjects = !Emp::isMeTopManager();
$isCanAddProjects = Rules::isProjectsAddButton();
$routes = [
['path'=>'*', 'element'=> eContentPage::MAIN, 'props'=>[],'crumbs'=>array_merge($main_crumbs),],
['path'=>'/', 'element'=> eContentPage::MAIN, 'props'=>[],'crumbs'=>array_merge($main_crumbs),],
['path'=>'projects/*', 'element'=> eContentPage::PROJECTS , 'props'=>['canEdit'=>$isCanEditProjects,'addButton'=>$isCanAddProjects,'entity'=>'project','ajaxData'=>['archive'=>0]],'crumbs'=>array_merge($main_crumbs,[['name'=>'Проекты','link'=>'projects/']]),],
//['path'=>'post/*', 'element'=> eContentPage::TABLE_PAGE, 'props'=>['entity'=>'post'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Должности','link'=>'post/']]),],
['path'=>'team/*', 'element'=> eContentPage::TABLE_PAGE, 'props'=>['entity'=>'team'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Команды','link'=>'team/']]),],
['path'=>'team/member/:id', 'element'=> eContentPage::TABLE_TEAM_MEMBER, 'props'=>['entity'=>'team.member','checkable'=>false],'crumbs'=>array_merge($main_crumbs,[['name'=>'Команды','link'=>'team/']]),],
['path'=>'emp/*', 'element'=> eContentPage::TABLE_EMP, 'props'=>['entity'=>'emp','checkable'=>false,
'archive'=>0,
'init_filter_values'=>[Emp::$ARCHIVE=>0],
'ajaxData'=>['archive'=>0]],'crumbs'=>array_merge($main_crumbs,[['name'=>'Сотрудники','link'=>'emp/']]),],
['path'=>'dictionary/absence/*', 'element'=> eContentPage::DICTIONARY, 'props'=>['entity'=>'dictionary.absence'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Причины отсутствия','link'=>'dictionary/absence/']]),],
['path'=>'dictionary/city/*', 'element'=> eContentPage::DICTIONARY, 'props'=>['entity'=>'dictionary.city'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Города','link'=>'dictionary/city/']]),],
['path'=>'dictionary/staffing/*', 'element'=> eContentPage::DICTIONARY, 'props'=>['entity'=>'dictionary.staffing'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Штатное расписание','link'=>'dictionary/staffing/']]),],
['path'=>'dictionary/empstatus/*', 'element'=> eContentPage::DICTIONARY, 'props'=>['entity'=>'dictionary.empstatus'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Статус сотрудника','link'=>'dictionary/empstatus/']]),],
['path'=>'dictionary/org/*', 'element'=> eContentPage::ORG, 'props'=>['entity'=>'dictionary.org'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Юридические лица','link'=>'dictionary/org/']]),],
['path'=>'dictionary/orgtype/*', 'element'=> eContentPage::DICTIONARY, 'props'=>['entity'=>'dictionary.orgtype'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Виды сотрудничества','link'=>'dictionary/orgtype/']]),],
['path'=>'dictionary/objtype/*', 'element'=> eContentPage::DICTIONARY, 'props'=>['entity'=>'dictionary.objtype'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Виды сотрудничества','link'=>'dictionary/orgtype/']]),],
['path'=>'dictionary/contractor/status/*', 'element'=> eContentPage::CONTRACTOR_STATUS, 'props'=>['entity'=>'dictionary.contractor.status'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Статусы контрагентов','link'=>'dictionary/contractor/status/']]),],
['path'=>'dictionary/contractor/*','element'=> eContentPage::CONTRACTOR,
'props'=>[
'checkable'=>false,
'entity'=>'dictionary.contractor',
'show_download_button'=>false,
],
'crumbs'=>array_merge($main_crumbs,[['name'=>'Контрагенты','link'=>'dictionary/contractor/']]),],
['path'=>'history/*', 'element'=> eContentPage::TABLE_PAGE, 'props'=>['entity'=>'history'],'crumbs'=>array_merge($main_crumbs,[['name'=>'История действий','link'=>'history/']]),],
['path'=>'departments/*', 'element'=> eContentPage::DEPARTMENTS, 'props'=>[],'crumbs'=>array_merge($main_crumbs,[['name'=>'Структура компании','link'=>'departments/']]),],
['path'=>'time_tracker/:emp/*', 'element'=> eContentPage::TIME, 'props'=>[],'crumbs'=>array_merge($main_crumbs,[['name'=>'Табель', 'link'=>'my/time_tracker/']]),],
['path'=>'my/time_tracker/*', 'element'=> eContentPage::TIME, 'props'=>[],'crumbs'=>array_merge($main_crumbs,[['name'=>'Мой табель', 'link'=>'my/time_tracker/']]),],
['path'=>'my/projects/*', 'element'=> eContentPage::PROJECT, 'props'=>['entity'=>'project','show_add_button'=>false,'ajaxData'=>['my'=>1]],'crumbs'=>array_merge($main_crumbs,[['name'=>'Мои проекты', 'link'=>'my/projects/']]),],
['path'=>'my/team/*', 'element'=> eContentPage::TEAM, 'props'=>[],'crumbs'=>array_merge($main_crumbs,[['name'=>'Моя команда', 'link'=>'my/team/']]),],
['path'=>'my/company/*', 'element'=> eContentPage::COMPANY, 'props'=>[
'entity'=>'emp',
'ajaxData'=>['archive'=>0,'my_company'=>1],
'show_add_button'=>false,
'show_download_button'=>false,
'checkable'=>false,
],'crumbs'=>array_merge($main_crumbs,[['name'=>'Моя компания', 'link'=>'my/company/']]),],
['path'=>'dictionary/step/', 'element'=> eContentPage::STEP, 'props'=>[],'crumbs'=>array_merge($main_crumbs,[['name'=>'Структура проекта', 'link'=>'dictionary/step/']]),],
['path'=>'my/summary/*', 'element'=> eContentPage::SUMMARY, 'props'=>[],'crumbs'=>array_merge($main_crumbs,[['name'=>'Сводный табель', 'link'=>'my/summary/']]),],
['path'=>'my/profile/*', 'element'=> eContentPage::PROFILE, 'props'=>[],'crumbs'=>array_merge($main_crumbs,[['name'=>'Моя карточка', 'link'=>'my/profile/']]),],
['path'=>'my/analysis/*', 'element'=> eContentPage::ANALYSIS, 'props'=>[],'crumbs'=>array_merge($main_crumbs,[['name'=>'Моя аналитика', 'link'=>'my/analysis/']]),],
//['path'=>'analysis/*', 'element'=> eContentPage::ANALYSIS, 'props'=>[],'crumbs'=>array_merge($main_crumbs,[['name'=>'Аналитика', 'link'=>'analysis/']]),],
['path'=>'calendar/*', 'element'=> eContentPage::CALENDAR, 'props'=>[],'crumbs'=>array_merge($main_crumbs,[['name'=>'Производственный календарь', 'link'=>'calendar/']]),],
['path'=>'public_profile/:id', 'element'=> eContentPage::PUBLIC_PROFILE, 'props'=>[],'crumbs'=>array_merge($main_crumbs,[['name'=>'Профиль', 'link'=>'']]),],
['path'=>'archive/projects/*', 'element'=> eContentPage::PROJECTS, 'props'=>['canEdit'=>$isCanEditProjects,'addButton'=>$isCanAddProjects,'archive'=>true],'crumbs'=>array_merge($main_crumbs,[['name'=>'Проекты','link'=>'projects/']]),],
['path'=>'archive/emp/*', 'element'=> eContentPage::TABLE_EMP, 'props'=>[
'archive'=>1,
'init_filter_values'=>[Emp::$ARCHIVE=>1],
],'crumbs'=>array_merge($main_crumbs,[['name'=>'Сотрудники','link'=>'emp/']]),],
['path'=>'settings/*', 'element'=> eContentPage::SETTINGS, 'props'=>['key'=>'4','title'=>'Переменные','url'=>'/getFormSettings'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Настройки','link'=>'settings/']]),],
['path'=>'calendar/day', 'element'=> eContentPage::DAYS, 'props'=>['entity'=>'day'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Дни','link'=>'team/']]),],
['path'=>'calendar/event', 'element'=> eContentPage::TABLE_PAGE, 'props'=>['entity'=>'event'],'crumbs'=>array_merge($main_crumbs,[['name'=>'События','link'=>'team/']]),],
['path'=>'pages/', 'element'=> eContentPage::TABLE_PAGE, 'props'=>['entity'=>'page'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Страницы','link'=>'team/']]),],
['path'=>'variable/', 'element'=> eContentPage::VARIABLE, 'props'=>['entity'=>'variable','checkable'=>false],'crumbs'=>array_merge($main_crumbs,[['name'=>'Страницы','link'=>'team/']]),],
['path'=>'money/fot/', 'element'=> eContentPage::FOT, 'props'=>['entity'=>'variable'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Страницы','link'=>'team/']]),],
['path'=>'money/fot/:id', 'element'=> eContentPage::EMP_FOT, 'props'=>['entity'=>'variable'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Страницы','link'=>'team/']]),],
['path'=>'analysis/:type', 'element'=> eContentPage::ANALYSIS, 'props'=>[ ],'crumbs'=>array_merge($main_crumbs,[['name'=>'Моя аналитика', 'link'=>'my/analysis/']]),],
['path'=>'analysis/:type/:subtype', 'element'=> eContentPage::ANALYSIS, 'props'=>[ ],'crumbs'=>array_merge($main_crumbs,[['name'=>'Моя аналитика', 'link'=>'my/analysis/']]),],
/*
//['path'=>'/', 'element'=>eContentPage::CHANGEBLOG_CLIENTS , 'props'=>[]],
['path'=>'', 'element'=> eContentPage::MAIN, 'props'=>[],'crumbs'=>array_merge($main_crumbs),],
['path'=>'cloud/*', 'element'=> eContentPage::TABLE_PAGE, 'props'=>['entity'=>'cloud'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Облачные документы','link'=>'cloud/']]),],
['path'=>'emp/*', 'element'=> eContentPage::TABLE_PAGE, 'props'=>['entity'=>'emp'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Сотрудники','link'=>'emp/']]),],
['path'=>'groups/*', 'element'=> eContentPage::TABLE_PAGE, 'props'=>$sortable_table+['entity'=>'group'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Группы','link'=>'groups/']]),],
['path'=>'disk/*', 'element'=> eContentPage::TABLE_PAGE, 'props'=>$sortable_table+['entity'=>'disk'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Облака','link'=>'disk/']]),],
['path'=>'cloud/groups/*', 'element'=> eContentPage::TABLE_PAGE, 'props'=>$sortable_table+['entity'=>'cloud.group'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Группы облачных файлов','link'=>'cloud/group/']]),],
['path'=>'settings/css/*', 'element'=> eContentPage::SETTINGS, 'props'=>['key'=>'0','title'=>'Настройки','url'=>'/getFormCSSSettings'],'crumbs'=>array_merge($main_crumbs, [['name'=>'Настройки','link'=>'settings/css/']]),],
['path'=>'settings/cloud/*', 'element'=> eContentPage::SETTINGS, 'props'=>['key'=>'1','title'=>'Настройки','url'=>'/getFormCloudSettings'],'crumbs'=>array_merge($main_crumbs, [['name'=>'Облачные документы','link'=>'settings/cloud/']]),],
['path'=>'settings/feedback/*', 'element'=> eContentPage::SETTINGS, 'props'=>['key'=>'2','title'=>'Настройки','url'=>'/getFormFeedbackSettings'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Обратная связь','link'=>'settings/feedback/']]),],
['path'=>'settings/search/*', 'element'=> eContentPage::SETTINGS, 'props'=>['key'=>'3','title'=>'Настройки','url'=>'/getFormSearchSettings'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Поиск','link'=>'settings/search/']]),],
['path'=>'settings/news/*', 'element'=> eContentPage::SETTINGS, 'props'=>['key'=>'4','title'=>'Настройки','url'=>'/getFormNewsSettings'],'crumbs'=>array_merge($main_crumbs,[['name'=>'Новости','link'=>'settings/news/']]),],
['path'=>'blocks/:id', 'element'=> eContentPage::TABLE_PAGE, 'props'=>$sortable_table+['entity'=>'block','ajaxData'=>['main'=>1],'formData'=>['main'=>1]],'crumbs'=>array_merge($main_crumbs,[['name'=>'Группы','link'=>'groups/']]),],
['path'=>'articles/', 'element'=> eContentPage::TABLE_PAGE, 'props'=>['entity'=>'article',],'crumbs'=>array_merge($main_crumbs,[['name'=>'Статьи','link'=>'articles/']]),],
['path'=>'articles/:id', 'element'=> eContentPage::TABLE_PAGE, 'props'=>$sortable_table+['entity'=>'article',],'crumbs'=>array_merge($main_crumbs,[['name'=>'Статьи','link'=>'articles/']]),],
*/
];
$isAdmin = Emp::isAdmin();
$isStaffing = Emp::isMeGroup(eEmpGroup::STAFF) || $isAdmin;
$isMeAnyDirector = Emp::isMeAnyDirector();
$isGeneral = Emp::isMeGroup(eEmpGroup::GENERAL);
$isAllProject = Emp::isMeGroup(eEmpGroup::ALL);
$isMeAnyDepartmentDirector = Emp::isMeAnyDepartmentDirector();
$isMeTopManager = Emp::isMeTopManager();
$isArchiveEmp = $isAdmin || $isStaffing || $isGeneral;
$isArchiveProject = $isMeAnyDirector || $isAdmin || $isGeneral || $isAllProject;
$isMenuProject = $isMeAnyDirector || $isGeneral || $isAdmin || $isAllProject;
$isStaffingMenu = $isStaffing || $isGeneral || $isAdmin;
$menu_calendar =
$isAdmin ? [
'title' => "Календарь",
'toggle'=>true,
'opened'=>true,
'submenu'=>[
//['link'=>'calendar/event/', 'title'=>'События','icon'=>'icon-settings'],
]
] : null;
;
$cabinet_submenu = [];
if(Rules::isMyTable()) $cabinet_submenu[] = ['link'=>'my/time_tracker/', 'title'=>'Мой табель','icon'=>'icon-settings'];
if(Rules::isMyProjects()) $cabinet_submenu[] = ['link'=>'my/projects/', 'title'=>'Мои проекты','icon'=>'icon-settings'];
if(Rules::isMyCompany()) $cabinet_submenu[] = ['link'=>'my/company/', 'title'=>'Моя компания','icon'=>'icon-settings'];
$menu_cabinet = $cabinet_submenu ?
[
'title' => "Личный кабинет",
'toggle'=>true,
'opened'=>true,
'submenu'=>$cabinet_submenu
] : null;
$projects_submenu = [];
if(Rules::isProjectsList()) $projects_submenu[] = ['link'=>'projects/', 'title'=>'Проекты','icon'=>'icon-settings'];
if(Rules::isProjectsContractor()) $projects_submenu[] = ['link'=>'dictionary/contractor/', 'title'=>'Контрагенты','icon'=>'icon-settings'];
$menu_projects = $projects_submenu ?
[
'title' => "Проекты",
'toggle'=>true,
'opened'=>true,
'submenu'=>$projects_submenu,
] : null;
$staff_submenu = [];
if(Rules::isStaffEmployee()) $staff_submenu[] = ['link'=>'emp/', 'title'=>'Сотрудники','icon'=>'icon-settings'];
if(Rules::isStaffAbsence()) $staff_submenu[] = ['link'=>'dictionary/absence/', 'title'=>'Причины отсутствия','icon'=>'icon-settings'];
if(Rules::isStaffStatus()) $staff_submenu[] = ['link'=>'dictionary/empstatus/', 'title'=>'Статусы сотрудников','icon'=>'icon-settings'];
if(Rules::isStaffOrgtype()) $staff_submenu[] = ['link'=>'dictionary/orgtype/', 'title'=>'Виды сотрудничества','icon'=>'icon-settings'];
$menu_staff = $staff_submenu ?
[
'title' => "Кадры",
'toggle'=>true,
'opened'=>true,
'submenu'=>$staff_submenu,
] : null;
$archive_submenu = [];
if(Rules::isArchiveProjects())$archive_submenu[] = ['link'=>'archive/projects/', 'title'=>'Проекты','icon'=>'icon-settings'];
if(Rules::isArchiveEmployee())$archive_submenu[] = ['link'=>'archive/emp/', 'title'=>'Сотрудники','icon'=>'icon-settings'];
$menu_archive = ($archive_submenu) ?
[
'title' => "Архив",
'toggle'=>true,
'opened'=>true,
'submenu'=>$archive_submenu
] : null;
$money_submenu = [];
if(Rules::isMoneyFot()) $money_submenu[] = ['link'=>'money/fot/', 'title'=>'ФОТ','icon'=>'icon-settings'];
$menu_money = $money_submenu ? [
'title' => "Бюджет",
'toggle'=>true,
'opened'=>true,
'submenu'=>$money_submenu
] : null;
$analysis_submenu = [];
if(Rules::isAnalysisMy()) $analysis_submenu[] = ['link'=>'analysis/my', 'title'=>Emp::SurnameIO(Emp::$data),'icon'=>'icon-settings'];
if(Rules::isAnalysisProjects()) $analysis_submenu[] = ['link'=>'analysis/team', 'title'=>'Мои проекты','icon'=>'icon-settings'] ;
if(Rules::isAnalysisYear()) $analysis_submenu[] = ['link'=>'analysis/year', 'title'=>'Мои проекты: годовой отчёт','icon'=>'icon-settings'] ;
if(Rules::isAnalysisFot()) $analysis_submenu[] = ['link'=>'analysis/fot', 'title'=>'Бюджет','icon'=>'icon-settings'] ;
if(Rules::isAnalysisAllProjects()) $analysis_submenu[] = ['link'=>'analysis/all_projects', 'title'=>'Все проекты','icon'=>'icon-settings'] ;
// if(Rules::isAnalysisMoscow()) $analysis_submenu[] = ['link'=>'analysis/moscow', 'title'=>'Офис Москва','icon'=>'icon-settings'] ;
// if(Rules::isAnalysisIvanovo()) $analysis_submenu[] = ['link'=>'analysis/ivanovo', 'title'=>'Офис Иваново','icon'=>'icon-settings'] ;
// if(Rules::isAnalysisNovosibirsk()) $analysis_submenu[] = ['link'=>'analysis/novosiborsk', 'title'=>'Офис Новосибирск','icon'=>'icon-settings'] ;
// if(Rules::isAnalysisKrasnodar()) $analysis_submenu[] = ['link'=>'analysis/krasnodar', 'title'=>'Офис Краснодар','icon'=>'icon-settings'] ;
// if(Rules::isAnalysisSemei()) $analysis_submenu[] = ['link'=>'analysis/semei', 'title'=>'Офис Семей','icon'=>'icon-settings'] ;
// if(Rules::isAnalysisCompany()) $analysis_submenu[] = ['link'=>'analysis/department', 'title'=>'Моё подразделение','icon'=>'icon-settings'] ;
if(Rules::isAnalysisCompany()) $analysis_submenu[] = ['link'=>'analysis/company', 'title'=>'Моя компания','icon'=>'icon-settings'] ;
if(Rules::isAnalysisStaff()) $analysis_submenu[] = ['link'=>'analysis/staff', 'title'=>'Мои кадры','icon'=>'icon-settings'] ;
$menu_analysis = $analysis_submenu ? [
'title' => "Аналитика",
'toggle'=>true,
'opened'=>true,
'submenu'=> $analysis_submenu
/*
[
['link'=>'analysis/my', 'title'=>Emp::SurnameIO(Emp::$data),'icon'=>'icon-settings'],
$isProjects ? ['link'=>'analysis/team', 'title'=>'Мои проекты','icon'=>'icon-settings'] : null,
($isGeneral || $isAdmin || $isTop) ? ['link'=>'analysis/year', 'title'=>'Мои проекты: годовой отчёт','icon'=>'icon-settings'] : null,
$isFot ? ['link'=>'analysis/fot', 'title'=>'Бюджет','icon'=>'icon-settings'] : null,
$isMoscow ? ['link'=>'analysis/moscow', 'title'=>'Офис Москва','icon'=>'icon-settings'] : null,
$isIvanovo ? ['link'=>'analysis/ivanovo', 'title'=>'Офис Иваново','icon'=>'icon-settings'] : null,
$isNovosiborsk ? ['link'=>'analysis/novosiborsk', 'title'=>'Офис Новосибирск','icon'=>'icon-settings'] : null,
$isKrasnodar ? ['link'=>'analysis/krasnodar', 'title'=>'Офис Краснодар','icon'=>'icon-settings'] : null,
$isSemei ? ['link'=>'analysis/semei', 'title'=>'Офис Семей','icon'=>'icon-settings'] : null,
$isDepartment ? ['link'=>'analysis/department', 'title'=>'Моё подразделение','icon'=>'icon-settings'] : null,
$isCompany ? ['link'=>'analysis/company', 'title'=>'Моя компания','icon'=>'icon-settings'] : null,
$isStaff ? ['link'=>'analysis/staff', 'title'=>'Мои кадры','icon'=>'icon-settings'] : null,
],
*/
] : null;
$menu_admin = Rules::isAdmin() ?
[
'title' => "Администрирование",
'toggle'=>true,
'opened'=>true,
'submenu'=>[
//['link'=>'calendar/', 'title'=>'Календарь','icon'=>'icon-settings'],
['link'=>'departments/', 'title'=>'Структура компании','icon'=>'icon-settings'],
['link'=>'dictionary/step/', 'title'=>'Структура проекта','icon'=>'icon-settings'],
['link'=>'calendar/day/', 'title'=>'Календарь','icon'=>'icon-settings'],
['link'=>'pages/', 'title'=>'Главная страница','icon'=>'icon-settings'],
['link'=>'variable/', 'title'=>'Переменные','icon'=>'icon-settings'],
['link'=>'dictionary/city/', 'title'=>'Локации','icon'=>'icon-settings'],
['link'=>'dictionary/staffing/', 'title'=>'Штатное расписание','icon'=>'icon-settings'],
['link'=>'dictionary/org/', 'title'=>'Юридические лица','icon'=>'icon-settings'],
['link'=>'dictionary/contractor/status/', 'title'=>'Статусы контрагентов','icon'=>'icon-settings'],
['link'=>'dictionary/objtype/', 'title'=>'Типология объектов','icon'=>'icon-settings'],
//['link'=>'history/', 'title'=>'Логи','icon'=>'icon-settings'],
//['link'=>'settings/', 'title'=>'Переменные','icon'=>'icon-settings'],
//['link'=>'post/', 'title'=>'Должность ?','icon'=>'icon-settings'],
],
] : null;
$allMenu = [
$menu_cabinet,
$menu_analysis,
$menu_projects,
$menu_staff,
$menu_archive,
$menu_money,
$menu_admin,
// $menu_calendar
];
$myRoutes = [
'public_profile/:id',
'team/member/:id',
//'time_tracker/:emp',
];
// my/time_tracker/50 +
// my/projects/49 +
// analysis/team/79 +
// 'team/member/:id',
// 'time_tracker/:emp',+
foreach ($allMenu as $menu) {
foreach ($menu['submenu'] as $item) {
$myRoutes[] = $item['link'];
}
}
$res = [
'options'=>[
'is_local'=>$isLocal,
'server' => $_SERVER,
'is_admin'=>Emp::isAdmin(),
'is_telegram'=>Emp::isTelegram(),
'is_telegram_id'=>boolval(Emp::$data[Emp::$TG_ACC]),
'myRoutes'=>$myRoutes,
'company'=>[
'emp'=>[
'init_filter_values'=>[Emp::$ARCHIVE=>0],
]
]
],
'routes' => $routes,
//app_background => 'https=>//picsum.photos/1920/1080',
//'default_app_background' => '',
//'app_class' => 'papaya',
//'default_app_class' => 'papaya',
'menu_hide'=>false,
'api_url_theme'=>\Site::$domen.'/api/themes.merakomis',
'domain_url' =>\Site::$domen.'',
'auth' => true,
//'token'=>$token_hash,
'account' => [
//'avatar' => \Site::sectionUrl(substr(Image::imageResize($avatar[Image::$URL],100,100,100,['crop'=>'center']),1),true),
//'id' => Emp::$AUTH_ID,
'token' => $token_hash,
'data'=>Emp::formatMyTopData(),
'rules'=>Rules::$rules,
'readOtherTableRead'=>Rules::readOtherTableRead(),
'writeOtherTableWrite'=>Rules::writeOtherTableWrite(),
'readAnalysisTableEmp'=>Rules::readOtherTableRead(),
],
'fullscreen' => true,
'url_path' => $panel_path,
/*
'header' => [
'logotype' => 'pics/logo/logo.jpg'
],
/**/
'menu' => [
'logotype' => $logotype,
'avatar' => 'pics/ava.jpg',
'avatar_link' => 'profile/1',
'menu' => [
$menu_cabinet,
$menu_analysis,
$menu_projects,
$menu_staff,
$menu_archive,
$menu_money,
$menu_admin,
// $menu_calendar
]
]
];
echo je($res);
}
}