attendancelog/inc/attendancelog.php

348 lines
18 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.

<?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;
}
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';
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 .' ';
$tmp = $this->DB->QUR_SEL($sql_search);
return $tmp[1];
}
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;
}
}
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['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;
}
}
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];
}
function HTML()
{
GLOBAL $smarty;
$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']);
//$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>';
$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') {
$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);
$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();
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']);
}
$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('mainPageActionResult', $mainPageActionResult);
$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;
}
}