meraproject/themes/merakomis/model.php

902 lines
46 KiB
PHP
Raw Permalink Normal View History

<?
namespace themes;
use core\Columns;
use core\site\Theme;
use core\site\theme\structure\eThemeOption;
use core\Token;
use ModuleBZ\Form\Input\Submit;
use ModuleBZ\Form\Input\Text;
use ModuleBZ\Form\Input\Textarea;
use ModuleBZ\Layout\Column;
use ModuleBZ\Layout\Row;
use ModuleBZ\Layout\Title;
use Mpdf\Tag\P;
use PHPMailer\PHPMailer\PHPMailer;
use themes\merakomis\Emp;
class Merakomis extends Theme {
static $name = 'Merakomis';
static $themeUrl = 'merakomis';
const PAGE_ADMIN = 'cms';
const PAGE_ACCEPT = 'accept';
const CURRENCY = '₽';
//-- Рабочие переменные
static $IS_TEST = false;
static $TINY_MCE_KEY = '60vsy7x42oflvd2aqbpvnaz1c3ega0bkep1xkjr7qbf53x18';
static $TINY_MCE_IMAGE_UPLOAD_URL = '';
static $_ADMIN_EMAIL = 'admin_email';
static $_COMPANY_TABLE_SUBTITLE = 'company_table_subtitle';
static $_COMPANY_TABLE_TEXT = 'company_table_text';
static $_PROJECT_TABLE_TEXT = 'project_table_text';
static $_PROJECT_TABLE_SUBTITLE = 'project_table_subtitle';
static $_PROJECT_TABLE_ARCHIVE_TEXT = 'project_table_archive_text';
static $_PROJECT_TABLE_ARCHIVE_SUBTITLE = 'project_table_archive_subtitle';
static $_CONTRACTOR_TABLE_TEXT = 'contractor_table_text';
static $_CONTRACTOR_TABLE_SUBTITLE = 'contractor_table_subtitle';
static $_TEAM_TABLE_TEXT = 'team_table_text';
static $_TEAM_TABLE_SUBTITLE = 'team_table_subtitle';
static $_EMP_TABLE_TEXT = 'emp_table_text';
static $_EMP_TABLE_SUBTITLE = 'emp_table_subtitle';
static $_EMP_TABLE_ARCHIVE_TEXT = 'emp_table_archive_text';
static $_EMP_TABLE_ARCHIVE_SUBTITLE = 'emp_table_archive_subtitle';
static $_ABSENCE_TABLE_TEXT = 'absence_table_text';
static $_ABSENCE_TABLE_SUBTITLE = 'absence_table_subtitle';
static $_EMP_STATUS_TABLE_TEXT = 'emp_status_table_text';
static $_EMP_STATUS_TABLE_SUBTITLE = 'emp_status_table_subtitle';
static $_ORG_TYPE_TABLE_TEXT = 'org_type_table_text';
static $_ORG_TYPE_TABLE_SUBTITLE = 'org_type_table_subtitle';
static $_CITY_TABLE_TEXT = 'city_table_text';
static $_CITY_TABLE_SUBTITLE = 'city_table_subtitle';
static $_DEPARTMENTS_TABLE_TEXT = 'departments_table_text';
static $_DEPARTMENTS_TABLE_SUBTITLE = 'departments_table_subtitle';
static $_STAFFING_TABLE_TEXT = 'staffing_table_text';
static $_STAFFING_TABLE_SUBTITLE = 'staffing_table_subtitle';
static $_ORG_TABLE_TEXT = 'org_table_text';
static $_ORG_TABLE_SUBTITLE = 'org_table_subtitle';
static $_CONTRACTOR_STATUS_TABLE_TEXT = 'contractor_status_table_text';
static $_CONTRACTOR_STATUS_TABLE_SUBTITLE = 'contractor_status_table_subtitle';
static $_STEP_TABLE_TEXT = 'step_table_text';
static $_STEP_TABLE_SUBTITLE = 'step_table_subtitle';
static $_ANALYSIS_MY_1_SUBTITLE = 'analysis_my_1_subtitle';
static $_ANALYSIS_MY_1 = 'analysis_my_1';
static $_ANALYSIS_MY_2_SUBTITLE = 'analysis_my_2_subtitle';
static $_ANALYSIS_MY_2 = 'analysis_my_2';
static $_ANALYSIS_YEAR_1 = 'analysis_year_1';
static $_ANALYSIS_YEAR_2 = 'analysis_year_2';
static $_ANALYSIS_OFFICE_1 = 'analysis_office_1';
static $_ANALYSIS_OFFICE_2 = 'analysis_office_2';
static $_ANALYSIS_OFFICE_3 = 'analysis_office_3';
static $_ANALYSIS_DEPARTMENT_1 = 'analysis_department_1';
static $_ANALYSIS_DEPARTMENT_2 = 'analysis_department_2';
static $_ANALYSIS_DEPARTMENT_3 = 'analysis_department_3';
static $_ANALYSIS_COMPANY_1 = 'analysis_company_1';
static $_ANALYSIS_COMPANY_2 = 'analysis_company_2';
static $_ANALYSIS_COMPANY_3 = 'analysis_company_3';
static $_ANALYSIS_COMPANY_4 = 'analysis_company_4';
static $_ANALYSIS_COMPANY_5 = 'analysis_company_5';
static $_ANALYSIS_COMPANY_6 = 'analysis_company_6';
static $_MY_TABLE_1 = 'my_table_1';
static $_MY_TABLE_2 = 'my_table_2';
static $_MY_TABLE_3 = 'my_table_3';
static $_PER_HOUR = 'per_hour';
static $_K1 = 'k1';
static $_K2 = 'k2';
static $_STRUCTURE_COMPANY_SUBTITLE = 'structure_company_subtitle';
static $_STRUCTURE_COMPANY_TEXT = 'structure_company_text';
static $_CARD_SUBTITLE = 'card_subtitle';
static $_CARD_TEXT = 'card_text';
static $_STAFF_SUBTITLE_1 = 'staff_subtitle_1';
static $_STAFF_SUBTITLE_2 = 'staff_subtitle_2';
static $_STAFF_SUBTITLE_3 = 'staff_subtitle_3';
static $_STAFF_SUBTITLE_4 = 'staff_subtitle_4';
static $_STAFF_SUBTITLE_5 = 'staff_subtitle_5';
static $_STAFF_TEXT_1 = 'staff_text_1';
static $_STAFF_TEXT_2 = 'staff_text_2';
static $_STAFF_TEXT_3 = 'staff_text_3';
static $_STAFF_TEXT_4 = 'staff_text_4';
static $_STAFF_TEXT_5 = 'staff_text_5';
static $_PROJECT_SUBTITLE = 'project_subtitle';
static $_PROJECT_TEXT = 'project_text';
static $_ANALYSIS_TEAM_1 = 'analysis_team_1';
static $_ANALYSIS_TEAM_2 = 'analysis_team_2';
static $_ANALYSIS_TEAM_3 = 'analysis_team_3';
static $_ANALYSIS_TEAM_4 = 'analysis_team_4';
static $_ANALYSIS_TEAM_5 = 'analysis_team_5';
static $_ANALYSIS_TEAM_6 = 'analysis_team_6';
static $_ANALYSIS_TEAM_7 = 'analysis_team_7';
static $_ANALYSIS_TEAM_8 = 'analysis_team_8';
static $_ANALYSIS_TEAM_9 = 'analysis_team_9';
static $_ANALYSIS_TEAM_10 = 'analysis_team_10';
static $_ANALYSIS_TEAM_11 = 'analysis_team_11';
static $_ANALYSIS_TEAM_12 = 'analysis_team_12';
static $_ANALYSIS_TEAM_1_SUBTITLE = 'analysis_team_1_subtitle';
static $_ANALYSIS_TEAM_2_SUBTITLE = 'analysis_team_2_subtitle';
static $_ANALYSIS_TEAM_3_SUBTITLE = 'analysis_team_3_subtitle';
static $_ANALYSIS_TEAM_4_SUBTITLE = 'analysis_team_4_subtitle';
static $_ANALYSIS_TEAM_5_SUBTITLE = 'analysis_team_5_subtitle';
static $_ANALYSIS_TEAM_6_SUBTITLE = 'analysis_team_6_subtitle';
static $_ANALYSIS_TEAM_7_SUBTITLE = 'analysis_team_7_subtitle';
static $_ANALYSIS_TEAM_8_SUBTITLE = 'analysis_team_8_subtitle';
static $_ANALYSIS_TEAM_9_SUBTITLE = 'analysis_team_9_subtitle';
static $_ANALYSIS_TEAM_10_SUBTITLE = 'analysis_team_10_subtitle';
static $_ANALYSIS_TEAM_11_SUBTITLE = 'analysis_team_11_subtitle';
static $_ANALYSIS_TEAM_12_SUBTITLE = 'analysis_team_12_subtitle';
static $_ANALYSIS_YEAR_1_SUBTITLE = 'analysis_year_1_subtitle';
static $_ANALYSIS_YEAR_2_SUBTITLE = 'analysis_year_2_subtitle';
static $_ANALYSIS_COMPANY_1_SUBTITLE = 'analysis_company_1_subtitle';
static $_ANALYSIS_COMPANY_2_SUBTITLE = 'analysis_company_2_subtitle';
static $_ANALYSIS_COMPANY_3_SUBTITLE = 'analysis_company_3_subtitle';
static $_ANALYSIS_COMPANY_4_SUBTITLE = 'analysis_company_4_subtitle';
static $_ANALYSIS_COMPANY_4_SUBTITLE_2 = 'analysis_company_4_subtitle_2';
static $_ANALYSIS_COMPANY_5_SUBTITLE = 'analysis_company_5_subtitle';
static $_ANALYSIS_COMPANY_6_SUBTITLE = 'analysis_company_6_subtitle';
static $_FOT_TITLE = 'fot_title';
static $_FOT_TITLE_2 = 'fot_title_2';
static $_FOT_TEXT = 'fot_text';
static $_FOT_TEXT_2 = 'fot_text_2';
static $_FOT_TABLE_TITLE_1 = 'fot_table_title_1';
static $_FOT_TABLE_TITLE_2 = 'fot_table_title_2';
static $_FOT_TABLE_SUBTITLE_1 = 'fot_table_subtitle_1';
static $_FOT_TABLE_SUBTITLE_2 = 'fot_table_subtitle_2';
static $_VARIABLE_TABLE_SUBTITLE = 'variable_table_subtitle';
static $_VARIABLE_TABLE_TEXT = 'variable_table_text';
static $_BUDGET_TITLE = 'budget_title';
static $_BUDGET_SUBTITLE = 'budget_subtitle';
static $_BUDGET_TITLE2 = 'budget_title';
static $_BUDGET_SUBTITLE2 = 'budget_subtitle';
static $_ALL_PROJECTS_TITLE = 'all_projects_title'; static $ALL_PROJECTS_TITLE;
static $_ALL_PROJECTS_TEXT = 'all_projects_text'; static $ALL_PROJECTS_TEXT;
static $ADMIN_EMAIL;
static $COMPANY_TABLE_SUBTITLE;
static $COMPANY_TABLE_TEXT;
static $PROJECT_TABLE_TEXT;
static $PROJECT_TABLE_SUBTITLE;
static $PROJECT_TABLE_ARCHIVE_TEXT;
static $PROJECT_TABLE_ARCHIVE_SUBTITLE;
static $CONTRACTOR_TABLE_TEXT;
static $CONTRACTOR_TABLE_SUBTITLE;
static $TEAM_TABLE_TEXT;
static $TEAM_TABLE_SUBTITLE;
static $EMP_TABLE_TEXT;
static $EMP_TABLE_SUBTITLE;
static $EMP_TABLE_ARCHIVE_TEXT;
static $EMP_TABLE_ARCHIVE_SUBTITLE;
static $ABSENCE_TABLE_TEXT;
static $ABSENCE_TABLE_SUBTITLE;
static $EMP_STATUS_TABLE_TEXT;
static $EMP_STATUS_TABLE_SUBTITLE;
static $ORG_TYPE_TABLE_TEXT;
static $ORG_TYPE_TABLE_SUBTITLE;
static $CITY_TABLE_TEXT;
static $CITY_TABLE_SUBTITLE;
static $DEPARTMENTS_TABLE_TEXT;
static $DEPARTMENTS_TABLE_SUBTITLE;
static $STAFFING_TABLE_TEXT;
static $STAFFING_TABLE_SUBTITLE;
static $ORG_TABLE_TEXT;
static $ORG_TABLE_SUBTITLE;
static $CONTRACTOR_STATUS_TABLE_TEXT;
static $CONTRACTOR_STATUS_TABLE_SUBTITLE;
static $STEP_TABLE_TEXT;
static $STEP_TABLE_SUBTITLE;
static $ANALYSIS_MY_1_SUBTITLE;
static $ANALYSIS_MY_1;
static $ANALYSIS_MY_2_SUBTITLE;
static $ANALYSIS_MY_2;
static $ANALYSIS_YEAR_1;
static $ANALYSIS_YEAR_2;
static $ANALYSIS_OFFICE_1;
static $ANALYSIS_OFFICE_2;
static $ANALYSIS_OFFICE_3;
static $ANALYSIS_DEPARTMENT_1;
static $ANALYSIS_DEPARTMENT_2;
static $ANALYSIS_DEPARTMENT_3;
static $ANALYSIS_COMPANY_1;
static $ANALYSIS_COMPANY_2;
static $ANALYSIS_COMPANY_3;
static $ANALYSIS_COMPANY_4;
static $ANALYSIS_COMPANY_5;
static $ANALYSIS_COMPANY_6;
static $MY_TABLE_1;
static $MY_TABLE_2;
static $MY_TABLE_3;
static $PER_HOUR;
static $K1;
static $K2;
static $STRUCTURE_COMPANY_SUBTITLE;
static $STRUCTURE_COMPANY_TEXT;
static $CARD_SUBTITLE;
static $CARD_TEXT;
static $STAFF_SUBTITLE_1;
static $STAFF_SUBTITLE_2;
static $STAFF_SUBTITLE_3;
static $STAFF_SUBTITLE_4;
static $STAFF_SUBTITLE_5;
static $STAFF_TEXT_1;
static $STAFF_TEXT_2;
static $STAFF_TEXT_3;
static $STAFF_TEXT_4;
static $STAFF_TEXT_5;
static $PROJECT_SUBTITLE;
static $PROJECT_TEXT;
static $ANALYSIS_TEAM_1;
static $ANALYSIS_TEAM_2;
static $ANALYSIS_TEAM_3;
static $ANALYSIS_TEAM_4;
static $ANALYSIS_TEAM_5;
static $ANALYSIS_TEAM_6;
static $ANALYSIS_TEAM_7;
static $ANALYSIS_TEAM_8;
static $ANALYSIS_TEAM_9;
static $ANALYSIS_TEAM_10;
static $ANALYSIS_TEAM_11;
static $ANALYSIS_TEAM_12;
static $ANALYSIS_TEAM_1_SUBTITLE;
static $ANALYSIS_TEAM_2_SUBTITLE;
static $ANALYSIS_TEAM_3_SUBTITLE;
static $ANALYSIS_TEAM_4_SUBTITLE;
static $ANALYSIS_TEAM_5_SUBTITLE;
static $ANALYSIS_TEAM_6_SUBTITLE;
static $ANALYSIS_TEAM_7_SUBTITLE;
static $ANALYSIS_TEAM_8_SUBTITLE;
static $ANALYSIS_TEAM_9_SUBTITLE;
static $ANALYSIS_TEAM_10_SUBTITLE;
static $ANALYSIS_TEAM_11_SUBTITLE;
static $ANALYSIS_TEAM_12_SUBTITLE;
static $ANALYSIS_YEAR_1_SUBTITLE;
static $ANALYSIS_YEAR_2_SUBTITLE;
static $ANALYSIS_COMPANY_1_SUBTITLE;
static $ANALYSIS_COMPANY_2_SUBTITLE;
static $ANALYSIS_COMPANY_3_SUBTITLE;
static $ANALYSIS_COMPANY_4_SUBTITLE;
static $ANALYSIS_COMPANY_4_SUBTITLE_2;
static $ANALYSIS_COMPANY_5_SUBTITLE;
static $ANALYSIS_COMPANY_6_SUBTITLE;
static $FOT_TITLE;
static $FOT_TEXT;
static $FOT_TITLE_2;
static $FOT_TEXT_2;
static $FOT_TABLE_TITLE_1;
static $FOT_TABLE_TITLE_2;
static $FOT_TABLE_SUBTITLE_1;
static $FOT_TABLE_SUBTITLE_2;
static $VARIABLE_TABLE_SUBTITLE;
static $VARIABLE_TABLE_TEXT;
static $BUDGET_TITLE;
static $BUDGET_SUBTITLE;
static $BUDGET_TITLE2;
static $BUDGET_SUBTITLE2;
static $LOGS = [];
static function addLog($text)
{
$diff = microtime(true) - self::$START_TIME;
self::$START_TIME = microtime(true);
self::$LOGS[] = [
'text' => $text,
'diff' => round($diff, 5),
];
}
static $module_prefix = 'themes\merakomis';
static $modules = [
'day',
'dictionary\absence',
'dictionary\city',
'dictionary\contractor',
'dictionary\contractor\status',
'dictionary\department',
'dictionary\empstatus',
'dictionary\objtype',
'dictionary\org',
'dictionary\orgtype',
'dictionary\staffing',
'dictionary\step',
'dictionary\section',
'emp\group',
'emp\children',
'emp',
'event',
'fot',
'fot\budget',
'history',
'page',
'post',
'project',
'project\section',
'team\member',
'team',
'time\absence',
'time\cache',
'time',
'variable',
];
static function getUploadToken(){
$res = 'merakomis_'.\Site::$owner_id.'_'.time();
$token = Token::getOneEqualByColumn(Token::$ACCOUNT,\Site::$owner_id);
if(!$token){
$r = Token::insert([
Token::$ACCOUNT=>\Site::$owner_id,
Token::$HASH => $res,
]);
} else {
$res = $token[Token::$HASH];
}
return $res;
}
static function getFormSettings(){
$data = self::$data;
$tables = [
['Моя компания', self::$_COMPANY_TABLE_SUBTITLE, self::$_COMPANY_TABLE_TEXT,],
['Проекты', self::$_PROJECT_TABLE_SUBTITLE, self::$_PROJECT_TABLE_TEXT,],
['Контрагенты', self::$_CONTRACTOR_TABLE_SUBTITLE, self::$_CONTRACTOR_TABLE_TEXT,],
['Команда проекта', self::$_TEAM_TABLE_SUBTITLE, self::$_TEAM_TABLE_TEXT,],
['Сотрудники', self::$_EMP_TABLE_SUBTITLE, self::$_EMP_TABLE_TEXT,],
['Причины отсутствия', self::$_ABSENCE_TABLE_SUBTITLE, self::$_ABSENCE_TABLE_TEXT,],
['Статус сотрудников', self::$_EMP_STATUS_TABLE_SUBTITLE, self::$_EMP_STATUS_TABLE_TEXT,],
['Виды сотрудничества', self::$_ORG_TYPE_TABLE_SUBTITLE, self::$_ORG_TYPE_TABLE_TEXT,],
['Локации', self::$_CITY_TABLE_SUBTITLE, self::$_CITY_TABLE_TEXT,],
['Структура компании', self::$_DEPARTMENTS_TABLE_SUBTITLE, self::$_DEPARTMENTS_TABLE_TEXT,],
['Штатное расписание', self::$_STAFFING_TABLE_SUBTITLE, self::$_STAFFING_TABLE_TEXT,],
['Юридические лица', self::$_ORG_TABLE_SUBTITLE, self::$_ORG_TABLE_TEXT,],
['Статус контрагентов', self::$_CONTRACTOR_STATUS_TABLE_SUBTITLE, self::$_CONTRACTOR_STATUS_TABLE_TEXT,],
['Структура проекта', self::$_STEP_TABLE_SUBTITLE, self::$_STEP_TABLE_TEXT,],
];
$res['title'] = ['title'=>'Проекты','subtitle'=>Merakomis::$PROJECT_TABLE_SUBTITLE,'text'=>Merakomis::$PROJECT_TABLE_TEXT];
//
$form = (new \ModuleBZ\Form());
$form->addRow((new Row())
// ->addColumn(((new Column())->addTitle(new Title('Финансы') )))
->addColumn(((new Text())
->setName(self::$_ADMIN_EMAIL)
->setValue(self::$ADMIN_EMAIL)
->setClassAll('c-100')
->setLabel($c = 'Email для уведомлений')
->setPlaceholder($c)
)));
/*
$form->addRow((new Row())
->addColumn(((new Column())->addTitle(new Title('Финансы') )))
->addColumn(((new Text())
->setName(self::$_PER_HOUR)
->setValue(self::$PER_HOUR)
->setClassAll('c-100')
->setLabel($c = 'Ставка в час')
->setPlaceholder($c)
))
->addColumn(((new Text())
->setName(self::$_K1)
->setValue(self::$K1)
->setClassAll('c-100')
->setLabel($c = 'k1')
->setPlaceholder($c)
))
->addColumn(((new Text())
->setName(self::$_K2)
->setValue(self::$K2)
->setClassAll('c-100')
->setLabel($c = 'k2')
->setPlaceholder($c)
))
);
*/
/*
foreach ($tables as $v) {
$k1 = $v[1];
$k2 = $v[2];
$form->addRow((new Row())
->addColumn(((new Column())->addTitle(new Title($v[0]) )))
->addColumn(((new Text())
->setName($k1)
->setValue($data[$k1])
->setClassAll('c-100')
->setLabel($c = 'Заголовок таблицы «'.$v[0].'»')
->setPlaceholder($c)
))
->addColumn(((new TextArea())
->setName($k2)
->setValue($data[$k2])
->setClassAll('c-100')
->setLabel($c = 'Описание таблицы «'.$v[0].'»')
->setPlaceholder($c)
->setAutoHeight(true)
))
);
}
$analysis = [
'ФИО'=>[
self::$_ANALYSIS_MY_1=>'Работа над проектами',
self::$_ANALYSIS_MY_2=>'Отсутствие на рабочем месте',
],
'Мои проекты'=>[
self::$_ANALYSIS_TEAM_1=>'Анализ затрат на проекты - 1',
self::$_ANALYSIS_TEAM_2=>'Анализ затрат на проекты - 2',
self::$_ANALYSIS_TEAM_3=>'Подразделы',
self::$_ANALYSIS_TEAM_4=>'Разделы',
self::$_ANALYSIS_TEAM_5=>'Команда проекта',
],
'Мои проекты: годовой отчёт'=>[
self::$_ANALYSIS_YEAR_1=>'Сводка часов за календарный год',
self::$_ANALYSIS_YEAR_2=>'Сводка затрат за календарный год',
],
'Моё подразделение'=>[
self::$_ANALYSIS_DEPARTMENT_1=>'Нагрузка на подразделения',
self::$_ANALYSIS_DEPARTMENT_2=>'Сотрудники',
self::$_ANALYSIS_DEPARTMENT_3=>'Анализ нерабочих дней сотрудников вашего подразделения',
],
'Моя компания'=>[
self::$_ANALYSIS_COMPANY_1=>'Нагрузка на подразделения',
self::$_ANALYSIS_COMPANY_2=>'Нагрузка на сотрудников - 1',
self::$_ANALYSIS_COMPANY_3=>'Нагрузка на сотрудников - 2',
self::$_ANALYSIS_COMPANY_4=>'Анализ нерабочих дней сотрудников вашей компании',
],
'Мой табель'=>[
self::$_MY_TABLE_1=>'Сводный табель',
self::$_MY_TABLE_2=>'Выбранный проект',
self::$_MY_TABLE_3=>'Информация',
],
];
$form->addRow((new Row())
->addColumn(((new Column())->addTitle(new Title('Аналитика') )))
);
foreach ($analysis as $title=>$a){
$form->addRow((new Row())
->addColumn(((new Column())->addTitle(new Title($title) )))
);
foreach ($a as $k=>$v){
$form->addRow((new Row())
->addColumn(((new Text())
->setName($k)
->setValue($data[$k])
->setClassAll('c-100')
->setLabel($c = $v)
->setPlaceholder($c)
)));
}
}
*/
$form->addRow((new Row())
->addColumn(((new Submit())
->setName('save')
->setValue('1')
->setPlaceholder('Сохранить')
->setClassName('blue')
->setClassAll('c-100')
))
)
;
return $form->toJSON();
}
static function fprice($x,$options = []){
return number_format($x,$options['round']??0,"."," ").($options['currency']??"");
}
static function fbool($x){
return (boolval($x)?'Да':'Нет');
}
static function getChartColor($x){
$arr = ['#00589C', '#59B90F', '#BD9768','#1C303B','#676E77','#BFBFBF'];
//$arr = ['#59B90F', '#BD9768', '#0D71BE',];
return $arr[$x] ? : $arr[ array_key_last($arr) ];
}
static function getGraphColor($x){
$arr = ['#59B90F', '#BD9768', '#0D71BE', '#8AA0B2', '#B2DF8A', '#A6CEE3', '#BE5A0D', '#0FAEB9', '#10846C', '#8B71B9',];
//$arr = ['#59B90F', '#BD9768', '#0D71BE',];
return $arr[$x] ? : $arr[ array_key_last($arr) ];
}
static function getGraphClasses(){
$classes = [
//'color-green',
//'color-brown',
];
for($i=1;$i<=10;$i++){
$classes[] = 'chart-color'.$i;
}
return $classes;
}
static function graphClass(&$array,$isSort = true,$isReverse = false,$isPercent = false){
if($isSort) {
usort($array, function ($x, $y) {
return $x['value'] <=> $y['value'];
});
}
if($isReverse){
$array = array_reverse($array);
}
if($isPercent){
$total = 0;
$last = count($array)-1;
foreach ($array as $k=>$v){
$isLast = $k==$last;
if($isLast){
if($isReverse) {
$total += $v['value'];
} else{
$array[$k]['value'] = 100-$total;
}
} else {
$total += $v['value'];
}
}
if($isReverse and $array[0]) {
$array[0]['value'] += 100-$total;
}
}
$classes = self::getGraphClasses();
foreach ($array as $k=>&$value){
$value['class'] = $classes[$k];
}
}
static function getMonth($x){
switch(intval($x)){
case 1: return "январь"; break;
case 2: return "февраль"; break;
case 3: return "март"; break;
case 4: return "апрель"; break;
case 5: return "май"; break;
case 6: return "июнь"; break;
case 7: return "июль"; break;
case 8: return "август"; break;
case 9: return "сентябрь"; break;
case 10: return "октябрь"; break;
case 11: return "ноябрь"; break;
case 12: return "декабрь"; break;
default : return"";
}
}
static function fdate($x){
if($x=='0000-00-00') return '';
if(!$x) return '';
$x = is_numeric($x) ? $x : strtotime($x);
return date('d.m.Y',$x).' г.';
}
static function mail($to,$name,$message,$subject){
$mail_res = false;
try {
$mail = new PHPMailer(true);
$mail->isSMTP(); //Send using SMTP
$mail->Host = 'smtp.mail.ru'; //Set the SMTP server to send through
$mail->SMTPAuth = true; //Enable SMTP authentication
$mail->Username = $from = 'admin@merakom.ru'; //SMTP username
$mail->Password = 'enAwSLSrJpWePnypPF0B'; //SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Enable implicit TLS encryption
$mail->Port = 465; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
$mail->CharSet = PHPMailer::CHARSET_UTF8;
//Recipients
$mail->setFrom($from, 'Мераком');
$mail->addAddress($to, $name); //Add a recipient
//Content
$mail->isHTML(true); //Set email format to HTML
$mail->Subject = $subject;
$mail->Body = $message;
//if(IS_PUBLIC) {
$mail_res = $mail->send();
//}
} catch (\Exception $exception){
return null;
}
$from = 'no-reply@'.($_SERVER['HTTP_HOST']);
$headers = 'From: Merakom <'.$from .'>';//. "\r\n" .
//'Reply-To: '.$from . "\r\n" .
//'To: '.$to.''. "\r\n" .
//'X-Mailer: PHP/' . phpversion();
'';
return [
'headers'=>$headers,
'message'=>$message,
'subject'=>$subject,
'res'=>$mail_res,
//mail($to, $subject, $message, $headers),
];
}
static function sendMailAdmin($html,$subject='',$files = null){
$emais = [
'test@module.bz',
'admin@merakom.ru',
//self::$ADMIN_EMAIL,
];
$a = explode(",",self::$ADMIN_EMAIL);
foreach ($a as $email){
$email = trim($email);
if($email) $emais[] = $email;
}
$res = [];
foreach ($emais as $email) {
if(!$email) continue;
$r = self::mail(
$email, // email
'Администратор',
$html,
$subject
);
if($r){
$res['send'][] = $r;
}
}
return $res;
}
static function boolString($x){
return boolval($x)?'Да':'Нет';
}
static $START_TIME;
static function prepare() {
self::$START_TIME = microtime(true);
$isLocal = (in_array($_SERVER['HTTP_ORIGIN'],['http://localhost','http://localhost:3000']));
self::$TINY_MCE_IMAGE_UPLOAD_URL = \Site::$domen.'/api/themes.merakomis/upload_image/';
self::$IS_TEST = $isLocal;
parent::prepare();
Emp::init();
}
static function decimalToHide($number) {
if ($number == 0) {
return '0';
}
$digits = '0123456789ABCDEFGHIJ'; // символы для base-20
$result = '';
$isNegative = $number < 0;
$number = abs($number);
while ($number > 0) {
$remainder = $number % 20;
$result = $digits[$remainder] . $result;
$number = (int)($number / 20);
}
return $isNegative ? '-' . $result : $result;
}
static function encryptNumber($number) {
$key = 'sex';
// Убедимся, что это число (или строка с числом)
if (!is_numeric($number)) {
return '0';
//throw new InvalidArgumentException("Ожидается числовое значение");
}
$number = round($number, 2);
$numberStr = (string) $number; // например, "123.456"
$method = 'AES-128-CBC';
$iv = substr(hash('sha256', $key, true), 0, 16); // IV из ключа (для примера)
$encrypted = openssl_encrypt($numberStr, $method, $key, 0, $iv);
if ($encrypted === false) {
//throw new RuntimeException("Шифрование не удалось");
}
return base64_encode($encrypted); // возвращаем в виде строки
}
static function decryptNumber($encryptedString) {
$key = 'sex';
$method = 'AES-128-CBC';
$iv = substr(hash('sha256', $key, true), 0, 16);
$encrypted = base64_decode($encryptedString);
$decrypted = openssl_decrypt($encrypted, $method, $key, 0, $iv);
if ($decrypted === false) {
//throw new RuntimeException("Дешифрование не удалось");
}
// Преобразуем обратно в число (float или int)
return $decrypted + 0; // автоматически станет float, если есть точка
}
static function hideToDecimal($base20) {
$base20 = trim($base20);
$isNegative = ($base20[0] == '-');
if ($isNegative) {
$base20 = substr($base20, 1);
}
$digits = '0123456789ABCDEFGHIJ';
$result = 0;
for ($i = 0; $i < strlen($base20); $i++) {
$char = $base20[$i];
$value = strpos($digits, $char);
if ($value === false) {
//throw new InvalidArgumentException("Недопустимый символ в base-20: $char");
}
$result = $result * 20 + $value;
}
return $isNegative ? -$result : $result;
}
public static function getOptions(): array
{
if (static::$options) return static::$options;
else {
$data = static::$data;
return static::$options = [
self::$_PROJECT_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_PROJECT_TABLE_TEXT], ],
self::$_PROJECT_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_PROJECT_TABLE_SUBTITLE], ],
self::$_CONTRACTOR_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_CONTRACTOR_TABLE_TEXT], ],
self::$_CONTRACTOR_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_CONTRACTOR_TABLE_SUBTITLE], ],
self::$_TEAM_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_TEAM_TABLE_TEXT], ],
self::$_TEAM_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_TEAM_TABLE_SUBTITLE], ],
self::$_EMP_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_EMP_TABLE_TEXT], ],
self::$_EMP_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_EMP_TABLE_SUBTITLE], ],
self::$_ABSENCE_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_ABSENCE_TABLE_TEXT], ],
self::$_ABSENCE_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_ABSENCE_TABLE_SUBTITLE], ],
self::$_EMP_STATUS_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_EMP_STATUS_TABLE_TEXT], ],
self::$_EMP_STATUS_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_EMP_STATUS_TABLE_SUBTITLE], ],
self::$_ORG_TYPE_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_ORG_TYPE_TABLE_TEXT], ],
self::$_ORG_TYPE_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_ORG_TYPE_TABLE_SUBTITLE], ],
self::$_CITY_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_CITY_TABLE_TEXT], ],
self::$_CITY_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_CITY_TABLE_SUBTITLE], ],
self::$_DEPARTMENTS_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_DEPARTMENTS_TABLE_TEXT], ],
self::$_DEPARTMENTS_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_DEPARTMENTS_TABLE_SUBTITLE], ],
self::$_STAFFING_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_STAFFING_TABLE_TEXT], ],
self::$_STAFFING_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_STAFFING_TABLE_SUBTITLE], ],
self::$_ORG_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_ORG_TABLE_TEXT], ],
self::$_ORG_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_ORG_TABLE_SUBTITLE], ],
self::$_CONTRACTOR_STATUS_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_CONTRACTOR_STATUS_TABLE_SUBTITLE], ],
self::$_CONTRACTOR_STATUS_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_CONTRACTOR_STATUS_TABLE_TEXT], ],
self::$_COMPANY_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_COMPANY_TABLE_SUBTITLE], ],
self::$_COMPANY_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_COMPANY_TABLE_TEXT], ],
self::$_STEP_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_STEP_TABLE_TEXT], ],
self::$_STEP_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_STEP_TABLE_SUBTITLE], ],
self::$_ANALYSIS_MY_1_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_MY_1_SUBTITLE], ],
self::$_ANALYSIS_MY_1 => [ eThemeOption::ID => $data[self::$_ANALYSIS_MY_1], ],
self::$_ANALYSIS_MY_2_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_MY_2_SUBTITLE], ],
self::$_ANALYSIS_MY_2 => [ eThemeOption::ID => $data[self::$_ANALYSIS_MY_2], ],
self::$_ANALYSIS_YEAR_1 => [ eThemeOption::ID => $data[self::$_ANALYSIS_YEAR_1], ],
self::$_ANALYSIS_YEAR_2 => [ eThemeOption::ID => $data[self::$_ANALYSIS_YEAR_2], ],
self::$_ANALYSIS_OFFICE_1 => [ eThemeOption::ID => $data[self::$_ANALYSIS_OFFICE_1], ],
self::$_ANALYSIS_OFFICE_2 => [ eThemeOption::ID => $data[self::$_ANALYSIS_OFFICE_2], ],
self::$_ANALYSIS_OFFICE_3 => [ eThemeOption::ID => $data[self::$_ANALYSIS_OFFICE_3], ],
self::$_ANALYSIS_DEPARTMENT_1 => [ eThemeOption::ID => $data[self::$_ANALYSIS_DEPARTMENT_1], ],
self::$_ANALYSIS_DEPARTMENT_2 => [ eThemeOption::ID => $data[self::$_ANALYSIS_DEPARTMENT_2], ],
self::$_ANALYSIS_DEPARTMENT_3 => [ eThemeOption::ID => $data[self::$_ANALYSIS_DEPARTMENT_3], ],
self::$_ANALYSIS_COMPANY_1 => [ eThemeOption::ID => $data[self::$_ANALYSIS_COMPANY_1], ],
self::$_ANALYSIS_COMPANY_2 => [ eThemeOption::ID => $data[self::$_ANALYSIS_COMPANY_2], ],
self::$_ANALYSIS_COMPANY_3 => [ eThemeOption::ID => $data[self::$_ANALYSIS_COMPANY_3], ],
self::$_ANALYSIS_COMPANY_4 => [ eThemeOption::ID => $data[self::$_ANALYSIS_COMPANY_4], ],
self::$_ANALYSIS_COMPANY_5 => [ eThemeOption::ID => $data[self::$_ANALYSIS_COMPANY_5], ],
self::$_ANALYSIS_COMPANY_6 => [ eThemeOption::ID => $data[self::$_ANALYSIS_COMPANY_6], ],
self::$_MY_TABLE_1 => [ eThemeOption::ID => $data[self::$_MY_TABLE_1], ],
self::$_MY_TABLE_2 => [ eThemeOption::ID => $data[self::$_MY_TABLE_2], ],
self::$_MY_TABLE_3 => [ eThemeOption::ID => $data[self::$_MY_TABLE_3], ],
self::$_PER_HOUR => [ eThemeOption::ID => $data[self::$_PER_HOUR], ],
self::$_K1 => [ eThemeOption::ID => $data[self::$_K1], ],
self::$_K2 => [ eThemeOption::ID => $data[self::$_K2], ],
self::$_STRUCTURE_COMPANY_SUBTITLE => [ eThemeOption::ID => $data[self::$_STRUCTURE_COMPANY_SUBTITLE], ],
self::$_STRUCTURE_COMPANY_TEXT => [ eThemeOption::ID => $data[self::$_STRUCTURE_COMPANY_TEXT], ],
self::$_CARD_SUBTITLE => [ eThemeOption::ID => $data[self::$_CARD_SUBTITLE], ],
self::$_CARD_TEXT => [ eThemeOption::ID => $data[self::$_CARD_TEXT], ],
self::$_STAFF_SUBTITLE_1 => [ eThemeOption::ID => $data[self::$_STAFF_SUBTITLE_1], ],
self::$_STAFF_SUBTITLE_2 => [ eThemeOption::ID => $data[self::$_STAFF_SUBTITLE_2], ],
self::$_STAFF_SUBTITLE_3 => [ eThemeOption::ID => $data[self::$_STAFF_SUBTITLE_3], ],
self::$_STAFF_SUBTITLE_4 => [ eThemeOption::ID => $data[self::$_STAFF_SUBTITLE_4], ],
self::$_STAFF_SUBTITLE_5 => [ eThemeOption::ID => $data[self::$_STAFF_SUBTITLE_5], ],
self::$_STAFF_TEXT_1 => [ eThemeOption::ID => $data[self::$_STAFF_TEXT_1], ],
self::$_STAFF_TEXT_2 => [ eThemeOption::ID => $data[self::$_STAFF_TEXT_2], ],
self::$_STAFF_TEXT_3 => [ eThemeOption::ID => $data[self::$_STAFF_TEXT_3], ],
self::$_STAFF_TEXT_4 => [ eThemeOption::ID => $data[self::$_STAFF_TEXT_4], ],
self::$_STAFF_TEXT_5 => [ eThemeOption::ID => $data[self::$_STAFF_TEXT_5], ],
self::$_PROJECT_SUBTITLE => [ eThemeOption::ID => $data[self::$_PROJECT_SUBTITLE], ],
self::$_PROJECT_TEXT => [ eThemeOption::ID => $data[self::$_PROJECT_TEXT], ],
self::$_ANALYSIS_TEAM_1 => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_1], ],
self::$_ANALYSIS_TEAM_2 => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_2], ],
self::$_ANALYSIS_TEAM_3 => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_3], ],
self::$_ANALYSIS_TEAM_4 => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_4], ],
self::$_ANALYSIS_TEAM_5 => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_5], ],
self::$_ANALYSIS_TEAM_6 => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_6], ],
self::$_ANALYSIS_TEAM_7 => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_7], ],
self::$_ANALYSIS_TEAM_8 => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_8], ],
self::$_ANALYSIS_TEAM_9 => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_9], ],
self::$_ANALYSIS_TEAM_10 => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_10], ],
self::$_ANALYSIS_TEAM_11 => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_11], ],
self::$_ANALYSIS_TEAM_12 => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_12], ],
self::$_ANALYSIS_TEAM_1_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_1_SUBTITLE], ],
self::$_ANALYSIS_TEAM_2_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_2_SUBTITLE], ],
self::$_ANALYSIS_TEAM_3_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_3_SUBTITLE], ],
self::$_ANALYSIS_TEAM_4_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_4_SUBTITLE], ],
self::$_ANALYSIS_TEAM_5_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_5_SUBTITLE], ],
self::$_ANALYSIS_TEAM_6_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_6_SUBTITLE], ],
self::$_ANALYSIS_TEAM_7_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_7_SUBTITLE], ],
self::$_ANALYSIS_TEAM_8_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_8_SUBTITLE], ],
self::$_ANALYSIS_TEAM_9_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_9_SUBTITLE], ],
self::$_ANALYSIS_TEAM_10_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_10_SUBTITLE], ],
self::$_ANALYSIS_TEAM_11_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_11_SUBTITLE], ],
self::$_ANALYSIS_TEAM_12_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_TEAM_12_SUBTITLE], ],
self::$_ANALYSIS_YEAR_1_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_YEAR_1_SUBTITLE], ],
self::$_ANALYSIS_YEAR_2_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_YEAR_2_SUBTITLE], ],
self::$_ANALYSIS_COMPANY_1_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_COMPANY_1_SUBTITLE], ],
self::$_ANALYSIS_COMPANY_2_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_COMPANY_2_SUBTITLE], ],
self::$_ANALYSIS_COMPANY_3_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_COMPANY_3_SUBTITLE], ],
self::$_ANALYSIS_COMPANY_4_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_COMPANY_4_SUBTITLE], ],
self::$_ANALYSIS_COMPANY_4_SUBTITLE_2 => [ eThemeOption::ID => $data[self::$_ANALYSIS_COMPANY_4_SUBTITLE_2], ],
self::$_ANALYSIS_COMPANY_5_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_COMPANY_5_SUBTITLE], ],
self::$_ANALYSIS_COMPANY_6_SUBTITLE => [ eThemeOption::ID => $data[self::$_ANALYSIS_COMPANY_6_SUBTITLE], ],
self::$_PROJECT_TABLE_ARCHIVE_TEXT => [ eThemeOption::ID => $data[self::$_PROJECT_TABLE_ARCHIVE_TEXT], ],
self::$_PROJECT_TABLE_ARCHIVE_SUBTITLE => [ eThemeOption::ID => $data[self::$_PROJECT_TABLE_ARCHIVE_SUBTITLE], ],
self::$_EMP_TABLE_ARCHIVE_TEXT => [ eThemeOption::ID => $data[self::$_EMP_TABLE_ARCHIVE_TEXT], ],
self::$_EMP_TABLE_ARCHIVE_SUBTITLE => [ eThemeOption::ID => $data[self::$_EMP_TABLE_ARCHIVE_SUBTITLE], ],
self::$_FOT_TITLE => [ eThemeOption::ID => $data[self::$_FOT_TITLE], ],
self::$_FOT_TEXT => [ eThemeOption::ID => $data[self::$_FOT_TEXT], ],
self::$_FOT_TITLE_2 => [ eThemeOption::ID => $data[self::$_FOT_TITLE_2], ],
self::$_FOT_TEXT_2 => [ eThemeOption::ID => $data[self::$_FOT_TEXT_2], ],
self::$_VARIABLE_TABLE_SUBTITLE => [ eThemeOption::ID => $data[self::$_VARIABLE_TABLE_SUBTITLE], ],
self::$_VARIABLE_TABLE_TEXT => [ eThemeOption::ID => $data[self::$_VARIABLE_TABLE_TEXT], ],
self::$_FOT_TABLE_TITLE_1 => [ eThemeOption::ID => $data[self::$_FOT_TABLE_TITLE_1], ],
self::$_FOT_TABLE_TITLE_2 => [ eThemeOption::ID => $data[self::$_FOT_TABLE_TITLE_2], ],
self::$_FOT_TABLE_SUBTITLE_1 => [ eThemeOption::ID => $data[self::$_FOT_TABLE_SUBTITLE_1], ],
self::$_FOT_TABLE_SUBTITLE_2 => [ eThemeOption::ID => $data[self::$_FOT_TABLE_SUBTITLE_2], ],
self::$_ADMIN_EMAIL => [ eThemeOption::ID => $data[self::$ADMIN_EMAIL], ],
self::$_BUDGET_TITLE => [ eThemeOption::ID => $data[self::$BUDGET_TITLE], ],
self::$_BUDGET_SUBTITLE => [ eThemeOption::ID => $data[self::$BUDGET_SUBTITLE], ],
self::$_BUDGET_TITLE2 => [ eThemeOption::ID => $data[self::$BUDGET_TITLE2], ],
self::$_BUDGET_SUBTITLE2 => [ eThemeOption::ID => $data[self::$BUDGET_SUBTITLE2], ],
self::$_ALL_PROJECTS_TITLE => [ eThemeOption::ID => $data[self::$ALL_PROJECTS_TITLE], ],
self::$_ALL_PROJECTS_TEXT => [ eThemeOption::ID => $data[self::$ALL_PROJECTS_TEXT], ],
];
}
}
}