EIOS/inc/it.php

857 lines
38 KiB
PHP
Raw Permalink 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.

<?
//ИТ-отдел
include_once $_SERVER['DOCUMENT_ROOT'].'/inc/class_SYSTEM.php';
$SYSTEMclass = new SYSTEMclass();
//категории обращений
$categoryTicket = array(
'0' => 'Прочее',
'1' => 'Официальный сайт',
'2' => 'ЭИОС (LMS)',
'3' => 'Вычислительная и организационная техника',
'4' => 'Мероприятие',
'5' => '1С',
'6' => 'Сеть (Интернет)',
'7' => 'СКУД',
'8' => 'РПД',
'9' => 'Расчет часов/Расписание',
'10' => 'Программное обеспечение'
);
//статусы обращений
$statusTicket = array(
'white' => 'на рассмотрении',
'lightgray' => 'архив',
'lavender' => 'в работе',
'#ffc880' => 'на доработке',
'#d2ffd2' => 'одобрено',
'#d2ffd1' => 'выполнено',
'#fbffd5' => 'на проверке'
);
//корпусы
$corpuses = array();
$sql = 'SELECT * FROM '.$ST['dbpf'].'_corpuses ';
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
$corpuses[] = $val;
}
}
//ПОДКЛЮЧЕНИЕ К СЕРВЕРУ С БОТОМ
function botConnect($command, $chat_id = 0){
GLOBAL $DB, $ST;
/**
command - выполнение команды
chat_id - для более персональной команды, например, закрыть заявку
**/
// Установка параметров базы данных MySQL
$servername = "212.109.222.2";
$username = "tg_bot";
$password = "gC0eG3lC6f";
$dbname = "tg_bot";
// Создание подключения к базе данных
$conn = mysqli_connect($servername, $username, $password, $dbname);
if ($command == 'view'){ //для тестов
$sql_order = "SELECT * FROM it_tg LIMIT 10";
$result_order = mysqli_query($conn, $sql_order);
//echo mysqli_num_rows($result_order);
while ($row = mysqli_fetch_assoc($result_order)) {
echo $row["phone"].'<br />';
}
} elseif ($command == 'upload'){ //загрузить заявки из телеги
//рассматриваем только заявки типа open и ограничиваем - подгружаем по 10 заявок, чтобы ничего плохого не случилось не дай бог)
$sql_order = 'SELECT * FROM it_tg WHERE status = "open" LIMIT 10';
$result_order = mysqli_query($conn, $sql_order);
while ($row = mysqli_fetch_assoc($result_order)){
//echo $row["phone"].'<br />';
//обязательно меняем статус на "в работе"
$sql_update = 'UPDATE it_tg SET status="work" WHERE id='.$row['id'].' AND status="open"';
if (mysqli_query($conn, $sql_update)) {
//сохраняем в нашу базу
//вместо почты - айдишник телеги
$rez = $DB->QUR('INSERT INTO '.$ST['dbpf'].'_it_order (`id_user`, `fio`, `email`, `phone`, `rol`, `doljnost`, `category`, `about`, `file`, `prioritet`, `m_date`, `j_date`, `date_create`, `place`) VALUES ("0", "'.$row['fio'].'", "'.$row['chat_id'].'", "'.$row['phone'].'", "-", "-", "Telegram", "'.$row['about'].'", "", "обычный", "", "", "'.date("U").'", "'.$row['address'].'") ');
$id = mysql_insert_id();
save_logs('Поступление заявки в ИТ-отдел из телеграма под номером №'.$id);
}
}
} elseif ($command == 'message'){ //подгружаем сообщения из телеги
//смотрим заявки, у которых статус message
$sql_message = 'SELECT * FROM it_tg WHERE status = "message" ';
//echo $sql_message;
$result_message = mysqli_query($conn, $sql_message);
while ($row = mysqli_fetch_assoc($result_message)){
//echo $row['message'];
//обязательно меняем статус на "в работе"
$sql_update = 'UPDATE it_tg SET status="work" WHERE id='.$row['id'].' AND status="message"';
if (mysqli_query($conn, $sql_update)) {
//нужно определить номер заявки, в которую будем сохранять
$sql_order = 'SELECT * FROM '.$ST['dbpf'].'_it_order WHERE category = "Telegram" AND email = "'.$row['chat_id'].'" AND status = "в работе" ORDER BY id DESC LIMIT 1';
$rez_order = $DB->QUR_SEL($sql_order);
$id_order = $rez_order[1]['id']; //номер заявки
//echo $id_order;
//сохраняем в нашу базу сообщение - ID_USER = 0 - значит ФИО основное, для удобства, чтобы не перегружать телегу
$rez = $DB->QUR('INSERT INTO '.$ST['dbpf'].'_it_order_pr (`id_order`, `id_user`, `date_create`, `comment`, `file`) VALUES ("'.$id_order.'", "0", "'.date("U").'", "'.$row['message'].'", "") ');
//$id = mysql_insert_id();
//save_logs('Сохранение сообщение из телеги №'.$id);
}
}
} elseif ($command == 'close'){ //закрытие заявки
//chat_id
$sql_update = 'UPDATE it_tg SET status="close" WHERE chat_id='.$chat_id.' AND status="work"';
mysqli_query($conn, $sql_update);
}
// Закрытие соединения с базой данных
mysqli_close($conn);
}
//ФУНКЦИЯ ТЕЛЕГИ - написать сообщение
function TGsendMessage($message, $chat_id) {
//include 'https://tg.mkgtu.ru/?eios';
//echo '<iframe src="https://tg.mkgtu.ru/?eios&message='.$message.'&chat_id='.$chat_id.'" height="0px" width="0px" style="display: none; visibility: hidden;"></iframe>';
echo '<iframe src="https://tg.mkgtu.ru/?eios&message='.urlencode($message).'&chat_id='.$chat_id.'" height="0px" width="0px" style="display: none; visibility: hidden;"></iframe>';
}
function TGsendMessageNew($message, $chat_id,$id_order){
//TODO заменить на POST
//$rez = file_get_contents('https://teleg.mkgtu.ru/tg/api.php?raz=eios_it_order&des=send&chat_id='.$chat_id.'&message='.urlencode($message));
echo '<iframe src="https://teleg.mkgtu.ru/tg/api.php?raz=eios_it_order&des=send&message='.urlencode($message).'&chat_id='.$chat_id.'&id_order='.$id_order.'" height="0px" width="0px" style="display: none; visibility: hidden;"></iframe>';
//return $rez;
}
//ОТПРАВИТЬ СООБЩЕНИЕ В ТЕЛЕГУ, ВЗЯВ ДАННЫЕ ИЗ ЗАЯВКИ
function getOrderToMessage($id_order, $message){
GLOBAL $DB, $ST;
//отправляем сообщение в Телегу - предварительно узнаем айдишник телеги, если туда нужно отправлять
$sql = 'SELECT * FROM '.$ST['dbpf'].'_it_order WHERE id = "'.$id_order.'" ';
$rez = $DB->QUR_SEL($sql);
if ($rez){
if ($rez[1]['category'] == 'Telegram'){
//также укажем, кто оставил сообщение
$worker = get_user($_SESSION['user']['id']);
//$message = '<b>'.$worker['fio'].' (Заявка №'.$id_order.'): </b>\n' .$message;
$message = '<b>'.$worker['fio'].' (Заявка №'.$id_order.'): </b>'."\n".$message;
TGsendMessageNew($message, $rez[1]['email'],$id_order); //в емайле прячется телега))
//TGsendMessage($message, $rez[1]['email']); //в емайле прячется телега))
}
}
}
botConnect('upload');
botConnect('message');
//форма обращения в ИТ-отдел
if ($_GET['page'] == 'order'){
$user = $_SESSION['user']; //данные о пользователе
$msg = 0;
//создание заявки
if (isset($_POST['order_ticket'])){
/*print_r($_POST);
print_r($_FILES);*/
$id_user = (int)$_POST['id_user'];
$fio = $_POST['fio'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$rol = $_POST['rol'];
$doljnost = $_POST['doljnost'];
$category = $_POST['category'];
$about = addslashes($_POST['about']);
$corpuses = $_POST['corpuses'];
$aud = $_POST['aud'];
$prioritet = $_POST['prioritet'][0];
$m_date = strtotime($_POST['m_date']);
$j_date = strtotime($_POST['j_date']);
//место проблемы - корпус:аудитория
$place = $corpuses.':'.$aud;
$file = '';
$rez = $DB->QUR('INSERT INTO '.$ST['dbpf'].'_it_order (`id_user`, `fio`, `email`, `phone`, `rol`, `doljnost`, `category`, `about`, `file`, `prioritet`, `m_date`, `j_date`, `date_create`, `place`) VALUES ("'.$id_user.'", "'.$fio.'", "'.$email.'", "'.$phone.'", "'.$rol.'", "'.$doljnost.'", "'.$category.'", "'.$about.'", "'.$file.'", "'.$prioritet.'", "'.$m_date.'", "'.$j_date.'", "'.date("U").'", "'.$place.'") ');
$id = mysql_insert_id();
//загрузка файла
$uploadfile='';
if(isset($_FILES['file'])){
$dir_dest = 'upload/it/'.$id.'/';
if(!file_exists($dir_dest)) mkdir($dir_dest);
$fil = date("U").$_FILES['file']['name'];
$t = explode('.',$fil); $ext = $t[count($t)-1];
unset($t[count($t)-1]); $fn = implode('.',$t);
$uploadfile = $dir_dest . basename(translit($fn).'.'.$ext);
//if (!move_uploaded_file($_FILES['sfile']['tmp_name'], $uploadfile)) {
if (!$SYSTEMclass->sysUPLOAD($_FILES['file']['tmp_name'], $uploadfile)) {
$uploadfile='';
}
}
//а теперь указываем файл в базе
$sql = 'UPDATE '.$ST['dbpf'].'_it_order SET file = "'.$uploadfile.'" WHERE id = "'.$id.'" ';
$rez = $DB->QUR($sql);
$msg = 1;
save_logs('Создано обращение в ИТ-отдел под №'.$id);
TGsendMessageNew('Новая заявка в ИТ отдел из ЭИОС.'.PHP_EOL.'ФИО: '.$fio.' '.$rol.PHP_EOL.'Категория: '.$category.' Место: '.$place.PHP_EOL.strip_tags($about).PHP_EOL.'Дата: '.date('d.m.Y',$m_date), 145276809,$id);
//выход
//header("Location: /it/order/");
//exit;
}
//открываем почту и ЗАПИСЫВАЕМ ТОЛЬКО ТЕ ПИСЬМА, которых ЕЩЕ по дате НЕ БЫЛО из этого источника - email
/*$mailbox = '{imap.yandex.ru:993/imap/ssl}INBOX';
if (!$inbox = imap_open($mailbox, 'order@mkgtu.ru', 'gxgfgxrrcthradbk')) {
throw new Exception(imap_last_error());
}
foreach(imap_search($inbox,'ALL') as $msg_number) {
// структура сообщения
$struct = imap_fetchstructure($inbox, $msg_number);
echo '<pre>'; var_dump($struct); echo '</pre>';
var_dump($struct);
// важные заголовки письма
$overview = imap_fetch_overview($inbox, $msg_number, 0);
echo '<pre>'; var_dump($overview[0]); echo '</pre>';
var_dump($overview[0]);
// тело сообщения
$text = imap_fetchbody($inbox, $msg_number, 2);
echo '<pre>'; var_dump($text); echo '</pre>';
$body = imap_utf8(quoted_printable_decode($text));
echo '<br /><hr />QWER '; var_dump($body);
$body = imap_body($inbox, $msg_number);
$body = quoted_printable_decode($body); //расшифрованное сообщение
echo $body;
}
imap_close($inbox);*/
//не выбрана конкретная заявка
if (!isset($_GET['des'])){
//все "тикеты" пользователя, которые он оставлял в качестве заявок
$orders = array();
$sql = 'SELECT * FROM '.$ST['dbpf'].'_it_order WHERE id_user = "'.$user['id'].'" ';
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
$val['m_date'] = date("d.m.Y", $val['m_date']);
$val['j_date'] = date("d.m.Y", $val['j_date']);
$val['date_create'] = date("d.m.Y", $val['date_create']);
$val['date_end'] = date("d.m.Y", $val['date_end']);
$val['worker'] = get_user($val['worker_id']);
$orders[] = $val;
}
}
//все "тикеты" ДОСТУПНЫЕ ДЛЯ РАБОТЫ
$ordersAll = array();
if(isset($_SESSION['user']['statuses'][77])) $sql = 'SELECT * FROM '.$ST['dbpf'].'_it_order WHERE worker_id = "'.$_SESSION['user']['id'].'" ORDER BY date_create DESC'; //если простой сотрудник, то только его заявки, где он исполнитель
if(isset($_SESSION['user']['statuses'][76])) $sql = 'SELECT * FROM '.$ST['dbpf'].'_it_order ORDER BY FIELD(status, "архив", "одобрено", "выполнено", "в работе", "на доработке", "на проверке", "на рассмотрении") DESC, date_create DESC'; //если руководитель отдела, то все выводим
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
//определяем, сколько прошло времени с момента одобрения задачи
if ($val['status'] == 'одобрено') {
$val['raznica'] = date("U")-$val['date_end'];
//если разница больше 24 часов, переводим заявку в статус "выполнено"
if ($val['raznica'] > 24*60*60){
$rez = $DB->QUR('UPDATE '.$ST['dbpf'].'_it_order SET status = "выполнено" WHERE id = "'.$val['id'].'" ');
}
}
//команда
$val['teams'] = array();
$teams_id = $val['teams_id'];
$one_sotr = explode(',', $teams_id);
$ind = 1;
while ($ind < count($one_sotr)){
if ($one_sotr[$ind] > 0) $val['teams'][] = get_user($one_sotr[$ind]);
$ind++;
}
/******/
$val['m_date'] = date("d.m.Y", $val['m_date']);
$val['j_date'] = date("d.m.Y", $val['j_date']);
$val['date_create'] = date("d.m.Y H:i:s", $val['date_create']);
$val['date_end'] = date("d.m.Y H:i:s", $val['date_end']);
$val['worker'] = get_user($val['worker_id']);
//определяем цвет заявки в зависимости от статуса
$color = array_keys($statusTicket, $val['status']);
$val['color'] = $color[0];
$ordersAll[] = $val;
}
}
if (!isset($_GET['us'])) $smarty->assign('us', get_user($user['id']));
else $smarty->assign('us', get_user($_GET['us'])); //заполняем заявку за человека
$smarty->assign('orders', $orders);
$smarty->assign('ordersAll', $ordersAll);
} else{ //УКАЗАНА КОНКРЕТНАЯ ЗАЯВКА - отображаем детальную информацию
$id = (int) $_GET['des'];
//руководитель отдела РАЗДАЕТ ЗАДАЧИ
if (isset($_POST['order_work'])){
//print_r($_POST);
$id_order = (int) $_POST['id_order'];
$prioritet = $_POST['prioritet'];
if($_POST['j_date']==''){
$j_date = mktime(11,0,0,date('m'),date('d')+3,date('Y'));
} else {
$j_date = strtotime($_POST['j_date']);
}
$worker = (int)$_POST['worker'];
$rez = $DB->QUR('UPDATE '.$ST['dbpf'].'_it_order SET status = "в работе", worker_id = "'.$worker.'", date_start = "'.date("U").'", prioritet = "'.$prioritet.'", j_date = "'.$j_date.'" WHERE id = "'.$id.'" ');
$rez = $DB->QUR('INSERT INTO '.$ST['dbpf'].'_it_order_pr (id_order, id_user, date_create, comment) VALUES ("'.$id_order.'", "'.$user['id'].'", "'.date("U").'", "Добрый день! Исполнитель назначен. Задача взята в работу") ');
//отправляем уведомление пользователю, что он теперь исполнитель по данной задаче
//write_message($worker, 'Вы назначены исполнителем заявки №'.$id_order.' (<a href="/it/order/'.$id_order.'/">посмотреть</a>)');
write_message($worker, 'Вы назначены исполнителем заявки №'.$id_order.PHP_EOL.'Приоритет: '.$prioritet.' Срок выполнения: '.date('d.m.Y',$j_date));
//выход
$info_worker = get_user($worker);
getOrderToMessage($id, "По Вашей заявке назначен исполнитель: ".$info_worker['fio']);
header( "Refresh:0; url=/it/order/".$id."/", true, 303);
//header("Location: /it/order/".$id."/");
//exit;
}
//write_message(7632, 'Вы назначены исполнителем заявки ');
//руководитель отдела ОДОБРЯЕТ ЗАДАЧУ
if (isset($_POST['success_order'])){
$id_order = (int) $_POST['id_order'];
$score = $_POST['score'];
$rez = $DB->QUR('UPDATE '.$ST['dbpf'].'_it_order SET status = "одобрено", score = "'.$score.'" WHERE id = "'.$id.'" ');
$rez = $DB->QUR('INSERT INTO '.$ST['dbpf'].'_it_order_pr (id_order, id_user, date_create, comment) VALUES ("'.$id_order.'", "'.$user['id'].'", "'.date("U").'", "Работа одобрена. Если в течение 24 часов со стороны руководителя не будет предпринято никаких действий, то задача будет считаться выполненной.") ');
//выход
//getOrderToMessage($id, "заявка одобрена руководителем (на данное уведомление реагировать не требуется)");
getOrderToMessage($id, "заявка одобрена руководителем (на данное уведомление реагировать не требуется)");
header( "Refresh:0; url=/it/order/".$id."/", true, 303);
//header("Location: /it/order/".$id."/");
//exit;
}
//включить в команду по решению задачи еще айтишников - НАЗНАЧАЕТ ИСПОЛНИТЕЛЬ
if (isset($_POST['team_save'])){
$str = ','; //айдишники с членами команды
foreach($_POST['it_users'] as $key => $val) {
$str .= $val.',';
}
//записываем
$rez = $DB->QUR('UPDATE '.$ST['dbpf'].'_it_order SET teams_id = "'.$str.'" WHERE id = "'.$id.'"');
//выход
header("Location: /it/order/".$id."/");
exit;
}
//отклонение/одобрение заявки
if (isset($_GET['action'])){
if ($_GET['action'] == 0){ //отправить в архив
$rez = $DB->QUR('UPDATE '.$ST['dbpf'].'_it_order SET status = "архив" WHERE id = "'.$id.'" ');
$rez = $DB->QUR('INSERT INTO '.$ST['dbpf'].'_it_order_pr (id_order, id_user, date_create, comment) VALUES ("'.$id.'", "'.$user['id'].'", "'.date("U").'", "Задание отправлено в архив") ');
//отправляем сообщение в Телегу
getOrderToMessage($id, "заявка отправлена в архив (на данное уведомление реагировать не требуется)");
//берем информацию о заявке
$sql_info = 'SELECT * FROM '.$ST['dbpf'].'_it_order WHERE id = "'.$id.'" AND category = "Telegram" ORDER BY id DESC LIMIT 1';
$rez_info = $DB->QUR_SEL($sql_info);
botConnect('close', $rez_info[1]['email']);
} elseif ($_GET['action'] == 1){ //взять в работу
/*$rez = $DB->QUR('UPDATE '.$ST['dbpf'].'_it_order SET status = "в работе", worker_id = "'.$user['id'].'", date_start = "'.date("U").'" WHERE id = "'.$id.'" ');
$rez = $DB->QUR('INSERT INTO '.$ST['dbpf'].'_it_order_pr (id_order, id_user, date_create, comment) VALUES ("'.$id.'", "'.$user['id'].'", "'.date("U").'", "Добрый день! Задача взята в работу") ');*/
}
elseif ($_GET['action'] == 2){ //отправить на проверку
$rez = $DB->QUR('UPDATE '.$ST['dbpf'].'_it_order SET status = "на проверке", date_end = "'.date("U").'" WHERE id = "'.$id.'" ');
$rez = $DB->QUR('INSERT INTO '.$ST['dbpf'].'_it_order_pr (id_order, id_user, date_create, comment) VALUES ("'.$id.'", "'.$user['id'].'", "'.date("U").'", "Исполнитель посчитал работу выполненной и отправил ее на проверку") ');
getOrderToMessage($id, "заявка отправлена на проверку руководителю (на данное уведомление реагировать не требуется)");
//берем информацию о заявке
$sql_info = 'SELECT * FROM '.$ST['dbpf'].'_it_order WHERE id = "'.$id.'" AND category = "Telegram" ORDER BY id DESC LIMIT 1';
$rez_info = $DB->QUR_SEL($sql_info);
botConnect('close', $rez_info[1]['email']);
}
elseif ($_GET['action'] == 3){ //отправить на доработку
$rez = $DB->QUR('UPDATE '.$ST['dbpf'].'_it_order SET status = "на доработке" WHERE id = "'.$id.'" ');
$rez = $DB->QUR('INSERT INTO '.$ST['dbpf'].'_it_order_pr (id_order, id_user, date_create, comment) VALUES ("'.$id.'", "'.$user['id'].'", "'.date("U").'", "Работа возвращена на доработку. Комментарии в сообщениях") ');
getOrderToMessage($id, "заявка отправлена на доработку (на данное уведомление реагировать не требуется)");
}
//выход
header( "Refresh:0; url=/it/order/".$id."/", true, 303);
//header("Location: /it/order/".$id."/");
//exit;
}
//отправляем сообщение в тикеты
if (isset($_POST['message_add'])){
$message = $_POST['message'];
$rez = $DB->QUR('INSERT INTO '.$ST['dbpf'].'_it_order_pr (`id_order`, `id_user`, `date_create`, `comment`, `file`) VALUES ("'.$id.'", "'.$user['id'].'", "'.date("U").'", "'.$message.'", "") ');
$id_mess = mysql_insert_id();
save_logs('отправлено сообщение №'.$id_mess);
//отправляем сообщение в Телегу
getOrderToMessage($id, $message);
//загрузка файла
$uploadfile='';
if(isset($_FILES['file'])){
$dir_dest = 'upload/it/'.$id.'/';
if(!file_exists($dir_dest)) mkdir($dir_dest);
$fil = date("U").'_mes_'.$_FILES['file']['name'];
$t = explode('.',$fil); $ext = $t[count($t)-1];
unset($t[count($t)-1]); $fn = implode('.',$t);
$uploadfile = $dir_dest . basename(translit($fn).'.'.$ext);
//if (!move_uploaded_file($_FILES['sfile']['tmp_name'], $uploadfile)) {
if (!$SYSTEMclass->sysUPLOAD($_FILES['file']['tmp_name'], $uploadfile)) {
$uploadfile='';
}
}
//а теперь указываем файл в базе
$sql = 'UPDATE '.$ST['dbpf'].'_it_order_pr SET file = "'.$uploadfile.'" WHERE id = "'.$id_mess.'" ';
$rez = $DB->QUR($sql);
//выход
header( "Refresh:0; url=/it/order/".$id."/", true, 303);
//header("Location: /it/order/".$id."/");
//exit;
}
/****/
$order = array();
//$sql = 'SELECT * FROM '.$ST['dbpf'].'_it_order WHERE id_user = "'.$user['id'].'" AND id = "'.$id.'" LIMIT 1';
$sql = 'SELECT * FROM '.$ST['dbpf'].'_it_order WHERE id = "'.$id.'" LIMIT 1';
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
$val['m_date'] = date("d.m.Y", $val['m_date']);
$val['j_date'] = date("d.m.Y", $val['j_date']);
$val['date_create'] = date("d.m.Y", $val['date_create']);
$val['date_end'] = date("d.m.Y", $val['date_end']);
$val['worker'] = get_user($val['worker_id']);
$val['about'] = nl2br($val['about']);
//берем сообщения в заявке
$val['message'] = array();
$sql_mes = 'SELECT * FROM '.$ST['dbpf'].'_it_order_pr WHERE id_order = "'.$id.'" ORDER BY id ';
$rez_mes = $DB->QUR_SEL($sql_mes);
if ($rez_mes){
foreach ($rez_mes as $key2 => $val2) if ($key2){
$val2['user'] = get_user($val2['id_user']);
$val2['date_create'] = date("d.m.Y H:i:s", $val2['date_create']);
$val['message'][] = $val2;
}
}
$order[] = $val;
}
}
//print_r($order);
$smarty->assign('order', $order);
$smarty->assign('des', $_GET['des']);
}
//список айтишников
$itUsers = array();
$sql = 'SELECT * FROM '.$ST['dbpf'].'_users as us, '.$ST['dbpf'].'_users_statuses as st WHERE us.id = st.id_user AND (st.statuses LIKE "%77%" OR us.status = 77) ';
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
$itUsers[] = $val;
}
}
$smarty->assign('itUsers', $itUsers);
/****/
$smarty->assign('corpuses', $corpuses); //корпусы
$smarty->assign('categoryTicket', $categoryTicket);
$smarty->assign('user', $user);
$smarty->assign('msg', $msg);
$maincontent = $smarty->fetch('tpl_it_order.html');
}
//баллы за редактирование профилей за месяц
/*
@id_worker - айдишник сотрудника
@date_my - месяц/год в формате 01.mm.YYYY - первые две цифры берем по умолчанию
*/
function pointsProfiles($id_worker, $seconds){
GLOBAL $ST, $DB;
//следующий месяц
/*$m = date('m')+1;
$next_month = strtotime(date('01.'.$m.'.Y'));*/
//возвращаем количество дней в месяце
$number_days = cal_days_in_month(CAL_GREGORIAN, date('m', $seconds), date('Y', $seconds));
//смотрим в логах активность за месяц
$sql = 'SELECT * FROM '.$ST['dbpf'].'_logs WHERE id_user = "'.$id_worker.'" AND message LIKE "%Обновлены учетные данные пользователя%" AND data_c >= "'.$seconds.'" AND data_c <= "'.($seconds + $number_days*24*60*60).'" GROUP BY message ';
//$sql = 'SELECT * FROM '.$ST['dbpf'].'_logs WHERE id_user = "'.$id_worker.'" AND message LIKE "%Обновлены учетные данные пользователя%" AND data_c >= "'.$seconds.'" AND data_c <= "'.($next_month).'" GROUP BY message ';
$rez = $DB->QUR_SEL($sql);
if ($rez){
return round($rez[0]/20, 1); //за 20 паролей = 1 балл
}
}
//теперь смотрим баллы за выполненные задания в текущем месяце
function pointsOrdersSuccess($id_worker, $seconds){
GLOBAL $ST, $DB;
$score = 0;
//следующий месяц
/*$m = date('m')+1;
$next_month = strtotime(date('01.'.$m.'.Y'));*/
//возвращаем количество дней в месяце
$number_days = cal_days_in_month(CAL_GREGORIAN, date('m', $seconds), date('Y', $seconds));
//echo $number_days;
//т.е. является человек исполнителем или членом команды
$sql = 'SELECT * FROM '.$ST['dbpf'].'_it_order WHERE (worker_id = "'.$id_worker.'" OR teams_id LIKE "%,'.$id_worker.',%") AND date_end >= "'.$seconds.'" AND date_end <= "'.($seconds + $number_days*24*60*60).'" AND status="выполнено" ';
//$sql = 'SELECT * FROM '.$ST['dbpf'].'_it_order WHERE (worker_id = "'.$id_worker.'" OR teams_id LIKE "%,'.$id_worker.',%") AND date_end >= "'.$seconds.'" AND date_end <= "'.($next_month).'" AND status="выполнено" ';
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
$score += $val['score'];
}
}
//также начисляем за отработанные заявки - за каждые 50 сообщений = 1 балл
//$sql = 'SELECT * FROM '.$ST['dbpf'].'_it_order_pr WHERE id_user = "'.$id_worker.'" AND date_create >= "'.$seconds.'" AND date_create <= "'.($next_month).'"';
$sql = 'SELECT * FROM '.$ST['dbpf'].'_it_order_pr WHERE id_user = "'.$id_worker.'" AND date_create >= "'.$seconds.'" AND date_create <= "'.($seconds + $number_days*24*60*60).'"';
$rez = $DB->QUR_SEL($sql);
if ($rez){
$score += $rez[0]/50;
}
//округляем до десятых
return round($score, 1);
}
//РЕЙТИНГ ОТДЕЛА ПО МЕСЯЦАМ
if ($_GET['page'] == 'rating'){
$start_date = 0;
//выбран другой период - месяц/год
if (isset($_POST['select_date'])){
$year = $_POST['year'];
$month = (string) $_POST['month'];
//$start_date = strtotime(date('01.'.$month.'.'.$year.''))+3*60*60; //т.к. московское время смотрим
$start_date = date('01.'.$month.'.'.$year.''); //т.к. московское время смотрим
/*echo date('01.'.$month.'.'.$year.'');
echo ' '.$start_date.' ';*/
}
//список айтишников
$itUsers = array();
$sql = 'SELECT * FROM '.$ST['dbpf'].'_users as us, '.$ST['dbpf'].'_users_statuses as st WHERE us.id = st.id_user AND (st.statuses LIKE "%77%" OR us.status = 77) ';
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
$date_start_month = date('01.m.Y');
//если выбран месяц/год, то отображать нужно за нужный период
if ($start_date != 0) $date_start_month = $start_date;
//$val['date_start_month'] = $date_start_month; //активность за текущий месяц
$val['score_tek'] = pointsProfiles($val['id_user'], strtotime($date_start_month)) + pointsOrdersSuccess($val['id_user'], strtotime($date_start_month)); //активность за текущий месяц
$itUsers[] = $val;
}
}
$smarty->assign('itUsers', $itUsers);
$maincontent = $smarty->fetch('tpl_it_rating.html');
}
//журнал восстановления паролей
if ($_GET['page'] == 'journalPass'){
$msg = 0; //нет сообщений
$pass = array();
$date = date("U")-3*24*60*60;
$sql = 'SELECT * FROM '.$ST['dbpf'].'_logs WHERE message LIKE "%Обновлены учетные данные пользователя%" AND data_c >= "'.$date.'" ORDER BY data_c DESC ';
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
$exp = explode("Обновлены учетные данные пользователя", $val['message']);
$val['user'] = get_user($exp[1]);
$val['sotr'] = get_user($val['id_user']);
$val['data_c'] = date("d.m.Y H:i:s", $val['data_c']);
$pass[] = $val;
}
}
$smarty->assign('pass', $pass);
$maincontent = $smarty->fetch('tpl_it_pass.html');
}
//lms - доступ к системе
if ($_GET['page'] == 'lms'){
$user = $_SESSION['user'];
$smarty->assign('user', $user);
$maincontent = $smarty->fetch('tpl_lms.html');
}
//LMS Moodle - по умолчанию выводим список всех групп
if ($_GET['page'] == 'moodle'){
$msg = 0;
$grupps = array();
$sql = 'SELECT * FROM '.$ST['dbpf'].'_grupp WHERE NOT sokr LIKE "%выпуск%" AND sokr LIKE "%-%" ORDER BY id';
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
$val['name'] = translit($val['sokr'].' '.$val['fo']);
$val['idnumber'] = translit($val['name']);
//$val['description'] = $val['specialnost'];
$val['description'] = $val['sokr'].' '.$val['fo'];
$grupps[] = $val;
}
}
$smarty->assign('grupps', $grupps);
$maincontent = $smarty->fetch('tpl_it_moodle.html');
}
//LMS Moodle - список студентов
if ($_GET['page'] == 'moodle_students'){
if(isset($_POST['moodle_grupp_csv_get'])){
if(isset($_POST['id_grupps'])&&count($_POST['id_grupps'])) {
//$id_grupp = (int)$_POST['id_grupp'];
$file = 'tmp/moodle_grupp_csv_get.csv';
$csvs = array();
$csvs[] = 'username;password;firstname;lastname;email;cohort1';
foreach($_POST['id_grupps'] as $id_grupp => $val) {
$users = moodle_grupp_csv_get($id_grupp);
if (count($users)) $csvs = array_merge($csvs, $users);
}
file_put_contents($file, implode(PHP_EOL, $csvs));
include_once 'downloadfile.php';
file_force_download($file);
exit();
}
}
//получение групп
$grupps = array();
$sql = 'SELECT id,sokr,fo,year_start FROM '.$ST['dbpf'].'_grupp WHERE NOT sokr LIKE "%выпуск%" AND sokr LIKE "%-%" ORDER BY sokr,fo';
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
$val['name'] = translit($val['sokr'].' '.$val['fo']);
$val['idnumber'] = translit($val['name']);
$val['description'] = $val['sokr'].' '.$val['fo'];
$grupps[] = $val;
}
}
$smarty->assign('grupps', $grupps);
$date = date("U");
$users = array();
$sql = 'SELECT * FROM '.$ST['dbpf'].'_users WHERE status >= 0 AND data_c >= "'.($date-6*30*24*60*60).'" GROUP BY email';
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
$val['student'] = get_student($val['id']);
$val['cohort'] = translit($val['student']['sokr'].' '.$val['student']['fo']);
$users[] = $val;
}
}
$smarty->assign('users', $users);
$maincontent = $smarty->fetch('tpl_it_moodle_students.html');
}
//LMS Moodle - обновленный список студентов с группами
if ($_GET['page'] == 'moodle_update_students'){
if (isset($_GET['des'])){
$year = (int)$_GET['des']; //смотрим зарегистрированных за определенный год и потом делаем выгрузку и меняем группу
$date = $year.'-01-01';
$time = strtotime($date);
$users = array();
$sql = 'SELECT * FROM '.$ST['dbpf'].'_users WHERE status >= 0 AND data_c >= "'.$time.'" AND data_c <= "'.($time + 365*24*60*60).'" GROUP BY email';
//echo $sql;
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
$val['student'] = get_student($val['id']);
$val['cohort'] = translit($val['student']['sokr'].' '.$val['student']['fo']);
$users[] = $val;
}
}
}
$smarty->assign('users', $users);
$maincontent = $smarty->fetch('tpl_it_moodle_update_students.html');
}
//ДЕАКТИВАЦИЯ КАРТ - БЛОК выпускники, которые не продолжают обучение
if ($_GET['page'] == 'cards_block'){
//количество выбывших студентов, количество продолжающих обучение и кол-во преподавателей
$count['vib'] = 0;
$count['prod'] = 0;
$count['teach'] = 0;
if (isset($_GET['des'])){
$year = (int)$_GET['des']; //смотрим выпускников за определенный год
//для начала определяем список групп
$grupps = array();
$sql = 'SELECT * FROM '.$ST['dbpf'].'_grupp WHERE sokr LIKE "Выпуск '.$year.'%" ';
//echo $sql;
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
//теперь записываем студентов в группу
$val['students'] = array();
$sql_students = 'SELECT * FROM '.$ST['dbpf'].'_students WHERE id_grupp = "'.$val['id'].'" ';
$rez_students = $DB->QUR_SEL($sql_students);
if ($rez_students){
foreach ($rez_students as $key_st => $val_st) if ($key_st){
$val_st['user'] = get_user($val_st['id_user']);
//также смотрим, учится ли где-нибудь еще данный студент (может есть еще профили) и главное - не является ли преподавателем
$val_st['teacher'] = get_teacher_only($val_st['id_user']);
//также смотрим, есть ли дубликаты в системе - по ним делаем вывод, что скорее всего студент продолжает обучение
$val_st['duplicates'] = 1;
$sql_dup = 'SELECT * FROM '.$ST['dbpf'].'_users WHERE fio LIKE "%'.$val_st['user']['fio'].'%" LIMIT 2';
$rez_dup = $DB->QUR_SEL($sql_dup);
if ($rez_dup) $val_st['duplicates'] = $rez_dup[0];
//МЫ НЕ БУДЕМ ВЫЯСНЯТЬ ВЫПУСТИЛСЯ ЛИ ОН ТАМ, чтобы НЕ ПЕРЕГРУЖАТЬ СИСТЕМУ И ПЕРЕСТРАХОВАТЬСЯ: деканаыт могут не отметить какого-либо студента
if ($val_st['teacher']['id'] > 0) $count['teach']++;
elseif ($val_st['duplicates'] > 1) $count['prod']++;
else $count['vib']++;
$val['students'][] = $val_st;
}
}
$grupps[] = $val;
}
}
//echo '<pre>'; print_r($grupps); echo '</pre>';
}
$smarty->assign('count', $count);
$smarty->assign('grupps', $grupps);
$maincontent = $smarty->fetch('tpl_it_cards_block.html');
}
/**
* Выбираем пользователей по группам и формируем массив
* @param $id_grupp
* @return array
*/
function moodle_grupp_csv_get($id_grupp){
GLOBAL $ST,$DB; $csvs = array();
$users=array(); //Выберем студентов из группы
$sql = 'SELECT u.id,u.fio,u.email FROM '.$ST['dbpf'].'_users as u,'.$ST['dbpf'].'_students as s WHERE s.id_grupp='.$id_grupp.' AND s.id_user=u.id AND u.status >= 0';
$rez = $DB->QUR_SEL($sql);
if ($rez){
foreach ($rez as $key => $val) if ($key){
$val['student'] = get_student($val['id']);
$val['cohort'] = translit($val['student']['sokr'].' '.$val['student']['fo']);
$val['password'] = 'Mgtu'.$val['id'].'pw!';
$tmp = explode(' ',$val['fio']);
$val['firstname'] = $tmp[0];
$val['lastname'] = $tmp[1];
if(isset($tmp[2])) $val['lastname'] .= ' '.$tmp[2];
if(isset($tmp[3])) $val['lastname'] .= ' '.$tmp[3];
if(isset($tmp[4])) $val['lastname'] .= ' '.$tmp[4];
//$tmp = explode('@',$val['email']);
$val['username'] = $val['email'];
$users[] = $val;
}
}
//echo '<pre>'.print_r($users,1).'</pre>'; exit();
if(count($users)) {
//https://docs.moodle.org/311/en/Cohorts
//username,password,firstname,lastname,email,cohort1
foreach($users as $k => $user){
$csvs[] = trim($user['username']).';'.trim($user['password']).';'.trim($user['firstname']).';'.trim($user['lastname']).';'.trim($user['email']).';'.trim($user['cohort']);
}
}
return $csvs;
}
?>