EIOS/rabprog/inc/class_Disciplins.php

346 lines
22 KiB
PHP
Raw Permalink Normal View History

2023-12-28 15:39:22 +03:00
<?php
class class_Disciplins{
private $DB=null;
private $TFile='';
private $TFiles='';
private $TUchebplans='';
private $TUchebplansPrepod='';
private $TUchebplans_compet='';
private $TCompet='';
private $Tteachers='';
private $Tusers='';
function __construct(){
GLOBAL $DB,$ST;
$this->DB = $DB;
$this->TFile = $ST['dbpf'].'_fshp_file';
$this->TFiles = $ST['dbpf'].'_fshp_files';
$this->TUchebplans = $ST['dbpf'].'_fshp_uchebplans';
$this->TUchebplansPrepod = $ST['dbpf'].'_fshp_disciplin_prepod';
$this->TUchebplans_compet = $ST['dbpf'].'_fshp_uchebplans_compet';
$this->TCompet = $ST['dbpf'].'_fshp_compet';
$this->Tteachers = $ST['dbpf'].'_teachers';
$this->Tusers = $ST['dbpf'].'_users';
$this->TRPD_save = $ST['dbpf'].'_fshp_rpd_save';
}
public function HTML(){
GLOBAL $WorkDIR;
$CHPU = new class_CHPU($WorkDIR);
$URLS = $CHPU->uri();
$smartyC = new class_smarty();
$smarty = $smartyC->config(__DIR__.'\..\tpl');
//$this->DB->log($_POST);
//обработка АЯКС запросов
if(isset($_POST['ajdes'])){
header('Content-Type: application/json; charset=utf-8');
$out=array();
//Сохранение преподавателя к дисциплине
if($_POST['ajdes']=='CopyRPD'){
$saveiddiscip = (int)$_POST['saveiddiscip'];
$newdiscip = (int)$_POST['newdiscip'];
$prepodid = (int)$_POST['prepodid'];
$RPD = new class_RPD();
$out = $RPD->copy_rpd($saveiddiscip,$newdiscip,$prepodid);
}
//Сохранение преподавателя к дисциплине
if($_POST['ajdes']=='SavePrepod'){
//$out['post']=$_POST;
//id_disc:"46577"
//id_prepod: "undefined"
//smena:""
$id_disc=(int)$_POST['id_disc'];
$id_prepod=(int)$_POST['id_prepod'];
$smena=$_POST['smena'];
if($id_prepod==''){
$out['err']=1;
$out['msg']='Не выбрали преподавателя';
}else {
$out = $this->Disciplin_Save_Prepod($id_disc, $id_prepod, $smena);
}
}
echo json_encode($out);
exit();
}
$view = 'all';
$out = array('name'=>'Дисциплины','body'=>'');
if(isset($URLS[1])&&$URLS[1]=='one') {
//$view = 'one';
//$id_file = (int)$URLS[2];
//$smarty->assign('PLAN', $this->plan_show($id_file));
//$smarty->assign('view',$view);
//$out['body'] = $smarty->fetch('page_shahtplan.html');
}
if(!isset($URLS[1])||$URLS[1]=='all') {
$smarty->assign('PREPODS', $this->Prepods_Get_By_Kaf(0,$_SESSION['user']['teachers']['kafedra']));
$dis = $this->Disciplins();
$smarty->assign('DISCIPS', $dis['items']);
$smarty->assign('prepods_all_all',$this->Prepods_Get_all());
$smarty->assign('view',$view);
$KAF = array('kod'=>$dis['kafedra_kod'],'name'=>$_SESSION['user']['teachers']['kafedra']);
$smarty->assign('kaf',$KAF);
$out['body'] = $smarty->fetch('page_disciplins.html');
}
return $out;
}
public function Disciplins($id_kaf=0){
$out=array();
$cYear = 'AND t.god_nach_podgot='.$_SESSION['year_cur'];
$kafname = $_SESSION['user']['teachers']['kafedra'];
if($kafname=='Кафедра госпитальной терапии и последипломного образования'&&$id_kaf==0) $id_kaf=45;
if($kafname=='Кафедра госпитальной хирургии и последипломного образования'&&$id_kaf==0) $id_kaf=37;
if($id_kaf==0){
//попробуем узнать код кафедры и найти по нему т.к. есть планы с неправильной кафедрой!
$sql = 'SELECT kaf_kod FROM '.$this->TUchebplans.' WHERE kaf_name="'.$kafname.'" LIMIT 1';
$rez = $this->DB->QUR_SEL($sql);
//echo $sql.'<pre>'.print_r($rez,1).'</pre>'; exit();
if(!$rez['err']&&$rez['kol']){
$id_kaf = $rez['rez'][0]['kaf_kod'];
$sql = 'SELECT up.*,t.program,t.shifr,t.naprav,t.profil,t.kvalif,t.god_nach_podgot,t.fo,t.srok_poluch_obr FROM '.$this->TUchebplans.' as up,'.$this->TFile.' as t WHERE up.kaf_kod="'.$id_kaf.'" AND up.id_file=t.id_file '.$cYear.' ORDER BY t.shifr,t.god_nach_podgot,t.fo';
}else{
$sql = 'SELECT up.*,t.program,t.shifr,t.naprav,t.profil,t.kvalif,t.god_nach_podgot,t.fo,t.srok_poluch_obr FROM '.$this->TUchebplans.' as up,'.$this->TFile.' as t WHERE up.kaf_name="'.$kafname.'" AND up.id_file=t.id_file '.$cYear.' ORDER BY t.shifr,t.god_nach_podgot,t.fo';
}
}else{
$sql = 'SELECT up.*,t.program,t.shifr,t.naprav,t.profil,t.kvalif,t.god_nach_podgot,t.fo,t.srok_poluch_obr FROM '.$this->TUchebplans.' as up,'.$this->TFile.' as t WHERE up.kaf_kod="'.$id_kaf.'" AND up.id_file=t.id_file '.$cYear.' ORDER BY t.shifr,t.god_nach_podgot,t.fo';
}
//kaf_kod
//echo $sql.'<pre>'.print_r($rez,1).'</pre>';
$rez = $this->DB->QUR_SEL($sql);
//echo $sql.'<pre>'.print_r($rez,1).'</pre>'; exit();
if(!$rez['err']&&$rez['kol']){
foreach ($rez['rez'] as $k => $v){
$prepod = $this->Disciplin_Get_Prepod($v['id']);
$v['prepod_id']=$prepod['prepod_id'];
$v['prepod_data_c']=$prepod['prepod_data_c'];
$v['prepod_descrip']=$prepod['prepod_descrip'];
$v['prepod_status']=$prepod['prepod_status'];
$v['prepod_other']=$prepod['prepod_other'];
//сделаем проверку на наличие дисциплин и добавляем форму обучения
$kkkk = $v['shifr'].' '.$v['naprav'].' '.$v['profil'].' '.$v['god_nach_podgot'];
//проверяем на форму обучения
$is=0; foreach($out['items'][$kkkk] as $k1 => $v1){
//echo '$k='.$k.'; $k1='.$k1.'; $is='.$is.'; name='.$v1['name'].'='.$v['name'].'; index1='.$v1['index1'].'='.$v['index1'].'<br>';
//if($v1['name']==$v['name']||$v1['index1']==$v['index1']) {
if($v1['index1']==$v['index1']) {
if(strpos($out['items'][$kkkk][$k1]['fo'],$v['fo'])===false)
$out['items'][$kkkk][$k1]['fo'] .= ' | '.$v['fo'];
$is=1;//такая форма уже есть
//надо проверить на наличие дисциплины, потому что отличаются!
break;
}
}
if($is==0) {
$out['items'][$kkkk][] = $v;
}
$kaf_kod = $v['kaf_kod'];
}
$out['kafedra_kod'] = $kaf_kod;
}
//echo $sql.'<pre>'.print_r($out,1).'</pre>'; exit();
return $out;
}
/**
* Получение преподавателя для учебного плана
* @param $id_uchebplans
* @return int[]
*/
function Disciplin_Get_Prepod($id_uchebplans){
$out = array('prepod_id'=>0,'prepod_data_c'=>0,'prepod_descrip'=>'','prepod_status'=>1);
$sql1 = 'SELECT id_prepod,data_c,descrip,status FROM '.$this->TUchebplansPrepod.' WHERE id_uchebplans='.$id_uchebplans.' ORDER BY data_c DESC
LIMIT 1';
$rez1 = $this->DB->QUR_SEL($sql1);
if(!$rez1['err']&&$rez1['kol']) {
$out['prepod_id']=$rez1['rez'][0]['id_prepod'];
$out['prepod_data_c']=$rez1['rez'][0]['data_c'];
$out['prepod_descrip']=$rez1['rez'][0]['descrip'];
$out['prepod_status']=$rez1['rez'][0]['status'];
$out['prepod_other']=$this->disciplin_check_other_year($id_uchebplans,$out['prepod_id']);
}else{
$out['prepod_other']['err'] = 'Не нашли соответствия преподавателя-дисциплины';
}
return $out;
}
/**
* Сохранение преподавателя к дисциплине
* @param $id_disc
* @param $id_prepod
* @return array
*/
function Disciplin_Save_Prepod($id_disc,$id_prepod,$smena=''){
$out = array('err'=>1,'msg'=>'Пустой запрос');
/*
* Выбор ответственного преподавателя заведующим должен быть однозначным. Т.е. один раз назначили.
* И обязательно дата назначения.
* И чтоб фамилия и дата назначения отражались в кабинете проректора.
* Назначение можно редактировать кнопочкой - разрешение на редактирование.
* И там менять преподавателя, обязательно написать причину замены, дата замены.
* И ещё согласование переназначения с УМУ.
* И чтоб видел это проректор.
* */
/*$sql = 'SELECT id FROM '.$this->TUchebplansPrepod.' WHERE id_uchebplans='.$id_disc.' ORDER BY data_c DESC LIMIT 1';
$rez = $this->DB->QUR_SEL($sql);
if(!$rez['err']&&$rez['kol']){
$sql = 'UPDATE ' . $this->TUchebplansPrepod . ' SET id_prepod=' . $id_prepod . ' WHERE id='.$rez['rez'][0]['id'].' LIMIT 1';
$rez = $this->DB->QUR($sql);
if(!$rez['err']){
$out['err']=0;
$out['msg']='Обновили';
}else{
$out['err']=1;
$out['msg']='Не обновили';
}
}else {*/
$status=0;
if ($smena==''){
$status=1;
$smena = 'Назначение от зав.каф. '.$_SESSION['user']['fio'];
}
$sql = 'INSERT INTO ' . $this->TUchebplansPrepod . ' values(0,' . time() . ',' . $id_disc . ',' . $id_prepod . ',"'.$this->DB->rescape($smena).'",'.$status.')';
$rez = $this->DB->QUR($sql);
if(!$rez['err']){
$out['err']=0;
$out['msg']='Добавили';
}else{
$out['err']=1;
$out['msg']='Не добавили';
}
//}
return $out;
}
/**
* Проверка есть ли РПД старые по этой дисциплине
* @param $id_uchebplans
* @param $prepod_id
* @return array
*/
function disciplin_check_other_year($id_uchebplans,$prepod_id){
$out = array();
$out['id_uchebplans']=$id_uchebplans;
$out['prepod_id']=$prepod_id;
//выберем текущий уч.план SELECT * FROM `acs_fshp_uchebplans` WHERE `id`=38625
//узнаем id_file 420 index1 Б1.О.08 name Информатика
$sql = 'SELECT id_file, index1, name FROM '.$this->TUchebplans.' WHERE id='.$id_uchebplans;
$rez = $this->DB->QUR_SEL($sql);
if(!$rez['err']&&$rez['kol']){
$up_cur = $rez['rez'][0];
//По id_file узнаем данные SELECT * FROM `acs_fshp_file` WHERE `id_file`=420
//program(бакалавриата), shifr(10.03.01), naprav(Информационная безопасность), profil(Организация и технология защиты информации), kafedra(Информационной безопасности и прикладной информати...), fakultet(Информационных систем в экономике и юриспруденции), kvalif(Бакалавр), god_nach_podgot(2023), fo(Очная), obr_stabdart(№ 1427 от 17.11.2020), srok_poluch_obr(4 г.), json({"kods"{"""06.034"}}), status(1)
$sql = 'SELECT program,shifr,naprav,profil,kafedra,fakultet,kvalif,god_nach_podgot,fo FROM '.$this->TFile.' WHERE id_file='.$up_cur['id_file'];
$rez = $this->DB->QUR_SEL($sql);
if(!$rez['err']&&$rez['kol']){
$up_file_cur = $rez['rez'][0];
//Найдем такой же план в других годах!
//SELECT * FROM `acs_fshp_file` WHERE program="бакалавриата" AND shifr="10.03.01" AND naprav="Информационная безопасность" AND profil="Организация и технология защиты информации" AND kafedra="Информационной безопасности и прикладной информати..." AND fakultet="Информационных систем в экономике и юриспруденции" AND kvalif="Бакалавр" AND god_nach_podgot!=2023 AND fo="Очная"
$sql = 'SELECT id,id_file,god_nach_podgot FROM '.$this->TFile.' WHERE program="'.$up_file_cur['program'].'" AND shifr="'.$up_file_cur['shifr'].'" AND naprav="'.$up_file_cur['naprav'].'" AND profil="'.$up_file_cur['profil'].'" AND kafedra="'.$up_file_cur['kafedra'].'" AND fakultet="'.$up_file_cur['fakultet'].'" AND kvalif="'.$up_file_cur['kvalif'].'" AND god_nach_podgot!='.$up_file_cur['god_nach_podgot'].' AND fo="'.$up_file_cur['fo'].'"';
$sql = 'SELECT id,id_file,god_nach_podgot FROM '.$this->TFile.' WHERE program="'.$up_file_cur['program'].'" AND shifr="'.$up_file_cur['shifr'].'" AND naprav="'.$up_file_cur['naprav'].'" AND profil="'.$up_file_cur['profil'].'" AND kafedra="'.$up_file_cur['kafedra'].'" AND fakultet="'.$up_file_cur['fakultet'].'" AND kvalif="'.$up_file_cur['kvalif'].'" AND god_nach_podgot!='.$up_file_cur['god_nach_podgot'];
$rez = $this->DB->QUR_SEL($sql);
//echo $sql.'<pre>'.print_r($rez,1).'</pre>';
//SELECT id,id_file,god_nach_podgot FROM acs_fshp_file WHERE program="магистратуры" AND shifr="08.04.01" AND naprav="Строительство" AND profil="" AND kafedra="Строительных и общепрофессиональных дисциплин" AND fakultet="Технологический" AND kvalif="Магистр" AND god_nach_podgot!=2023 AND fo="Заочная"
if(!$rez['err']&&$rez['kol']){
$up_file_oth = $rez['rez'][0];
//теперь найдем дисциплину такую же
$out = $this->disciplin_check_other_year_04($up_file_oth,$up_cur);
$out['id_uchebplans']=$id_uchebplans;
$out['prepod_id']=$prepod_id;
//$sql = 'SELECT id,id_file, index1, name FROM '.$this->TUchebplans.' WHERE id_file='.$up_file_oth['id_file'].' AND index1="'.$up_cur['index1'].'" AND name="'.$up_cur['name'].'"';
//$rez = $this->DB->QUR_SEL($sql);
//if(!$rez['err']&&$rez['kol']){
// $up_oth = $rez['rez'][0];
// //$out['up_cur']=$up_cur;
// //$out['up_file_cur']=$up_file_cur;
// //теперь найдем кто разрабатывал РПД в другом году
// $sql = 'SELECT rs.id as rsid,rs.id_prepod,u.fio FROM '.$this->TRPD_save.' as rs,'.$this->Tusers.' as u WHERE rs.id_discip='.$up_oth['id'].' AND u.id=rs.id_prepod';
// $rez = $this->DB->QUR_SEL($sql);
// if(!$rez['err']&&$rez['kol']) {
// $up_oth_user = $rez['rez'][0];
// $out['up_oth'] = $up_oth;
// $out['up_file_oth']=$up_file_oth;
// $out['up_oth_user'] = $up_oth_user;
// }else $out['err'] = '5. Не нашли кто разрабатывал эту дисциплину';
//}else $out['err'] = '4. Не нашли дисциплину в прошлом году [<span class="text-secondary">Файл:</span>'.$up_file_oth['id_file'].' <span class="text-secondary">Шифр:</span> '.$up_cur['index1'].' <span class="text-secondary">Дисцип:</span>'.$up_cur['name'].']';
}else $out['err'] = '3. Не нашли учебный план в прошлом году [<span class="text-secondary">Программа:</span>'.$up_file_cur['program'].' <span class="text-secondary">Шифр:</span>'.$up_file_cur['shifr'].' <span class="text-secondary">Направление:</span>'.$up_file_cur['naprav'].' <span class="text-secondary">Профиль:</span>'.$up_file_cur['profil'].' <span class="text-secondary">Кафедра:</span>'.$up_file_cur['kafedra'].' <span class="text-secondary">Факультет:</span>'.$up_file_cur['fakultet'].' <span class="text-secondary">Квалиф:</span>'.$up_file_cur['kvalif'].' <span class="text-secondary">ГодНачПодг:</span>'.($up_file_cur['god_nach_podgot']-1).']';
}else $out['err'] = '2. Не нашли файл текущего учебного плана';
}else $out['err'] = '1. Не нашли текущий учебный план';
return $out;
}
function disciplin_check_other_year_04($up_file_oth,$up_cur){
$out = array();
//теперь найдем дисциплину такую же
$dname= str_replace(' ',' ',$up_cur['name']);
$sql = 'SELECT id,id_file, index1, name FROM '.$this->TUchebplans.' WHERE id_file='.$up_file_oth['id_file'].' AND index1="'.$up_cur['index1'].'" AND (name="'.$up_cur['name'].'" OR name="'.$dname.'" OR REPLACE(name," "," ")="'.$dname.'")';
$rez = $this->DB->QUR_SEL($sql);
//echo $sql.'<pre>'.print_r($rez,1).'</pre>';
//Документальное сопровождение работ в строительстве
//SELECT id,id_file, index1, name FROM acs_fshp_uchebplans WHERE id_file=95 AND index1="ФТД.01" AND name="Документальное сопровождение работ в строительстве"
if(!$rez['err']&&$rez['kol']){
$up_oth = $rez['rez'][0];
//$out['up_cur']=$up_cur;
//$out['up_file_cur']=$up_file_cur;
//теперь найдем кто разрабатывал РПД в другом году
$out = $this->disciplin_check_other_year_05($up_file_oth,$up_oth);
}else {
//попробуем найти без шифра! путают их в учебных планах!
$sql = 'SELECT id,id_file, index1, name FROM '.$this->TUchebplans.' WHERE id_file='.$up_file_oth['id_file'].' AND name="'.$up_cur['name'].'"';
$rez = $this->DB->QUR_SEL($sql);
if(!$rez['err']&&$rez['kol']){
$up_oth = $rez['rez'][0];
//теперь найдем кто разрабатывал РПД в другом году
$out = $this->disciplin_check_other_year_05($up_file_oth,$up_oth);
if(!isset($out['err'])) $out['err']='';
$out['err'] .= '4. Нашли дисциплину, но не по ШИФРУ';
}else {
$out['err'] = '4. Не нашли дисциплину в прошлом году [<span class="text-secondary">Файл:</span>'.$up_file_oth['id_file'].' <span class="text-secondary">Шифр:</span> '.$up_cur['index1'].' <span class="text-secondary">Дисцип:</span>'.$up_cur['name'].']';
}
}
return $out;
}
function disciplin_check_other_year_05($up_file_oth,$up_oth){
$out = array();
$sql = 'SELECT rs.id as rsid,rs.id_prepod,u.fio FROM '.$this->TRPD_save.' as rs,'.$this->Tusers.' as u WHERE rs.id_discip='.$up_oth['id'].' AND u.id=rs.id_prepod';
$rez = $this->DB->QUR_SEL($sql);
if(!$rez['err']&&$rez['kol']) {
$up_oth_user = $rez['rez'][0];
$out['up_oth'] = $up_oth;
$out['up_file_oth']=$up_file_oth;
$out['up_oth_user'] = $up_oth_user;
}else $out['err'] = '5. Не нашли кто разрабатывал эту дисциплину';
return $out;
}
/**
* Получение преподавателей на кафедре
* @param int $kaf_id
* @param string $kaf_name
* @return array
*/
function Prepods_Get_By_Kaf($kaf_id=0,$kaf_name=''){
$out=array();
$sql = 'SELECT u.id,u.fio,u.status FROM '.$this->Tteachers.' as t,'.$this->Tusers.' as u WHERE u.id=t.id_user AND t.kafedra="'.$kaf_name.'" ORDER BY u.fio';
$rez = $this->DB->QUR_SEL($sql);
if(!$rez['err']&&$rez['kol']){
$out = $rez['rez'];
}
return $out;
}
function Prepods_Get_all(){
$out=array();
if(!isset($_SESSION['prepods_all_all'])) {
$sql = 'SELECT u.id,u.fio,u.status FROM ' . $this->Tteachers . ' as t,' . $this->Tusers . ' as u WHERE u.id=t.id_user AND u.status>=0 ORDER BY u.fio';
$rez = $this->DB->QUR_SEL($sql);
//echo $sql.'<pre>'.print_r($rez,1).'</pre>';exit();
if (!$rez['err'] && $rez['kol']) {
$out = $_SESSION['prepods_all_all'] = $rez['rez'];
}
}else{
$out = $_SESSION['prepods_all_all'];
}
return $out;
}
}