meraproject/themes/merakomis/emp/controller.php

386 lines
15 KiB
PHP
Raw Normal View History

<?
namespace controller\themes\merakomis\emp;
use core\core\structure\eRowClick;
use core\db\structure\Column;
use ms\table\Filter;
use themes\Merakomis;
use themes\merakomis\dictionary\Department;
use themes\merakomis\dictionary\Staffing;
use themes\merakomis\Emp;
use themes\merakomis\emp\Rules;
use themes\merakomis\History;
use themes\merakomis\Post;
use themes\merakomis\structure\merakomisControllerTable;
use themes\merakomis\structure\merakomisModuleTable;
use themes\merakomis\Telegram;
class Api extends merakomisControllerTable {
/** @var merakomisModuleTable */
static $class = 'themes\merakomis\Emp';
function isSummaryAnalysis(){
echo je([
'result'=>Rules::isAnalysisProjectsSummary(),
]);
}
function getBirthday(){
$res = Emp::getBirthday();
echo je($res);
}
function exit(){
Emp::exit();
}
public static function updatePassword() {
$res = ['e'=>0,'m'=>''];
if(Emp::$IS_AUTH) {
$data = Emp::$data;
$hash = $data[Emp::$PASSWORD];
$data[Emp::$PASSWORD] = $_POST['old'];
$hash2 = Emp::hash($data);
if(strcmp($hash,$hash2)==0){
Emp::updateMyPass($data,$_POST['pass1']);
$res['notify']['content'] = "Пароль обновлён";
} else {
$res['e'] = 1;
$res['m'] = 'Неверный старый пароль';
$res['notify']['color'] = 1;
$res['notify']['content'] = $res['m'];
}
}
echo je($res);
}
public static function getForm() {
$res = [];
if(Emp::$IS_AUTH) {
$_POST[static::$class::$ID] = $_POST['id'];
$res = static::$class::getFormInfo($_POST);
$res['title'] = 'Редактор сотрудника';
}
echo je($res);
}
public static function getTableData($post = []) {
//Emp::getSubEmps(1);
$isArchive = false;
if(isset($post['data']['my_company'])){
//$TITLE = ['title'=>'Моя компания','subtitle'=>'Моя команда','text'=>'Контакт-лист всех ваших коллег: от Владивостока до Калининграда.'];
$TITLE = [
'title' => 'Моя компания',
'edit' => true,
'subtitle' => Merakomis::$COMPANY_TABLE_SUBTITLE,
'text' => Merakomis::$COMPANY_TABLE_TEXT,
'subtitle_var' => Merakomis::$_COMPANY_TABLE_SUBTITLE,
'text_var' => Merakomis::$_COMPANY_TABLE_TEXT,
];
$post['options'][\ModuleTable::ROW_CLICK] = eRowClick::CUSTOM;
$post['options'][\Query::SORT] = [Emp::$NAME=>'ASC'];
//if(!$post[])
$post['options'][\Query::WHERE] = \Where::_operator(Emp::$ARCHIVE,'=',0);
//$posts ? \Where::_in(Member::$POST,$posts) : null,
$post['options'][\ModuleTable::COLUMN_RENDER]=[
Emp::$IMAGE => [
\ModuleTable::COLUMN_RENDER_CUSTOM => true,
],
];
$post['options'][\ModuleTable::COLUMN_LIST]=[
Emp::$IMAGE,
//Emp::$ABSENCE,
Emp::$NAME,
Emp::$STAFFING,
Emp::$ROLES,
Emp::$SKYPE,
Emp::$DISCORD,
Emp::$EMAIL,
Emp::$CITY,
];
}
if(isset($post['data']['my'])){
$post['options'][\ModuleTable::ROW_CLICK] = eRowClick::NONE;
if(!Emp::isSuperView()) {
$emps = Emp::getSubEmps(Emp::$AUTH_ID) ?: [0];
$post['options'][\Query::WHERE] = \Where::_in(Emp::$ID, $emps);
}
$post['options'][\ModuleTable::COLUMN_RENDER] = [
Emp::$NAME => [
\ModuleTable::COLUMN_RENDER_LINK_FUNCTION=>function($v){
return '/public_profile/'.$v[Emp::$ID].'/';
}
]
];
}
if(isset($post['data']['archive'])){
$post['options'][\ModuleTable::ROW_CLICK] = eRowClick::NONE;
if(!isset($post['options']['filter'][Emp::$ARCHIVE])) {
$post['options'][\Query::WHERE] = \Where::_operator(Emp::$ARCHIVE, '=', intval($post['data']['archive']));
}
/*
if(!isset($post['options']['filter'][Emp::$ARCHIVE])){
$post['options']['filter'][Emp::$ARCHIVE] = intval($post['data']['archive']);
}
*/
if($post['data']['archive']){
$isArchive = true;
$post['options'][\ModuleTable::ROW_CLICK] = eRowClick::CUSTOM;
$post['options'][\ModuleTable::COLUMN_LIST]=[
Emp::$ARCHIVE,
Emp::$NAME,
Emp::$STAFFING,
Emp::$ROLES,
Emp::$CITY,
Emp::$IS_FREELANCER,
Emp::$ORG,
Emp::$ORG_TYPE,
Emp::$ORG,
//Emp::$NOPRIZ,
//Emp::$NOSTROI,
//Emp::$TECHNADZOR,
Emp::$DATE_HIRE,
Emp::$STATUS,
Emp::$ARCHIVE_DATE,
];
} else {
}
}
if(isset($post['data']['mini'])){
$post['options'][\ModuleTable::ROW_CLICK] = eRowClick::NONE;
//$TITLE= ['title'=>'Сотрудники','subtitle'=>'Наша команда','text'=>'Компьютеры коренным образом изменили жизнь каждого человека. Несколько десятилетий назад люди даже не знали ничего об этих электронных устройствах, тогда как в наши дни даже маленький ребенок может управлять этой машиной. Почти все современные технологии зависит от компьютеров, которые используются для хранения данных: файлов, секретной информации, банковских операций и прочего.'];
// $TITLE = ['title'=>'Сотрудники','subtitle'=>Merakomis::$DEPARTMENTS_TABLE_SUBTITLE,'text'=>Merakomis::$DEPARTMENTS_TABLE_TEXT];
$TITLE = [
'title' => 'Сотрудники',
'edit' => true,
'subtitle' => Merakomis::$DEPARTMENTS_TABLE_SUBTITLE,
'text' => Merakomis::$DEPARTMENTS_TABLE_TEXT,
'subtitle_var' => Merakomis::$_DEPARTMENTS_TABLE_SUBTITLE,
'text_var' => Merakomis::$_DEPARTMENTS_TABLE_TEXT,
];
$post['options'][\ModuleTable::COLUMN_LIST]=[
Emp::$NAME,
Emp::$STAFFING,
Emp::$ROLES,
Emp::$TYPE,
Emp::$GROUP,
Emp::$ACCEPT,
Emp::$ACTIVE,
Emp::$ARCHIVE,
];
}
if(isset($post['data']['all']) && !isset($post['data']['archive'])){
$post['options'][\ModuleTable::COLUMN_LIST]=[
Emp::$ARCHIVE,
Emp::$NAME,
Emp::$STAFFING,
Emp::$ROLES,
Emp::$CITY,
Emp::$IS_FREELANCER,
Emp::$ORG,
Emp::$ORG_TYPE,
Emp::$DATE_HIRE,
Emp::$STATUS,
Emp::$FOT,
];
}
$post['getData'] = true;
$res = parent::getTableData($post);
if($TITLE) $res['title'] = $TITLE;
else {
// $res['title'] = ['title'=>'Сотрудники','subtitle'=>Merakomis::$EMP_TABLE_SUBTITLE,'text'=>Merakomis::$EMP_TABLE_TEXT];
$res['title'] = [
'title' => 'Сотрудники',
'edit' => true,
'subtitle' => $isArchive ? Merakomis::$EMP_TABLE_ARCHIVE_SUBTITLE : Merakomis::$EMP_TABLE_SUBTITLE,
'text' => $isArchive ? Merakomis::$EMP_TABLE_ARCHIVE_TEXT : Merakomis::$EMP_TABLE_TEXT,
'subtitle_var' => $isArchive ? Merakomis::$_EMP_TABLE_ARCHIVE_SUBTITLE : Merakomis::$_EMP_TABLE_SUBTITLE,
'text_var' => $isArchive ? Merakomis::$_EMP_TABLE_ARCHIVE_TEXT : Merakomis::$_EMP_TABLE_TEXT,
];
}
if(isset($post['data']['my_company']) || isset($post['data']['all'])){
$res["per_page_options"] = [
["id"=>0,"title"=>'Показать все'],
["id"=>10, "title"=>'10'],
["id"=>25, "title"=>'25'],
["id"=>50, "title"=>'50'],
["id"=>100,"title"=>'100'],
];
}
echo je($res);
}
static function new_pass(){
$res = ['e'=>0,'m'=>''];
$pass = trim($_POST['password1']);
$pass2 = trim($_POST['password2']);
if(!$pass){
$ERROR = 'Введите пароль';
} else if(strcmp($pass,$pass2)!=0){
$ERROR = 'Пароли не совпадают';
} else {
$ERROR = Emp::checkRemind($_POST['id'],$_POST['key'],$_POST['hash']);
}
if($ERROR){
$res['e'] = 1;
$res['m'] = $ERROR;
} else {
$profile = Emp::getByID(intval($_POST['id']));
Emp::updateMyPass($profile,$_POST['password1']);
$res['m'] = 'Пароль успешно обновлён. Через 3 секунды вы будете авторизованы';
History::remind(intval($_POST['id']));
}
echo je($res);
}
static function test()
{
Emp::sendAuthCode(1);
//echo Emp::getTgStartLink();
//$x = Merakomis::mail('v.gvozdikov@merakom.ru', 'Виктор', 'test', 'Тест');
}
static function remind(){
$res = ['e'=>0];
$profile = Emp::getByLogin((string)$_POST['login']);
if($profile){
//$res['m']='Вам выслан email с ссылкой на восстановление пароля '.ShopTheme::getRemindLink($profile);
$res['m']='Вам выслан email с ссылкой на восстановление пароля';//.ShopTheme::getRemindLink($profile);
$link = Emp::getRemindLink($profile);
//$res['link'] = $link;
$html = $link;
//$html = 'Здравствуйте, '.$profile[Emp::$NAME]."\n".
$html = 'Кликните <a href="'.$link.'">ссылку</a> для установки нового пароля';
//$res['html'] = $html;
$res['res'] = Emp::sendEmail($profile,$html,'Восстановление вашего пароля');
//$res['res2'] = Emp::sendEmail($profile,'test','test2');
} else {
$res['e'] = 1;
$res['m'] = 'Такой аккаунт в системе не найден';
}
$res['post'] = $_POST;
echo je($res);
}
static function getMyData(){
$res = [];
if(Emp::$IS_AUTH){
$res = Emp::format(Emp::$data);
}
echo je($res);
}
static function getData(){
$res = [];
if(Emp::$IS_AUTH){
$res = Emp::format(Emp::getByID(intval($_POST['id'])));
}
echo je($res);
}
static function updateMe(){
$res = [];
if(Emp::$IS_AUTH){
$res['r'] = Emp::updateById(Emp::$AUTH_ID,[
Emp::$PHONE=>$_POST['data'][Emp::$PHONE],
Emp::$SKYPE=>$_POST['data'][Emp::$SKYPE],
Emp::$DISCORD=>$_POST['data'][Emp::$DISCORD],
]);
$res['notify']['content'] = 'Контакты успешно обновлены';
}
echo je($res);
}
static function getMyForm(){
if(Emp::$IS_AUTH) {
$emp_id = intval($_POST['id']) ?: Emp::$AUTH_ID;
echo je(Emp::getPublicData($emp_id));
}
}
static function reg(){
$res = Emp::reg($_POST['login'],$_POST['pass1'],$_POST['pass2']);
echo je($res);
}
static function login(){
$res = Emp::login($_POST['login'],$_POST['pass']);
echo je($res);
}
static function removeTelegram(){
$res = [];
if(Emp::$IS_AUTH){
Emp::updateById(intval(Emp::$AUTH_ID),[
Emp::$TG_ACC=>0,
]);
}
echo je($res);
}
static function checkTelegram(){
$res = ['connect'=>false];
if(Emp::$IS_AUTH){
$res['connect'] = Emp::checkTelegram();
}
echo je($res);
}
static function qr(){
if(Emp::$IS_AUTH) {
include __DIR__ . '/../../../lib/php/qr/qrlib.php';
$link = Emp::getTgStartLink();
// $text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false
\QRcode::png($link, false, QR_ECLEVEL_L, 5);
}
}
static function toTelegram(){
if(Emp::$IS_AUTH){
echo '
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800&display=swap" rel="stylesheet">
<div style="max-width:500px;display:flex;height:100%;align-items:center;flex-direction: column;margin:0 auto;text-align:center;justify-content: center;font-family:Montserrat;line-height:1.4">
<img src="/api/themes.merakomis.emp/qr/"/>
<p>Отсканируйте QR-код камерой вашего смартфона с установленным Telegram и нажмите кнопку «START BOT» на экране мобильного телефона.</p>
<p>После этого окно можно закрыть.</p>
<p>Проверьте привязку, нажав кнопку «Проверить» в карточке сотрудника: статус-бар окрасится в синий цвет. <br/><br/Закройте карточку сотрудника: пиктограмма Телеграма в шапке сайта также окрасится в синий цвет.</p>
<!--
<p>Отсканируйте QR-код камерой вашего мобильного телефона с установленным Telegram и следуйте инструкциям на экране. <br/><br/>После нажатия кнопки «Send Message» в мобильном приложении это окно можно закрыть.<br/><br/>
Проверьте привязку, нажав кнопку «Проверить» в карточке сотрудника: статус-бар окрасится в синий цвет. <br/><br/Закройте карточку сотрудника: пиктограмма Телеграма в шапке сайта также окрасится в синий цвет.</p>
-->
</div>';
}
}
}