EIOS/rabprog/inc/class_Disciplins.php

346 lines
22 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 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;
}
}