386 lines
15 KiB
PHP
386 lines
15 KiB
PHP
<?
|
||
|
||
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>';
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|