attendancelog/inc/attendancelog.php

239 lines
12 KiB
PHP
Raw 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.

<?php
class attendancelog {
private string $name;
private $DB;
public function __construct($DB, $name){
$this->DB = $DB;
$this->name = $name;
}
public function currentUserInfo()
{
$currentUserInfo = array();
if(isset($_SESSION['user']['teacher']))
{
$currentUserInfo['role'] = 'teacher';
$currentUserInfo['user_id'] = $_SESSION['user']['id'];
$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']['student']))
{
$currentUserInfo['role'] = 'student';
$currentUserInfo['user_id'] = $_SESSION['user']['id'];
$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 if(isset($_SESSION['user']['statuses']['25']))
// {
//
// }else{
//
// }
}
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;
}
function getStudentsByGroup($groupName,$educationForm)
{
$educationForm = urlencode($educationForm);
$groupName = urlencode($groupName);
$url = 'https://eios.mkgtu.ru/api.php?des=studentsByGrupp&param1=' . $groupName . '&param2=' . $educationForm;
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;
}
function getGroupNameByID($id) {
$sql_search = 'SELECT sokr, fo FROM acs_grupp WHERE id='. $id .' ';
return $this->DB->QUR_SEL($sql_search);
//$tmp = $this->DB->QUR_SEL($sql_search);
// unset($tmp[0]);
// return $tmp;
}
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 AttendanceAddEdit()
{
if(isset($_POST['attendance_add_edit'])){
foreach ($_POST['attendance_add_edit']['attendance'] as $student_name => $student_att){
$sql_search = 'SELECT id FROM acs_attendancelog_students_attendance WHERE name="'. $student_name .'" 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="'. $this->DB->rescape($_POST['attendance_add_edit']['info']['predmet']) .'" ';
$search = $this->DB->QUR_SEL($sql_search);
if (isset($search[1])){
$sql_update = 'UPDATE acs_attendancelog_students_attendance SET att=' . $student_att . ' WHERE id='. $search[1]['id'] .' ';
$rez = $this->DB->QUR($sql_update);
}else {
$sql_insert = 'INSERT INTO acs_attendancelog_students_attendance (id, name, gruppa, date1, att, time1, predmet) VALUES (0,"'.$student_name.'", "'. $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']['time1']) .',"'. $this->DB->rescape($_POST['attendance_add_edit']['info']['predmet']) . '")';
$rez = $this->DB->QUR($sql_insert);
}
}
$rez['date_cur'] = $_POST['attendance_add_edit']['info']['date'];
return $rez;
}
}
function mainPageAction()
{
$currentUserInfo = $this->currentUserInfo();
$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[1]['sokr'], $current_group[1]['fo']);
$currentTime = $this->currentTime();
$out = array();
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;
$students = $this->getStudentsByGroup($current_group[1]['sokr'], $current_group[1]['fo']);
foreach ($students['students'] as $student_name){
$out['day_info'][$class['time1']]['students'][$student_name] = 'off';
$sql_search = 'SELECT name, att FROM acs_attendancelog_students_attendance WHERE name="'. $student_name .'" AND gruppa="'. $current_group[1]['sokr'] .'" AND date1="'. $db_date .'" AND time1='. $class['time1'] .' AND predmet="'. $class['predmet'] .'" ';
$search = $this->DB->QUR_SEL($sql_search);
if(isset($search[1])){
$out['day_info'][$class['time1']]['students'][$student_name] = $search[1]['att'];
}
}
}
}
}
return $out;
}
}
function HTML()
{
GLOBAL $smarty;
$html = '';
$currentUserInfo = $this->currentUserInfo();
$currentTime = $this->currentTime();
$AttendanceAddEdit = $this->AttendanceAddEdit();// должен вызываться перед mainPageAction
$actionResult = $this->mainPageAction();
//$html .= '<pre>'. print_r($groups,1) . '</pre>';
//$html .= '<pre>'. print_r($currentUserInfo,1) . '</pre>';
//$html .= '<pre>'. print_r($actionResult,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>';
$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);
if($page == 'headman') {
$smarty->clearCache('moduls/attendancelog/tpl/headman.html');
$html .= $smarty->fetch('moduls/attendancelog/tpl/headman.html');
}
if ($page == ''){
if($currentUserInfo['role'] == 'student'){
$header = "Location: https://eios.mkgtu.ru/modul/attendancelog/main/show/" . $currentUserInfo['grupp_id'] . '/';
header($header);
}
$groups = $this->getAllGrupps();
$facult_groups = $this->getAllGrupps($currentUserInfo['facult']['facult_id']);
$smarty->assign('groups',$groups);
$smarty->assign('facult_groups',$facult_groups);
$smarty->clearCache('moduls/attendancelog/tpl/main_page.html');
$html .= $smarty->fetch('moduls/attendancelog/tpl/main_page.html');
}
if ($page == 'main'){//Староста
if ($des == 'show'){
$smarty->assign('AttendanceAddEdit', $AttendanceAddEdit);
$smarty->assign('actionResult', $actionResult);
$groupName = $this->getGroupNameByID((int)$_GET['id']);
$groupName = $groupName[1]['sokr'];
$smarty->assign('groupName', $groupName);
}
//$smarty->assign('groups',$groups);
$smarty->clearCache('moduls/attendancelog/tpl/main_page.html');
$html .= $smarty->fetch('moduls/attendancelog/tpl/main_page.html');
}
return $html;
}
}