attendancelog/inc/attendancelog.php

348 lines
18 KiB
PHP
Raw Normal View History

2024-11-12 13:08:43 +03:00
<?php
class attendancelog {
private string $name;
private $DB;
public function __construct($DB, $name){
$this->DB = $DB;
$this->name = $name;
}
public function currentUserInfo(){
$currentUserInfo = array();
$currentUserInfo['user_id'] = $_SESSION['user']['id'];
if(isset($_SESSION['user']['teacher'])) {
$currentUserInfo['role'] = 'teacher';
$currentUserInfo['teacher_id'] = $_SESSION['user']['teacher']['id'];
if(isset($_SESSION['user']['teacher']['fakultet'])){
$sql_search = 'SELECT id FROM acs_faculties WHERE name="'. $_SESSION['user']['teacher']['fakultet'] .'"';
$tmp = $this->DB->QUR_SEL($sql_search);
unset($tmp[0]);
$currentUserInfo['facult']['facult_name'] = $_SESSION['user']['teacher']['fakultet'];
$currentUserInfo['facult']['facult_id'] = $tmp[1]['id'];
$sql_search = 'SELECT id, sokr, fo FROM acs_grupp WHERE id_facult="'.$tmp[1]['id'] .'" AND sokr NOT LIKE "Выпуск%"';
$tmp = $this->DB->QUR_SEL($sql_search);
unset($tmp[0]);
foreach($tmp as $grupp){
$currentUserInfo['related_grupps'][$grupp['sokr']] = $grupp ;
}
}
return $currentUserInfo;
}else if(isset($_SESSION['user']['statuses']['25'])) {
$currentUserInfo['role'] = 'secretary';
return $currentUserInfo;
}else if(isset($_SESSION['user']['student'])) {
$currentUserInfo['role'] = 'student';
$sql_search = 'SELECT * FROM acs_attendancelog_headmen WHERE user_id='. $currentUserInfo['user_id'] .' ';
$rez = $this->DB->QUR_SEL($sql_search);
if(!isset($rez[1])){
return 0;
}
$currentUserInfo['student_id'] = $_SESSION['user']['student']['id'];
$currentUserInfo['grupp_id'] = $_SESSION['user']['student']['grupp']['id'];
if(isset($_SESSION['user']['student']['grupp'])){
$currentUserInfo['facult']['facult_id'] = $_SESSION['user']['student']['grupp']['id_facult'];
$sql_search = 'SELECT name FROM acs_faculties WHERE id='. $currentUserInfo['facult']['facult_id'] .' ';
$tmp = $this->DB->QUR_SEL($sql_search);
unset($tmp[0]);
}
return $currentUserInfo;
}else{
return 0;
}
}
function getAllGrupps($facult = '') {
if($facult != ''){
$sql_search = 'SELECT id, sokr, fo, kurs FROM acs_grupp WHERE fo="ОФО" AND id_facult="'. $facult .'" AND sokr NOT LIKE "Выпуск%" ORDER BY `sokr` DESC';
}else{
$sql_search = 'SELECT id, sokr, fo, kurs FROM acs_grupp WHERE fo="ОФО" AND sokr NOT LIKE "Выпуск%" ORDER BY `sokr` DESC';
}
$tmp = $this->DB->QUR_SEL($sql_search);
unset($tmp[0]);
return $tmp;
2024-11-12 13:08:43 +03:00
}
function getStudentsByGroup($groupName,$educationForm)
{
$educationForm = urlencode($educationForm);
$groupName = urlencode($groupName);
$url = 'https://eios.mkgtu.ru/api.php?des=studentsByGrupp&param1=' . $groupName . '&param2=' . $educationForm.'&param3=1';
2024-11-12 13:08:43 +03:00
return json_decode(file_get_contents($url),1);
}
function getClassesByGroup($groupName,$educationForm)
{
$tmp = explode('-', $groupName);
$groupName = trim($tmp[0]);
$groupNumber = substr($tmp[1],0,2);
$educationForm = urlencode($educationForm);
$groupName = urlencode($groupName);
$groupNumber = urlencode($groupNumber);
$url = 'https://local.mkgtu.ru/raspisnew/api.php?des=raspis_grupp&name='. $groupName .'&number='. $groupNumber .'&fo=' . $educationForm;
return json_decode(file_get_contents($url),1);
//return $url;
}
function currentTime() { //возвращает информацию о текущем моменте для пользователя
$rez = array();
$moment = getdate();
$curr_minutes = $moment['hours'] * 60 + $moment['seconds'];
$minutes = 480;
for($i = 1; $i < 8; $i++) { //возвращает текущую пару в университете
if ($curr_minutes >= $minutes-10 AND $curr_minutes <= $minutes + 90){
$rez['time1'] = $i;
}
if ($i == 4){
$minutes = $minutes + 110;
}else{
$minutes = $minutes + 100;
}
}
$week = json_decode(file_get_contents('https://local.mkgtu.ru/raspisnew/api.php?des=raspis_week_cur'),1);
$rez['day1'] = $moment['wday'];
$rez['mday'] = $moment['mday'];
$rez['mon'] = $moment['mon'];
$rez['0'] = $moment['0'];
$rez['year'] = $moment['year'];
$rez['date'] = date("Y-m-d");
$rez['week1'] = $week['week_cur'];
return $rez;
}
2024-11-12 14:57:17 +03:00
function getGroupNameByID($id) {
$sql_search = 'SELECT sokr, fo FROM acs_grupp WHERE id='. $id .' ';
$tmp = $this->DB->QUR_SEL($sql_search);
return $tmp[1];
2024-11-12 14:57:17 +03:00
}
public function getWeekByDate($ts=0) {
$url = 'https://local.mkgtu.ru/raspisnew/api.php?des=raspis_week_cur&ts=' . $ts;
$awn = json_decode(file_get_contents($url),1);
return $awn['week_cur'];
}
public function predmetsAddEdit($predmet_name){
//принимает имя предмета. Делает запись в таблицу предметов, если такой нет. В любом случае возвращает айди предмета
$sql_search = 'SELECT id, name FROM acs_attendancelog_predmets WHERE name="'. $predmet_name .'"';
$search = $this->DB->QUR_SEL($sql_search);
if(isset($search[1])){
$search = $search[1];
}
if(count($search) == 0){
$sql_insert = 'INSERT INTO acs_attendancelog_predmets (id, name) VALUES (0,"'. $predmet_name .'")';
$rez = $this->DB->QUR($sql_insert);
$sql_search = 'SELECT id, name FROM acs_attendancelog_predmets WHERE name="'. $predmet_name .'"';
$search = $this->DB->QUR_SEL($sql_search);
if(isset($search[1])){
$search = $search[1];
}
}
return $search['id'];
}
public function gruppsSearch($request){
if(isset($_POST['all_grupps_search'])){
$sql_search = 'SELECT id, sokr, fo, kurs FROM acs_grupp WHERE fo="ОФО" AND sokr NOT LIKE "Выпуск%" AND sokr LIKE "%'. $this->DB->rescape($request) .'%" OR fo LIKE "%'. $this->DB->rescape($request) .'%"';
$tmp = $this->DB->QUR_SEL($sql_search);
unset($tmp[0]);
return $tmp;
}
}
public function AttendanceAddEdit()
{
if(isset($_POST['attendance_add_edit'])){
foreach ($_POST['attendance_add_edit']['attendance'] as $user_id => $student_att){
$sql_search = 'SELECT id, appr FROM acs_attendancelog_students_attendance WHERE user_id="'. $user_id .'" AND gruppa="'. $this->DB->rescape($_POST['attendance_add_edit']['info']['gruppa']) .'" AND date1="'. $this->DB->rescape($_POST['attendance_add_edit']['info']['date']) .'" AND time1='. $this->DB->rescape($_POST['attendance_add_edit']['info']['time1']) .' AND predmet_id="'. $this->DB->rescape($_POST['attendance_add_edit']['info']['predmet_id']) .'" ';
$search = $this->DB->QUR_SEL($sql_search);
if (isset($search[1])){
if(0 == $search[1]['appr']){
$sql_update = 'UPDATE acs_attendancelog_students_attendance SET att=' . $student_att . ', appr='. $_POST['attendance_add_edit']['info']['approval'] .' WHERE id='. $search[1]['id'] .' ';
$rez = $this->DB->QUR($sql_update);
}
}else {
$sql_insert = 'INSERT INTO acs_attendancelog_students_attendance (id, user_id, gruppa, date1, att, appr, time1, predmet_id) VALUES (0,"'.$user_id.'", "'. $this->DB->rescape($_POST['attendance_add_edit']['info']['gruppa']) .'", "'. $this->DB->rescape($_POST['attendance_add_edit']['info']['date']) .'", '. $student_att .','. $this->DB->rescape($_POST['attendance_add_edit']['info']['approval']) .', '. $this->DB->rescape($_POST['attendance_add_edit']['info']['time1']) .',"'. $this->DB->rescape($_POST['attendance_add_edit']['info']['predmet_id']) . '")';
$rez = $this->DB->QUR($sql_insert);
}
}
$rez['date_cur'] = $_POST['attendance_add_edit']['info']['date'];
return $rez;
}
}
public function headmanAddDelete(){
if(isset($_POST['headman_request'])){
$currentUserInfo = $this->currentUserInfo();
$current_time = $this->currentTime();
$current_group = $this->getGroupNamebyID((int)$_GET['id']);
$students = $this->getStudentsByGroup($current_group['sokr'], $current_group['fo']);
$sql_search = 'SELECT * FROM acs_attendancelog_headmen WHERE gruppa="'. $current_group['sokr'] .'" ';
$rez = $this->DB->QUR_SEL($sql_search);
if(isset($rez[1])){
$rez = $rez[1];
$sql_delete = 'DELETE FROM acs_attendancelog_headmen WHERE gruppa="'. $current_group['sokr'] .'" ';
$rez = $this->DB->QUR($sql_delete);
}
$sql_insert = 'INSERT INTO acs_attendancelog_headmen (id, user_id, gruppa, date_add, added_by) VALUES (0, '. $this->DB->rescape($_POST['headman_request']) .', "'. $current_group['sokr'] .'", "'. $current_time['date'] .'", '. $currentUserInfo['user_id'] .' )';
$rez = $this->DB->QUR($sql_insert);
return $rez;
}
}
2024-11-12 13:08:43 +03:00
function mainPageAction()
{
$currentUserInfo = $this->currentUserInfo();
2024-11-12 13:08:43 +03:00
$des = ''; if(isset($_GET['des'])) $des = $_GET['des'];
if ($des == 'show'){
$current_group = $this->getGroupNamebyID((int)$_GET['id']);
$current_group_classes = $this->getClassesByGroup($current_group['sokr'], $current_group['fo']);
$currentTime = $this->currentTime();
$out = array();
$tmp = $this->getStudentsByGroup($current_group['sokr'], $current_group['fo']);
$out['students_all'] = $tmp['students'];
if(isset($_POST['date_request'])) {
$week_compare = $this->getWeekByDate(strtotime($_POST['date_request']));
$day_compare = date('w', strtotime($_POST['date_request']));
$db_date = $this->DB->rescape($_POST['date_request']);
}else {
$week_compare = $currentTime['week1'];
$day_compare = $currentTime['day1'];
$db_date = $currentTime['date'];
}
foreach ($current_group_classes['raspis'] as $class) {
if ($class['week1'] == $week_compare) {
if($class['day1'] == $day_compare){
$out['day_name'] = $class['day_name'];
$out['day_info'][$class['time1']] = $class;
$out['day_info'][$class['time1']]['predmet_id'] = $this->predmetsAddEdit($class['predmet']);
$sql_search = 'SELECT appr FROM acs_attendancelog_students_attendance WHERE gruppa="'. $current_group[1]['sokr'] .'" AND date1="'. $db_date .'" AND time1='. $class['time1'] .' AND predmet_id='. $out['day_info'][$class['time1']]['predmet_id'];
$search = $this->DB->QUR_SEL($sql_search);
if(isset($search[1])){
$out['day_info'][$class['time1']]['approval'] = $search[1]['appr'];
}
foreach ($out['students_all'] as $student_id => $student_name){
$out['day_info'][$class['time1']]['students'][$student_id] = '0';
$sql_search = 'SELECT user_id, att FROM acs_attendancelog_students_attendance WHERE user_id="'. $student_id .'" AND gruppa="'. $current_group[1]['sokr'] .'" AND date1="'. $db_date .'" AND time1='. $class['time1'] .' AND predmet_id='. $out['day_info'][$class['time1']]['predmet_id'];
$search = $this->DB->QUR_SEL($sql_search);
if(isset($search[1])){
$out['day_info'][$class['time1']]['students'][$student_id] = $search[1]['att'];
}
}
}
}
}
return $out;
2024-11-12 13:08:43 +03:00
}
}
function headmanPageAction(){
$des = ''; if(isset($_GET['des'])) $des = $_GET['des'];
if($des == 'add_edit'){
$out = array();
$current_group = $this->getGroupNamebyID((int)$_GET['id']);
$students = $this->getStudentsByGroup($current_group['sokr'], $current_group['fo']);
$out['current_group'] = $current_group;
$sql_search = 'SELECT * FROM acs_attendancelog_headmen WHERE gruppa="'. $current_group['sokr'] .'" ';
$rez = $this->DB->QUR_SEL($sql_search);
if (isset($rez[1])){
$rez = $rez[1];
}
foreach ($students['students'] as $user_id => $student_name){
$out['students'][$user_id]['student_name'] = $student_name;
if($rez['user_id'] == $user_id){
$out['students'][$user_id]['headman'] = 1;
$out['headman'] = $student_name;
}else{
$out['students'][$user_id]['headman'] = 0;
}
}
return $out;
}
}
function getHeadman($group){
$sql_search = 'SELECT * FROM acs_attendancelog_headmen WHERE gruppa="'. $group .'" ';
$tmp = $this->DB->QUR_SEL($sql_search);
return $tmp[1];
}
2024-11-12 13:08:43 +03:00
function HTML()
{
GLOBAL $smarty;
2024-11-12 13:08:43 +03:00
$html = '';
$currentUserInfo = $this->currentUserInfo();
$currentTime = $this->currentTime();
$AttendanceAddEdit = $this->AttendanceAddEdit();// должен вызываться перед mainPageAction
$headmanAddDelete = $this->headmanAddDelete();
$mainPageActionResult = $this->mainPageAction();
$headmanPageActionResult = $this->headmanPageAction();
$predmetsAddEdit = $this->predmetsAddEdit('Исследование операций и методы оптимизации');
$gruppsSearch = $this->gruppsSearch($_POST['all_grupps_search']);
2024-11-12 13:08:43 +03:00
//$html .= '<pre>'. print_r($groups,1) . '</pre>';
//$html .= '<pre>'. print_r($gruppsSearch,1) . '</pre>';
//$html .= '<pre>'. print_r($currentUserInfo,1) . '</pre>';
//$html .= '<pre>'. print_r($mainPageActionResult,1) . '</pre>';
//$html .= '<pre>'. print_r($headmanPageActionResult,1) . '</pre>';
//$html .= '<pre>'. print_r($predmetsAddEdit,1) . '</pre>';
//$html .= '<pre>'. print_r($headmanAddDelete,1) . '</pre>';
//$html .= '<pre>'. print_r($currentTime,1) . '</pre>';
//$html .= '<pre>'. print_r($_SESSION,1) . '</pre>';
//$html .= '<pre>'. print_r($AttendanceAddEdit,1) . '</pre>';
//$html .= '<pre>'. print_r($_GET,1) . '</pre>';
//$html .= '<pre>'. print_r($_POST,1) . '</pre>';
//$html .= '<pre>'. print_r($_SESSION,1) . '</pre>';
2024-11-12 13:08:43 +03:00
$page = ''; if(isset($_GET['page'])) $page = $_GET['page'];
$des = ''; if(isset($_GET['des'])) $des = $_GET['des'];
$smarty->assign('des', $des);
$smarty->assign('name', $this->name);
$smarty->assign('currentTime', $currentTime);
$smarty->assign('currentUserInfo', $currentUserInfo);
2024-11-12 13:08:43 +03:00
if($page == 'headman') {
$facult_groups = $this->getAllGrupps($currentUserInfo['facult']['facult_id']);
foreach ($facult_groups as $key => $group) {
$students = $this->getStudentsByGroup($group['sokr'], $group['fo']);
$students = $students['students'];
$headman = $this->getHeadman($group['sokr']);
foreach($students as $user_id => $student_name) {
if ($headman['user_id'] == $user_id){
$facult_groups[$key]['headman'] = $student_name;
}
}
}
$smarty->assign('facult_groups',$facult_groups);
$smarty->assign('headmanPageActionResult', $headmanPageActionResult);
2024-11-12 13:08:43 +03:00
$smarty->clearCache('moduls/attendancelog/tpl/headman.html');
$html .= $smarty->fetch('moduls/attendancelog/tpl/headman.html');
2024-11-12 13:08:43 +03:00
}
if ($page == ''){
if($currentUserInfo['role'] == 'student'){
$header = "Location: https://eios.mkgtu.ru/modul/attendancelog/main/show/" . $currentUserInfo['grupp_id'] . '/';
header($header);
}
$groups = $this->getAllGrupps();
if (isset($currentUserInfo['facult']['facult_id'])){
$facult_groups = $this->getAllGrupps($currentUserInfo['facult']['facult_id']);
}
if(isset($_POST['all_grupps_search'])){
$groups = $this->gruppsSearch($_POST['all_grupps_search']);
}
2024-11-12 13:08:43 +03:00
$smarty->assign('groups',$groups);
$smarty->assign('facult_groups',$facult_groups);
2024-11-12 13:08:43 +03:00
$smarty->clearCache('moduls/attendancelog/tpl/main_page.html');
$html .= $smarty->fetch('moduls/attendancelog/tpl/main_page.html');
}
if ($page == 'main'){
2024-11-12 14:57:17 +03:00
if ($des == 'show'){
$smarty->assign('AttendanceAddEdit', $AttendanceAddEdit);
$smarty->assign('mainPageActionResult', $mainPageActionResult);
$groupName = $this->getGroupNameByID((int)$_GET['id']);
2024-11-12 14:57:17 +03:00
$groupName = $groupName[1]['sokr'];
$smarty->assign('groupName', $groupName);
}
//$smarty->assign('groups',$groups);
2024-11-12 13:08:43 +03:00
$smarty->clearCache('moduls/attendancelog/tpl/main_page.html');
$html .= $smarty->fetch('moduls/attendancelog/tpl/main_page.html');
}
return $html;
}
}