'Прочее', '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"].'
'; } } 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"].'
'; //обязательно меняем статус на "в работе" $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 ''; echo ''; } 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 ''; //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 = ''.$worker['fio'].' (Заявка №'.$id_order.'): \n' .$message; $message = ''.$worker['fio'].' (Заявка №'.$id_order.'): '."\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 '
'; var_dump($struct); echo '
'; var_dump($struct); // важные заголовки письма $overview = imap_fetch_overview($inbox, $msg_number, 0); echo '
'; var_dump($overview[0]); echo '
'; var_dump($overview[0]); // тело сообщения $text = imap_fetchbody($inbox, $msg_number, 2); echo '
'; var_dump($text); echo '
'; $body = imap_utf8(quoted_printable_decode($text)); echo '

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.' (посмотреть)'); 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 '
'; print_r($grupps); echo '
'; } $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 '
'.print_r($users,1).'
'; 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; } ?>