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