'; } */ ?>pl_id = $pl_id; $this->dz = (int)$dz; $this->h = (int)$h; $this->m = (int)$m; $this->gru = $gru; $this->prz = $prz; $this->nau = $nau; $this->sal = $sal; $this->t_od = $od; $this->t_do = $do; $this->duration = $durat; // log_me("new plan(".(int)$dz.",".$h.",".$m.",".$gru.",".$prz.",".$nau.",".$sal.")", ""); } } class nauczyciel { // public $id, $nazwisko, $imie; function __construct($r) { // $na_r = explode("|", $nau_l); // row // $na_r[1] = explode(" ", $na_r[1]); // imię i nazwisko $this->id = $r['nau_id']; $this->imie = $r['nau_imie']; $this->nazwisko = $r['nau_nazwisko']; $this->osoba = $this->imie.' '.$this->nazwisko; $this->bg_color = $r['nau_bg_color']; $this->fg_color = $r['nau_fg_color']; if ($this->fg_color=="") $this->fg_color = '#000'; /* else { $rgb = hex2rgb($this->bg_color); if (($rgb[0] + $rgb[1]*0.8 + $rgb[2]) / 3 >= 50) $this->fg_color = '#000'; else $this->fg_color = '#fff'; } */ $this->ma_zajec = array(); // $this->h_w_tyg = 8; // $this->h_w_dniu = 40; } function addUczy($nau_prz) { // dodanie inforamcji, czego nauczyciel uczy for ($u=0; $uid) { // czy to ID tego nauczyciela? $this->uczy = explode(",", $np[1]); // ... dodaj przedmioty, których uczy } } } function _00($val) { return ($val<10 ? "0":"").$val; } function addWPracy($nau_tim) { // dodanie informacji, w jakich godzinach nauczyciel jest w pracy // log_me("addWPracy",""); for ($u=0; $uid) { // czy to ID tego nauczyciela? $dz = explode(" ", $nt[1]); foreach ($dz as $k => $v) { $dza[$k] = explode("=",$v); // format: dz=hf:mf-ht:mt $dza2[$dza[$k][0]] = explode("-", $dza[$k][1]); $dza2[$dza[$k][0]][0] = explode(":", $dza2[$dza[$k][0]][0]); $dza2[$dza[$k][0]][1] = explode(":", $dza2[$dza[$k][0]][1]); $dza2[$dza[$k][0]] [0][1] = (int)$dza2[$dza[$k][0]] [0][1]; $dza2[$dza[$k][0]] [1][1] = (int)$dza2[$dza[$k][0]] [1][1]; // tekstowy zakres godzin $dza2[$dza[$k][0]]["txt"] = $dza2[$dza[$k][0]] [0][0].":".$this->_00($dza2[$dza[$k][0]] [0][1])."–"; $dza2[$dza[$k][0]]["txt"].= $dza2[$dza[$k][0]] [1][0].":".$this->_00($dza2[$dza[$k][0]] [1][1]); // ilość minut pracy w danym dniu $dza2[$dza[$k][0]]["minut_pracy"] = $dza2[$dza[$k][0]] [1][0]*60+$dza2[$dza[$k][0]] [1][1] - ($dza2[$dza[$k][0]] [0][0]*60+$dza2[$dza[$k][0]] [0][1]); } // log_val("dza2",$dza2); $this->w_pracy = $dza2; // ... dodaj godziny obecności w pracy } } } function refresh() { // odśwież dane o nauczycielu // zeruj aktualne dane $this->ma_zajec = array(array(0,0), array(0,0), array(0,0), array(0,0), array(0,0)); // ilość zajęć danego dnia bez i z dziećmi (do statystyki nauczycieli) // wpisz nowe dane $pla = unserialize($_SESSION['pla']); foreach ($pla as $p => $v) { if ($pla[$p]->nau == $this->id) { // ten wpis w planie dotyczy tego nauczyciela $this->ma_zajec[$pla[$p]->dz][get_class_val("prz",$pla[$p]->prz, "z_dziecmi")] += $_SESSION['time_step']; // dodaj jednostkę czasu do zajętości nauczyciela } } for ($d=0; $d<5; $d++) if (isset($this->ma_zajec[$d]) and isset($this->w_pracy[$d])) $this->ma_zajec[$d][0] = $this->w_pracy[$d]["minut_pracy"] - $this->ma_zajec[$d][1]; // ilość pracy bez dzieci = łączna ilość pracy w dniu - praca z dziećmi } function czy_pracuje($dz, $hf,$mf,$ht,$mt) { // sprawdz, czy w tej jednostce nauczyciel jest w pracy log_me("czy_pracuje","START => ".$dz."/".$hf.",".$mf.",".$ht.",".$mt); if ($hf=="" or $mf=="" or $ht=="" or $mt=="") return TRUE; if (!isset($this->w_pracy)) return FALSE; // nie ma wpisu o pracy //$dza = toarr($dz); // toarr jest w funcs.php => tu niedostępne if (is_array($dz)) $dza = $dz; else $dza = array($dz); foreach ($dza as $dzien) { if (!isset($this->w_pracy[$dzien])) return FALSE; $t = $this->w_pracy[$dzien]; //log_val("dzien=$dzien t",$t); //log_val($this->nazwisko." pracuje w ".$dzien, $t); if ($hf < $t[0][0] or $ht > $t[1][0]) { return FALSE; } if ($hf == $t[0][0] and $mf < $t[0][1]) return FALSE; if ($ht == $t[1][0] and $mt > $t[0][1]) return FALSE; } //log_me("czy_pracuje","TAK"); return TRUE; } function czy_zajety($dz,$hf,$mf,$ht,$mt, $gru) { //log_me($this->nazwisko." -> czy_zajety", $dz."/".$hf.",".$mf.",".$ht.",".$mt.",gru=".$gru); // sprawdź, czy nauczyciel ma w tym czasie jakieś zajęcia w grupie innej od wskazanej $pla = unserialize($_SESSION['pla']); // $msg = ''; // wiadomość dla użytkownika o zajętości nauczyciela foreach ($pla as $p => $v) { $j = $pla[$p]; if ($j->nau <> $this->id) continue; // to nie wpis w planie dla tego nauczyciela $dz = toarr($dz); if ($j->dz <> $dz[0]) continue; // to nie ten dzień if ($j->gru == $gru) continue; // to grupa, w której może być zajęty (czyli ta; wpisy w aktualnej grupie będę nadpisywane) //log_val("j",$j); //log_me("nau->czy_zajety", "ten dz"); if (time_overlap($j->h,$j->m, $hf,$mf,$ht,$mt)) { // nauczyciel jest zajęty w tym czasie $_SESSION['nau_zajety_przez_pla'] = $p; /* --- przeniesione do "select_nau" $_SESSION['nau_message'] .= ''.$this->osoba.' ma w tym czasie '.get_class_val("prz", $j->prz, "nazwa").''; if ($j->gru<>"") $_SESSION['nau_message'] .= ' z grupą '.get_class_val("gru", $j->gru, "nazwa").''; $_SESSION['nau_message'] .= '.
'; */ return TRUE; } } //log_val(''," wolny"); return FALSE; } function czy_dostepny($dz,$hf,$mf,$ht,$mt) { if (!$this->czy_pracuje($dz, $hf,$mf,$ht,$mt)) return FALSE; /* $pla = unserialize($_SESSION['pla']); for ($p=0; $pdz == $dz) { } } */ return TRUE; } } class przedmiot { function __construct($prz_l) { $prz_r = explode("|", $prz_l); // row $this->id = $prz_r[0]; $this->nazwa = $prz_r[1]; $this->z_dziecmi = 1-$prz_r[2]; // w pliku przedmioty.txt jest "bez dzieci?" } function addSale($prz_sal) { //log_me("addSale"," count(prz_sal) = ".count($prz_sal)); for ($s=0; $sid) { // czy to ID tego przedmiotu? $this->w_salach = explode(",", $ps[1]); // ... dodaj sale, w których może być uczony //log_me("addSale",$this->id." => ".$this->w_salach); } } } } class sala { function __construct($r) { $this->id = $r['sal_id']; $this->nazwa = $r['sal_nazwa']; /* $sal_r = explode("|", $sal_l); // row $this->id = $sal_r[0]; $this->nazwa = $sal_r[1]; */ } function czy_zajeta($dz,$hf,$mf,$ht,$mt, $gru) { log_me($this->nazwa." -> czy_zajeta", $dz."/".$hf.",".$mf.",".$ht.",".$mt); // sprawdź, czy sala jest w tym czasie zajęta przez inną grupę $pla = unserialize($_SESSION['pla']); foreach ($pla as $p => $v) { $j = $pla[$p]; if ($j->sal <> $this->id) continue; // to nie wpis w planie dotyczący tej sali $dz = toarr($dz); if ($j->dz <> $dz[0]) continue; // to nie ten dzień if ($j->gru == $gru) continue; // to grupa, w której może być zajęty (czyli ta; wpisy w aktualnej grupie będę nadpisywane) //log_val("j",$j); //log_me("nau->czy_zajety", "ten dz"); if (time_overlap($j->h,$j->m, $hf,$mf,$ht,$mt)) { // sala jest zajęta w tym czasie $_SESSION['sal_zajeta_przez_pla'] = $p; /* --- przeniesione do select_sal $_SESSION['sal_message'] .= ''.$this->nazwa.' jest w tym czasie zajęta przez nauczyciela '.get_class_val("nau", $j->nau, "osoba").''; $_SESSION['sal_message'] .= ' ('.get_class_val("prz", $j->prz, "nazwa").''; if ($j->gru<>"") $_SESSION['sal_message'] .= ' z grupą '.get_class_val("gru", $j->gru, "nazwa").''; // if ($j->gru<>"") // $_SESSION['nau_message'] .= ' z grupą '.get_class_val("gru", $j->gru, "nazwa").''; $_SESSION['sal_message'] .= ').
'; */ return TRUE; } } return FALSE; } } class grupa { function __construct($gru_l) { $gru_r = explode("|", $gru_l); $this->id = $gru_r[0]; $this->nazwa = $gru_r[1]; } } ?> $val) { $log .= "\n$key: $val"; } return $log; } function arr2tel($arr, $arr_name="--") { $log = "## $arr_name:"; foreach ($arr as $key => $val) { $log .= "\n$key: $val"; } return $log; } function info($msg) { echo ''.$msg.''; } function warn($msg) { echo ''.$msg.''; } function err($msg) { echo ''.$msg.''; } function log_me($where,$log) { $logdir = "/var/www/html/plo/wegplan/log"; $logfile = date("Y-m-d").".log_db"; if (isset($_SESSION['szk_id'])) $logfile = $_SESSION['szk_id']."_".$_SESSION['uzy_id']."#".$_SESSION['uzy_mail']."#".$logfile; $logfile = $logdir."/".$logfile; if (!file_exists($logfile)) { file_put_contents($logfile, ""); // utworzenie pustego pliku $mode = 666; chmod($logfile, octdec($mode)); // zmiana uprawnień } file_put_contents($logfile, date("Y-m-d H:i:s")." |".$where." |".$log."\n", FILE_APPEND); } function telme($msg, $send_to="J", $p_unit="") { $unit = "telme"; $J="408888187"; // mój CHAT_ID $K="1274354082"; // CHAT_ID Kasi if ($send_to=="J") { $komu="$J"; } elseif ($send_to=="K") { $komu="$K"; } else { $komu="$J $K"; } log_me("telme [$p_unit]", $msg); // $msg = str_replace("<", "<", $msg); //log_me($unit, "Zaraz 'shell_exec'"); shell_exec('/home/jacek/bin/telegram.sh "'.$msg.'" 1>/home/jacek/bin/telme.err 2>&1 &'); // shell_exec('/home/jacek/bin/telegram.sh "'.$msg.'" 1>/home/jacek/bin/telme.err 2>>/home/jacek/bin/telme.err2'); //log_me($unit, "Po 'shell_exec'"); return 0; } function telnau($msg, $nau_chatID, $unit="") { log_me("telnau $nau_chatID [$unit]", $msg); shell_exec('/home/jacek/bin/telegram.sh "'.$msg.'" '.$nau_chatID.' 1>/home/jacek/bin/telme.err 2>&1 &'); return 0; } function ts_info($p_text="", $flags="") { $zegary = array("🕛"/*12:00*/, "🕐"/*13:00*/, "🕑", "🕒", "🕓", "🕔", "🕕", "🕖", "🕗", "🕘", "🕙", "🕚", "🕧"/*12:30*/, "🕜"/*13:30*/, "🕝", "🕞", "🕟", "🕠", "🕡", "🕢", "🕣", "🕤", "🕥", "🕦"); $czas = date('H:i:s'); $t = explode(":", $czas); $h = $t[0]; $m = $t[1]; if ($m>45) { $h++; $m=0; } elseif ($m>20) { $m=1; } else $m=0; $h %= 12; $czas = $zegary[$h+12*$m].$czas; if (isFlag('[100%]',$flags)) return $p_text.$czas; return ''.$p_text.$czas.''; } function gen_ts_info($txt="") { if ($txt=="") return ts_info("Wygenerowano "); return ts_info($txt); } function elapsed($t_start, $t_end="", $round=2) { global $em_klepsydra_end; if ($t_end=="") dajt($t_end); $secs = $t_end - $t_start; if ($secs >= 5) $round = 1; elseif ($secs >= 15) $round = 0; return "$em_klepsydra_end".round(($secs), $round); } function refresh_icon($onclick) { global $em_refresh; return ''.$em_refresh.' '; } /*****/ function is_sess_expired($unit="", $info_type="html", $telme="y") { if (!isset($_SESSION['szk_id'])) { telme(userInfo()."\n".execFunc($unit)." Sesja wygasła."); //echo ''; if ($info_type == "html") return array("is" => 1 ,"msg" => '
UWAGA: Sesja wygasła => proszę zalogować się ponownie.
' ,"alert" => "Niestety sesja wygasła.\n==> Proszę zalogować się ponownie."); else return array("is" =>1 ,"msg" => 'UWAGA: Sesja wygasła => proszę zalogować się ponownie.' ,"alert" => "Niestety sesja wygasła.\n==> Proszę zalogować się ponownie."); } else return array("is"=>0, "msg"=>""); } function no_pla_sel($unit="", $info_type="html", $telme="y") { if (!isset($_SESSION['pla_id']) or $_SESSION['pla_id']=="") { if ($info_type == "html") return array("no"=>1, "msg"=>'
UWAGA: Nie wybrano planu => proszę go wybrać.
'); else return array("no"=>1, "msg"=>'UWAGA: Nie wybrano planu => proszę go wybrać.'); telme(userInfo()."\n".execFunc($unit)."\nNie wybrano planu."); } else return array("no"=>0, "msg"=>""); } /********/ function toPrint($p_print = "", $p_type = "unkn") { $unit = "toPrint"; if ($p_print === "") { unset($_SESSION['toPrint']); return; } //log_val("$unit _SESSION[toPrint]", $_SESSION['toPrint']); try { if (isset($_SESSION['toPrint'])) { // coś już było wybrane do druku log_val($unit, $_SESSION['toPrint']); if (in_array($p_type, array("plan","h"))) // czy to typ "pojedynczych" wydruków? $_SESSION['toPrint'][$p_type] = $p_print; else $_SESSION['toPrint'][$p_type][] = $p_print; } else $_SESSION['toPrint'] = array($p_type => $p_print); log_me("toPrint", $p_print." ".$p_type); } catch (Exception $e) { //catch (Throwable $e) { log_me($unit, 'ERROR: '.$e->getMessage(). ' in '.$e->getFile(). ':'.$e->getLine() ); } } /********/ function cache_if_needed($obj, $obj_id, &$cache, $css="", $flags="", $class="", $tip="") { if (!isset($cache[$obj_id])) { $cache[$obj_id] = show_nau($obj_id, "td", $tip, $css, $flags, "", $class); } } /* function get_cached($obj_id, &$cache) { if (!isset($cache[$obj_id])) { $cache[$obj_id] = db_get_teacher($obj_id); } } */ /********/ function nau_repl($nau) { $nau = str_replace("Grossmann-Szczepaniec","Grossmann-Szczep.", $nau); $nau = str_replace("Sebastian","Seba", $nau); $nau = str_replace("Agnieszka","Aga", $nau); $nau = str_replace("Joanna","Asia", $nau); $nau = str_replace("Małgorzata","Gosia", $nau); $nau = str_replace("Aleksandra","Ola", $nau); $nau = str_replace("Małgosia","Gosia", $nau); $nau = str_replace("Gabriela","Gabi", $nau); $nau = str_replace("Gabrysia","Gabi", $nau); $nau = str_replace("Patrycja","Pati", $nau); $nau = str_replace("Bartłomiej","Bartek", $nau); $nau = str_replace("Katarzyna","Kasia", $nau); $nau = str_replace("Radosław","Radek", $nau); return $nau; } function gru_repl($gru) { $gru = str_replace("Klasa ","Kl. ", $gru); $gru = str_replace("popołudniowa","popołudn.", $gru); return $gru; } function prz_repl($prz) { $prz = str_replace("popołudniowa","popołud.", $prz); $prz = str_replace("Godzina wychowawcza","Godz. wychow.", $prz); $prz = str_replace("Godzina Wychowawcza","Godz. wychow.", $prz); $prz = str_replace("Kwadrans wychowawczy","Kwadr. wychow.", $prz); $prz = str_replace("Kwadrans Wychowawczy","Kwadr. wychow.", $prz); $prz = str_replace("wychowawczy","wychow.", $prz); $prz = str_replace("ęzyku",".", $prz); $prz = str_replace("ęzyk",".", $prz); $prz = str_replace("angielski","ang.", $prz); $prz = str_replace("angielskim","ang.", $prz); $prz = str_replace("hiszpański","hiszp.", $prz); $prz = str_replace("hiszpańskim","hiszp.", $prz); $prz = str_replace("Toaleta","WC", $prz); $prz = str_replace("muzyczna","muz.", $prz); $prz = str_replace("Wychowanie Fizyczne","W-F", $prz); $prz = str_replace("Wychowanie fizyczne","W-F", $prz); $prz = str_replace("spomaganie","spom.", $prz); $prz = str_replace("dukacja","duk.", $prz); $prz = str_replace("niadaniowa","niadan.", $prz); $prz = str_replace("wczesnoszkolna","wczesnoszk.", $prz); $prz = str_replace("Wiedza O Społeczeństwie","WOS", $prz); // $prz = str_replace("Świetlica","Świetl.", $prz); $prz = str_replace("kompensacyjne","kompens.", $prz); $prz = str_replace("korekcyjno","korekc.", $prz); $prz = str_replace("onsultacje","onsult.", $prz); $prz = str_replace("ortograficzne","ortograf.", $prz); $prz = str_replace("akończenie","akończ.", $prz); $prz = str_replace("rzyrodnicza","rzyrod.", $prz); $prz = str_replace("atematyczna","atemat.", $prz); $prz = str_replace("olonistyczna","olonist.", $prz); $prz = str_replace("nformatyczna","nformat.", $prz); $prz = str_replace("ajęcia z wychowawcą","aj. z wychowaw.", $prz); // $prz = str_replace("ożegnanie","ożegn.", $prz); $prz = str_replace("odwieczorek","odwiecz.", $prz); $prz = str_replace("dydaktyczne","dydakt.", $prz); $prz = str_replace("kompensacyjne","kompensac.", $prz); return $prz; } function sal_repl($sal) { $sal = str_replace("Sala ","", $sal); $sal = str_replace("sala ","", $sal); $sal = str_replace("psychomotoryczna","psychomot.", $sal); $sal = str_replace("gimnastyczna","gimnast.", $sal); $sal = str_replace("informatyczna","informat.", $sal); return $sal; } /********/ function is_uzy() { if (isset($_SESSION['uzy_id'])) return (TRUE); return (FALSE); } function is_uzy_status($status) { if (isset($_SESSION['uzy_status']) and $_SESSION['uzy_status']==$status) return (TRUE); return (FALSE); } function szkInfo($p_szk_id="", $p_len=4) { global $em_placowka; if ($p_szk_id == "") return "$em_placowka".mb_substr($_SESSION['szk_nazwa'],0,$p_len)."(".$_SESSION['szk_id'].")"; else return "$em_placowka".mb_substr(get_class_val("szk",$p_szk_id,"nazwa"),0,$p_len)."(".$p_szk_id.")"; } function userInfo($szk_id="") { global $em_placowka, $em_rybkaTropikalna, $em_zegarekNaReke; $IP = ""; $tst = FALSE; if (isset($_SESSION['nvp'])) { if (strpos($_SESSION['nvp'], "files_t") !== FALSE) { $tst = TRUE; } } if (isset($_SERVER['REMOTE_ADDR'])) $IP = "[".$_SERVER['REMOTE_ADDR']."]"; $czas = ""; if (!$tst) $czas = "$em_zegarekNaReke".':'.date('i:s'); $tst_icon = ""; if ($tst) { $tst_icon = "$em_rybkaTropikalna "; } if (isset($_SESSION['uzy_mail'])) { // return "\xF0\x9F\x91\xA9 ".str_replace('@wegielek.edu.pl','',$_SESSION['uzy_mail'])."(".$_SESSION['uzy_id'].") $em_placowka".mb_substr($_SESSION['szk_nazwa'],0,3)."(".$_SESSION['szk_id'].") ".$IP." ".$czas; $uzy_mail = $_SESSION['uzy_mail']; if (strpos($uzy_mail, "@wegielek.edu.pl") !== FALSE || strpos($uzy_mail, "@zar.edu.pl") !== FALSE || strpos($uzy_mail, "adm_") !== FALSE) $IP = ""; $uzy_mail = str_replace('@wegielek.edu.pl','@w',$uzy_mail); $uzy_mail = str_replace('@zar.edu.pl','@z',$uzy_mail); return $tst_icon." ".$uzy_mail."(".$_SESSION['uzy_id'].")"." ".szkInfo()." ".$IP." ".$czas; // " $em_placowka".mb_substr($_SESSION['szk_nazwa'],0,4)."(".$_SESSION['szk_id'].") ".$IP." ".$czas; } else { $szk_nazwa = ""; if ($szk_id <> "") { $szk_nazwa = szkInfo($szk_id); //$szk_nazwa = get_class_val("szk", $szk_id, "nazwa"); //$szk_nazwa = "$em_placowka".mb_substr($szk_nazwa,0,4)."($szk_id)"; } return "\xF0\x9F\x9A\x80 CRON ".$szk_nazwa." ".$IP." ".$czas; } } function execFunc($func,$dscr="") { if (isset($_SESSION['sp'])) $sp = ",".$_SESSION['sp']; else $sp = ""; $out = "\xE2\x9A\xA1[".$func."".$sp."]"; if ($dscr <> "") { $out.= "=".$dscr.""; } return $out; } function sex10($val1, $val0, $plec) { // 21-09-2024 if ($plec == 0) return $val0; return $val1; } function isFlag($flag, $flags) { if (strpos($flags, $flag)!==FALSE) return TRUE; else return FALSE; return FALSE; } function zahWaga2show($waga) { $waga = str_replace(".00", "", $waga); $waga = str_replace(".50", ".5", $waga); $waga = str_replace("0.5", ".5", $waga); $waga = str_replace("0.25", ".25", $waga); return $waga; } /********/ function get_class_val($type, $id, $atr="nazwa", $flags="") { // zwraca wartość atrybutu z klasy danego typu o danym id // (np. nazwisko nauczyciela o danym ID) // 2024-11-19: cache-uje dane w tabeli globalnej i czyta z niej, jeśli już tam są $unit = "get_class_val"; global $cache; global $em_grupa, $em_sala; if ($id=="") return ""; $f_repl = isFlag("[repl]", $flags); $f_icon = isFlag("[icon]", $flags); $icon_cache = $f_icon ? "_icon":""; if (isset($cache[$type][$id][$atr."_".$icon_cache])) { // 2024-11-19 // log_me("get_class_val", "$type=$id, $atr $flags CACHEd"); return $cache[$type][$id][$atr."_".$icon_cache]; } // log_me("get_class_val", "$type=$id, $atr $flags NOT CACHED"); $icon = ""; // domyślnie bez ikony $sql = "SELECT ".$type."_".$atr." FROM "; switch ($type) { case "nau": $sql.= "v_nauczyciele_os2"; break; case "gru": $sql.= "grupy"; $icon = $em_grupa; break; case "prz": $sql.= "przedmioty"; break; case "sal": $sql.= "sale"; $icon = $em_sala; break; case "szk": $sql.= "szkoly"; break; default: return '#BŁĘDNY TYP '.$type.'#'; } $sql.= " WHERE ".$type."_id=".$id; $q = doSQL($sql, $unit, "[]"); if (!$q) { telme_dbErr($unit, "", $sql); return "## SQL error ##"; } $v = mysql_fetch_array($q); $val = $v[0]; if ($f_repl) { // 2025-11-10 switch ($type) { case "nau": $val = nau_repl($val); break; case "gru": $val = gru_repl($val); break; case "prz": $val = prz_repl($val); break; case "sal": $val = sal_repl($val); break; // case "szk": $val = nau_repl($val); break; default: return '#BŁĘDNY TYP#'; } } // if (jacek()) $val.= '/'.$id; // 2025-12-09 $cache[$type][$id][$atr."_".$icon_cache] = $val; // 2024-11-19 if ($f_icon) { $val = $icon.$val; log_me($unit, "f_icon => val=".$val); } return $val.""; } /********/ function toarr($v) { if (is_array($v)) return $v; return array($v); } /********/ function getPos($arr, $id) { for ($g=0; $gid == $id) return $g; } function log_val($name,$val, $l=0) { ob_start(); var_dump($val); $v = ob_get_clean(); log_me($name, trim($v)); } function telme_i($opis, $wartosc, $style="", $flags="") { $nl = "\n"; if (isFlag("[nnl]", $flags)) $nl = ""; $inf = $nl.''.$opis.' '; $val = $wartosc; if (strpos($style,"")!==FALSE) $val = ''.$val.''; if (strpos($style,"")!==FALSE) $val = ''.$val.''; if (strpos($style,"")!==FALSE) $val = ''.$val.''; if (strpos($style,"")!==FALSE) $val = ''.$val.''; $inf.= $val; return $inf; } /********/ function msc($num, $deklin=1) { switch ($deklin) { case 1: switch ($num) { case 1: return 'styczeń'; case 2: return 'luty'; case 3: return 'marzec'; case 4: return 'kwiecień'; case 5: return 'maj'; case 6: return 'czerwiec'; case 7: return 'lipiec'; case 8: return 'sierpień'; case 9: return 'wrzesień'; case 10: return 'październik'; case 11: return 'listopad'; case 12: return 'grudzień'; default: return 'zły m-c '."[$num]"; } case 2: switch ($num) { case 1: return 'stycznia'; case 2: return 'lutego'; case 3: return 'marca'; case 4: return 'kwietnia'; case 5: return 'maja'; case 6: return 'czerwca'; case 7: return 'lipca'; case 8: return 'sierpnia'; case 9: return 'września'; case 10: return 'października'; case 11: return 'listopada'; case 12: return 'grudnia'; default: return 'zły m-c '."[$num]"; } } return '#zły parametr DEKLIN ['.$deklin."]#"; } function j_round($val, $precision=3) { if ($val <> "") { return round($val, $precision); } return ""; } function dzien_tyg($num, $flags="[]") { $ret = ""; switch ($num) { case 0: $ret = 'pon'; break; case 1: $ret = 'wto'; break; case 2: $ret = 'śro'; break; case 3: $ret = 'czw'; break; case 4: $ret = 'pią'; break; case 5: $ret = 'sob'; break; case 6: $ret = 'nie'; break; default: return "{[zły nr dnia: $num]}"; } if (isFlag("[css]", $flags)) { $ret = ''.$ret.''; } if (isFlag("[kiedy]", $flags)) { if ($num == 1) $ret = "we ".$ret; else $ret = "w ".$ret; } return $ret; } function dayOfWeek($num) { $num = ($num + 7) % 7; switch ($num) { case 0: return 'poniedziałek'; case 1: return 'wtorek'; case 2: return 'środę'; case 3: return 'czwartek'; case 4: return 'piątek'; case 5: return 'sobotę'; case 6: return 'niedzielę'; } return '{[nieznany dzień $num]}'; } function dzienKiedy($num) { $num = ($num + 7) % 7; switch ($num) { case 0: return 'w poniedziałek'; case 1: return 'we wtorek'; case 2: return 'w środę'; case 3: return 'w czwartek'; case 4: return 'w piątek'; case 5: return 'w sobotę'; case 6: return 'w niedzielę'; } return '{[nieznany dzień $num]}'; } function dzienTygodnia($num) { switch ($num) { case 0: return 'Poniedziałek'; case 1: return 'Wtorek'; case 2: return 'Środa'; case 3: return 'Czwartek'; case 4: return 'Piątek'; case 5: return 'Sobota'; case 6: return 'Niedziela'; } return '{[nieznany dzień $num]}'; } function zz($v) { if ($v<10 and $v>=0 and strlen($v)<2) return "0".$v; return $v; } function tzz($t) { // time zz // zamienia H:MM na 0H:MM if (strlen($t)==4) return "0".$t; return $t; } function bz($v) { return (int)$v; } function b_ss00($czas) { if (strlen($czas) <=5) return $czas; return preg_replace("#\:00$#","", $czas); } function losuj($arr) { $ile_elem = count($arr); $rnd = rand(0, $ile_elem-1); return $arr[$rnd]; } /**************************************************************************************************/ function is_in($what, $in) { foreach($in as $i) { if ($what==$i) return TRUE; } return FALSE; } function addGET($get) { if (isset($_GET[$get])) return "&".$get."=".$_GET[$get]; return ""; } function minut($ile) { $e = $ile % 10; if ($e==0 or $e==1 or $e>4 or $ile>9 and $ile<15) $o = 'minut'; else $o = 'minuty'; return $o; } function show_Tip($val) { $val = str_replace("<","<", $val); $val = str_replace(">",">", $val); $val = str_replace("\"",""", $val); return ' doTooltip(event, \'<div class="tip">'.$val.'</div>\'); '; } function do_Tip($val, $aux_over="", $aux_out="") { $val = str_replace("<","<", $val); $val = str_replace(">",">", $val); $val = str_replace("\"",""", $val); $a_over = $aux_over; if ($a_over <> "") $a_over.= ";"; $a_out = $aux_out; if ($a_out <> "") $a_out.= ";"; $ret = ' onmouseover="'.$a_over.' doTooltip(event, \'<div class="tip">'.$val.'</div>\')"'; $ret.= ' onmouseout="'.$a_out.' hideTip()"'; return $ret; } function doSQL($sql, $func="", $flags="") { $unit = "doSQL"; //log_me($unit, "START: flags=$flags"); $f_logTime = isFlag("[t]", $flags); if ($f_logTime) dajt($t_qry_start); $q = mysql_query($sql); if ($f_logTime) dajt($t_qry_end); if (!$q) { log_me($func, "### ERROR: ".mysql_error()."\n [SQL] ".$sql); $sql = str_replace("<","<", $sql); telme_dbErr($func, "", $sql); } if ($f_logTime) { $trwalo = elapsed($t_qry_start, $t_qry_end, 5); //log_me($unit, "Powinno być ELAPSED: $trwalo"); $info = $trwalo; if (!isFlag("[noSQL]", $flags)) { $sql = str_replace("<","<", $sql); $info.= " \n$sql"; } //log_me($unit, "Zaraz 'telme'."); telme(userInfo()."\n".execFunc($func."/SQL")." $info"); } return $q; } /************************************************/ function select_dni($flags="", $nau_id="") { $unit = "select_dni"; $sel_dni = ''; $dni_sel = array(); $dni_mem = array(); if (strpos($flags, "[L4]")!==FALSE) $f_L4 = TRUE; else $f_L4 = FALSE; if (strpos($flags, "[db]")!==FALSE) $f_db = TRUE; else $f_db = FALSE; $sess_exp = is_sess_expired($unit, "html", "y"); if ($sess_exp['is'] == 1) { return $sess_exp['msg']; } if ($f_L4) { $sql = "SELECT f_jest_subs('dz', na4_dzien, '".$nau_id."', ".$_SESSION['szk_id'].") AS subs_mem, na4_dzien, count(*) AS ile FROM nauczyciele_L4 WHERE na4_szk_id=".$_SESSION['szk_id']." GROUP BY na4_dzien"; $q = doSQL($sql, "select_dni"); if (!$q) { // log_me("select_dni", "### ERROR: ".mysql_error()." [SQL] ".$sql); return ''; } while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { $dni_sel[] = $r['na4_dzien']; } } if ($f_db) { if ($nau_id<>"") $sql = "SELECT zas_dzien, count(*) AS ile FROM zastepstwa WHERE zas_za_nau_id=".$nau_id." AND zas_szk_id=".$_SESSION['szk_id']." GROUP BY zas_dzien"; else $sql = "SELECT zas_dzien, count(*) AS ile FROM zastepstwa WHERE zas_szk_id=".$_SESSION['szk_id']." GROUP BY zas_dzien"; $q = doSQL($sql, "select_dni"); // $q = mysql_query($sql); if (!$q) { // log_me("select_dni", "### ERROR: ".mysql_error()." [SQL] ".$sql); return ''; } while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { $dni_mem[] = $r['zas_dzien']; } } for ($d=0; $d<5; $d++) { if ($f_L4 and in_array($d, $dni_sel)) $sel_dni .= ''; elseif ($f_db and in_array($d, $dni_mem)) $sel_dni .= ''; else $sel_dni .= ''; } return $sel_dni; } function select_h($flags="", $range=array()) { $range = array_merge((array)$range, array("day"=>0, "from"=>'', "to"=>'')); $sql = "SELECT szg_od, szg_do FROM szkoly_godziny WHERE szg_szk_id=".$_SESSION['szk_id']." AND szg_dzien=".$range["day"]; $q = doSQL($sql,"select_h"); if (!$q) { // log_me("select_h", "### ERROR: ".mysql_error()." [SQL] ".$sql); return ''; } $r = mysql_fetch_array($q, MYSQL_ASSOC); $f = explode(":", $r['szg_od']); $f = $f[0]; $t = explode(":", $r['szg_do']); $t = $t[0]; $sel_h = ''; for ($h=$f; $h<=$t; $h++) { $sel_h .= ''; } if (strpos($flags, "[null]")!==FALSE) $sel_h = ''.$sel_h; return $sel_h; } function select_m($f=0, $t=59) { $sel_m = ''; for ($m=$f; $m<=$t; $m+=$_SESSION['time_step']) { $sel_m .= ''; } return $sel_m; } function get_select_grn($val=-1) { //log_me("get_select_grn", "val=".$val); $o = ''; //log_me("get_select_grn", "o=".$o); return $o; } function selTime2minutes($time /*array(dz,hf,mf,ht,mt)*/) { $unit = "selTime2minutes"; $dz = $time[0]; $hf = $time[1]; $mf = $time[2]; $ht = $time[3]; $mt = $time[4]; $ret = $ht*60 + $mt - ($hf*60 + $mf); log_me($unit,$dz.",".$hf.",".$mf.",".$ht.",".$mt." => ret=".$ret); return $ret; } function select_nau($time=array('','','','',''), $prz_id="", $gru_id="", $flags="", $without="", $sel="") { // wybiera nauczycieli dostępnych w danym czasie i którzy uczą danego przemiotu $unit = "select_nau"; dajt($t_start); $dz = $time[0]; $hf = $time[1]; $mf = $time[2]; $ht = $time[3]; $mt = $time[4]; log_me($unit,$dz.",".$hf.",".$mf.",".$ht.",".$mt.",prz=".$prz_id.",gru=".$gru_id.", flags=".$flags.", without=".$without); // $without = ",".$without.","; $f_select = isFlag("[select]", $flags); // 'select' jest stare $f_busy = isFlag("[busy]", $flags); // zamiast 'select' $f_L4 = isFlag("[L4]", $flags); $f_db = isFlag("[db]", $flags); $f_ilepl = isFlag("[ilepl]", $flags); // czy pokazać, ile pozycji na planie mają nauczyciele $f_null = isFlag("[null]", $flags); $f_no_gna = isFlag("[no_gna]", $flags); // czy pokazać, w której grupie nauczycieli jest każdy nauczyciel $f_short = isFlag("[short]", $flags); // czy imiona nauczycieli mają być skrócone (zdrobniałe) $f_za_duzo_zDz = isFlag("[za_duzo_zDz]", $flags); // czy oznaczać nauczycieli, którzy mają już za dużo zajęć z dziećmi? $_SESSION['nau_message'] = ''; // zeruj informacje o zajętości nauczycieli if ($f_select and ($dz=="" or $hf=="" or $mf=="" or $ht=="" or $mt=="")) return ''; $naul = array(); // do zapamiętania nauczycieli, którzy później będą w '; */ $gna_curr=""; // $sql = "SELECT f_jest_subs('nau', n.nau_id, '".$time[0]."', ".$_SESSION['szk_id'].") AS subs_mem, n.*, concat(nau_nazwisko,' ',nau_imie) as nau_osoba, f_nau_is_onL4(n.nau_id, nau_szk_id) AS nau_naL4 "; $sql = "SELECT f_jest_subs('nau', n.nau_id, '".$time[0]."', ".$_SESSION['szk_id'].") AS subs_mem, n.*, nau_osoba, f_nau_is_onL4(n.nau_id, nau_szk_id) AS nau_naL4 "; if ($f_select or $f_busy) $sql.= " , f_nau_jestWolny(".getPlan().", n.nau_id, '".nvl($dni,'NULL')."',".nvl($hf,'NULL').",".nvl($mf,'NULL').",".nvl($ht,'NULL').",".nvl($mt,'NULL').",".nvl($gru_id,'null').") AS nau_jest_wolny"; else $sql.= " , 1 AS nau_jest_wolny"; if ($f_za_duzo_zDz) { $sql.= " , ran.ran_Etat,st3.razem_23"; $sql.= ", f_nau_zDz_limit(ran.ran_Etat, COALESCE(nau_pensum,".$_SESSION['cfg']['max_zDz_fullTime'].")) AS limit_zDz"; // $sql.= ", f_nau_za_duzo_zDz(ran.ran_Etat, st3.razem_23, ".selTime2minutes($time).", COALESCE(nau_pensum,".$_SESSION['cfg']['max_zDz_fullTime']."), ".($prz_id=="" ? "null":$prz_id).", ".$_SESSION['szk_id'].") AS nau_za_duzo_zDz"; $sql.= ", f_nau_za_duzo_zDz(ran.ran_Etat, st3.razem_23, ".(selTime2minutes($time) * sizeof($dz)).", COALESCE(nau_pensum,".$_SESSION['cfg']['max_zDz_fullTime']."), ".($prz_id=="" ? "null":$prz_id).", ".$_SESSION['szk_id'].") AS nau_za_duzo_zDz"; } log_me($unit, 'sizeof($dz) = '.sizeof($dz)); log_val($unit, $dz); if ($f_ilepl) $sql.= ", f_ile_pl(nau_szk_id, ".getPlan().", 'nau', n.nau_id) AS ile_pl"; if (!$f_no_gna) $sql.= ", grn_nazwa"; $sql.= " FROM v_nauczyciele n"; if ($f_za_duzo_zDz) { $sql.= " LEFT JOIN v_nau_stat3 st3 ON st3.szk_id = ".$_SESSION['szk_id']." AND st3.nau_id = n.nau_id AND st3.pl_pla_id = ".getPlan().""; $sql.= " LEFT JOIN razem_new ran ON ran.ran_szk_id = ".$_SESSION['szk_id']." AND ran.ran_nau_id = n.nau_id AND ran.ran_pla_id = ".getPlan().""; } if (!$f_no_gna) $sql.= " LEFT JOIN nau_gna ON n.nau_id=ngn_nau_id LEFT JOIN grupy_nauczycieli ON grn_id=ngn_gna_id"; $sql.= " WHERE nau_szk_id=".$_SESSION['szk_id']; //if ($f_no_gna) // $sql.= " AND CONCAT(',',w_grupach,',') LIKE '%,".$rg['grn_id'].",%'"; if ($without<>"") $sql.= " AND nau_id NOT IN (".$without.")"; if ($f_select or $f_busy) { $sql.= " AND (f_prz_mozeUczyc_nau('".$prz_id."', n.nau_id, ".$_SESSION['szk_id'].")=1 OR '".$prz_id."'='')"; $sql.= " AND f_nau_pracuje(".$_SESSION['szk_id'].",".getPlan().", n.nau_id, '".nvl($dni,'NULL')."',".nvl($hf,'NULL').",".nvl($mf,'NULL').",".nvl($ht,'NULL').",".nvl($mt,'NULL').")=1"; } if (isset($_SESSION['mode'])) switch ($_SESSION['mode']) { case 1: $sql.= " AND nau_f_ppp IN (0,2)\n"; break; case 2: $sql.= " AND nau_f_ppp IN (1,2)\n"; break; } # $sql.= " ORDER BY nau_jest_wolny DESC, (case when length(w_grupach)=1 then 0 else 1 end), w_grupach, nau_imie,nau_nazwisko"; $sql.= " ORDER BY "; if (!$f_no_gna) $sql.= "ISNULL(grn_nazwa),grn_nazwa, "; // $sql.= "nau_jest_wolny DESC, nau_nazwisko,nau_imie"; $sql.= "nau_jest_wolny DESC, nau_osoba_sort"; $q = doSQL($sql,"select_nau", "[]"); //log_me("select_nau list", "[SQL] ".$sql); if (!$q) { // log_me($unit." list", "### ERROR: ".mysql_error()." [SQL] ".$sql); return ''; } $ktos_zajety = FALSE; if ($f_null) $o.= ''; $is_gna = FALSE; // czy pokazano już pierwszą grupę while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { //log_me("select_nau", $r['nau_nazwisko']); if (!$f_no_gna) { if ($gna_curr<>$r['grn_nazwa']) { if ($is_gna) $o.= ''; $gna_curr = $r['grn_nazwa']; if ($gna_curr=="") // pusta grupa => teraz są nauczyciele nie przypisani do żadnej grupy $o.= ''; else $o.= ''; } $is_gna = TRUE; } if ($f_L4 and $r['nau_naL4']>0) // nauczyciel jest jakiegoś dnia na L4 $o.= ''; elseif ($f_db and $r['subs_mem']>0) $o.= ''; elseif ($r['nau_jest_wolny']==1 and isset($r['nau_za_duzo_zDz']) and $r['nau_za_duzo_zDz']>0) { // nauczyciel ma za dużo zajęć z dziećmi $o.= ''; log_me($unit, $r['nau_osoba'].":: Etat = [".$r['ran_Etat']."]"); log_me($unit, "z_dz2 = [".$r['z_dz2']."]"); log_me($unit, "limit_zDz = [".$r['limit_zDz']."]"); log_me($unit, "cfg_max_zDz = [".$_SESSION['cfg']['max_zDz_fullTime']."]"); log_me($unit, "za_duzo_zDz = [".$r['nau_za_duzo_zDz']."]"); } elseif ($r['nau_jest_wolny']==0) { // nauczyciel jest zajęty $ktos_zajety = TRUE; $o.= ''; } else { $o.= ''; } } // } if (!$f_no_gna) $o.= ''; dajt($t_end); $trwalo = elapsed($t_start, $t_end); // telme(userInfo()."\n".execFunc($unit."")." $trwalo"); return $o; } function select_gru($flags="", $arg=array('','','','',''), $sel="") { $tu = "select_gru"; global $em_grupa; // wybiera grupy $dz = $arg[0]; $hf = $arg[1]; $mf = $arg[2]; $ht = $arg[3]; $mt = $arg[4]; log_me($tu,"flags=$flags, arg(".$dz.",".$hf.",".$mf.",".$ht.",".$mt.")"); if (strpos($flags, "[ilepl]")!==FALSE) $f_ilepl = TRUE; else $f_ilepl = FALSE; if (strpos($flags, "[null]")!==FALSE) $f_null = TRUE; else $f_null = FALSE; if (strpos($flags, "[show_ggru]")!==FALSE) $f_show_ggru = TRUE; else $f_show_ggru = FALSE; if (strpos($flags, "[mark_ggru]")!==FALSE) $f_mark_ggru = TRUE; else $f_mark_ggru = FALSE; log_me("flagi: show_ggru=".$f_show_ggru." mark_ggru=".$f_mark_ggru." ilepl=".$f_ilepl, ""); $_SESSION['gru_message'] = ''; // zeruj informacje o zajętości grup $dz = toarr($dz); // ??? to chyba zbedne, bo $dz zawsze jest "array" (przy zakomentowaniu zmienić dalej w kodzie $dz_arr na $dz) $dni = implode(",",$dz); $o = ""; $sql = "SELECT g.*"; // if ($f_select or $f_busy) $sql.= " , f_gru_jestWolna(".getPlan().", gru_id, '".nvl($dni,'NULL')."',".nvl($hf,'NULL').",".nvl($mf,'NULL').",".nvl($ht,'NULL').",".nvl($mt,'NULL').") AS gru_jest_wolna"; // else // $sql.= " , 1 AS gru_jest_wolna"; if ($f_ilepl) $sql.= ", f_ile_pl(gru_szk_id, ".getPlan().", 'gru', gru_id) AS ile_pl"; $sql.= " FROM grupy_v g\n"; $sql.= " WHERE gru_szk_id=".$_SESSION['szk_id']."\n"; if (isset($_SESSION['mode'])) switch ($_SESSION['mode']) { case 1: $sql.= " AND gru_f_ppp='N'\n"; break; case 2: $sql.= " AND gru_f_ppp='T'\n"; break; } $sql.= " ORDER by gru_nazwa"; $q = doSQL($sql,$tu, "[]"); log_me("$tu SQL", $sql); if ($f_null) $o.= ''; $grupa_zajeta = FALSE; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { if ($r['grupuje']==1 and !$f_show_ggru) continue; // nie pokazywać grup grupujących if ($r['grupuje']==1 and $f_mark_ggru) // zaznaczać jakoś grupy grupujące $o.= ''; elseif ($r['gru_jest_wolna']==0) { // grupa jest zajęta $grupa_zajeta = TRUE; $o.= ''; } else { $o.= ''; } } /* // 19.09.2024: przeniesione do SELECT zawierającego grupy if ($_SESSION['cfg']['auto_show_busy']=='T') { // automatycznie pokazywać info o zajętości if ($grupa_zajeta) { log_me($tu, "coś zajęte"); $sql = "SELECT * FROM v_plan "; $sql.= " WHERE f_gru_jestWolna(".getPlan().",gru_id,'".$dni."',".$hf.",".$mf.",".$ht.",".$mt.")=0"; $sql.= " AND pla_id = ".getPlan(); $sql.= " AND CONCAT(',','".$dni."',',') LIKE CONCAT('%,',dzien,',%')"; $sql.= " AND (pl_godzina_od >= MAKETIME(".$hf.",".$mf.",0) AND pl_godzina_od < MAKETIME(".$ht.",".$mt.",0) OR"; $sql.= " pl_godzina_do > MAKETIME(".$hf.",".$mf.",0) AND pl_godzina_do <= MAKETIME(".$ht.",".$mt.",0) OR"; $sql.= " pl_godzina_od < MAKETIME(".$hf.",".$mf.",0) AND pl_godzina_do > MAKETIME(".$ht.",".$mt.",0))"; // $sql.= " AND gru_id <> ".$gru_id; /-* if ($f_busy) $sql.= " AND f_sal_mozeOdbywacSie_prz(sal_id, ".nvl($prz_id,'null').", ".$_SESSION['szk_id'].")=1"; *-/ $sql.= " ORDER BY gru_nazwa, dzien, pl_godzina_od"; // $q = mysql_query($sql); $q = doSQL($sql,"select_gru busy"); if (!$q) { // log_me($tu." busy", "### ERROR: ".mysql_error()." [SQL] ".$sql); $_SESSION['gru_message'] = '# gru_message: DB error #'; } $gru_msg = "Grupy:
"; $ps = -1; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { if ($ps <> $r['gru_id']) { if ($ps <> -1) $gru_msg.= ''; $gru_msg.= ''; } $gru_msg.= ''; if ($ps <> $r['gru_id']) { $gru_msg.= ''; } else $gru_msg.= ''; $gru_msg.= ''; $ps = $r['gru_id']; } $gru_msg.= '
'.$r['gru_nazwa'].' zajęta '; if (strlen($dni)>1) $gru_msg.= 'w'.($r['dzien']==1?"e":"").' '.dayOfWeek($r['dzien']).' '; $gru_msg.= 'w godzinach '.$r['od'].'–'.$r['do'].' ('.$r['prz_nazwa'].' z '.$r['nau_osoba'].')
'; $_SESSION['gru_message'] = $gru_msg;// "
".$sql; } } */ return $o; } //function select_sal($dz="", $hf="",$mf="",$ht="",$mt="", $prz_id="", $gru_id="", $select="") { function select_sal($time=array('','','','',''), $prz_id="", $gru_id="", $flags="", $sel="") { $unit = "select_sal"; global $em_sala, $em_grupa; // wybiera sale, dostępne w danym czasie (możliwe do użycia dla danego przedmiotu) $dz = $time[0]; $hf = $time[1]; $mf = $time[2]; $ht = $time[3]; $mt = $time[4]; log_me($unit." time(",$time[0].",".$time[1].",".$time[2].",".$time[3].",".$time[4]."), prz=".$prz_id.", gru=".$gru_id.", flags=".$flags); if (strpos($flags, "[ilepl]")!==FALSE) $f_ilepl = TRUE; else $f_ilepl = FALSE; if (strpos($flags, "[busy]")!==FALSE) $f_busy = TRUE; else $f_busy = FALSE; $f_short = isFlag("[short]", $flags); $_SESSION['sal_message'] = ''; // zeruj informacje o zajętości sal if ($f_busy and ($dz=="" or $hf=="" or $mf=="" or $ht=="" or $mt=="")) return ''; $sall = array(); // do zapamiętania sal, którzy później będą w '; } //log_me("select_sal list", "[SQL] ".$sql); $ktos_zajety = FALSE; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { if ($r['sal_jest_wolna']==0) { // sala jest zajęta $ktos_zajety = TRUE; $o.= ''; } else // sala jest wolna (dostępna) $o.= ''; } /* if ($_SESSION['cfg']['auto_show_busy']=='T') { // automatycznie pokazywać info o zajętości if ($ktos_zajety) { $sql = "SELECT * FROM v_plan "; $sql.= " WHERE f_sal_jestWolna(".getPlan().",sal_id,'".$dni."',".$hf.",".$mf.",".$ht.",".$mt.",".$gru_id.")=0"; $sql.= " AND pla_id = ".getPlan(); $sql.= " AND CONCAT(',','".$dni."',',') LIKE CONCAT('%,',dzien,',%')"; $sql.= " AND (pl_godzina_od >= MAKETIME(".$hf.",".$mf.",0) AND pl_godzina_od < MAKETIME(".$ht.",".$mt.",0) OR"; $sql.= " pl_godzina_do > MAKETIME(".$hf.",".$mf.",0) AND pl_godzina_do <= MAKETIME(".$ht.",".$mt.",0) OR"; $sql.= " pl_godzina_od < MAKETIME(".$hf.",".$mf.",0) AND pl_godzina_do > MAKETIME(".$ht.",".$mt.",0))"; $sql.= " AND gru_id <> ".$gru_id; if ($f_busy) $sql.= " AND f_sal_mozeOdbywacSie_prz(sal_id, ".nvl($prz_id,'null').", ".$_SESSION['szk_id'].")=1"; $sql.= " ORDER BY sal_nazwa, dzien, pl_godzina_od"; // $q = mysql_query($sql); $q = doSQL($sql,"select_sal busy"); if (!$q) { // log_me("select_sal busy", "### ERROR: ".mysql_error()." [SQL] ".$sql); $_SESSION['sal_message'] = '# sal_message: DB error #'; } $sal_msg = "Sale
"; $ps = -1; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { if ($ps <> $r['sal_id']) { if ($ps <> -1) $sal_msg.= ''; $sal_msg.= ''; } $sal_msg.= ''; if ($ps <> $r['sal_id']) { $sal_msg.= ''; } else $sal_msg.= ''; $sal_msg.= ''; $ps = $r['sal_id']; } $sal_msg.= '
'.$r['sal_nazwa'].' zajęta '; if (strlen($dni)>1) $sal_msg.= 'w'.($r['dzien']==1?"e":"").' '.dzien_Tyg($r['dzien'],"[css]").' '; $sal_msg.= ''.$r['od'].'—'.$r['do'].' przez grupę '.$r['gru_nazwa'].' ('.$r['prz_nazwa'].' z '.$r['nau_osoba'].')
'; $_SESSION['sal_message'] = $sal_msg;// "
".$sql; } } */ return $o; } function select_prz($time=array('','','','',''), $nau_id="", $flags="") { // wybiera przedmioty, dostępne w danym czasie i których dany nauczyciel może uczyć // $time = array_merge((array)$range, array("day"=>0, "from"=>'', "to"=>'')); $dz = $time[0]; $hf = $time[1]; $mf = $time[2]; $ht = $time[3]; $mt = $time[4]; log_me("select_prz","dz=$dz, ..., flags='$flags'"); $f_short = isFlag("[short]", $flags); $o = ""; $sql = "SELECT p.* FROM przedmioty p WHERE prz_szk_id=".$_SESSION['szk_id']; // if ($select=="n") // $sql.= " AND f_prz_mozeUczyc_nau(prz_id, '".nvl($nau_id,'')."', ".$_SESSION['szk_id'].")=1"; if (isset($_SESSION['mode'])) switch ($_SESSION['mode']) { case 1: $sql.= " AND prz_f_ppp='N'\n"; break; case 2: $sql.= " AND prz_f_ppp='T'\n"; break; } $sql.= " ORDER by prz_nazwa"; $q = doSQL($sql,"select_prz"); while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { if ($dz=="") {// or $gru[$p]->czy_dostepny($dz, $hf,$mf,$ht,$mt)) { if ($f_short) $o.= ''; else $o.= ''; } } return $o; } function select2_prz($time=array('','','','',''), $nau_id="", $flags="") { // wybiera przedmioty, dostępne w danym czasie i których dany nauczyciel może uczyć // $time = array_merge((array)$range, array("day"=>0, "from"=>'', "to"=>'')); $dz = $time[0]; $hf = $time[1]; $mf = $time[2]; $ht = $time[3]; $mt = $time[4]; log_me("select2_prz",""); $o = ""; $sql = "SELECT p.* FROM przedmioty p WHERE prz_szk_id=".$_SESSION['szk_id']; // if ($select=="n") // $sql.= " AND f_prz_mozeUczyc_nau(prz_id, '".nvl($nau_id,'')."', ".$_SESSION['szk_id'].")=1"; $sql.= " ORDER by prz_nazwa"; $q = doSQL($sql,"select_prz"); while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { if ($dz=="") {// or $gru[$p]->czy_dostepny($dz, $hf,$mf,$ht,$mt)) { $o.= ''; // $o.= ''; } } return $o; } function select_gpr($flags="") { // wybiera grupy przedmiotów log_me("select_gpr",""); $o = ""; $sql = "SELECT * FROM grupy_przedmiotow WHERE gpr_szk_id=".$_SESSION['szk_id']; $sql.= " ORDER by gpr_nazwa"; $q = doSQL($sql,"select_gpr"); while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { $o.= ''; } return $o; } function select_gna($flags="") { // wybiera grupy nauczycieli log_me("select_gna",""); $o = ""; $sql = "SELECT * FROM grupy_nauczycieli WHERE grn_szk_id=".$_SESSION['szk_id']; $sql.= " ORDER by grn_nazwa"; $q = doSQL($sql,"select_gna"); while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { $o.= ''; } return $o; } /************************************************/ function time_overlap($h,$m, $hf,$mf,$ht,$mt) { // mówi, czy jednostka czasu h,m zachodzi na podany przedział czasu if ($h<$hf) return FALSE; if ($h==$hf and $m<$mf) return FALSE; if ($h>$ht) return FALSE; if ($h==$ht and $m>=$mt) return FALSE; log_me("time_overlap","".$h.",".$m.", ".$hf.",".$mf.",".$ht.",".$mt); return TRUE; } function daty_zakres($p_d_od, $p_d_do, $p_flags='[]') { // zwraca zakres dat w formie opisowej - jeśli ten sam rok, to pomija, jeśli ten sam miesiąc, to podaje na końcu $unit = "daty_zakres"; $f_tel = isFlag('[telegram]', $p_flags); if (isFlag('[dg]', $p_flags)) { echo $p_d_od.'-'.$p_d_do.' ==> '; } $znak_do = ($f_tel ? ' -- ':"–"); date_default_timezone_set("Europe/Warsaw"); // !!! potrzebne, by nie było exception-a try { $d_od = new DateTime($p_d_od); $d_do = new DateTime($p_d_do); } catch (Exception $e) { $err = 'Caught exception: '.$e->getMessage(); log_me($unit, $err); telme(userInfo()."\n".execFunc($unit)."\n".$err); return '[err] Nieznany zakres dat - '.$err; } $y_same = ($d_od->format('Y') == $d_do->format('Y')); // ten sam rok? $m_same = ($d_od->format('m') == $d_do->format('m')); // ten sam m-c? if ($y_same and $m_same) { $znak_do = ($f_tel ? '--':"–"); return $d_od->format('j').$znak_do.$d_do->format('j').' '.msc($d_do->format('m'),2); } if ($y_same) { return $d_od->format('j').' '.msc($d_od->format('m'),2).$znak_do.$d_do->format('j').' '.msc($d_do->format('m'),2); } // różny rok return $p_d_od.$znak_do.$p_d_do; } /************************************************/ function nvl($val, $ifnull=' ') { if ($val == '') return $ifnull; return $val; } function nvl2($val, $ifnull=' ', $ifnotnull='NOT_NULL') { if ($val == '') return $ifnull; return $ifnotnull; } /************************************************/ function ceil_is($ceil, $val) { if ($val > $ceil) return $ceil; return $val; } function rgb2hex($rgb, $rbg_max_val=99) { $unit = "rgb2hex"; $hex = ""; //log_val($unit." - rgb", $rgb); $rgb[0] = ceil_is($rbg_max_val, $rgb[0]); $rgb[1] = ceil_is($rbg_max_val, $rgb[1]); $rgb[2] = ceil_is($rbg_max_val, $rgb[2]); //log_val($unit." - rgb po ceil_is", $rgb); $hex .= str_pad(dechex($rgb[0] *255/$rbg_max_val), 2, "0", STR_PAD_LEFT); $hex .= str_pad(dechex($rgb[1] *255/$rbg_max_val), 2, "0", STR_PAD_LEFT); $hex .= str_pad(dechex($rgb[2] *255/$rbg_max_val), 2, "0", STR_PAD_LEFT); //log_me($unit,"hex = ".$hex); return $hex; // returns the hex value without the hash sign (#) } function hex2rgb($hex, $rbg_max_val=99) { $unit = "hex2rgb"; $hex = str_replace("#", "", $hex); //log_me($unit, "hex = $hex"); if(strlen($hex) == 3) { $r = hexdec(substr($hex,0,1).substr($hex,0,1)); $g = hexdec(substr($hex,1,1).substr($hex,1,1)); $b = hexdec(substr($hex,2,1).substr($hex,2,1)); } else { $r = hexdec(substr($hex,0,2)); $g = hexdec(substr($hex,2,2)); $b = hexdec(substr($hex,4,2)); } //log_me($unit, "r=$r, g=$g, b=$b"); $rgb = array(round($r*$rbg_max_val/255), round($g*$rbg_max_val/255), round($b*$rbg_max_val/255)); //return implode(",", $rgb); // returns the rgb values separated by commas return $rgb; // returns an array with the rgb values } mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); /***********/ /* function isOnPlan($pla, $dz, $h,$m, $gru) { // sprawdź, czy taka jednostka w planie dla grupy jest już zajęta //log_val("isOnPlan -> pla", $pla); for ($p=0; $pdz==$dz and $j->h==$h and $j->m==$m and $j->gru==$gru) return $p; // zwróć klucz, pod którym jest taka jednostka na planie } return -1; // jednostki jeszcze nie ma na planie tej grupy } */ function find_free_pla($pla) { for ($p=0; $p Begin"); $dz_arr = toarr($dz); //log_val("dz_arr",$dz_arr); foreach($dz_arr as $dz1) { db_putOnPlan($dz1, $hf,$mf, $ht,$mt, $gru, $prz, $nau, $sal); } // refresh_nau($nau); log_me("putOnPlan","-> End"); } function time2idx($h,$m) { $idx = ($h-$_SESSION['hour_start']) * $_SESSION['C_steps_in_hour'] + $m/$_SESSION['time_step']; return $idx; } function chg($val, $bias) { if ($val / $bias > 260) return ($val * $bias); if ($val / $bias < 10) return 30; return($val / $bias); } function pla_box_inside_line_color($box_bg) { $unit = "pla_box_inside_line_color"; $bias = 0.75; //log_me($unit, "START | box_bg=".$box_bg); $rgb = hex2rgb($box_bg, 255); //log_val($unit." - rgb po hex2rgb", $rgb); $avg = ($rgb[0] + $rgb[1] + $rgb[2]) / 3; //log_me($unit, "avg = ".$avg); if ($avg < 50 or 205 < $avg) $bias = 0.6; if ($avg >= 150) { $rgb[0] *= $bias; $rgb[1] *= $bias * 1.15; $rgb[2] *= $bias; } else { $rgb[0] = chg($rgb[0], $bias); $rgb[1] = chg($rgb[1], $bias * 1.15); $rgb[2] = chg($rgb[2], $bias); } //log_val($unit." - rgb", $rgb); $ret = rgb2hex($rgb, 255); //log_val($unit." - ret", $ret); //log_me($unit, "END"); return $ret; } function pla_box($field, $type, $pla, $flags="", $view_nr="") { // global $em_sala, $em_grupa; $em_sala = $em_grupa = ""; // WYŁĄCZ IKONKI (dopóki nie ma opcji ich wł./wył.) $bg_nau_plan = '#ddd'; $fg_nau_plan = '#222'; if (strpos($flags, "[print]")!==FALSE) $f_print = TRUE; else $f_print = FALSE; $o = ""; $div = ""; $tip = ''.$pla[$field[0]]->t_od."–".$pla[$field[0]]->t_do.'  ('.$pla[$field[0]]->duration.')'; if (jacek()) { // dodaj nr PL_ID $tip.= 'ID:'.$field[9].''; } /* if ($pla[$field[0]]->gru >= 13) { log_val("pla_box łączone", $pla[$field[0]]); } */ if (!$f_print and $field[3]>=0) { // rowspan // menu podręczne $div.= '
'; $div.= ''.get_class_val("prz", $pla[$field[0]]->prz, "nazwa").''; $div.= ''; $div.= ''; $div.= ''; // $div.= 'kliknij, aby ukryć'; $div.= '
'; } $div.= '
nau=="") { $div.= 'box_no_nau '; } $div.= '" '; $v_nau = $v_gru = $v_sal = $v_prz = ""; if ($type<>"nau") $v_nau = get_class_val("nau",$pla[$field[0]]->nau,"osoba"); if ($type<>"gru") $v_gru = get_class_val("gru",$pla[$field[0]]->gru,"nazwa"); if ($type<>"sal") $v_sal = get_class_val("sal",$pla[$field[0]]->sal,"nazwa"); if ($type<>"prz") $v_prz = get_class_val("prz",$pla[$field[0]]->prz,"nazwa"); if ($v_sal <> "" and $_SESSION['cfg']['show_sal_nazwa']=="N") $tip.= '
Sala: '.$v_sal; if (isset($v_nau) and $_SESSION['cfg']['show_nau_osoba']=="N") $tip.= '
Nauczyciel: '.$v_nau; if (isset($v_nau) and $v_nau<>"" and $type<>"nau") { // $tip.= '

Poniżej plan nauczyciela na ten dzień (prace w toku)'; // $plaarr = print_r($pla,true); // log_val("plaarr", $plaarr); $tip.= "

".nauDayPlan($pla[$field[0]]->nau, $pla[$field[0]]->dz, "[currTime][markPlID][grun]", date('H:i'), $pla[$field[0]]->pl_id).""; } // 2025-12-10 // $hours_tip = do_Tip($tip.''); $hours_tip = do_Tip($tip.'', '$(\'#form_addSubRow_'.$pla[$field[0]]->nau.'_'.$pla[$field[0]]->dz.'\').addClass(\'form_infoQuickFill\')', '$(\'#form_addSubRow_'.$pla[$field[0]]->nau.'_'.$pla[$field[0]]->dz.'\').removeClass(\'form_infoQuickFill\')'); $div.= $hours_tip; if ($field[3]>=0) { // rowspan // $tip.= ''.$pla[$field[0]]->t_od."—".$pla[$field[0]]->t_do.''; if ($type=="nau" and $_SESSION['cfg']['plan_nau_w_color']=='N') $div.= 'style="cursor:default; position:relative; '/*top:0; left:0; */.'width:100%; height:100%; background-color:'.$bg_nau_plan.'; color:'.$fg_nau_plan.'">'; else $div.= 'style="cursor:default; position:relative; '/*top:0; left:0; */.'width:100%; height:100%; background-color:#'.get_class_val("nau",$pla[$field[0]]->nau,"bg_color").'; color:#'.get_class_val("nau",$pla[$field[0]]->nau,"fg_color").'">'; if ($type=="gru") { $o.= ''.$v_prz.''; if ($v_sal <> "" and $_SESSION['cfg']['show_sal_nazwa']=="T") $o.= ' — '.$em_sala.$v_sal; if ($v_nau <> "" and $_SESSION['cfg']['show_nau_osoba']=="T") $o.= '
'.$v_nau.''; // log_me("v_nau", $v_nau); } elseif ($type=="nau") { $o.= "".$v_prz.""; if ($pla[$field[0]]->gru <> "") $o.= ' — '.$em_grupa.$v_gru; if ($v_sal <> "" and $_SESSION['cfg']['show_sal_nazwa']=="T") $o.= "
".$em_sala."".$v_sal.""; } elseif ($type=="sal") { $o.= $em_grupa.$v_gru.' — '.$v_prz.""; if ($_SESSION['cfg']['show_nau_osoba']=="T") $o.= "
".$v_nau.""; } } else { // nie pierwsza jednostka wpisu // $div.= $hours_tip; if ($type=="nau" and $_SESSION['cfg']['plan_nau_w_color']=='N') $div.= 'style="cursor:default; position:relative; top:0; left:0; bottom:0; right:0; height:100%; width:100%; background-color:'.$bg_nau_plan.'; color:'.$fg_nau_plan.'">'; else $div.= 'style="cursor:default; position:relative; top:0; left:0; bottom:0; right:0; height:100%; width:100%; background-color:#'.get_class_val("nau",$pla[$field[0]]->nau,"bg_color").'; color:#'.get_class_val("nau",$pla[$field[0]]->nau,"fg_color").'">'; // ##TODO: dla planu nauczyciela ($type="nau") nie używać jego koloru, ale jakiś jasno-szary, by oszczędzać kolorowy toner } // $o.= "
".$field[0]."
".$field[1]."
".$field[2]."
".$field[3]."
".$field[4]; if ($o=="") return $div.' 
'; // return $div.'
 
'; return $div.'
'.$o.'
'; } /* function sort_nau($a, $b) { if ($a->imie == $b->imie and $a->nazwisko < $b->nazwisko) return -1; if ($a->imie < $b->imie) return -1; else return 1; } */ /* function sort_prz($a, $b) { if (strtolower($a->nazwa) < strtolower($b->nazwa)) return -1; else return 1; } */ /* function sort_sal($a, $b) { $pl = polish_sort($a->nazwa, $b->nazwa); if ($pl<>0) return $pl; if (strtolower($a->nazwa) < strtolower($b->nazwa)) return -1; else return 1; } */ function sort_plan($a, $b) { if ($a->dz < $b->dz or $a->h < $b->h or $a->m < $b->m ) return -1; else return 1; } function sort_plan_nauStat($a, $b) { $fields = array('nau','dz','h','m'); foreach ($fields as $field) { $diff = $a->$field - $b->$field; if ($diff !==0) return $diff; } return 0; } function pla_neq($pla, $p1, $p2) { //log_me("pla_neq p1,p2", $p1." ".$p2); if ($p1<0 or $p2<0) return TRUE; // sprawdza, czy dane pozycje planu są różne => prowadzi je inny nau, w innej gru, innej sal lub inny prz if ($pla[$p1]->nau <> $pla[$p2]->nau or $pla[$p1]->gru <> $pla[$p2]->gru or $pla[$p1]->prz <> $pla[$p2]->prz or $pla[$p1]->sal <> $pla[$p2]->sal) return TRUE; return FALSE; } function plan_arr($type,$id, $pla, $ggru, $view_nr) { // tworzy pomocniczą tabelę do wyświetlenia planu $last_t = ($_SESSION['hour_end']-$_SESSION['hour_start'])*$_SESSION['C_steps_in_hour']; $pa = array(); for ($d=0; $d<5; $d++) { // init tabeli $pa[$d] = array(); for ($r=0; $r<=$last_t; $r++) $pa[$d][$r] = array( -1, // [0] numer wpisu w planie (pl_id) "", // [1] znaczniki, że coś się zaczyna/kończy na tej pozycji (albo kończy na poprzedniej) "", // [2] znaczniki, że coś się zaczyna/kończy dowolnego dnia (w tygodniu) o tym czasie [tylko dla 'pon.' wpisywane] 0, // [3] ile "rowspan" od tej komórki -1, // [4] ID menu podręcznego (ID usuwania) do tej pozycji planu "", // [5] godzina (dla celów DEBUG-u) "", // [6] zakres czasu tego wpisu na planie (hf:mf:ht:mt) $d, // [7] dzień "", // [8] gru,nau,prz,sal -1); // [9] pl_id } // uzupełnij wg planu foreach ($pla as $p => $v) { if ($type=="gru" and ($id==$pla[$p]->gru/*wybrana grupa*/ or in_array($pla[$p]->gru, $ggru)/*wybrana grupa jest wewnątrz łączonej grupy*/) or $type=="nau" and $id==$pla[$p]->nau or $type=="sal" and $id==$pla[$p]->sal) { $t2i = time2idx($pla[$p]->h,$pla[$p]->m); $pa[$pla[$p]->dz][$t2i][0] = $p; // numer planu na tej pozycji $pa[$pla[$p]->dz][$t2i][5] = minute2time($pla[$p]->h*60 + $pla[$p]->m); // godzina (dla DEBUGU) $pa[$pla[$p]->dz][$t2i][9] = $pla[$p]->pl_id; // ID wpisu pozycji planu w bazie // log_me("plan_arr", "p=$p, pla[p]->dz=".$pla[$p]->dz.", pla[p]->h=".$pla[$p]->h.", pla[p]->m=".$pla[$p]->m); } } // uzupełnij, by wiedzieć, gdzie jest jakieś "łamanie" (zmienia się prz,nau,sal,gru) for ($dz=0; $dz<5; $dz++) { // po dniach for ($t=0; $t<=$last_t; $t++) { // po jednostkach czasu if ($pa[$dz][$t][0]<>-1) { // ta pozycja ma plan if ($t<$last_t-1 and $pa[$dz][$t+1][0]==-1 or // nie jest to ostatnia jednostka, a kolejna jest pusta $t>=$last_t/*-1*/ or // jest to ostatnia jednostka pla_neq($pla, $pa[$dz][$t+1][0], $pa[$dz][$t][0]) // jest jakaś zmiana pomiędzy tą a następną jednostką ) { // kończy się jakaś pozycja planu $pa[$dz][$t][1] .= ",e"; $pa[0][$t][2] .= ",e"; // coś się o tym czasie kończy (w tygodniu) if ($t<$last_t/*-1*/) { // bez '-1', by pojawiała się godzina końca pracy (np. 17:00, gdy szkoła otwarta jest do 17:00) $pa[$dz][$t+1][1] .= ",pe"; // coś się w poprzednim czasie kończy $pa[0][$t+1][2] .= ",pe"; // coś się w poprzednim czasie kończy (w tygodniu) } } if ($t>0 and $pa[$dz][$t-1][0]==-1 or $t==0 or pla_neq($pla, $pa[$dz][$t-1][0], $pa[$dz][$t][0])) { // zaczyna się jakaś pozycja planu $pa[$dz][$t][1] .= ",s"; $pa[0][$t][2] .= ",s"; // coś się o tym czasie zaczyna (w tygodniu) } } } } for ($dz=0; $dz<5; $dz++) { // po dniach $tt = -1; // od tego wiersza będzie "rowspan" for ($t=0; $t<=$last_t; $t++) { // po jednostkach czasu if (strpos($pa[$dz][$t][1],",s") !== FALSE) $tt = $t; // początek "spanu" (coś tu się zaczęło) if (strpos($pa[$dz][$t][1],",e") !== FALSE) { // koniec "spanu" (coś tu się skończyło) for ($rst=$tt+1; $rst<=$t; $rst++) { // skopiuj do reszty jednostek tego wpisu na planie $pa[$dz][$rst][3] = -$pa[$dz][$tt][3]; $pa[$dz][$rst][4] = $pa[$dz][$tt][0]; // ID usuwania wpisu (wszystkie jednostki danego wpisu mają identyczny) $pa[$dz][$rst][6] = $pla[$pa[$dz][$tt][0]]->h.":".$pla[$pa[$dz][$tt][0]]->m.":".minute2time($pla[$pa[$dz][$t][0]]->h*60+$pla[$pa[$dz][$t][0]]->m+$_SESSION['time_step']);//$pla[$pa[$dz][$t][0]]->h.":".$pla[$pa[$dz][$t][0]]->m; // zakres czasu wpisu na planie $pa[$dz][$rst][8] = $pla[$pa[$dz][$tt][0]]->gru.",".$pla[$pa[$dz][$tt][0]]->nau.",".$pla[$pa[$dz][$t][0]]->prz.",".$pla[$pa[$dz][$t][0]]->sal; } $pa[$dz][$tt][4] = $pa[$dz][$tt][0]; // ... pierwszej jednostce też daj ID usuwania $pa[$dz][$tt][6] = $pla[$pa[$dz][$tt][0]]->h.":".$pla[$pa[$dz][$tt][0]]->m.":".minute2time($pla[$pa[$dz][$t][0]]->h*60+$pla[$pa[$dz][$t][0]]->m+$_SESSION['time_step']); // .. 1st jednostce też daj zakres czasu $pa[$dz][$tt][8] = $pla[$pa[$dz][$tt][0]]->gru.",".$pla[$pa[$dz][$tt][0]]->nau.",".$pla[$pa[$dz][$t][0]]->prz.",".$pla[$pa[$dz][$t][0]]->sal; $tt = -1; // już koniec "rowspan" } if ($tt>=0) $pa[$dz][$tt][3]++; } } //log_val("pa",$pa); return $pa; } function calc_line_color($col) { $lc = hex2rgb($col); $proc = 20; $sum = $lc[0] + $lc[1] + $lc[2]; if ($sum / 3 >= 33) $scale = (100-$proc) / 100.0; else $scale = (100+$proc) / 100.0; $lc[0] *= $scale; $lc[1] *= $scale; $lc[2] *= $scale; $lc = rgb2hex(array($lc[0], $lc[1], $lc[2])); if ($lc == $col) { // kolor bez zmian $lc = hex2rgb($lc); if ($lc[0]>50) $lc[0] -= $proc; else $lc[0] += $proc; if ($lc[1]>50) $lc[1] -= $proc; else $lc[1] += $proc; if ($lc[2]>50) $lc[2] -= $proc; else $lc[2] += $proc; $lc = rgb2hex(array($lc[0], $lc[1], $lc[2])); } return $lc; } function showPlan($type,$id, $flags="", $view_nr="") { //, $dz="",$hf="",$mf="",$ht="",$mt="",$gru_id="",$nau_id="",$sal_id="",$prz_id="") { // pokazuje plan dla obiektu 'type' o danym id // (uwzględnia też chęć dodania nowego wpisu) $unit = "showPlan"; global $em_grupa, $em_sala; $bg_nau_plan = '#ddd'; $fg_nau_plan = '#222'; $sess_exp = is_sess_expired($unit, "html", "y"); if ($sess_exp['is'] == 1) { return $sess_exp['msg']; } dajt($t_start); //require_once("cl.php"); // ???? - jest w index.php if (getPlan() == "") { log_me($unit, "ERR: Nie wybrano planu."); return execFunc($unit)." ERR: Nie wybrano planu."; } log_me($unit,"type=[$type], id=$id, flags=$flags"); if (strpos($flags, "[print]")!==FALSE) $f_print = TRUE; else $f_print = FALSE; if (strpos($flags, "[subst]")!==FALSE) $f_subst = TRUE; else $f_subst = FALSE; if (strpos($flags, "[make]")!==FALSE) $f_make = TRUE; else $f_make = FALSE; if ($f_make) { $_SESSION['showPlan_'.$view_nr] = $type.",".$id; } $pl = ""; $pla = array(); $sql = "SELECT * FROM plan_v WHERE pl_pla_id=".getPlan()." AND (pl_".$type."_id=".$id; if ($type=="gru") { $sql.= " OR EXISTS (SELECT 1 FROM grupy_grup WHERE ggru_szk_id=".$_SESSION['szk_id']." AND ggru_gru_id=pl_gru_id AND ggru_pod_id=".$id.")"; } $sql.= ")"; $q = doSQL($sql,$unit, "[]"); if (!$q) { //log_me("showPlan","### ERROR: ".mysql_error()." [SQL] ".$sql); return; } $p = 0; $ggru = array(); while ($r = mysql_fetch_array($q)) { // rozbicie czasu początku i końca konkretnych zajęć na godziny i minuty $t_od = explode(":",$r['pl_godzina_od']); $t_do = explode(":",$r['pl_godzina_do']); $hf = $t_od[0]; $mf = $t_od[1]; $ht = $t_do[0]; $mt = $t_do[1]; for ($h=$hf; $h<=$ht; $h++) { for ($m=($h==$hf ? $mf:0); $m<($h==$ht ? $mt:60); $m+=$_SESSION['time_step']) { $pla[$p++] = new plan($r['pl_id'], (int)$r['pl_dzien'], (int)$h, (int)$m, (int)$r['pl_gru_id'], (int)$r['pl_prz_id'], nvl($r['pl_nau_id'],""), nvl($r['pl_sal_id'],""), $hf.":".$mf, $ht.":".$mt, minute2time(($ht-$hf)*60 + ($mt-$mf)) // TODO: to użyć do pokazania zakresu godzin wybranych w od-do ); if ($type=="gru" and $r['pl_gru_id']<>$id) { // jest jakaś grupa łączona !!!!! $ggru[] = $r['pl_gru_id']; } /*if ($r['pl_gru_id']>=13) { log_val("pla_gru_laczone", $pla[$p-1]); }*/ } } } //log_val("ggru", $ggru); usort($pla, 'sort_plan'); //log_val("pla",$pla); /*foreach ($pla as $p) { if ($p->gru>=13) log_me("showPlan", "JEST GRUPA ŁĄCZONA!"); }*/ $pa = plan_arr($type,$id, $pla, $ggru, $view_nr); // $_SESSION['pa'] = $pa; if ($f_subst) { $nau_l4_mem = db_get_nau_L4_days($id); } $pl.= 'Plan dla '."".''; $kto_co = ""; switch($type) { case "nau": break; case "gru": $pl.= "grupy "; $kto_co = "$em_grupa"; break; case "sal": $kto_co = "$em_sala"; break; } $pl.= ''; if ($type=="nau") $kto_co.= get_class_val($type,$id,"osoba"); else $kto_co.= get_class_val($type,$id,"nazwa"); $pl.= $kto_co; $pl.= ''; if (jacek()) $pl.= '/'.$id.''; // dla Nauczyciela dodaj info o pensum // $pl.= ''; if ($f_print) { // 2026-01-17 toPrint("Plan ".$kto_co."", "plan"); } $was_1st_row = FALSE; $pl.= "\n".''; if ($type=="nau") { $works = db_nau_workTime($id); $wwg = db_nau_workWithGroup($id); } $pl.= ''; //log_val("mem L4", $nau_l4_mem); $dw = date('w'); $pl.= ''; // kolumna na czas for ($dzt=0; $dzt<5; $dzt++) { $pl.= ''."\n"; } $pl.= ''; // kolumna na czas $pl.= ''."\n"; // dla każdej jednostki czasu for ($t=0; $t<=($_SESSION['hour_end']-$_SESSION['hour_start'])*$_SESSION['C_steps_in_hour']; $t++) { if (floor($t/$_SESSION['C_steps_in_hour']) == $t/$_SESSION['C_steps_in_hour']/* and $t>0*/) $h_ch = TRUE; // godzina się zmieniła else $h_ch = FALSE; // nie ma zmiany godziny if (strpos($pa[0][$t][2],",s")!==FALSE) $in_week_s = TRUE; // coś się zaczyna w tygodniu o tym czasie else $in_week_s = FALSE; if (strpos($pa[0][$t][2],",e")!==FALSE) $in_week_e = TRUE; // coś się kończy w tygodniu o tym czasie else $in_week_e = FALSE; if (strpos($pa[0][$t][2],",pe")!==FALSE) $in_week_pe = TRUE; // coś się kończy w tygodniu o poprzednim czasie (w poprzedniej jednostce)) else $in_week_pe = FALSE; if (!$in_week_s and // nic się nie zaczyna /*!$in_week_e and*/ !$in_week_pe and // nic się nie kończy (!($h_ch and $_SESSION['cfg']['show_full_hours']=='T')) // nie ma pełnej (zmiany) godziny lub nie mają być pełne godziny pokazywane //and !(jacek()) ) continue; // OMIŃ WIERSZ, jeśli nic w nim się nie zaczyna i nie kończy (i jeszce jakieś warunki) $pl.= ''; // czas po lewej stronie tabeli planu $time = "\n".'9?"":"0").($t%$_SESSION['C_steps_in_hour']*$_SESSION['time_step']).''; $pl.= $time; // pon ... pią for ($d=0; $d<5; $d++) { if (strpos($pa[$d][$t][1],",s")!==FALSE) $_s = TRUE; // coś się zaczyna o tym czasie else $_s = FALSE; if (strpos($pa[$d][$t][1],",e")!==FALSE) $_e = TRUE; // coś się kończy o tym czasie else $_e = FALSE; if (strpos($pa[$d][$t][1],",pe")!==FALSE) $_pe = TRUE; // coś się kończy o poprzednim czasie (w poprzedniej jednostce) else $_pe = FALSE; if ($pa[$d][$t][0]>-1) $_empty = FALSE; else $_empty = TRUE; if (!$_empty && $pla[$pa[$d][$t][0]]->nau == "") $_noNau = TRUE; else $_noNau = FALSE; $pl.= "\n".''; } $pl.= str_replace(" rl "," ",$time); $pl.= ''."\n"; $was_1st_row = TRUE; } $pl.= '
 '.dzienTygodnia($dzt).''; if ($type=="nau") { if (isset($works[$dzt])) $pl.= '
'.$works[$dzt]["zakres"].''; if (isset($wwg[$dzt])) $pl.= ''.$wwg[$dzt][0].":".$wwg[$dzt][1].''; } $pl.= '
'; if ($type=="nau") { $pl.= ''.db_nau_workWithGroup_week($id).''; } else $pl.= " "; $pl.= '
pełna linia u góry jednostki elseif ($h_ch or $in_week_s or $in_week_pe) { $pl.= " ul_d"; // zmiana godziny / coś się zaczyna w tygodniu / w poprzedniej jednostce coś się skończyło w tygodniu $b_ul_d = TRUE; } } // if (!$_empty /*$pa[$d][$t][0]<>-1*/ and $pla[$pa[$d][$t][0]]->nau == "") { // jest coś na tej pozycji, ale nie wskazano nauczyciela if ($_noNau) { $pl.= ' box_no_nau'; } $pl.= '"'; $box_style = ""; if ($t>-1 && $d>-1 && !$_empty /*$pa[$d][$t][0]!=-1*/) { // 2019-12-07: aby całe pole planu było zamalowane kolorem (niektóre nie całkiem się malowały) if ($type=="nau" and $_SESSION['cfg']['plan_nau_w_color']=='N') { $box_style = 'background:'.$bg_nau_plan; } else { $nau_color = get_class_val("nau", $pla[$pa[$d][$t][0]]->nau, "bg_color"); if ($nau_color <> "") $box_style = 'background:#'.$nau_color; //--- 2026-03-25 --- if ($b_ul_d) { if ($_noNau) $box_style.= '; border-top-color:#e0e0e0'; else $box_style.= '; border-top-color:#'.pla_box_inside_line_color($nau_color); } } } $pl.= ' style="'.$box_style.'"'; if ($_empty /*$pa[$d][$t][0]==-1*/) { // pusto // $pl.= '> '; $pl.= '> '; } else { // coś jest w tej jednostce // menu podręczne if (!$f_print) $pl.= ' onclick="show_menu(\''.$pa[$d][$t][4]."_v".$view_nr.'\')"'; // kopiowanie danych do formularza dodawania zastępstw if ($f_subst and /* plan na stronie definiowania zastępstw */ strpos($nau_l4_mem, "".$d)!==FALSE /* tego dnia nauczyciel jest nieobecny */ ) { $tm = explode(":",$pa[$d][$t][6]); // hf:mf:ht:mt $obj = explode(",",$pa[$d][$t][8]); // gru,nau,prz,sal log_me("showPlan", "t=$t | tm = ".$pa[$d][$t][6].", obj=".$obj); $pl.= ' onclick="cp_to_subsform('.$d.','.$tm[0].','.$tm[1].','.$tm[2].','.$tm[3].','.$obj[2].','.$obj[0].',\'\')"'; } $pl.= ' style="'; if (!$_s) { // nic się nie zaczyna o tym czasie $bg_color = get_class_val("nau", $pla[$pa[$d][$t][0]]->nau, "bg_color"); $lc = calc_line_color($bg_color); $pl.= 'border-top-color: #'.$lc; } $pl.= '">'.pla_box($pa[$d][$t], $type, $pla, $flags, $view_nr); } $pl.= '
'; dajt($t_end); $who = userInfo()."\n"; $trwalo = elapsed($t_start, $t_end); // $karty = array("\xE2\x99\xA3", "\xE2\x99\xA0", "\xE2\x99\xA5", "\xE2\x99\xA6"); // $who .= $karty[rand(0,3)]; // $who .= "\xE2\x9A\xAA"; // $sp = ""; if ($type=="nau") { telme($who.execFunc($unit, "Plan ".nau_repl(get_class_val($type,$id,"osoba"))."")." $trwalo", "J",$unit); } elseif ($type=="gru") { telme($who.execFunc($unit, "Plan ").$em_grupa.gru_repl(get_class_val($type,$id,"nazwa","[]"))." $trwalo", "J",$unit); } elseif ($type=="sal") { telme($who.execFunc($unit, "Plan ").$em_sala.sal_repl(get_class_val($type,$id,"nazwa","[]"))." $trwalo", "J",$unit); } return $pl; } //// END showPlan function minute2time($m) { // zamienia ilość minut na HH:MI if ($m==0) return '---'; $t = floor($m / 60); $t.= ":" . ($m%60<10 ? "0":"") . ($m % 60); return $t; } function show_nau($nau, $in, $tip="", $css="", $flags="", $id="", $class="") { // zwraca imię i nazwisko nauczyciela ze stylem przypisanych mu kolorów (w TD lub SPAN) $o = ""; if ($in=="span") $o.= '"") $o.= 'id="'.$id.'" '; if ($class<>"") $o.= 'class="'.$class.'" '; if ($tip<>"") { $o.= do_Tip($tip); } /* elseif (jacek()) { $o.= do_Tip($nau); } */ if ($css=="") $o.= ' style="cursor:default; padding:0 2px; color:#'.get_class_val("nau",$nau,"fg_color").'; background-color:#'.get_class_val("nau",$nau,"bg_color").'">'; else $o.= ' style="color:#'.get_class_val("nau",$nau,"fg_color").'; background-color:#'.get_class_val("nau",$nau,"bg_color").'; '.$css.'">'; $nau_osoba = str_replace(" "," ",get_class_val("nau",$nau,"osoba")); if (isFlag("[short]", $flags)) $nau_osoba = nau_repl($nau_osoba); $o.= str_replace(" "," ",$nau_osoba); if ($in=="span") $o.= ''; else $o.= ''; return $o; } function pracuje($kto, $dz) { $workTime = db_nau_workTime($kto); if (isset($workTime[$dz])) return 'Pracuje: '.$workTime[$dz]["zakres"]; return 'Nie pracuje'; } function get_grun_info_dz(&$f_grun, $dz, &$grun_db) { $unit = "get_grun_info_dz"; if ($f_grun) { // 2025-10-25 weź info o nieobecności grup w dniu $dz (TODO:zrobić cache, by nie pobierać za każdym razem, bo to naprawdę zbędne) $grun_db = array(); $dI = dayInfo($dz); log_val($unit."-dI dz=$dz", $dI); if ($dI["future"] or $dI["today"] // or $dI["past"] // tylko do testów ) $grun_db = db_get_grun("", $dI["date"], $dI["date"]); if (count($grun_db) <= 0) $f_grun = FALSE; else { log_me($unit, "f_grun=TRUE"); log_val("grun_db", $grun_db); } } } function add_info_o_grun($info_o_grun, &$dp) { if ($info_o_grun <> "") { $info_o_grun = '
Nieobecne grupy:
'.$info_o_grun.'
'; $dp.= $info_o_grun; } } function iogN($grun_ids) { $iogN = count($grun_ids); if ($iogN == 1) $iogN = ""; return $iogN; } function add_iog(&$iog, &$grun_ids, $grun_id, $gru_id, $data, $dzien, $od, $do, $opis, $flags="[gru][data]") { // dodaje do zmiennej pojedynczą informację o nieobecności grupy - jeśli info o takiej nieobecności jeszcze nie ma global $em_kalendarz; if (in_array($grun_id, $grun_ids)) return; // taka informacja już jest $f_gru = isFlag("[gru]", $flags); $f_data = isFlag("[data]", $flags); $grun_ids[] = $grun_id; // zaznacz, że ta info o grun już jest/będzie w iog if ($iog <> "") $iog.= "
"; if ($f_gru) $iog .= get_class_val("gru", $gru_id); if ($f_data) $iog .= " $em_kalendarz".$data.' '.dzien_tyg($dzien).''; $iog .= ' '.b_ss00($od)."-".b_ss00($do).' '.$opis.''; } function gruDayPlan($gru_id, $dz, $flags="", $cT) { // zwraca plan dniowy grupy $unit = "gruDayPlan"; $sess_exp = is_sess_expired($unit, "html", "y"); if ($sess_exp['is'] == 1) { return $sess_exp['msg']; } global $em_grupa; log_me($unit, "nau=".get_class_val("gru", $gru_id, "nazwa").", dz=$dz, flags=$flags"); if (strpos($flags, "[subst]")!==FALSE) $f_subst = TRUE; else $f_subst = FALSE; $f_subst = isFlag("[subst]",$flags); $f_currTime = isFlag("[currTime]",$flags); $f_grun = isFlag("[grun]",$flags); // uwzględniaj info o nieobecności grup (by w kolumnie godzin zaznaczyć, kiedy grupa jest nieobecna) 2025-10-16 TODO if ($f_subst) $sql = "SELECT * FROM v_dayPlanSub WHERE (pla_id=".getPlan()." OR szk_id=".$_SESSION['szk_id'].") AND gru_id=".$gru_id." AND dzien=".$dz." ORDER BY czas_od"; else { $sql = "SELECT * FROM v_dayPlan WHERE pla_id=".getPlan()." AND "; $sql.= " (gru_id=".$gru_id." OR EXISTS (SELECT 1 FROM grupy_grup WHERE ggru_pod_id=".$gru_id." AND ggru_gru_id=gru_id AND ggru_szk_id=".$_SESSION['szk_id'].") ) "; $sql.= " AND dzien=".$dz." ORDER BY czas_od"; } $q = doSQL($sql,$unit); if (!$q) { return ""; } $dp = ""; get_grun_info_dz($f_grun, $dz, $grun_db); $info_o_grun = ""; $iog_grun_ids = array(); while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { //log_val("r", $r); $dp.= ' "N") { add_iog($info_o_grun, $iog_grun_ids, $overlaps_grun["grun_rec_data"]["grun_id"], "", $overlaps_grun["grun_rec_data"]["grun_data"], $overlaps_grun["grun_rec_data"]["grun_dzien"], $overlaps_grun["grun_rec_data"]["grun_od"], $overlaps_grun["grun_rec_data"]["grun_do"], $overlaps_grun["grun_rec_data"]["grun_opis"]); } // log_val($unit." | overlaps_grun", $overlaps_grun); if ($overlaps_grun["gru"]==$gru_id and $overlaps_grun["type"] == "S") { $dp.= ' grun_markStart-cell" style="position:relative; --from:'.$overlaps_grun["pos"].'%'; } elseif ($overlaps_grun["gru"]==$gru_id and $overlaps_grun["type"] == "E") { $dp.= ' grun_markEnd-cell" style="position:relative; --to:'.$overlaps_grun["pos"].'%'; } elseif ($overlaps_grun["gru"]==$gru_id and $overlaps_grun["type"] == "F") { $dp.= ' grun_markEnd-cell" style="position:relative; --to:'.$overlaps_grun["pos"].'%'; } $dp.= '">'.$r['czas_od'].'–'.$r['czas_do'].''.prz_repl($r['przedmiot']).''; $dp.= ''.$r['nauczyciel'].''; $dp.= ''.sal_repl($r['sala']).''.$r['ile'].''; // } } if ($dp<>"") { // dodaj nagłówek $dp = ''.$dp.'
GodzinyPrzedmiotNauczycielSala🚪Ile
'; } // dodaj opis, co to jest => "Plan na 'dzień' dla 'grupa'" $dp = '
Plan na '.dayOfWeek($dz).' dla grupy '.$em_grupa.''.get_class_val('gru',$gru_id,"nazwa").'
'.$dp; add_info_o_grun($info_o_grun, $dp); return $dp; } function salDayPlan($sal_id, $dz, $flags="", $cT) { // zwraca plan dniowy sali global $em_sala, $em_grupa; $unit = "salDayPlan"; $sess_exp = is_sess_expired($unit, "html", "y"); if ($sess_exp['is'] == 1) { return $sess_exp['msg']; } log_me("salDayPlan", "sal=".get_class_val("sal", $sal_id, "nazwa").", dz=$dz, flags=$flags"); if (strpos($flags, "[subst]")!==FALSE) $f_subst = TRUE; else $f_subst = FALSE; if (strpos($flags, "[currTime]")!==FALSE) $f_currTime = TRUE; else $f_currTime = FALSE; if ($f_subst) $sql = "SELECT * FROM v_dayPlanSub WHERE (pla_id=".getPlan()." OR szk_id=".$_SESSION['szk_id'].") AND sal_id=".$sal_id." AND dzien=".$dz." ORDER BY czas_od"; else $sql = "SELECT * FROM v_dayPlan WHERE pla_id=".getPlan()." AND sal_id=".$sal_id." AND dzien=".$dz." ORDER BY czas_od"; $q = doSQL($sql,"salDayPlan"); if (!$q) { // log_me("salDayPlan","### ERROR: ".mysql_error()." [SQL] ".$sql); return ""; } $dp = ""; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { //log_val("r", $r); $dp.= ''.$r['czas_od'].'–'.$r['czas_do'].''.$r['przedmiot'].''.gru_repl($r['grupa']).''; $dp.= ''.$r['nauczyciel'].''; $dp.= ''.$r['ile'].''; } if ($dp<>"") { // dodaj nagłówek $dp = ''.$dp.'
GodzinyPrzedmiotGrupa'.$em_grupa.'NauczycielIle
'; } // $dp.= ''; // $dp = pracuje($sal_id,$dz).''.$dp; // dodaj opis, co to jest => "Plan na 'dzień' dla 'salpa'" $dp = '
Plan na '.dayOfWeek($dz).' dla sali '.$em_sala.''.get_class_val('sal',$sal_id,"nazwa").'
'.$dp; return $dp; } function dayInfo($dz) { // zwraca informacje o danym dniu tygodnia date_default_timezone_set("Europe/Warsaw"); // !!! potrzebne, by nie było exception-a $unit = "dayInfo"; $d_past = $d_future = $d_today = 0; $d_w = date('w') - 1; // nr dnia tygodnia $sh = $d_w - $dz; if ($sh > 0) { $d_past = 1; } elseif ($sh < 0) { $d_future = 1; } else $d_today = 1; log_me($unit, "dz=$dz, d_w=$d_w, sh=$sh"); try { $today = new DateTime(date('Y-m-d')); } catch (Exception $e) { $err = 'Caught exception: '.$e->getMessage(); log_me($unit, $err); telme(userInfo()."\n".execFunc($unit)."\n".$err); } $sh_interval = new DateInterval('P'.abs($sh).'D'); $dz_data = clone $today; if ($d_future) $dz_data->add($sh_interval); elseif ($d_past) $dz_data->sub($sh_interval); return array("past"=>$d_past, "today"=>$d_today, "future"=>$d_future ,"date"=>$dz_data->format('Y-m-d') ); } function time_overlaps_grun($grun_db, $gru_id, $dz, $t_from, $t_to) { // zwraca informację o tym, czy i jak dany zakres czasu zachodzi na którąś z nieobecności grup $unit = "time_overlaps_grup"; for ($g=0; $g $gru_id) continue; log_val($unit."| grun rec:", $grun); $gru_id = $grun["grun_gru_id"]; $grun_od = $grun["grun_od"]; $grun_do = $grun["grun_do"]; $t_h_diff = (time2hours($t_to) - time2hours($t_from)) * 60; // różnica czasu w minutach log_me($unit, "t_h_diff = $t_h_diff"); if ($grun_od >= $t_from and $grun_od < $t_to /*and $grun_od <> $t_to*/) { $pos = 100 * (time2hours($t_to) - time2hours($grun_od)) * 60 / $t_h_diff; log_me($unit, "time2hours($grun_od)=".time2hours($grun_od).", time2hours($t_to)=".time2hours($t_to)." => pos=$pos"); return array("gru"=>$gru_id, "type"=>"S", "pos"=>$pos, "grun_rec_data"=>$grun); } elseif ($grun_do > $t_from and $grun_do < $t_to /*and $grun_do <> $t_from*/) { $pos = 100 * (time2hours($grun_do) - time2hours($t_from)) * 60 / $t_h_diff; log_me($unit, "time2hours($grun_do)=".time2hours($grun_do).", time2hours($t_from)=".time2hours($t_from)." => pos=$pos"); return array("gru"=>$gru_id, "type"=>"E", "pos"=>$pos, "grun_rec_data"=>$grun); } elseif ($grun_od < $t_from and $grun_do >= $t_to) return array("gru"=>$gru_id, "type"=>"F", "pos"=>100, "grun_rec_data"=>$grun); } return array("gru"=>'', "type"=>"N"); } function nauDayPlan($nau_id, $dz, $flags="", $cT="", $plID="") { // zwraca plan nauczyciela w danym dniu global $em_grupa, $em_sala; global $barwy_grun_mark_legend_time; $unit = "nauDayPlan"; $sess_exp = is_sess_expired($unit, "html", "y"); if ($sess_exp['is'] == 1) { return $sess_exp['msg']; } dajt($t_start); if (getPlan() == "") { log_me($unit, "ERR: Nie wybrano planu."); return "[".$unit."] ERR: Nie wybrano planu."; } log_me($unit, "nau=".get_class_val("nau", $nau_id, "osoba").", dz=$dz, flags=$flags, cT=$cT, plId=$plID"); // flagi $f_subst = isFlag("[subst]",$flags); $f_currTime = isFlag("[currTime]",$flags); $f_markPlID = isFlag("[markPlID]",$flags); $f_grun = isFlag("[grun]",$flags); // uwzględniaj info o nieobecności grup (by w kolumnie godzin zaznaczyć, kiedy grupa jest nieobecna) 2025-10-16 $sql = "SELECT * FROM "; if ($f_subst) $sql.= " v_nau_dayPlanSub "; else $sql.= " v_nau_dayPlan "; $sql.= " WHERE pla_id=".getPlan()." AND nau_id=".$nau_id." AND dzien=".$dz; $sql.= " ORDER BY czas_od"; $q = doSQL($sql,$unit); if (!$q) { log_me($unit,"### ERROR: ".mysql_error()." [SQL] ".$sql); return ""; } $dp = ""; $minut_z_dziecmi = 0; get_grun_info_dz($f_grun, $dz, $grun_db); $info_o_grun = ""; $iog_grun_ids = array(); while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { //log_val("r", $r); if ($f_subst) { if ($r['typ']=="zas") { $dp.= ''.$r['czas_od'].'–'.$r['czas_do'].''.prz_repl($r['przedmiot']).''.gru_repl($r['grupa']).''.sal_repl($r['sala']).''.$r['za_nauczyciela'].''.$r['ile'].''; } else { $dp.= ''.$r['czas_od'].'–'.$r['czas_do'].''.prz_repl($r['przedmiot']).''.gru_repl($r['grupa']).''.sal_repl($r['sala']).''." ".''.$r['ile'].''; } } else { $dp.= ''.$r['czas_od'].'–'.$r['czas_do'].'';//."\n"; //[i] z \n nie pojawiał się tip, a na konsoli był błąd $dp.= ''.prz_repl($r['przedmiot']).'';//."\n"; $dp.= ' "N") { add_iog($info_o_grun, $iog_grun_ids, $overlaps_grun["grun_rec_data"]["grun_id"], "", $overlaps_grun["grun_rec_data"]["grun_data"], $overlaps_grun["grun_rec_data"]["grun_dzien"], $overlaps_grun["grun_rec_data"]["grun_od"], $overlaps_grun["grun_rec_data"]["grun_do"], $overlaps_grun["grun_rec_data"]["grun_opis"]); } if ($overlaps_grun["gru"]==$r["gru_id"] and $overlaps_grun["type"] == "S") { $dp.= ' grun_markStart-cell" style="position:relative; --from:'.$overlaps_grun["pos"].'%; --barwa:'.$barwy_grun_mark_legend_time[count($iog_grun_ids)-1]; } elseif ($overlaps_grun["gru"]==$r["gru_id"] and $overlaps_grun["type"] == "E") { $dp.= ' grun_markEnd-cell" style="position:relative; --to:'.$overlaps_grun["pos"].'%; --barwa:'.$barwy_grun_mark_legend_time[count($iog_grun_ids)-1]; } elseif ($overlaps_grun["gru"]==$r["gru_id"] and $overlaps_grun["type"] == "F") { $dp.= ' grun_markEnd-cell" style="position:relative; --to:'.$overlaps_grun["pos"].'%; --barwa:'.$barwy_grun_mark_legend_time[count($iog_grun_ids)-1]; } $dp.= '">'.gru_repl($r['grupa']).''; $dp.= ''.sal_repl($r['sala']).'';//."\n"; $dp.= ''.$r['ile'].'';//."\n"; } } if ($dp<>"") { // dodaj nagłówek if ($f_subst) $dp = ''.''.$dp.'
GodzinyPrzedmiotGrupa'.$em_grupa.'Sala'.$em_sala.'Zastępstwo zaIle
'; else $dp = ''.''.$dp.'
GodzinyPrzedmiotGrupa'.$em_grupa.'Sala'.$em_sala.'Ile
'; } $dp = pracuje($nau_id,$dz).'       Czas z dziećmi: '.minute2time($minut_z_dziecmi).''.$dp; // dodaj opis, co to jest => "Plan na 'dzień' dla 'nauczyciel'" $dp = '
Plan na '.dayOfWeek($dz).' dla '.show_nau($nau_id,"span").(jacek() ? '/'.$nau_id.'':"").'
'.$dp; add_info_o_grun($info_o_grun, $dp); dajt($t_end); log_me($unit ,"elapsed: ".elapsed($t_start, $t_end, 4)); return $dp; } function przWeekPlan($prz, $gru, $flags="") { // zwraca plan tygodniowy przedmiotów dla danej grupy global $em_sala; //log_me("przWeekPlan", "prz=".get_class_val("prz", $prz, "nazwa").", gru=".get_class_val("gru", $gru, "nazwa").", flags=$flags"); $sql = "SELECT * FROM v_prz_weekPlan WHERE pla_id=".getPlan()." AND prz_id=".$prz." AND (gru_id=".$gru." "; $sql.= " OR EXISTS (SELECT 1 FROM grupy_grup WHERE ggru_pod_id=".$gru." AND ggru_gru_id=gru_id AND ggru_szk_id=".$_SESSION['szk_id'].")"; // ????????????????? $sql.= ") ORDER BY dzien, czas_od"; $q = doSQL($sql,"przWeekPlan"); if (!$q) { log_me("przWeekPlan","### ERROR: ".mysql_error()." [SQL] ".$sql); return ""; } $wp = ""; $prev_dzien = -1; $cssdz = TRUE; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { $wp.= ''.dzien_tyg($r['dzien']).''; $wp.= ''.$r['czas_od'].'–'.$r['czas_do'].''; // $wp.= show_nau($r['nau_id'],"td","", "border-width: 1px 1px 0 0; border-color: black"); $wp.= ''.$r['nauczyciel'].''; $wp.= ''.sal_repl($r['sala']).''.$r['ile']; // $wp.= ' - '.$r['pl_id']; $wp.= ''; } if ($wp<>"") { // dodaj nagłówek $wp = ''.$wp.'
DzieńGodzinyNauczycielSala'.$em_sala.'Ile
'; } return $wp; } function showNauStat($nau_id=NULL) { $unit = "showNauStat"; // pokazuje statystykę dla nauczyciela/i dajt($t_start); $stat = ''; $stat.= 'Statystyka nauczycieli:'; // $stat.= '
'; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''."\n"; $sql = "SELECT v.*, nau_osoba, nau_bg_color, nau_fg_color "; $sql.= " FROM v_nauczyciele n "; // $sql.= " JOIN v_nau_stat v ON n.nau_id=v.nau_id AND pla_id=".getPlan().""; $sql.= " JOIN v_nau_stat_fix v ON n.nau_id=v.nau_id AND pla_id=".getPlan().""; // 2024-12-29 // gdy tu było "LEFT JOIN", to powodowało błędy, bo mogą być nauczyciele, którzy nie mają żadnych zdefiniowanych zajęć, a tacy nie powinni się pojawić w statystyce $sql.= " WHERE nau_szk_id=".$_SESSION['szk_id']; $sql.= " ORDER BY nau_osoba_sort, dzien"; $q = doSQL($sql,$unit); if (!$q) { log_me($unit, "### ERROR: ".mysql_error()." [SQL] ".$sql); return 'Nie udało się odczytać danych :('; } $row1 = TRUE; $prev = array("dz"=>-1, "nau"=>-1); $sqlw = "SELECT v.*, nau_osoba FROM v_nau_stat_week v JOIN v_nauczyciele n ON n.nau_id=v.nau_id WHERE (pla_id=".getPlan().") ORDER BY nau_osoba_sort"; $qw = mysql_query($sqlw); if (!$qw) { log_me($unit, "### ERROR: ".mysql_error()." [SQL sqlw] ".$sqlw); } while ($r = mysql_fetch_array($q)) { if ($r["nau_id"]<>$prev["nau"]) { // kolejny nauczyciel //log_me("showNauStat", "r[nau_id]=".$r['nau_id']." <> prev[nau]=".$prev['nau']); if ($prev["nau"]<>-1) { // był już jakiś nauczyciel // uzupełnij dni "puste" dla poprzedniego nauczyciela if ($prev["dz"]<4) { for ($d=$prev["dz"]; $d<4; $d++) $stat.= ''; } $prev["dz"] = 4; $rw = mysql_fetch_array($qw); // pole ze statystyką tygodniową $stat.= ''."\n"; log_me($unit, " = dodane week_stat dla '".$rw['nau_osoba']."': ".$rw['czas_wolny']." / ".$rw['czas_pracy']); $stat.= ''."\n"; // zakończ jego wiersz $row1 = FALSE; } log_me($unit, "-- początek wiersza dla ".$r['nau_osoba'].'['.$r['nau_id'].']'); $stat.= ''; // rozpocznij wiersz $stat.= ''; // $stat.= show_nau($r['nau_id'], "td")."\n"; // TD z nazwą nauczyciela } log_me($unit, "r[nau_id]=".$r['nau_id']." == prev[nau]=".$prev['nau']." r[dzien]=".$r['dzien']); if ($prev["dz"]<$r['dzien']-1) { for ($d=$prev["dz"]; $d<$r['dzien']-1; $d++) $stat.= ''; } if ($prev["dz"]>$r['dzien']-1) { // gdy nie było -1, to wiersz Moniki Mikuły (wpis w planie tylko w pt.) źle się pojawiał for ($d=0; $d<$r['dzien']; $d++) $stat.= ''; } $dp = show_Tip(nauDayPlan($r['nau_id'], $r['dzien'], "[currTime][grun]", date('H:i'))); $stat.= ''; } $rw = mysql_fetch_array($qw); $stat.= ''."\n"; $stat.= ''; $stat.= '
Godzin bez/z dziećmiPoniedziałekWtorekŚrodaCzwartekPiątekCały tydzień
  '.$rw['czas_wolny']." / ".$rw['czas_pracy'].'   ('.$rw['czas_razem'].') '/*. get_class_val("nau",$rw['nau_id'],"osoba") */.'
'.$r['nau_osoba'].'     '.$r['czas_wolny']." / "; $stat.= ''."\n"; $prev["dz"] = $r['dzien']; $prev["nau"] = $r['nau_id']; } // dodanie stat_week dla ostatniego nauczyciela (bo z pętli już wyszliśmy) if ($prev["dz"]<4) { for ($d=$prev["dz"]; $d<4; $d++) $stat.= '   '.$rw['czas_wolny']." / ".$rw['czas_pracy'].'   ('.$rw['czas_razem'].')
'; // $stat.= '
'.''."".'
'; dajt($t_end); $trwalo = elapsed($t_start, $t_end); telme("".userInfo()."\n".execFunc($unit, "Statystyka nauczycieli")."\n$trwalo"); return $stat; } function showNauStat2($nau_id=NULL) { $unit = "showNauStat2"; dajt($t_start); // pokazuje statystykę godzin pracy nauczycieli z dziećmi (request od Krzysztofa Mikuły, 31.07.2017) // $stat = ''; $stat = '
'; $stat.= 'Czas pracy nauczycieli — statystyka:'; $csv = "Czas pracy nauczycieli - statystyka\n"; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''."\n"; $csv.= 'Nauczyciel;Tutoring z dziećmi (1);Lekcje (2);Świetlice, przerwy, obiady (3);Razem (2+3);Razem (1+2+3);Zespoły'."\n"; $sql = "SELECT v.*, n.nau_id n_nau_id,n.nau_osoba n_nau_osoba,nau_bg_color,nau_fg_color, IFNULL(grn_nazwa,'--- nieprzypisani ---') grn_nazwa"; $sql.= " FROM v_nauczyciele n LEFT JOIN v_nau_stat2 v ON n.nau_id=v.nau_id AND pl_pla_id=".getPlan().""; $sql.= " LEFT JOIN nau_gna ON n.nau_id=ngn_nau_id LEFT JOIN grupy_nauczycieli ON grn_id=ngn_gna_id"; $sql.= " WHERE n.nau_szk_id=".$_SESSION['szk_id']; // $sql.= " AND (n.nau_id='".$nau_id."' OR '".$nau_id."' IS NULL)"; $sql.= " ORDER BY ISNULL(grn_nazwa),grn_nazwa, n.nau_osoba"; $q = doSQL($sql, $unit); if (!$q) { log_me($unit, "### ERROR: ".mysql_error()." [SQL] ".$sql); return; } $row1 = 1; // czy był 1st wiersz? (po pierwszym wierszu będzie klasa "upper line (ul)") $gna_curr=""; while ($r = mysql_fetch_array($q)) { if ($gna_curr<>$r['grn_nazwa']) { $gna_curr = $r['grn_nazwa']; $stat.= ''; } $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $csv.= $r['n_nau_osoba'].';'.$r['z_dz1'].';'.$r['z_dz2'].';'.$r['z_dz3'].';'.$r['razem_23'].';'.$r['razem'].';'.$r['zesp']."\n"; $row1 = 1; } $stat.= '
NauczycielTutoring z dziećmi (1)Lekcje (2)Świetlice, przerwy, obiady (3)Razem (2+3)Razem (1+2+3)Zespoły
'.$r['grn_nazwa'].'
'.$r['n_nau_osoba'].''.$r['z_dz1'].''.$r['z_dz2'].''.$r['z_dz3'].''.$r['razem_23'].''.$r['razem'].''.$r['zesp'].'
'; $BOM = chr(0xEF).chr(0xBB).chr(0xBF); try { file_put_contents("download/nau_stat2.csv", $BOM.$csv, LOCK_EX); $stat.= 'Pobierz plik CSV'; } catch (Exception $e) { $err = 'Caught exception: '.$e->getMessage(); log_me($unit, $err); telme(userInfo()."\n".execFunc($unit)."\n".$err); $stat.= 'Nieudany zapis do pliku CSV.'; } /* if (!file_put_contents("download/nau_stat2.csv", $BOM.$csv, LOCK_EX)) { $stat.= 'Nieudany zapis do pliku CSV.'; } else { $stat.= 'Pobierz plik CSV'; } */ $stat.= '
'; // no_print dajt($t_end); $trwalo = elapsed($t_start, $t_end); telme(userInfo()."\n".execFunc($unit, "Statystyka godzin pracy nauczycieli z dziećmi")." $trwalo"); return $stat; } function showNauWorkHours($flags="", $nau_id=NULL) { $tu = "showNauWorkHours"; // pokazuje godziny pracy nauczycieli // $stat = ''; $stat = ""; $stat.= 'Godziny pracy nauczycieli:
'; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''; $stat.= ''."\n"; $sql = "SELECT TIME_FORMAT(nag_od,'%H:%i') nag_od,TIME_FORMAT(nag_do,'%H:%i') nag_do,nag_dzien, nau_osoba, nau_bg_color, nau_fg_color, nau_id FROM v_nauczyciele n JOIN nauczyciele_godziny nag ON n.nau_id=nag_nau_id AND nag_pla_id=".getPlan().""; $sql.= " WHERE nau_szk_id=".$_SESSION['szk_id']." ORDER BY nau_osoba_sort, nag_dzien"; // gdy tu było "LEFT JOIN", to powodowało błędy, bo mogą być nauczyciele, którzy nie mają żadnych zdefiniowanych zajęć, a tacy nie powinni się pojawić w statystyce $q = doSQL($sql,$tu); if (!$q) { #log_me($tu, "### ERROR: ".mysql_error()." [SQL] ".$sql); telme_dbErr($tu); return; } $row1 = TRUE; $prev = array("dz"=>-1, "nau"=>-1); while ($r = mysql_fetch_array($q)) { if ($r["nau_id"]<>$prev["nau"]) { // kolejny nauczyciel if ($prev["nau"]<>-1) { // był już jakiś nauczyciel // uzupełnij dni "puste" dla poprzedniego nauczyciela if ($prev["dz"]<4) { for ($d=$prev["dz"]; $d<4; $d++) $stat.= ''; } $prev["dz"] = 4; $stat.= ''."\n"; // zakończ jego wiersz $row1 = FALSE; } $stat.= ''; // rozpocznij wiersz $stat.= ''; } if ($prev["dz"]<$r['nag_dzien']-1) { for ($d=$prev["dz"]; $d<$r['nag_dzien']-1; $d++) $stat.= ''; } if ($prev["dz"]>$r['nag_dzien']-1) { for ($d=0; $d<$r['nag_dzien']; $d++) $stat.= ''; } $dp = show_Tip(nauDayPlan($r['nau_id'], $r['nag_dzien'], "[currTime][grun]", date('H:i'))); $stat.= ''; } $stat.= ''."\n"; $stat.= '
Godziny pracy...PoniedziałekWtorekŚrodaCzwartekPiątek  
'.$r['nau_osoba'].'     '.""; $stat.= ''."\n"; $prev["dz"] = $r['nag_dzien']; $prev["nau"] = $r['nau_id']; } // // dodanie stat_week dla ostatniego nauczyciela (bo z pętli już wyszliśmy) if ($prev["dz"]<4) { for ($d=$prev["dz"]; $d<4; $d++) $stat.= '  
'; toPrint("Godziny pracy nauczycieli", "h"); //log_me($tu, "stat = \n$stat"); //log_me($tu, "Przed telme"); telme(userInfo()."\n".execFunc($tu, "Godziny pracy")); return $stat; } /****/ function showPrzStat($prz_id=NULL) { $unit = "showPrzStat"; global $em_grupa; // pokazuje statystykę zajęć dajt($t_start); $stat = ''; $stat.= 'Statystyka zajęć w tygodniu:'; $stat.= ''; $stat.= ''; $sqlg = "SELECT s.*, @rownum := @rownum + 1 AS rank FROM ( SELECT g.* FROM grupy_v g WHERE gru_szk_id=".$_SESSION['szk_id']." AND grupuje=0 ORDER BY gru_nazwa ) s, (SELECT @rownum := 0) r"; $qg = doSQL($sqlg,$unit); if (!$qg) { // log_me($unit, "### ERROR: ".mysql_error()." [SQL] ".$sqlg); return; } $gru = array(); while ($rg = mysql_fetch_array($qg)) { $stat.= ''; $gru[] = array("gru"=>$rg['gru_id'], "gru_nazwa"=>$rg['gru_nazwa'], "rank"=>$rg['rank']); } $stat.= ''."\n"; $sqlp = "SELECT s.*, @rownum := @rownum + 1 AS rank FROM ( SELECT p.* FROM przedmioty p WHERE (prz_szk_id=".$_SESSION['szk_id'].") ORDER BY prz_nazwa ) s, (SELECT @rownum := 0) r"; $qp = doSQL($sqlp,$unit); if (!$qp) { // log_me("showPrzStat", "### ERROR: ".mysql_error()." [SQL] ".$sqlg); return; } $prz = array(); while ($rp = mysql_fetch_array($qp)) { $stat.= ''; $prz[] = array("prz"=>$rp['prz_id'], "rank"=>$rp['rank']); for ($g=0; $g0) { $wp = przWeekPlan($rp['prz_id'], $gru[$g]["gru"]); $tip = show_Tip('Przedmiot: '.$rp['prz_nazwa'].'   Grupa: '.$em_grupa.''.$gru[$g]["gru_nazwa"].''.$wp); $stat.= ''; } else $stat.= ''; } $stat.= ''."\n"; } $stat.= '
  '.gru_repl($rg['gru_nazwa']).'
'.prz_repl($rp['prz_nazwa']).''; $stat.= ' '.$r['ilosc'].''.' 
'; dajt($t_end); $trwalo = elapsed($t_start, $t_end); telme(userInfo()."\n".execFunc($unit, "Statystyka zajęć")."\n$trwalo"); return $stat; } /****/ function showArkorg(/*$prz_id=NULL*/) { // pokazuje arkusz organizacyjny $ao = ''; $ao.= 'Arkusz organizacyjny:'; $ao.= arkorg("view",0); return $ao; } /****/ function showTutnew() { // pokazuje tutoring_new $tn = ''; $tn.= 'Tutoringi nauczycieli:'; $tn.= tutnew("view",1); return $tn; } /****/ function showCurrActivity($d="",$t="") { // pokazuje aktualnie trwające zajęcia w placówce global $em_grupa, $em_sala; $unit = "showCurrActivity"; dajt($t_start); log_me($unit, "d=$d, t=$t"); if ($d=="" or strpos($d, "undef")!==FALSE) $day = date('w')-1; else $day = $d; if ($t=="" or strpos($t, "undef")!==FALSE) $time = date('H:i:s'); else { $t = explode(":", $t); $time = date('H:i', mktime($t[0],$t[1],0, date('Y'),date('m'),date('d'))); } // $time = "8:00"; $day = 1; //log_me($unit, "time=$time, day=$day"); $h = refresh_icon('ajax_refreshCurrActivity(\''.$_SESSION['nvp'].'\')'); // $h = ''; // $h.= 'Aktualna (o godz. '.''.$time.''.') aktywność w placówce:'; $h.= 'Aktualna (o godz. '.''.ts_info("",'[100%]').''.') aktywność w placówce:'; $no_act = $h; $h.= ''; $h.= ''; $h.= ''; $h.= ''; $h.= ''; $h.= ''; $h.= ''; $h.= ''; $h.= ''; $h.= ''; $sql = "SELECT p.*, z.zas_nau_id, g.gru_id gp_id, g.gru_nazwa gp_nazwa, TIME_FORMAT(TIMEDIFF('".$time."',pl_godzina_od),'%H:%i') from_start, TIME_FORMAT(TIMEDIFF(pl_godzina_do,'".$time."'),'%H:%i') to_end"; $sql.= " ,round((TIME_TO_SEC(now())-TIME_TO_SEC(pl_godzina_od)) / TIME_TO_SEC(TIMEDIFF(pl_godzina_do,pl_godzina_od))*100,1) percent, f_nau_is_onL4_day(z.zas_za_nau_id, z.zas_szk_id, dzien) AS naL4"; $sql.= " FROM v_plan p"; $sql.= " LEFT JOIN grupy_grup gg ON p.gru_id=gg.ggru_gru_id"; $sql.= " LEFT JOIN grupy g ON g.gru_id=gg.ggru_pod_id AND ggru_szk_id=".$_SESSION['szk_id']; $sql.= " LEFT JOIN zastepstwa z ON z.zas_za_nau_id=p.nau_id AND z.zas_dzien=p.dzien AND zas_od>=pl_godzina_od AND zas_do<=pl_godzina_do AND zas_od<='".$time."' AND zas_do>'".$time."' "; $sql.= " AND z.zas_szk_id=".$_SESSION['szk_id'] ."" ; // $sql.= " LEFT JOIN nauczyciele_L4 na4 ON na4.na4_szk_id=".$_SESSION['szk_id']." AND na4.na4_dzien=dzien AND na4.na4_nau_id=z.zas_za_nau_id "; $sql.= " WHERE pla_id=".getPlan()." AND pl_godzina_od<='".$time."' AND pl_godzina_do>'".$time."' AND dzien=".$day; $sql.= " ORDER BY pl_godzina_do,pl_godzina_od,gp_nazwa,gru_nazwa"; $q = doSQL($sql, $unit); if (!$q) { return; } $act = ""; while ($r = mysql_fetch_array($q)) { $act.= ''; $act.= ''; $act.= ''; $act.= ''; // zastępuje // if ($r['zas_nau_id'] <> "") { if ($r['naL4']==1) { // gdy nauczyciel rzeczywiście jest na L4 tego dnia, gdy są wpisy w zastępstwach za niego // wyświetl nauczyciela, który ma zastępstwo $act.= ''; } else { $act.= ''; } // } $act.= ''; $act.= ''; $act.= ''; $act.= ''."\n"; } // dajt($t_end); // $trwalo = elapsed($t_start, $t_end); $trwalo = elapsed($t_start); telme(userInfo()."\n".execFunc($unit, "Aktywność")."\n$trwalo"); if ($act<>"") return $h.$act.'
Klasa/Grupa'.$em_grupa.'PrzedmiotSala'.$em_sala.'NauczycielNauczyciel").'>ZastępujeCzasIleTrwa jużDo końca
"") $act.= do_Tip(gruDayPlan(nvl($r['gp_id'], $r['gru_id']),$day, "[currTime][grun]", $time)); $act.= '>'.nvl(nvl($r['gp_nazwa'], gru_repl($r['gru_nazwa'])),' ').''.prz_repl($r['prz_nazwa']).'"") $act.= do_Tip(salDayPlan($r['sal_id'],$day, "[currTime]", $time)); $act.= '>'.nvl(sal_repl($r['sal_nazwa']),' ').'"") $act.= do_Tip(nauDayPlan($r['nau_id'],$day, "[currTime][subst][grun]", $time)); $act.= '>'.nvl($r['nau_osoba'],' ').'"") $act.= do_Tip(nauDayPlan($r['zas_nau_id'],$day, "[currTime][subst][grun]", $time)); $act.= '>'.nvl( get_class_val("nau",$r['zas_nau_id'],"osoba") ,' ').' './*$r['dzien'].' '.*/$r['od'].'–'.$r['do'].''.$r['ile'].''.$r['from_start'].'  '.str_replace(" "," ",sprintf("%2.1f",$r['percent'])).'%'.$r['to_end'].'
'; return $no_act." ".'obecnie nie odbywają się żadne zajęcia'; } /************************************************/ function select_plan($pla_id) { // wybiera plan do przetwarzania //session_start(); log_me("select_plan","pla_id=".$pla_id); $_SESSION['pla_id'] = $pla_id; $pla_info = refresh_b_plan(); echo json_encode(array("pla_id"=>$_SESSION['pla_id'], "pla_info"=>$pla_info)); } function ls_plans() { // bez AJAX-a // odczytaj listę planów $l = db_listPlans(); $l = ''.$l; return $l; } function ile_pl_2_view($p_ile) { if ($p_ile == 0) return '--'; return $p_ile; } // To jest komentarz dodany przez panią Kasię, Pan Jacek mi pozwolił, więc komentuję:) Wspaniały ten plan tworzy, prawda? No właśnie! :) /* function gru_list_for_plan() { // zwraca listę grup oddzielonych przecinkami global $nvp, $em_grupa; $sql = "SELECT g.*, f_ile_pl(gru_szk_id, ".getPlan().", 'gru', gru_id) AS ile_pl "; $sql.= "FROM grupy_v g WHERE gru_szk_id=".$_SESSION['szk_id']." ORDER by gru_nazwa"; $q = doSQL($sql,"gru_list_for_plan"); $o = ""; while ($r = mysql_fetch_array($q)) { if (strlen($o)>0) $o.= " "; $o.= ''.str_replace(" "," ",$r['gru_nazwa']).'('.ile_pl_2_view($r['ile_pl']).')'; } return '
'."$em_grupaGrupy: ".$o.'
'; } */ function gru_tab_for_plan($p_cols = 6/*ilość kolumn*/, $p_flags = "[]") { // zwraca listę grup w tabeli (by móc dla nich pokazać plan) $unit = "gru_tab_for_plan"; global $nvp, $em_grupa; $f_ppp = isFlag("[PPP]", $p_flags) & $_SESSION['szk_f_ppp']=='T'; $sql = "SELECT g.*, f_ile_pl(gru_szk_id, ".getPlan().", 'gru', gru_id) AS ile_pl\n"; $sql.= " FROM grupy_v g\n"; $sql.= " WHERE gru_szk_id=".$_SESSION['szk_id']."\n"; $sql.= " AND gru_f_ppp = '".($f_ppp ? "T":"N")."'\n"; $sql.= " ORDER by gru_nazwa"; $q = doSQL($sql,$unit); $o = ''; // $o.= ''; // $o.= ''; $dat = array(); while ($r = mysql_fetch_array($q)) { $dat[] = $r; } $dcnt = count($dat); for ($w=0; $w<$dcnt/$p_cols; $w++) { // wiersze $o.= ''; for ($k=0; $k<$p_cols; $k++) { // kolumny $i = $w + (ceil($dcnt/$p_cols)) * ($k); if ($i < $dcnt) $o.= ''; } $o.= ''; } $o.= '
'.str_replace(" "," ",$dat[$i]['gru_nazwa']).'('.ile_pl_2_view($dat[$i]['ile_pl']).')
'; return '
'."$em_grupaGrupy".($f_ppp ? " PPP":"").": ".$o.'
'; } function gruPPP_cnt() { // zwraca ilość grup PPP $unit = "gruPPP_cnt"; $sql = "SELECT count(*) FROM grupy\n"; $sql.= " WHERE gru_f_ppp = 'T' AND gru_szk_id=".$_SESSION['szk_id']; $q = doSQL($sql,$unit); $r = mysql_fetch_array($q); return $r[0]; } function nau_list_for_plan($flags="") { // zwraca listę nauczycieli do zastąpienia lub zastępujących $unit = "nau_list_for_plan"; log_me($unit,"flags=$flags"); $nvp = $_SESSION['nvp']; if (strpos($flags, "[L4]")!==FALSE) $f_L4 = TRUE; else $f_L4 = FALSE; if (strpos($flags, "[inSubs]")!==FALSE) $f_inSubs = TRUE; else $f_inSubs = FALSE; $sql = "SELECT n.*, f_nau_is_onL4(nau_id, nau_szk_id) AS nau_naL4, f_nau_is_inSubs(nau_id, nau_szk_id) AS nau_inSubs, f_ile_pl(nau_szk_id, ".getPlan().", 'nau', nau_id) AS ile_pl "; $sql.= " FROM nauczyciele n "; $sql.= " WHERE nau_szk_id=".$_SESSION['szk_id']." ORDER by nau_nazwisko, nau_imie"; $q = doSQL($sql,$unit); if (!$q) { log_me($unit, "### ERROR: ".mysql_error()." [SQL] ".$sql); return; } $o = ""; while ($r = mysql_fetch_array($q)) { if (strlen($o)>0) $o.= " "; if (!$f_L4 and !$f_inSubs) // lista domyślna (wszystkich nauczycieli) $o.= ''.show_nau($r['nau_id'], 'span',"",'cursor:pointer; padding:0 2px').'('.ile_pl_2_view($r['ile_pl']).')'; if ($f_inSubs and $r['nau_inSubs']>0) // ten nauczyciel zastępuje kogoś $o.= ''.show_nau($r['nau_id'], 'span',"",'cursor:pointer; padding:0 2px').''; if ($f_L4 and $r['nau_naL4']>0) { // czy ten nauczyciel jest na L4? $o.= ''.show_nau($r['nau_id'], 'span',"",'cursor:pointer; padding:0 2px').''; // daj możliwość automatycznego ułożenia zastępstw za tego nauczyciela if ($_SESSION['uzy_id']==4) $o.= ''; } } if ($o <> "") { $h = "Nauczyciele"; if ($f_L4) $h .= " do zastąpienia"; elseif ($f_inSubs) $h .= " zastępujący"; $h.= ": "; return '
'.$h.$o.'
'; } return '
'.$o.'
'; } function nau_tab_for_plan($p_cols = 5/*ilość kolumn*/, $flags="") { // zwraca listę nauczycieli w tabeli do pokazania ich planów $unit = "nau_tab_for_plan"; log_me($unit,"flags=$flags"); $nvp = $_SESSION['nvp']; if (strpos($flags, "[L4]")!==FALSE) $f_L4 = TRUE; else $f_L4 = FALSE; if (strpos($flags, "[inSubs]")!==FALSE) $f_inSubs = TRUE; else $f_inSubs = FALSE; $f_ppp = isFlag("[PPP]", $flags) & $_SESSION['szk_f_ppp']=='T'; $sql = "SELECT n.*, f_nau_is_onL4(nau_id, nau_szk_id) AS nau_naL4, f_nau_is_inSubs(nau_id, nau_szk_id) AS nau_inSubs, f_ile_pl(nau_szk_id, ".getPlan().", 'nau', nau_id) AS ile_pl\n"; $sql.= " FROM v_nauczyciele n\n"; $sql.= " WHERE nau_szk_id=".$_SESSION['szk_id']."\n"; $sql.= " AND ".($f_ppp ? "nau_f_ppp IN (1,2)":"nau_f_ppp IN (0,2)")."\n"; $sql.= " ORDER by nau_osoba_sort"; $q = doSQL($sql,$unit); if (!$q) { log_me($unit, "### ERROR: ".mysql_error()." [SQL] ".$sql); return; } $o = ''; $dat = array(); while ($r = mysql_fetch_array($q)) { $dat[] = $r; } $dcnt = count($dat); for ($w=0; $w<$dcnt/$p_cols; $w++) { // wiersze $o.= ''; for ($k=0; $k<$p_cols; $k++) { // kolumny $i = $w + (ceil($dcnt/$p_cols)) * ($k); if ($i < $dcnt) { if (!$f_L4 and !$f_inSubs) // lista domyślna (wszystkich nauczycieli) $o.= ''; if ($f_inSubs and $dat[$i]['nau_inSubs']>0) // ten nauczyciel zastępuje kogoś $o.= ''; if ($f_L4 and $dat[$i]['nau_naL4']>0) { // czy ten nauczyciel jest na L4? $o.= ''; // daj możliwość automatycznego ułożenia zastępstw za tego nauczyciela if ($_SESSION['uzy_id']==4) $o.= ''; } } } $o.= ''; } $o.= '
'.show_nau($dat[$i]['nau_id'], 'span',"",'cursor: pointer; padding: 0 2px').'('.ile_pl_2_view($dat[$i]['ile_pl']).')'.show_nau($dat[$i]['nau_id'], 'span',"",'cursor: pointer; padding: 0 2px').''.show_nau($dat[$i]['nau_id'], 'span',"",'cursor: pointer; padding: 0 2px').'
'; if ($o <> "") { $h = "Nauczyciele".($f_ppp ? " PPP":""); if ($f_L4) $h .= " do zastąpienia"; elseif ($f_inSubs) $h .= " zastępujący"; $h.= ": "; return '
'.$h.$o.'
'; } return '
'.$o.'
'; } function nauPPP_cnt() { // zwraca ilość nauczycieli PPP $unit = "gruPPP_cnt"; $sql = "SELECT count(*) FROM nauczyciele\n"; $sql.= " WHERE nau_f_ppp IN (1,2) AND nau_szk_id=".$_SESSION['szk_id']; $q = doSQL($sql,$unit); $r = mysql_fetch_array($q); return $r[0]; } function sal_list_for_plan() { // zwraca listę sal oddzielonych przecinkami global $nvp, $em_sala; $sql = "SELECT s.*, f_ile_pl(sal_szk_id, ".getPlan().", 'sal', sal_id) AS ile_pl FROM sale s"; $sql.= " WHERE sal_szk_id=".$_SESSION['szk_id']." ORDER by sal_nazwa"; $q = doSQL($sql,"sal_list_for_plan"); $o = ""; while ($r = mysql_fetch_array($q)) { if (strlen($o)>0) $o.= " "; $o.= ''.str_replace(" "," ",$r['sal_nazwa']).'('.ile_pl_2_view($r['ile_pl']).')'; } return '
'."$em_salaSale: ".$o.'
'; } function sal_tab_for_plan($p_cols = 5/*ilość kolumn*/) { // zwraca tabelę sal do pokazania planu global $nvp, $em_sala; $sql = "SELECT s.*, f_ile_pl(sal_szk_id, ".getPlan().", 'sal', sal_id) AS ile_pl FROM sale s"; $sql.= " WHERE sal_szk_id=".$_SESSION['szk_id']." ORDER by sal_nazwa"; $q = doSQL($sql,"sal_list_for_plan"); $o = ''; $dat = array(); while ($r = mysql_fetch_array($q)) { $dat[] = $r; } $dcnt = count($dat); for ($w=0; $w<$dcnt/$p_cols; $w++) { // wiersze $o.= ''; for ($k=0; $k<$p_cols; $k++) { // kolumny $i = $w + (ceil($dcnt/$p_cols)) * ($k); if ($i < $dcnt) $o.= ''; } $o.= ''; } $o.= '
'.str_replace(" "," ",$dat[$i]['sal_nazwa']).'('.ile_pl_2_view($dat[$i]['ile_pl']).')
'; return '
'."$em_salaSale: ".$o.'
'; } function days_list_for_L4() { // zwraca listę dni, kiedy nie ma jakiegoś nauczyciela $unit = "days_list_for_L4"; global $nvp; // $sql = "SELECT distinct(zas_dzien) AS dzien FROM zastepstwa z"; // $sql.= " WHERE zas_szk_id=".$_SESSION['szk_id']." ORDER BY zas_dzien"; $sql = "SELECT zas_dzien AS dzien, count(distinct zas_za_nau_id)-0 ilu_na_L4 FROM zastepstwa z"; $sql.= " WHERE zas_szk_id=".$_SESSION['szk_id']." AND f_nau_is_onL4(zas_za_nau_id, zas_szk_id) > 0 "; $sql.= " GROUP BY zas_dzien ORDER BY zas_dzien"; $q = doSQL($sql,$unit); $o = ""; $sep = ""; while ($r = mysql_fetch_array($q)) { // $o .= $sep.''.dzienTygodnia($r['dzien']).''; $o .= $sep.''.dzienTygodnia($r['dzien']).' ('.$r['ilu_na_L4'].')'; $sep = ", "; } if ($o <> "") { $o = 'Dni z nieobecnymi nauczycielami: '.$o; } return '
'.$o.'
'; } function grun_list_for_print() { // 2024-11-06 (44. urodziny) // zwraca listę najbliższych dni, kiedy jakaś grupa jest nieobecna i tworzy DIV-y do wyświetlenia tych nieobecności $unit = "grun_list_for_print"; global $nvp; $today = date('Y-m-d'); $sql = "SELECT grun_id, grun_data, grun_dzien AS dzien "; $sql.= " FROM grupy_nieobecne "; $sql.= " WHERE DATE(now()) <= grun_data "; $sql.= " AND grun_data <= DATE_ADD(DATE(now()),INTERVAL 6 DAY) "; $sql.= " AND grun_szk_id=".$_SESSION['szk_id']; $sql.= " ORDER BY grun_data, grun_od"; $q = doSQL($sql, $unit); $o = ""; $gruns = ""; $prev_dzien = -1; while ($r = mysql_fetch_array($q)) { log_me($unit, "dzien=".$r['dzien']." data=".$r['grun_data']); if ($prev_dzien<>-1 and $r['dzien'] <> $prev_dzien) { $o.= ', '.dzien_tyg($prev_dzien); if ($prev_data == $today) $o.= " (dziś)"; $o.= ''; $id_div = "grun".$prev_data; $gruns.= '
'; // miejsce na nieobecności grup } $prev_dzien = $r['dzien']; $prev_data = $r['grun_data']; } if ($prev_dzien<>-1) { $o.= ', '.dzien_tyg($prev_dzien); if ($prev_data == $today) $o.= " (dziś)"; $o.= ''; $id_div = "grun".$prev_data; $gruns.= '
'; // miejsce na nieobecności grup } $o = substr($o,2); // bez ", " na początku if ($o <> "") $o = "Nieobecności grup: ".$o; log_val($unit." out", "o=".$o." gruns=".$gruns); return array("list"=>'
'.$o.'
', "gruns"=>$gruns); } function sub_list_days_for_print() { // 2024-10-20 // zwraca listę samych dni, w których są zastępstwa za nauczycieli i tworzy DIV-y, w których można będzie wyświetlić plany ich zastępstw //... ułatwienie (ergonomia), by nie trzeba było klikać tego dnia przy każdym nauczycielu w części "Zastępstwa za:" (funkcja 'sub_list_for_print') $unit = "sub_list_days_for_print"; global $nvp; $o = ""; $sql = "SELECT na4_dzien dzien,nau_id FROM nauczyciele_L4 JOIN v_nauczyciele ON nau_id=na4_nau_id WHERE na4_szk_id=".$_SESSION['szk_id']." ORDER BY na4_dzien,nau_osoba"; $q = doSQL($sql, $unit); $o = ""; $subPlans = ""; $nautr_ids = ""; // lista ID nauczycieli do zastąpienia danego dnia $prev_dzien = -1; while ($r = mysql_fetch_array($q)) { if ($prev_dzien<>-1 and $r['dzien'] <> $prev_dzien) { $o.= ', '.dzien_tyg($prev_dzien).''; $nautr_ids = ""; } $nautr_ids.= ",".$r['nau_id']; $prev_dzien = $r['dzien']; $subPlans.= '
'; // miejsce na plan zastępstw } if ($prev_dzien<>-1) $o.= ', '.dzien_tyg($prev_dzien).''; $o = "Zastępstwa w: ".substr($o,2); // bez ", " na początku return array("sub_list"=>'
'.$o.'
', "subPlans"=>$subPlans); } function sub_list_for_print() { // zwraca listę dni, w których są zastępstwa za nauczycieli i tworzy DIV-y, w których można będzie wyświetlić plany ich zastępstw global $nvp; $o = ""; $sql = "SELECT * FROM nauczyciele_L4 JOIN v_nauczyciele ON nau_id=na4_nau_id WHERE na4_szk_id=".$_SESSION['szk_id']." ORDER BY nau_osoba, na4_dzien"; $q = doSQL($sql,"sub_list_for_print"); $o = ""; $pnau = -1; $subPlans = ""; while ($r = mysql_fetch_array($q)) { if ($pnau <> $r['na4_nau_id']) { $o.= ", ".show_nau($r['na4_nau_id'], 'span',"",'cursor: default; padding: 0 1px')./* ''.get_class_val("nau",$r['na4_nau_id'],"osoba").''.*/": "; } $o.= ''.dzien_tyg($r['na4_dzien']).''; $pnau = $r['na4_nau_id']; $subPlans.= '
'; // miejsce na plan zastępstw } $o = "Zastępstwa za: ".substr($o,2); // bez ", " na początku return array("sub_list"=>'
'.$o.'
', "subPlans"=>$subPlans); } function inSub_list_for_print() { // zwraca listę dni, w których nauczyciele kogoś zastępują i tworzy DIV-y, w których można będzie wyświetlić plany ich zastępstw global $nvp; $o = ""; $sql = "SELECT DISTINCT";//f_nau_is_onL4_day(zas_za_nau_id, ".$_SESSION['szk_id'].", zas_dzien) L4_day,"; $sql.= " zas_nau_id, zas_dzien"; $sql.= " FROM zastepstwa JOIN v_nauczyciele ON nau_id = zas_nau_id"; $sql.= " WHERE zas_szk_id=".$_SESSION['szk_id']; $sql.= " AND f_nau_is_inSubs_day(zas_nau_id, zas_szk_id, zas_dzien) > 0"; $sql.= " AND f_nau_is_onL4_day(zas_za_nau_id, zas_szk_id, zas_dzien) > 0"; $sql.= " ORDER BY nau_osoba, zas_dzien"; $q = doSQL($sql,"inSub_list_for_print"); /* if (!$q) { log_me("inSub_list_for_print", "### ERROR: ".mysql_error()." [SQL]".$sql); } */ $o = ""; $pnau = -1; $subPlans = ""; while ($r = mysql_fetch_array($q)) { //if ($r['L4_day'] == 0) continue; if ($pnau <> $r['zas_nau_id']) { $o.= ", ".show_nau($r['zas_nau_id'], 'span',"",'cursor: default; padding: 0 1px')./* ''.get_class_val("nau",$r['zas_nau_id'],"osoba").''.*/": "; } $o.= ''.dzien_tyg($r['zas_dzien']).''; $pnau = $r['zas_nau_id']; $subPlans.= '
'; // miejsce na plan zastępstw } if (strlen($o)>0) $o = "Zastępujący: ".substr($o,2); // bez ", " na początku else $o = "Zastępujący: brak"; return array("sub_list"=>'
'.$o.'
', "inSubPlans"=>$subPlans); } function planSubs_list_for_print() { $unit = "planSubs_list_for_print"; // zwraca listę dni, w których nauczyciele kogoś zastępują i tworzy DIV-y, w których można będzie wyświetlić plan ich zajęć z zastępstwami global $nvp; $o = ""; $sql = "SELECT DISTINCT zas_nau_id, zas_dzien"; $sql.= " FROM zastepstwa JOIN v_nauczyciele ON nau_id = zas_nau_id"; $sql.= " WHERE zas_szk_id=".$_SESSION['szk_id']; $sql.= " AND f_nau_is_inSubs_day(zas_nau_id, zas_szk_id, zas_dzien) > 0"; $sql.= " AND f_nau_is_onL4_day(zas_za_nau_id, zas_szk_id, zas_dzien) > 0"; $sql.= " ORDER BY nau_osoba, zas_dzien"; $q = doSQL($sql, $unit); $o = ""; $pnau = -1; $planSubs = ""; while ($r = mysql_fetch_array($q)) { //if ($r['L4_day'] == 0) continue; if ($pnau <> $r['zas_nau_id']) { $o.= ", ".show_nau($r['zas_nau_id'], 'span',"",'cursor: default; padding: 0 1px').": "; } $o.= ''.dzien_tyg($r['zas_dzien']).''; $pnau = $r['zas_nau_id']; $planSubs.= '
'; // miejsce na plan z zastępstwami } if (strlen($o)>0) $o = "Plany z zastępstwami: ".substr($o,2); // bez ", " na początku else $o = "Plany z zastępstwami: brak"; return array("sub_list"=>'
'.$o.'
', "planSubs"=>$planSubs); } //-------------------------- function when_may_repl__grun($nau, $nau_tr, $dz) { $unit = "when_may_repl__grun"; $szk_id = $_SESSION['szk_id']; $pla_id = getPlan(); // zwraca, kiedy nauczyciel 'nau' może zastępować nauczyciela 'nau_tr' w dniu 'dz' z uwzględnieniem nieobecności grup dajt($t_start); log_me($unit,"nau[$nau]=".get_class_val("nau", $nau, "osoba")." nau_tr[$nau_tr]=".get_class_val("nau", $nau_tr, "osoba").", dz=$dz"); // $sql = "SELECT * FROM v_plan_dla_def_L4 WHERE pla_id=".$pla_id." AND dzien=".$dz." AND (nau_id = ".$nau_tr." OR (nau_id = ".$nau." AND gru_id IS NOT NULL))"; $sql = "SELECT * FROM v_plan_dla_def_L4 WHERE pla_id=".$pla_id." AND dzien=".$dz." AND (nau_id = '".$nau_tr."' OR (nau_id = ".$nau." ))"; $q = doSQL($sql, $unit,"[_t]"); // [i] krótko trwa if (!$q) { return "## Błąd dostępu do bazy danych ##"; } $tr_pl = array(); // wpisy planu nauczyciela do zastąpienia $i_tr = 0; $re_pl = array(); // wpisy planu nauczyciela mogącego zastępować $i_re = 0; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { if ($r['nau_id']==$nau) { // plan nauczyciela mogącego chyba zastępować $re_pl[$i_re++] = $r; } if ($r['nau_id']==$nau_tr) { // plan nauczyciela do zastąpienia $tr_pl[$i_tr++] = $r; } } // pobranie nieobecności grup, które uczy nauczyciel zastępujących (nau_r) w dniu niedostępn. nauczyciela do zastąpienia (nau_tr) $sql_grun = "SELECT grun_id, grun_szk_id, grun_gru_id, grun_data, grun_dzien, TIME_FORMAT(grun_od,'%H:%i') grun_od, TIME_FORMAT(grun_do,'%H:%i') grun_do, grun_opis "; $sql_grun.= " FROM grupy_nieobecne grun "; $sql_grun.= " WHERE date(now())<=grun_data AND grun_data<=date(now())+6 "; // nieobecności grup z 7 następujących dni... $sql_grun.= " AND grun_dzien=$dz "; $sql_grun.= " AND EXISTS (SELECT 1 FROM plan "; $sql_grun.= " WHERE pl_pla_id=$pla_id "; $sql_grun.= " AND pl_nau_id=$nau AND pl_gru_id=grun_gru_id AND pl_dzien=grun_dzien) "; //...które normalnie uczy w tym dniu nau_r (nau zastępujący) // można by spr., czy jakieś zajęcia nau_tr pokrywają się z jakimiś zaj. nau_r w tym dniu $sql_grun.= " ORDER BY grun_data DESC"; $q_grun = doSQL($sql_grun, $unit."-sql_grun","[noSQL][_t]"); // [i] krótko trwa if (!$q_grun) { telme_dbErr($unit, "", $sql_grun); return "## Błąd odczytu danych z bazy dot. nieob. grup ##"; } $grun = array(); while ($r = mysql_fetch_array($q_grun, MYSQL_ASSOC)) { $grun[$dz][$r['grun_gru_id']] = $r; // pamiętaj dane nieobecności dla konkretnego dnia tygodnia // (nie będzie nigdy nadpisania, bo zapytanie zwraca tylko 7 kolejnych dni) } log_val($unit." grun", $grun); // <== /* $sql = "SELECT t FROM czasy WHERE 1=1 ";//AND j=".$_SESSION['time_step']." "; $sql.= " AND EXISTS (SELECT 1 FROM nauczyciele_godziny WHERE nag_nau_id=".$nau." AND nag_dzien=".$dz." AND nag_pla_id=".$pla_id." AND t>=nag_od AND t=pl_godzina_od AND t'T') AND grun_id IS NULL "; $sql.= " AND pl_dzien=".$dz." AND t>=pl_godzina_od AND t=zas_od AND t=zas_od AND t=nag_od AND t 'D'"; $sql.= " AND pl_dzien=".$dz." AND t>=pl_godzina_od AND t'T') AND grun_id IS NULL AND IFNULL(pl_status,'-') <> 'D'"; $sql.= " AND pl_dzien=".$dz." AND t>=pl_godzina_od AND t $t, 2 => minute2time($t)); } //log_val("rt", $rt); $when = ""; $pt = -1; // poprzednia jednostka czasu $ph = -1; // poprzednia godzina jednostki czasu (? godzina poprzedniej jedn. czasu) $ppl = -1; // poprzedni wpis w planie $hm = array(); $p = 0; // grupa do koloru, by rozróżnić elementy planu dajt($t_foreach_start); foreach ($rt as $t => $v) { $p_hm = $hm; $hm = explode(":",minute2time($t)); if ($ph <> $hm[0]) { // zmiana godziny $ph = -1; } if ($pt>-1) { // jest poprzednia jednostka czasu if ($t - $pt > $_SESSION['time_step']) { // jednostki się nie stykają $pt = -1; // "nie ma" poprzedniej jedn. czasu $p = 1 - $p; // zmień grupę } else { // stykają się => czy jednostki są z różnych wpisów? $p_t = -1; $p_pt = -1; $pi = -1; // "kursor" po planie nauczyciela do zastąpienia (nr pozycji w planie) foreach ($tr_pl as $r) { $pi++; $r_od = $r['od_h']*60+$r['od_m']; $r_do = $r['do_h']*60+$r['do_m'] - 1; if ($r_od <= $t and $t <= $r_do and $p_t == -1) $p_t = $pi; if ($r_od <= $pt and $pt <= $r_do and $p_pt == -1) $p_pt = $pi; if ($p_t > -1 and $p_pt > -1) { break; } } if ($p_t <> $p_pt) { if ($tr_pl[$p_t]['prz_id'] <> $tr_pl[$p_pt]['prz_id'] or $tr_pl[$p_t]['gru_id'] <> $tr_pl[$p_pt]['gru_id'] ) $ppl = -1; // zeruj nr poprzedniego wpisu w planie $p = 1 - $p; // zmień grupę } } } if ($pt==-1 or $ph==-1 or $ppl==-1) { // zmieniła się godzina, odstęp między jednostkami czasu lub wpis na planie $pi = -1; foreach ($tr_pl as $r) { $pi++; $r_od = $r['od_h']*60+$r['od_m']; $r_do = $r['do_h']*60+$r['do_m'] - 1; if ($r_od <= $t and $t <= $r_do) { $p_t = $pi; break; } } //log_val("p_hm",$p_hm); $when = str_replace("{#}", $p_hm[0]."_".$p_hm[1], $when); //log_val("when",$when); $when.= ' '.get_class_val("prz", $tr_pl[$p_t]['prz_id'], "nazwa").'
z grupą '.get_class_val("gru", $tr_pl[$p_t]['gru_id'], "nazwa").''); $when.= ' onclick="js_putOnSub(\''.$_SESSION['nvp'].'\','.$nau.','.$nau_tr.', '.$tr_pl[$p_t]['prz_id'].', '.$tr_pl[$p_t]['gru_id'].', this)"'; $when.= '>'.$hm[0].''; } $pi = -1; unset($p_t_re); foreach ($re_pl as $r) { $pi++; // log_val("re_pl ".($pi), $r); $r_od = $r['od_h']*60+$r['od_m']; $r_do = $r['do_h']*60+$r['do_m'] - 1; if (/*$r['prz_f_bez_grupy']=='T' and*/ $r_od <= $t and $t <= $r_do) { $p_t_re = $pi; break; } } $when.= '$grg_t[0], "do"=>$grg_t[1], "f"=>$grg_t[0][0]*60 + $grg_t[0][1], "t"=>$grg_t[1][0]*60 + $grg_t[1][1]); log_val($unit." grg_t_ft", $grg_t_ft); if (($grg['grun_od']=="" or 0<$grg_t_ft["f"] and $grg_t_ft["f"]<=$t) and ($grg['grun_do']=="" or 24*60>=$grg_t_ft["t"] and $t<$grg_t_ft["t"]) ) { $when.= ' L4_time_box_grun'; $gru_absent = TRUE; } log_me($unit, "gru_absent=$gru_absent"); } $when.= '"'; // koniec "class" $when.= ' onclick="js_putOnSub(\''.$_SESSION['nvp'].'\','.$nau.','.$nau_tr.', '.$tr_pl[$p_t]['prz_id'].', '.$tr_pl[$p_t]['gru_id'].', this)" '; $when.= ' onmouseover="$(\'.'.$dz."_".$nau_tr."_".$hm[0]."_".$hm[1].'\').addClass(\'L4_time_box_hover\'); '; $tip = ''.get_class_val("prz", $tr_pl[$p_t]['prz_id'], "nazwa").' z grupą '.get_class_val("gru", $tr_pl[$p_t]['gru_id'], "nazwa").''; if (isset($p_t_re)) { $tip.= '
'.show_nau($nau,'span').' ma wtedy '.get_class_val("prz", $re_pl[$p_t_re]['prz_id'], "nazwa").''; if ($re_pl[$p_t_re]['gru_id']<>"") { $tip.= ' z '; if ($gru_absent) $tip.= 'nieobecną grupą '; else $tip.= 'grupą '; $tip.= ''.get_class_val("gru", $re_pl[$p_t_re]['gru_id'], "nazwa").''; if ($gru_absent) { $tip.= '
'; // $tip.= ' ('.$grg['grun_data'].': '.$grg['grun_opis'].''; $tip.= 'Powód nieobecności grupy: '.$grg['grun_opis'].''; $tip.= '
Data nieobecności: '.$grg['grun_data'].' '.dzien_tyg($grg['grun_dzien']).''; if ($grg['grun_od']<>"" or $grg['grun_do']<>"") { $tip.= '
Czas nieobecności: '; // $tip.= ' [w godzinach '; $tip.= $grg['grun_od'].'–'.$grg['grun_do']; // $tip.= ']'; } $tip.= '
'; // $tip.= ') '; // $tip.= "{p_t_re=$p_t_re, t=$t, ".$grg_t_ft["f"]."-".$grg_t_ft["t"]."} "; } } } $when.= ' '.show_Tip($tip).'"'; $when.= ' onmouseout="$(\'.'.$dz."_".$nau_tr."_".$hm[0]."_".$hm[1].'\').removeClass(\'L4_time_box_hover\'); '; $when.= ' hideTip();"'; $when.= '>'.$hm[1].'
'; $pt = $t; $ph = $hm[0]; $ppl = 0; } dajt($t_foreach_end); $when = str_replace("{#}", $hm[0]."_".$hm[1], $when); dajt($t_end); log_me($unit ,"elapsed: ".elapsed($t_start, $t_end, 4)." foreach: ".elapsed($t_foreach_start, $t_foreach_end, 5)); return $when; } function when_may_repl($nau, $nau_tr, $dz) { $unit = "when_may_repl"; // zwraca, kiedy nauczyciel 'nau' może zastępować nauczyciela 'nau_tr' w dniu 'dz' //log_me('when_may_repl',"nau[$nau]=".get_class_val("nau", $nau, "osoba")." nau_tr[$nau_tr]=".get_class_val("nau", $nau_tr, "osoba").", dz=$dz"); /* // czas, w którym nau_tr jest już zastępowany lub nau zastępuje [OK] $sql = "SELECT * FROM v_zastepstwa WHERE zas_szk_id=".$_SESSION['szk_id']." AND pl_pla_id=".$pla_id." AND (zas_za_nau_id=".$nau_tr." OR zas_nau_id=".$nau.") AND zas_dzien=".$dz; //$q = mysql_query($sql); $q = doSQL($sql, $unit); if (!$q) { log_me($unit, "### ERROR: ".mysql_error()." [SQL] ".$sql); return "## Błąd dostępu do bazy danych ##"; } $juz_zast = array(); while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { // $juz_zast[$r['j_h']*60 + $r['j_m']] = $r['j_h']*60 + $r['j_m']; $t_od = explode(":",$r['zas_od']); $t_do = explode(":",$r['zas_do']); for ($t = $t_od[0]*60 + $t_od[1]; $t < $t_do[0]*60 + $t_do[1]; $t += $_SESSION['time_step']) { $juz_zast[$t] = $t; // znacznik czasu (ilość minut od początku dnia) } } $work = db_nau_workTime_day($nau, $dz); //log_val("work nau",$work); for ($t=$work[0]*60+$work[1]; $t<$work[2]*60+$work[3]; $t+=$_SESSION['time_step']) { // w tych jednostkach czasu $nau pracuje $t_txt = minute2time($t); // if ($is_in_sub<=-1) //??????????????????????? $p_nau[$t] = array(0 => $t, 2 => $t_txt); // jednostki pracy $nau } //log_val("juz_zast", $juz_zast); //log_val("p_nau", $p_nau); $p_nau = array_diff_key($p_nau, $juz_zast); // usuń jednostki, w których nau_tr jest już zastępowany przez kogoś lub nau zastępuje $work_tr = db_nau_workTime_day($nau_tr, $dz); //log_val("work nau_tr",$work_tr); for ($t=$work_tr[0]*60+$work_tr[1]; $t<$work_tr[2]*60+$work_tr[3]; $t+=$_SESSION['time_step']) { // w tych jednostkach czasu $nau_tr pracuje $t_txt = minute2time($t); $p_nautr[$t] = array(0 => $t, 2 => $t_txt); // jednostki pracy $nau_tr } */ // $sql = "SELECT * FROM v_plan_dla_def_L4 WHERE pla_id=".getPlan()." AND dzien=".$dz." AND nau_id IN (".$nau_tr.",".$nau.")"; // $sql = "SELECT * FROM v_plan_dla_def_L4 WHERE pla_id=".getPlan()." AND dzien=".$dz." AND (nau_id = ".$nau_tr." OR (nau_id = ".$nau." AND gru_id IS NOT NULL))"; $sql = "SELECT * FROM v_plan_dla_def_L4 WHERE pla_id=".getPlan()." AND dzien=".$dz." AND (nau_id = ".$nau_tr." OR (nau_id = ".$nau." ))"; $q = doSQL($sql, $unit); if (!$q) { return "## Błąd dostępu do bazy danych ##"; } $tr_pl = array(); // wpisy planu nauczyciela do zastąpienia $i_tr = 0; $re_pl = array(); // wpisy planu nauczyciela mogącego zastępować $i_re = 0; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { if ($r['nau_id']==$nau) { // plan nauczyciela mogącego chyba zastępować $re_pl[$i_re++] = $r; } if ($r['nau_id']==$nau_tr) { // plan nauczyciela do zastąpienia $tr_pl[$i_tr++] = $r; } } /* $rt = array_intersect_key($p_nau, $p_nautr); // część wspólna tablic (wg kluczy)*/ $sql = "SELECT t FROM czasy WHERE 1=1 ";//AND j=".$_SESSION['time_step']." "; $sql.= " AND EXISTS (SELECT 1 FROM nauczyciele_godziny WHERE nag_nau_id=".$nau." AND nag_dzien=".$dz." AND nag_pla_id=".getPlan()." AND t>=nag_od AND t=pl_godzina_od AND t'T') AND pl_dzien=".$dz." AND t>=pl_godzina_od AND t=zas_od AND t $t, 2 => minute2time($t)); } //log_val("rt", $rt); $when = ""; $pt = -1; // poprzednia jednostka czasu $ph = -1; // poprzednia godzina jednostki czasu (? godzina poprzedniej jedn. czasu) $ppl = -1; // poprzedni wpis w planie $hm = array(); $p = 0; // grupa do koloru, by rozróżnić elementy planu foreach ($rt as $t => $v) { $p_hm = $hm; $hm = explode(":",minute2time($t)); if ($ph <> $hm[0]) { // zmiana godziny $ph = -1; } if ($pt>-1) { // jest poprzednia jednostka czasu if ($t - $pt > $_SESSION['time_step']) { // jednostki się nie stykają $pt = -1; // "nie ma" poprzedniej jedn. czasu $p = 1 - $p; // zmień grupę } else { // stykają się => czy jednostki są z różnych wpisów? $p_t = -1; $p_pt = -1; $pi = -1; // "kursor" po planie nauczyciela do zastąpienia (nr pozycji w planie) foreach ($tr_pl as $r) { $pi++; $r_od = $r['od_h']*60+$r['od_m']; $r_do = $r['do_h']*60+$r['do_m'] - 1; if ($r_od <= $t and $t <= $r_do and $p_t == -1) $p_t = $pi; if ($r_od <= $pt and $pt <= $r_do and $p_pt == -1) $p_pt = $pi; if ($p_t > -1 and $p_pt > -1) { break; } } if ($p_t <> $p_pt) { if ($tr_pl[$p_t]['prz_id'] <> $tr_pl[$p_pt]['prz_id'] or $tr_pl[$p_t]['gru_id'] <> $tr_pl[$p_pt]['gru_id'] ) $ppl = -1; // zeruj nr poprzedniego wpisu w planie $p = 1 - $p; // zmień grupę } } } if ($pt==-1 or $ph==-1 or $ppl==-1) { // zmieniła się godzina, odstęp między jednostkami czasu lub wpis na planie $pi = -1; foreach ($tr_pl as $r) { $pi++; $r_od = $r['od_h']*60+$r['od_m']; $r_do = $r['do_h']*60+$r['do_m'] - 1; if ($r_od <= $t and $t <= $r_do) { $p_t = $pi; break; } } //log_val("p_hm",$p_hm); $when = str_replace("{#}", $p_hm[0]."_".$p_hm[1], $when); //log_val("when",$when); $when.= ' '.get_class_val("prz", $tr_pl[$p_t]['prz_id'], "nazwa").' z grupą '.get_class_val("gru", $tr_pl[$p_t]['gru_id'], "nazwa").''); $when.= ' onclick="js_putOnSub(\''.$_SESSION['nvp'].'\','.$nau.','.$nau_tr.', '.$tr_pl[$p_t]['prz_id'].', '.$tr_pl[$p_t]['gru_id'].', this)"'; $when.= '>'.$hm[0].''; } $pi = -1; unset($p_t_re); foreach ($re_pl as $r) { $pi++; // log_val("re_pl ".($pi), $r); $r_od = $r['od_h']*60+$r['od_m']; $r_do = $r['do_h']*60+$r['do_m'] - 1; if (/*$r['prz_f_bez_grupy']=='T' and*/ $r_od <= $t and $t <= $r_do) { $p_t_re = $pi; break; } } $when.= ''.get_class_val("prz", $pla[$pla_p]->prz, "nazwa").' z grupą '.get_class_val("gru", $pla[$pla_p]->gru, "nazwa").''); $when.= ' onclick="js_putOnSub(\''.$_SESSION['nvp'].'\','.$nau.','.$nau_tr.', '.$tr_pl[$p_t]['prz_id'].', '.$tr_pl[$p_t]['gru_id'].', this)" '; $when.= ' onmouseover="$(\'.'.$dz."_".$nau_tr."_".$hm[0]."_".$hm[1].'\').addClass(\'L4_time_box_hover\'); '; // $when.= ' $(\'.'.$dz."_".$hm[0]."_".$hm[1].'\').css({\'background-color\':\'#008\', \'color\':\'#aff\'}); '; $tip = ''.get_class_val("prz", $tr_pl[$p_t]['prz_id'], "nazwa").' z grupą '.get_class_val("gru", $tr_pl[$p_t]['gru_id'], "nazwa").''; if (isset($p_t_re)) { $tip.= '
'.show_nau($nau,'span').' ma wtedy '.get_class_val("prz", $re_pl[$p_t_re]['prz_id'], "nazwa").''; if ($re_pl[$p_t_re]['gru_id']<>"") $tip.= ' z grupą '.get_class_val("gru", $re_pl[$p_t_re]['gru_id'], "nazwa").''; } $when.= ' '.show_Tip($tip).'"'; $when.= ' onmouseout="$(\'.'.$dz."_".$nau_tr."_".$hm[0]."_".$hm[1].'\').removeClass(\'L4_time_box_hover\'); '; // $when.= ' $(\'.'.$dz."_".$hm[0]."_".$hm[1].'\').css({\'background-color\':\'#fff\', \'color\':\'#000\'}); '; $when.= ' hideTip();"'; $when.= '>'.$hm[1].'
'; $pt = $t; $ph = $hm[0]; $ppl = 0; } $when = str_replace("{#}", $hm[0]."_".$hm[1], $when); return $when; } function nau_may_replace__grun($nau, $dz) { // zwraca, kto może zastąpić nauczyciela w danym dniu (i w jakich godzinach) z uwzględnieniem nieobecności grup $unit = "nau_may_replace__grun"; log_me($unit,"nau=$nau, dz=$dz"); dajt($t_start); if ($dz == "") { // log_me(); return "[".$unit."] ERR: Nieznany dzień, w którym zastąpić nauczyciela."; } $may_repl = ""; $elapsed_when = ""; $sqlg = "SELECT * FROM grupy_nauczycieli WHERE grn_szk_id=".$_SESSION['szk_id']." ORDER BY grn_id"; $qg = doSQL($sqlg, $unit,"[]"); while ($rg = mysql_fetch_array($qg, MYSQL_ASSOC)) { // $sql = "SELECT * FROM v_nauczyciele WHERE nau_szk_id=".$_SESSION['szk_id']." AND f_nau_is_onL4_day(nau_id, nau_szk_id, ".$dz.")=0 AND CONCAT(',',w_grupach,',') LIKE '%,".$rg['grn_id'].",%'"; $sql = "SELECT * FROM v_nauczyciele "; $sql.= " LEFT JOIN nau_gna ON nau_id=ngn_nau_id AND ngn_gna_id=".$rg['grn_id']; // TODO:poprawić przynależność do grup nauczycieli $sql.= " WHERE nau_szk_id=".$_SESSION['szk_id']." AND f_nau_is_onL4_day(nau_id, nau_szk_id, ".$dz.")=0"; $sql.= " ORDER BY nau_osoba_sort"; $q = doSQL($sql,$unit,"[]"); if (!$q) { return "## Błąd dostępu do bazy danych ##"; } $may_repl.= 'Nauczyciele '.$rg['grn_nazwa'].'
'; $ni = 0; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { $ni++; if ($r['nau_id'] == $nau) continue; // to ten sam nauczyciel //log_me("nau_may_replace","nau=$nau, r[nau_id]=".$r['nau_id']); dajt($t_start_when); // $workTime = db_nau_workTime($r['nau_id']); // zakomentowane 2024-11-27 $mr = when_may_repl__grun($r['nau_id'],$nau,$dz); // kiedy nauczyciel $r['nau_id'] może zastępować nauczyciela $nau w dniu $dz dajt($t_end_when); $elapsed_when.= "\n".$ni.". ".get_class_val("nau", $r['nau_id'], "osoba")." = ".elapsed($t_start_when, $t_end_when); if ($mr <> "") { $may_repl.= '
'; $may_repl.= ''; $may_repl.= '
   '; $may_repl.= ''; $may_repl.= str_replace(" "," ",$r['nau_osoba']).':'.$mr.'
'."
\n"; } } } dajt($t_end); // telme(userInfo()."\n".execFunc($unit)."$elapsed_when ".elapsed($t_start,$t_end)); // telme(userInfo()."\n".execFunc($unit)." ".elapsed($t_start,$t_end)); return $may_repl; } function nau_may_replace($nau, $dz) { // zwraca, kto może zastąpić nauczyciela w danym dniu (i w jakich godzinach) $unit = "nau_may_replace"; log_me($unit,"nau=$nau, dz=$dz"); if ($dz == "") { // log_me(); return "[".$unit."] ERR: Nieznany dzień, w którym zastąpić nauczyciela."; } $may_repl = ""; $sqlg = "SELECT * FROM grupy_nauczycieli WHERE grn_szk_id=".$_SESSION['szk_id']." ORDER BY grn_id"; $qg = doSQL($sqlg, $unit); while ($rg = mysql_fetch_array($qg, MYSQL_ASSOC)) { // $sql = "SELECT * FROM v_nauczyciele WHERE nau_szk_id=".$_SESSION['szk_id']." AND f_nau_is_onL4_day(nau_id, nau_szk_id, ".$dz.")=0 AND CONCAT(',',w_grupach,',') LIKE '%,".$rg['grn_id'].",%'"; $sql = "SELECT * FROM v_nauczyciele LEFT JOIN nau_gna ON nau_id=ngn_nau_id AND ngn_gna_id=".$rg['grn_id']; $sql.= " WHERE nau_szk_id=".$_SESSION['szk_id']." AND f_nau_is_onL4_day(nau_id, nau_szk_id, ".$dz.")=0"; $sql.= " ORDER BY nau_osoba"; $q = doSQL($sql,$unit); if (!$q) { // log_me($unit, "### ERROR: ".mysql_error()." [SQL] ".$sql); return "## Błąd dostępu do bazy danych ##"; } $may_repl.= 'Nauczyciele '.$rg['grn_nazwa'].'
'; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { if ($r['nau_id'] == $nau) continue; // to ten sam nauczyciel //log_me("nau_may_replace","nau=$nau, r[nau_id]=".$r['nau_id']); $workTime = db_nau_workTime($r['nau_id']); $mr = when_may_repl($r['nau_id'],$nau,$dz); // kiedy nauczyciel $r['nau_id'] może zastępować nauczyciela $nau w dniu $dz if ($mr <> "") { $may_repl.= '
'; $may_repl.= ''; $may_repl.= '
   '; $may_repl.= ''; $may_repl.= str_replace(" "," ",$r['nau_osoba']).':'.$mr.'
'."
\n"; } } } return $may_repl; } function makeSubPlan($nautr, $dz, $flags="") { $unit = "makeSubPlan"; global $em_grupa; log_me($unit, "nautr=$nautr (".get_class_val("nau",$nautr,"osoba").") dz=$dz, flags=$flags"); if ($nautr == "") { log_me($unit, "Nieznana wartość parametru 'nautr' (nauczyciel do zastąpienia)."); telme(userInfo()."\n".execFunc($unit)."\n\xE2\x9A\xA0 Nieznana wartość parametru nautr (nauczyciel do zastąpienia)."); return "[".$unit."] ERR: Nieznany nauczyciel do zastąpienia."; } if ($dz == "") { log_me($unit, "Nieznana wartość parametru 'dz' (dzień)."); telme(userInfo()."\n".execFunc($unit)."\n\xE2\x9A\xA0 Nieznana wartość parametru dz' (dzień)."); return "[".$unit."] ERR: Nieznany dzień."; } $f_print = isFlag("[print]", $flags); $head = 'Zastępstwa '.dzienKiedy($dz).' za '.show_nau($nautr, "span"); $o = ''; $o.= ''; if (!$f_print) $o.= ''; $o.= ''; /* dodane 15-10-2024 */ $se = is_sess_expired($unit); if ($se["is"] == 1) { return $se["msg"]; } $noPlaSel = no_pla_sel($unit); if ($noPlaSel["no"] == 1) { return $noPlaSel["msg"]; } $sql = "SELECT * FROM v_zastepstwa WHERE zas_szk_id=".$_SESSION['szk_id']." AND pl_pla_id=".getPlan()." AND zas_za_nau_id=".$nautr." AND zas_dzien=".$dz." ORDER BY zas_od"; $q = doSQL($sql,$unit); if (!$q) { return "[".$unit."] ## Błąd dostępu do bazy danych ##"; } $is_sub = FALSE; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { //log_val("sub row", $r); $is_sub = TRUE; $o.= ''; if (!$f_print) $o.= ''; // możliwość usunięcia $o.= ''; $o.= ''; $o.= ''; $o.= show_nau($r['zas_nau_id'],"td",nauDayPlan($r['zas_nau_id'], $dz, "[subst]")).''; } $o.= '
CzasPrzedmiot'.$em_grupa.'GrupaNauczyciel
'.$r['zas_od'].'–'.$r['zas_do'].''.get_class_val("prz",$r['zas_prz_id'],"nazwa").''.get_class_val("gru",$r['zas_gru_id'],"nazwa").'
'; $add = ""; if (!$f_print) { // formularz dodawania "wyjątkowego" zastępstwa $add = '
'; // $add.= ''; $add.= '
'; $add.= ''; $add.= ''; $add.= ''; $add.= ''; $add.= ''; // $add.= ''; $add.= '
Godziny:–'; $add.= ':
Przedmiot
'.$em_grupa.'Grupa
Nauczyciel
Sala
'; $add.= '
Info:Aby szybko uzupełnić pola Godziny, Przedmiot i Grupa, kliknij
na jedno z zajęć '.dzienKiedy($dz).' (niżej na planie), za które chcesz
zdefiniować zastępstwo.
'; $add.= '
'; } // telme(userInfo()."\n[".$unit."]"); if ($is_sub) return $head.$o.$add; return $add; } function makeInSubPlan($nau, $dz, $flags="") { // zwraca plan zastępstw nauczyciela na dany dzień $unit = "makeInSubPlan"; log_me($unit, get_class_val("nau",$nau,"osoba")." dz=$dz, flags=$flags"); /* if ($_SESSION['szk_id'] == "") { $msg = "ERR: Nieznana placówka."; telme("[".$unit."] $msg"); log_me($unit, $msg); return "[".$unit."] $msg"; } */ /* dodane 24-10-2024 */ $se = is_sess_expired($unit); if ($se["is"] == 1) { return $se["msg"]; } if (strpos($flags, "[print]")!==FALSE) $f_print = TRUE; else $f_print = FALSE; if ($f_print) $head = show_nau($nau,"span"/*,nauDayPlan($r['zas_za_nau_id'], $dz, "[subst]")*/).' ma w'.($dz==1?"e":"").' '.dayOfWeek($dz).' zastępstwa:'; else $head = 'w'.($dz==1?"e":"").' '.dayOfWeek($dz).''; // $head = ""; $o = ''; $o.= ''; $o.= ''; $sql = "SELECT *"; $sql.= " FROM v_zastepstwa"; $sql.= " JOIN nauczyciele_L4 ON zas_za_nau_id = na4_nau_id"; $sql.= " WHERE zas_szk_id=".$_SESSION['szk_id']." AND pl_pla_id=".getPlan(); $sql.= " AND zas_nau_id=".$nau." AND zas_dzien=".$dz; $sql.= " AND na4_szk_id = ".$_SESSION['szk_id']; $sql.= " AND f_nau_is_onL4_day(zas_za_nau_id, na4_szk_id, zas_dzien)>0"; $sql.= " ORDER BY zas_od"; $q = doSQL($sql,$unit); if (!$q) { log_me($unit, "### ERROR: ".mysql_error()." [SQL] ".$sql); return "## Błąd dostępu do bazy danych ##"; } $is_sub = FALSE; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { //log_val("sub row", $r); $is_sub = TRUE; $o.= ''; $o.= ''; $o.= ''; $o.= ''; $o.= show_nau($r['zas_za_nau_id'],"td",nauDayPlan($r['zas_za_nau_id'], $dz, "[subst]")).''; } $o.= '
CzasPrzedmiotGrupaZamiast
'.$r['zas_od'].'–'.$r['zas_do'].''.get_class_val("prz",$r['zas_prz_id'],"nazwa").''.get_class_val("gru",$r['zas_gru_id'],"nazwa").'
'; // telme(userInfo()."\n[".$unit."]"); $add = ""; if ($is_sub) return $head.$o; return $add; } function gruDayPlanSubs($gru, $dz, $flags="") { $unit = "gruDayPlanSubs"; log_me($unit, get_class_val("gru",$gru,"nazwa")." dz=$dz, flags=$flags"); if (strpos($flags, "[print]")!==FALSE) $f_print = TRUE; else $f_print = FALSE; if ($f_print) $head = show_nau($nau,"span"/*,nauDayPlan($r['zas_za_nau_id'], $dz, "[subst]")*/).' ma w'.($dz==1?"e":"").' '.dayOfWeek($dz).' zastępstwa:'; else $head = "Plan grupy ".''.get_class_val("gru",$gru,"nazwa").' w'.($dz==1?"e":"").' '.dayOfWeek($dz).' z zastępstwami'; // $head = ""; $o = ''; $o.= ''; $o.= ''; $sql = "SELECT pl_nau_id, od, do, pl_prz_id, ' ' AS type FROM plan_v p"; $sql.= " WHERE p.pl_pla_id=".getPlan()." AND pl_gru_id=".$gru." AND pl_dzien=".$dz." "; $sql.= " AND NOT EXISTS ( SELECT 1 FROM v_zastepstwa WHERE zas_dzien=pl_dzien AND zas_szk_id=".$_SESSION['szk_id']." AND zas_gru_id=pl_gru_id AND zas_od<=pl_godzina_od AND zas_do>=pl_godzina_do ) "; $sql.= "UNION ALL "; $sql.= "SELECT zas_nau_id, zas_od, zas_do, zas_prz_id, 'z' FROM v_zastepstwa"; $sql.= " WHERE zas_szk_id=".$_SESSION['szk_id']." AND zas_gru_id=".$gru." AND zas_dzien=".$dz.""; $sql.= " ORDER BY od, type DESC"; $q = doSQL($sql,$unit); if (!$q) { log_me($unit, "### ERROR: ".mysql_error()." [SQL] ".$sql); return "## Błąd dostępu do bazy danych ##"; } $is_sub = FALSE; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { log_val("sub row", $r); $is_sub = TRUE; $o.= ''; $o.= ''; $o.= ''; // $o.= ''; $o.= show_nau($r['pl_nau_id'],"td","", $dz, "[subst]"); // $o.= ''; $o.= ''; // $o.= show_nau($r['zas_za_nau_id'],"td",nauDayPlan($r['zas_za_nau_id'], $dz, "[subst]")); $o.= ''; } telme(userInfo()."\n[".$unit."]"); $o.= '
CzasPrzedmiotNauczyciel
'.$r['od'].'—'.$r['do'].''.get_class_val("prz",$r['pl_prz_id'],"nazwa").''.get_class_val("nau",$r['pl_nau_id'],"osoba").''.$r['pl_godzina_od'].''.$r['type'].'
'; $add = ""; if ($is_sub) return $head.$o; return $add; } /*********************************/ function load_cfg($nvp) { unset($_SESSION['cfg']); if (!isset($_SESSION['szk_id'])) return; // echo '
'; $sql = "SELECT * FROM config WHERE cfg_szk_id=".$_SESSION['szk_id']; $q = doSQL($sql,"load_cfg"); if (!$q) { log_me("load_cfg", "### ERROR: ".mysql_error()." [SQL] ".$sql); return; } while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { foreach (array_keys($r) as $k) { if ($k == 'cfg_szk_id') continue; // tę kolumnę pomiń $_SESSION['cfg'][substr($k, 4)] = $r[$k]; } } log_val("SESSION['cfg']",$_SESSION['cfg']); } function refresh_b_plan() { log_me("refresh_b_plan",""); $pla = ""; if (isset($_SESSION['pla_id'])) $pla = db_get_pla($_SESSION['pla_id']); $p = ""; if (is_array($pla)) { $p.= 'ID: ".$pla['pla_id']."").'>'.$pla['pla_nazwa'].'
Ostatnia zmiana:
'.$pla['pla_zmieniony'].'
'; } else { $p.= '
Nie wybrano planu.
Proszę najechać myszką na pasek w górnej części strony.
'; } return $p; } function show_undo() { $unit = "show_undo"; log_me($unit,""); $sql = "SELECT * FROM v_undo WHERE pl_pla_id=".getPlan()." LIMIT 5"; $q = doSQL($sql,$unit); if (!$q) { log_me($unit, "### ERROR: ".mysql_error()." [SQL] ".$sql); return; } $t = '
Wybierz zmianę w planie, przed którą chcesz się cofnąć:
'; $t.= ''; $u = ""; while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) { $u.= ''; $u.= ''; $u.= ''; $u.= '';// dodane 2023-12-29 $u.= ''; } // $b = '
Operacja DzieńOdDoGrupaPrzedmiotNauczycielSala Wykonał(a) 
'."Czas operacji: ".$r['pun_time']."
"."Numer zmiany: ".$r['pun_undo']."
"."ID w planie: ".$r['pun_pl_id'].'').' style="font-weight: bold">'; switch ($r['pun_akcja']) { case 'I': $u.= 'dodanie'; break; case 'U': $u.= 'zmiana na'; break; case 'D': $u.= 'usunięcie'; break; } $u.= '
'.dzien_tyg($r['dzien']).''.$r['od'].''.$r['do'].''.$r['gru_nazwa'].''.prz_repl($r['prz_nazwa']).''.$r['nau_osoba'].''.$r['sal_nazwa'].''.str_replace("wegielek.edu.pl","",$r['uzy']).'
'; $b = '
kliknij, aby schować
'; telme(userInfo()."\n".execFunc($unit)); if ($u<>"") { return $t.$u.''.$b; } else { return '
Brak zmian do cofnięcia.
'.$b; } } function arkorg($gdzie="cfg", $dg=0, $nvp="") { // arkusz organizacyjny $unit = "arkorg"; dajt($t_start); // global $nvp; $o='
'; if ($gdzie=="cfg") { $sq_data = "SELECT zag.*,prz_id,prz_nazwa,gn.gru_id,gn.nau_id FROM przedmioty JOIN (SELECT gru_id,gru_nazwa, null nau_id,null nau_osoba, gru_nazwa AS sort FROM grupy_v WHERE gru_szk_id=".$_SESSION['szk_id']." UNION ALL SELECT null, null, nau_id, nau_osoba, nau_osoba_sort FROM v_nauczyciele WHERE nau_szk_id=".$_SESSION['szk_id']." ) gn ON 1=1 LEFT JOIN zajecia_grup zag ON prz_id=zag_prz_id AND (gru_id=zag_gru_id OR nau_id=zag_nau_id) AND zag_pla_id=".getPlan()." WHERE prz_szk_id=".$_SESSION['szk_id']." ORDER BY prz_nazwa,isnull(gru_nazwa),gru_nazwa,nau_osoba,sort"; } else { // do pokazania statystyki - nieedytowalne $sq_data = "SELECT zag.*,prz_id,prz_nazwa,gn.gru_id,gn.nau_id, pl_gru_godzin,pl_nau_godzin FROM przedmioty JOIN (SELECT gru_id,gru_nazwa, null nau_id,null nau_osoba FROM grupy_v WHERE gru_szk_id=".$_SESSION['szk_id']." UNION ALL SELECT null, null, nau_id, nau_osoba FROM v_nauczyciele WHERE nau_szk_id=".$_SESSION['szk_id']." ) gn ON 1=1 LEFT JOIN zajecia_grup zag ON prz_id=zag_prz_id AND (gru_id=zag_gru_id OR nau_id=zag_nau_id) AND zag_pla_id=".getPlan()." LEFT JOIN (SELECT pl_prz_id,pl_gru_id,round(sum(TIME_TO_SEC(TIMEDIFF(pl_godzina_do,pl_godzina_od))/60/45),2) pl_gru_godzin FROM plan WHERE pl_pla_id=".getPlan()." AND pl_status IS NULL GROUP BY pl_prz_id,pl_gru_id) pla_gru ON pla_gru.pl_prz_id=prz_id AND pl_gru_id=gru_id LEFT JOIN (SELECT pl_prz_id,pl_nau_id,round(sum(TIME_TO_SEC(TIMEDIFF(pl_godzina_do,pl_godzina_od))/60/45),2) pl_nau_godzin FROM plan WHERE pl_pla_id=".getPlan()." AND pl_status IS NULL GROUP BY pl_prz_id,pl_nau_id) pla_nau ON pla_nau.pl_prz_id=prz_id AND pl_nau_id=nau_id WHERE prz_szk_id=".$_SESSION['szk_id']." ORDER BY prz_nazwa,isnull(gru_nazwa),gru_nazwa,nau_osoba"; } $data = doSQL($sq_data,"arkorg - $gdzie"); log_val($unit." SQL",$sq_data); $sq_gru = mysql_query("SELECT * FROM grupy_v WHERE gru_szk_id=".$_SESSION['szk_id']." ORDER BY gru_nazwa"); while ($r = mysql_fetch_array($sq_gru, MYSQL_ASSOC)) { $grus[] = array("id"=>$r['gru_id'], "nazwa"=>$r['gru_nazwa'], "suma"=>0); } $sq_nau = mysql_query("SELECT * FROM v_nauczyciele WHERE nau_szk_id=".$_SESSION['szk_id']." ORDER BY nau_osoba"); while ($r = mysql_fetch_array($sq_nau, MYSQL_ASSOC)) { $naus[] = array("id"=>$r['nau_id'], "osoba"=>$r['nau_osoba'], "suma"=>0); } // log_val("naus",$naus); $sq = doSQL("SELECT * FROM przedmioty WHERE prz_szk_id=".$_SESSION['szk_id']." ORDER BY prz_nazwa"); $o.= ''; for ($gi=0; $gi'.($dg>0 ? $grus[$gi]['id'].' ':'').$grus[$gi]['nazwa'].''; /* sumy wewnętrzne */ if ($gdzie=="cfg") { $o.= ''; $o.= ''; } for ($ni=0; $ni'.show_nau($naus[$ni]['id'],'span').($dg>0 ? $naus[$ni]['id']:'').''; $o.= ''; function find_nau($id, &$naus) { // global $naus; for ($i=0; $i"; $prev_prz=-1; $prev_nau=""; $gru_sum = 0; $nau_sum = 0; $linia = ""; $nr_form = 0; $pol_w_form = 500; $ile_pol = 0; // licznik pól w formularzu while ($d = mysql_fetch_array($data, MYSQL_ASSOC)) { if ($gdzie<>"cfg") { $d['pl_gru_godzin'] = str_replace(".00","",$d['pl_gru_godzin']); $d['pl_nau_godzin'] = str_replace(".00","",$d['pl_nau_godzin']); } $mover = 'onmouseover="$(\'#ao_prz_'.$d['prz_id'].'\').css(\'background\',\'yellow\');'; if ($d['gru_id']<>"") $mover.= ' $(\'#ao_gru_'.$d['gru_id'].'\').css(\'background\',\'yellow\');"'; else $mover.= ' $(\'#ao_nau_'.$d['nau_id'].'\').css(\'background\',\'yellow\');"'; $mout = 'onmouseout="$(\'#ao_prz_'.$d['prz_id'].'\').css(\'background\',\'#eee\'); '; if ($d['gru_id']<>"") $mout.= ' $(\'#ao_gru_'.$d['gru_id'].'\').css(\'background\',\'#eee\');"'; else $mout.= ' $(\'#ao_nau_'.$d['nau_id'].'\').css(\'background\',\'#eee\');"'; $hover = $mover.' '.$mout; // if ($d['zag_godzin']<>"" or $d['pl_gru_godzin']<>"" or $d['pl_nau_godzin']<>"") log_val("d",$d); if ($prev_prz <> $d['prz_id']) { // zmienił się przedmiot if ($gdzie=="cfg" and $ile_pol>$pol_w_form) { $linia.= ''; $ile_pol = 0; } if ($gdzie=="cfg" and $ile_pol==0) { $nr_form++; $linia.= '
'; } if ($prev_prz<>-1) $linia.= ''; if ($gdzie=="cfg") { $linia = str_replace('#gru_sum#', $gru_sum, $linia); $linia = str_replace('#nau_sum#', $nau_sum, $linia); } if ($gru_sum==$nau_sum) { $linia = str_replace(" arkorg_notOK","",$linia); } $o.= $linia; $linia = '
'; $linia.= ''; // zeruj sumy $gru_sum = 0; $nau_sum = 0; } if ($gdzie=="cfg" and $prev_nau=="" and $d['nau_id']<>"") { // rozpoczął się nowy nauczyciel $linia.= ''; $linia.= ''; } $prev_prz = $d['prz_id']; $prev_nau = $d['nau_id']; if ($d['gru_id']<>"" and $d['zag_godzin']>0) { $gru_sum += $d['zag_godzin']; $grus[find_gru($d['gru_id'],$grus)]['suma'] += $d['zag_godzin']; // dodaj do sumy na dole tabeli } if ($d['nau_id']<>"" and $d['zag_godzin']>0) { $nau_sum += $d['zag_godzin']; $naus[find_nau($d['nau_id'],$naus)]['suma'] += $d['zag_godzin']; // dodaj do sumy na dole tabeli } if ($gdzie=="cfg") $linia.= ''; else { $tip=''; //**** pokazanie arkusza na stronie, gdzie tworzony jest plan (pod checkbox-em) if ($d['zag_godzin']=='' and ($d['pl_gru_godzin']>0 or $d['pl_nau_godzin']>0)) { //*** w arkuszu nic nie wpisane, ale w planie coś już jest $linia.= ''; } $ile_pol++; } $o.= ''; if ($gdzie=="cfg" and $ile_pol>0) { $o.= ''; } log_me("nr_form", $nr_form); if ($gdzie=="cfg") { /**** sumy na dole ****/ $linia = ''; $g_suma = 0; for ($g=0; $g'; $g_suma += $grus[$g]['suma']; } $linia.= ''; $linia.= ''; $n_suma = 0; for ($n=0; $n'; $n_suma += $naus[$n]['suma']; } $linia = str_replace("#n_suma#",$n_suma,$linia); $o.= $linia; $o.= ''; } $o.= '
'; if ($gdzie=="cfg") $o.= '
'; $o.= '
potrzebne lekcjelekcje nauczycieli
'.$d['prz_nazwa'].($dg>0 ? ' '.$d['prz_id']:'').'#gru_sum##nau_sum#0) { $tip = ''.$d['prz_nazwa'].'
w grupie '.($grus[find_gru($d['gru_id'],$grus)]['nazwa']).'
'; $tip.= '— plan: '.$mx.'h ('.hours2time($mx,45).')
'; $tip.= '— bilans: +'.($mx).'h ('.hours2time($mx,45).')'; } else { $tip = ''.$d['prz_nazwa'].'
przez '.show_nau($d['nau_id'],'span').'
'; $tip.= '— plan: '.$mx.'h ('.hours2time($mx,45).')
'; $tip.= '— bilans: +'.($mx).'h ('.hours2time($mx,45).')'; } $linia.= do_Tip($tip).'>0'; } else { //*** wpisane coś do arkusza if ($d['pl_gru_godzin']>$d['zag_godzin'] and $d['gru_id']<>"" or $d['pl_nau_godzin']>$d['zag_godzin'] and $d['nau_id']<>"") { //*** w planie > w arkuszu $mx = max($d['pl_gru_godzin'],$d['pl_nau_godzin']); if ($mx=="") $mx=0; $linia.= '
0) { $tip = "".$d['prz_nazwa']."
w grupie ".($grus[find_gru($d['gru_id'],$grus)]['nazwa'])."
"; $tip.= '— plan: '.$mx.'h ('.hours2time($mx,45).')
'; $tip.= '— bilans: +'.($mx-$d['zag_godzin'])."h (".hours2time($mx-$d['zag_godzin'],45).")"; $linia.= do_Tip($tip).'>'.$d['zag_godzin']; } else { $tip = "".$d['prz_nazwa']."
przez ".($naus[find_nau($d['nau_id'],$naus)]['osoba'])."
"; $tip.= '— plan: '.$mx.'h ('.hours2time($mx,45).')
'; $tip.= '— bilans: +'.($mx-$d['zag_godzin'])."h (".hours2time($mx-$d['zag_godzin'],45).")"; $linia.= do_Tip($tip).'>'.$d['zag_godzin']; } } else if ($d['pl_gru_godzin']<$d['zag_godzin'] and $d['gru_id']<>"" or $d['pl_nau_godzin']<$d['zag_godzin'] and $d['nau_id']<>"") { //*** w planie < w arkuszu $mx = max($d['pl_gru_godzin'],$d['pl_nau_godzin']); if ($mx=="") $mx=0; $linia.= '
0) { $tip = "".$d['prz_nazwa']."
w grupie ".($grus[find_gru($d['gru_id'],$grus)]['nazwa'])."
"; $tip.= '— plan: '.$mx."h (".hours2time($mx,45).')
'; $tip.= '— bilans: -'.($d['zag_godzin']-$mx).'h ('.hours2time($d['zag_godzin']-$mx,45).')'; $linia.= do_Tip($tip).'>'.$d['zag_godzin']; } else { $tip = "".$d['prz_nazwa']."
przez ".show_nau($d['nau_id'],'span')."
"; $tip.= '— plan: '.$mx.'h ('.hours2time($mx,45).')
'; $tip.= '— bilans: -'.($d['zag_godzin']-$mx).'h ('.hours2time($d['zag_godzin']-$mx,45).')'; $linia.= do_Tip($tip).'>'.$d['zag_godzin']; } } else if ($d['zag_godzin']>0 and ($d['zag_godzin']==$d['pl_gru_godzin'] or $d['zag_godzin']==$d['pl_nau_godzin'])) { //*** w planie = w arkuszu (i w arkuszu coś wpisane) $linia.= '
'.$d['zag_godzin']; } else { $linia.= ''; } } // if ($d['pl_gru_godzin']<>'') $linia.=" ".$d['pl_gru_godzin']." /"; // if ($d['pl_nau_godzin']<>'') $linia.=" # ".$d['pl_nau_godzin']; $linia.= '
zajęć do obsadzenia'.$g_suma.'#n_suma#
';//
'; dajt($t_end); $trwalo = elapsed($t_start, $t_end); telme("".userInfo()."\n".execFunc($unit, "Arkusz organizacyjny")."\ngdzie ".$gdzie." $trwalo"); return $o; } //--- arkorg() function arkorg_info($prz, $gru, $nau) { // zwraca informację o tym, ile godzin danego przedmiotu (wg arkusza organizacyjnego) ma za mało/dużo nauczyciel/grupa global $em_grupa; if (($gru=="" and $nau=="") or $prz=="") return ""; // $o = 'hours2time(1.33,45) = '.hours2time(1.33,45).'
hours2time(2,45) = '.hours2time(2,45).'
hours2time(2,60) = '.hours2time(2,60).'
'; $o= 'Wg arkusza organizacyjnego:
'; $sq_data = "SELECT zag.*,prz_id,prz_nazwa,gn.gru_id,gn.nau_id, pl_gru_godzin,pl_nau_godzin, gru_nazwa,nau_osoba, --ifnull(SEC_TO_TIME(zag_godzin*45*60),'0:00') AS zag_godzin_txt, pl_gru_godzin_txt, pl_nau_godzin_txt FROM przedmioty JOIN (SELECT gru_id,gru_nazwa, null nau_id,null nau_osoba FROM grupy_v WHERE gru_szk_id=".$_SESSION['szk_id']." UNION ALL SELECT null, null, nau_id, nau_osoba FROM v_nauczyciele WHERE nau_szk_id=".$_SESSION['szk_id']." ) gn ON 1=1 LEFT JOIN zajecia_grup zag ON prz_id=zag_prz_id AND (gru_id=zag_gru_id OR nau_id=zag_nau_id) AND zag_pla_id=".getPlan()." LEFT JOIN (SELECT pl_prz_id,pl_gru_id,round(sum(TIME_TO_SEC(TIMEDIFF(pl_godzina_do,pl_godzina_od))/60/45),2) pl_gru_godzin, (sum(TIME_TO_SEC(TIMEDIFF(pl_godzina_do,pl_godzina_od)))/60/60) pl_gru_godzin_txt FROM plan WHERE pl_pla_id=".getPlan()." AND pl_status IS NULL GROUP BY pl_prz_id,pl_gru_id) pla_gru ON pla_gru.pl_prz_id=prz_id AND pl_gru_id=gru_id LEFT JOIN (SELECT pl_prz_id,pl_nau_id,round(sum(TIME_TO_SEC(TIMEDIFF(pl_godzina_do,pl_godzina_od))/60/45),2) pl_nau_godzin, (sum(TIME_TO_SEC(TIMEDIFF(pl_godzina_do,pl_godzina_od)))/60/60) pl_nau_godzin_txt FROM plan WHERE pl_pla_id=".getPlan()." AND pl_status IS NULL GROUP BY pl_prz_id,pl_nau_id) pla_nau ON pla_nau.pl_prz_id=prz_id AND pl_nau_id=nau_id WHERE prz_szk_id=".$_SESSION['szk_id']." AND prz_id=$prz AND (1=0 "; if ($gru>0) $sq_data.= " OR gn.gru_id=$gru"; if ($nau>0) $sq_data.= " OR gn.nau_id=$nau"; $sq_data.= ") ORDER BY prz_nazwa,isnull(gru_nazwa),gru_nazwa,nau_osoba"; $data = doSQL($sq_data,"arkorg_info"); // log_val("arkorg_info SQL",$sq_data); $OK = 'OK'; $o.= ''; $o.= ''; $o.= ''; $o.= ''; $o.= ''; $o.= ''; while ($d = mysql_fetch_array($data, MYSQL_ASSOC)) { // log_val("arkorg_info d",$d); if ($d['zag_godzin']=="") $d['zag_godzin']=0; if ($d['pl_gru_godzin']=="") $d['pl_gru_godzin']=0; if ($d['pl_nau_godzin']=="") $d['pl_nau_godzin']=0; $d['pl_gru_godzin'] = str_replace(".00","",$d['pl_gru_godzin']); $d['pl_nau_godzin'] = str_replace(".00","",$d['pl_nau_godzin']); if ($d['gru_id']<>"") { if ($d['pl_gru_godzin']<>$d['zag_godzin']) { $o.= ''; $o.= ''; $o.= ''; $o.= ''; if ($d['pl_gru_godzin']>$d['zag_godzin']) $o.= ''; else $o.= ''; $o.= ''; } else if ($d['pl_gru_godzin']==$d['zag_godzin']) { $o.= ''; $o.= ''; $o.= ''; $o.= ''; $o.= ''; } } if ($d['nau_id']<>"") { if ($d['pl_nau_godzin']<>$d['zag_godzin']) { $o.= ''; $o.= ''; $o.= ''; $o.= ''; if ($d['pl_nau_godzin']>$d['zag_godzin']) $o.= ''; else $o.= ''; $o.= ''; } else if ($d['pl_nau_godzin']==$d['zag_godzin']) { $o.= ''; $o.= ''; $o.= ''; $o.= ''; $o.= ''; } } } $o.= '
PrzedmiotGru./Nau.w planiew arkuszubilans
'.$d['prz_nazwa'].''.$em_grupa.$d['gru_nazwa'].''.$d['pl_gru_godzin'].'h ('.hours2time($d['pl_gru_godzin'],45).')'.$d['zag_godzin'].'h ('.hours2time($d['zag_godzin'],45).')+'.($d['pl_gru_godzin']-$d['zag_godzin']).'h ('.hours2time(($d['pl_gru_godzin']-$d['zag_godzin']),45).')-'.($d['zag_godzin']-$d['pl_gru_godzin']).'h ('.hours2time(($d['zag_godzin']-$d['pl_gru_godzin']),45).')
'.$d['prz_nazwa'].''.$em_grupa.$d['gru_nazwa'].''.$d['pl_gru_godzin'].'h ('.hours2time($d['pl_gru_godzin'],45).')'.$d['pl_gru_godzin'].'h ('.hours2time($d['pl_gru_godzin'],45).')'.$OK.'
'.$d['prz_nazwa'].''.show_nau($d['nau_id'],"span").''.$d['pl_nau_godzin'].'h ('.hours2time($d['pl_nau_godzin'],45).')'.$d['zag_godzin'].'h ('.hours2time($d['zag_godzin'],45).')+'.($d['pl_nau_godzin']-$d['zag_godzin']).'h ('.hours2time(($d['pl_nau_godzin']-$d['zag_godzin']),45).')-'.($d['zag_godzin']-$d['pl_nau_godzin']).'h ('.hours2time(($d['zag_godzin']-$d['pl_nau_godzin']),45).')
'.$d['prz_nazwa'].''.show_nau($d['nau_id'],"span").''.$d['pl_nau_godzin'].'h ('.hours2time($d['pl_nau_godzin'],45).')'.$d['pl_nau_godzin'].'h ('.hours2time($d['pl_nau_godzin'],45).')'.$OK.'
'; return $o; } function tutnew($pla_id, $dg=0) { // tutoring new global $nvp; $o='
'; $sq_data = "SELECT tn.*, n.nau_osoba, n.nau_id FROM v_nauczyciele n LEFT JOIN tutoring_new tn ON tn.tun_nau_id=n.nau_id AND tun_szk_id=n.nau_szk_id AND tun_pla_id=".$pla_id." WHERE nau_szk_id=".$_SESSION['szk_id']." ORDER BY nau_osoba_sort"; $data = doSQL($sq_data,"tutnew"); log_val("tutnew SQL",$sq_data); $o.= '
'; $o.=''; /* $o.= ''; $o.= ''; */ $o.= ''; $o.= ''; while ($d = mysql_fetch_array($data, MYSQL_ASSOC)) { $linia = ''; /* $linia.= ''; $linia.= ''; $linia.= ''; $linia.= ''; */ $linia.= ''; $linia.= ''; $o.= $linia; } $o.= '
'; $o.= '
'; $o.= '
Ilość dzieci "tutoringowych"
'; $o.= ''; $o.= ''; $o.= ''; $o.= ''; $o.= '
kl 0-3kl 4-7czas
'; $o.= '
Rodzin
'; $o.= ''; $o.= ''; $o.= ''; $o.= ''; $o.= '
1 dziecko2 dzieciczas
'; $o.= '
Ilość rodzin
'.$d['nau_osoba'].''.round(($d['tun_dz_kl03']*1.6 + $d['tun_dz_kl47']*3.33)/60,2).''.round(($d['tun_ro_1d']*8 + $d['tun_ro_2d']*13)/60,2).'
'; $o.= '
'; $o.= '
'; return $o; } //--- tutnew() function time2hours($time, $dl_g=60) { // zamienia czas w formacie HH:MI na ilość godzin if ($time=="") return 0; $o = explode(":", $time); if (count($o)<2) { log_val("time2hours $time", $o); } $ret = $o[0] + $o[1]/$dl_g; return $ret; } function hours2time($h, $dl_g=60) { // zamienia ilość godzin (o długości $dl_g minut) na czas w formacie HH:MI if ($h=="") return "0:00"; $h *= $dl_g/60; if (round($h)==$h) return $h.":00"; $t1 = floor($h); $t2 = round(($h-$t1)*60,0); if ($t2==60) { $t1++; $t2 = 0; } if ($t2<10) $t2="0".$t2; $ret = $t1.":".$t2; // log_me("hours2time ($h, $dl_g) = ",$ret); return $ret; } function raznew($pla_id, $dg=0) { $unit = "raznew"; global $nvp; log_me($unit, "--------------------------------------------> Wywołano <-------------------------"); $o='
'; $sq_data = "SELECT rn.*, tn.tun_rodzin, round((coalesce(tun_dz_kl03,0)*1.6 + coalesce(tun_dz_kl47,0)*3.33)/60,2) tutnewE3, round(coalesce(tun_rodzin,0)*12/60,2) tutnewH3, round(coalesce(tp.nau_t_przygotowania,0)/60,2) AS t_przygot, n.nau_osoba, n.nau_id, nag.wymczaspracy, v.z_dz2 robzplaB5, v.z_dz3 robzplaC5, v.razem_23, COALESCE(nau_pensum, ".$_SESSION['cfg']['max_zDz_fullTime'].") AS pensum"; $sq_data.= ",f_nau_za_duzo_zDz(rn.ran_Etat, v.razem_23, 0, COALESCE(nau_pensum, ".$_SESSION['cfg']['max_zDz_fullTime']."), null, null) AS za_duzo_zDz"; $sq_data.= ",f_nau_zDz_limit(rn.ran_Etat, COALESCE(nau_pensum, ".$_SESSION['cfg']['max_zDz_fullTime'].")) AS zDz_limit"; $sq_data.= " FROM v_nauczyciele n LEFT JOIN v_nau_t_przygotowania tp ON tp.nau_id = n.nau_id AND tp.pla_id = $pla_id LEFT JOIN ( SELECT round(ifnull(sum(TIME_TO_SEC(TIMEDIFF(nag_do,nag_od))/60/60),0),2) wymczaspracy, nag_nau_id FROM nauczyciele_godziny WHERE nag_szk_id=".$_SESSION['szk_id']." AND nag_pla_id=$pla_id GROUP BY nag_nau_id ) nag ON nag_nau_id=n.nau_id LEFT JOIN razem_new rn ON rn.ran_nau_id=n.nau_id AND ran_szk_id=n.nau_szk_id AND ran_pla_id=".$pla_id." LEFT JOIN tutoring_new tn ON tn.tun_nau_id=n.nau_id AND tun_szk_id=n.nau_szk_id AND tun_pla_id=".$pla_id." LEFT JOIN v_nau_stat2 v ON n.nau_id=v.nau_id AND pl_pla_id=".getPlan()." WHERE nau_szk_id=".$_SESSION['szk_id']." ORDER BY nau_osoba_sort"; $data = doSQL($sq_data,$unit); log_val($unit." SQL",$sq_data); $o.= '
'; $o.=''; $o.= ''; $o.= ''; $o.= ''; $o.= ''; // Czas pracy z dziećmi $o.= ''; $o.= ''; $o.= ''; // $o.= ''; // $o.= ''; $o.= ''; // Czas pracy bez dzieci $o.= ''; $o.= ''; $o.= ''; // Rozliczenie całego czasu pracy $o.= ''; $o.= ''; $o.= ''; // $o.= ''; $o.= ''; $o.= ''; $o.= ''; // $o.= ''; $o.= ''; $o.= ''; while ($d = mysql_fetch_array($data, MYSQL_ASSOC)) { /* if ($d['nau_id'] == 195) { log_val($unit." d", $d); } */ log_val("nauczyciel: ",get_class_val("nau",$d['nau_id'],"osoba")); $czas_na_obowiazki = 0; // nowy wiersz == nowy nauczyciel $linia = ''; $podswietl = 'onmouseover="$(\'#rn_tr_'.$d['nau_id'].'\').css(\'background\',\'yellow\');" onmouseout="$(\'#rn_tr_'.$d['nau_id'].'\').css(\'background\',\'transparent\');"'; $sum1 = 0; // $linia.= ''; // tutoring z dziećmi // $sum1 += $d['tutnewE3']; $tmp = $d['robzplaB5']; log_val("tmp1 = lekcje", $tmp); $tmp2 = round(time2hours($tmp),2); log_val("tmp2", $tmp2); $linia.= ''; // lekcje godz. zeg. $sum1 += $tmp2; $czas_na_obowiazki += $tmp2; $E3 = $tmp2; $tmp = $d['robzplaC5']; log_val("tmp3 = św./przerwy/obiady", $tmp); $tmp_t = $tmp; $tmp = time2hours($tmp); log_val("tmp4", $tmp); $linia.= ''; // świetl przer obiad $sum1 += $tmp; $czas_na_obowiazki += $tmp; $linia.= ''; // razem: praca z dziećmi $G3 = $sum1; $praca_z_dziecmi = $G3; // $tmp = round($d['wymczaspracy']*25/40,2); // $linia.= ''; // max g z dziećmi (roboczo!) // $tmp = round($tmp-$sum1,2); // $linia.= ''; // zostało g z dziećmi (roboczo!) // $I3 = $tmp; $I3=0; //===== Czas pracy bez dzieci ===== // prace dodatkowe $linia.= ''; $sum1 += $d['ran_PraceDod']; $czas_na_obowiazki += $d['ran_PraceDod']; // zespoły (może też odprawy) $linia.= ''; $sum1 += $d['ran_ZespOdpr']; $czas_na_obowiazki += $d['ran_ZespOdpr']; // Tutoring $linia.= ''; // tutoring z rodzicami $sum1 += $d['tutnewH3']; //===== Rozliczenie całego czasu pracy ===== // razem g pracy zorganiz. przez nas $czas_na_obowiazki += $d['tutnewH3']; log_val(" t na obow.: ", $czas_na_obowiazki); $linia.= ''; $M3 = $sum1; $wymiar_etatu = ($d['ran_Etat']>=0 ? $d['ran_Etat'] : $d['wymczaspracy']); $odpoczynek = $wymiar_etatu/8; $tmp = round(($E3*60/45)*0.333,2); log_val("przygot / Przygotowanie", $tmp." / ".$d['ran_Przygotowanie']); $tmp = ($d['ran_Przygotowanie']>=0 ? $d['ran_Przygotowanie'] : $tmp); log_val("WYNIK", $tmp); //TODO t_przygot // praca własna $praca_wlasna = $d['t_przygot'] + $odpoczynek; $pr_wl_przygot = $d['t_przygot']; $pr_wl_odpocz = $odpoczynek; $linia.= ''; $linia.= ''; // $sum1 += $tmp; $sum1 += $praca_wlasna; $czas_na_obowiazki += $praca_wlasna; // $N3 = $tmp; $N3 = $praca_wlasna; $tmp = round($d['wymczaspracy']/8,2); // $linia.= ''; // odpoczynek $sum1 += $tmp; $O3 = $tmp; // czas na obowiązki $linia.= ''; // $czas_na_zastepstwa = floor(($wymiar_etatu - $czas_na_obowiazki)/0.75); // ilość lekcji, jaka została pomiędzy etatem i czasem na obowiązki $czas_na_zastepstwa = floor(($wymiar_etatu - $czas_na_obowiazki)/0.75); // ilość lekcji, jaka została pomiędzy etatem i czasem na obowiązki $Q3 = $d['wymczaspracy'] - $M3 - $N3 - $O3; //$linia.= ''; // zostało g pracy całość // czas na zastępstwa (wg cz. na obowiązki) if ($d['ran_naZastepstwa'].'' !== '') { // IMPORTANT: taki test działa - sprawdza, czy zmienna jest Oraclowym '' (pustym stringiem) log_me("{".$d['ran_naZastepstwa']."} = d[ran_naZastepstwa] --> floor", "raz_new"); $d['ran_naZastepstwa'] = floor($d['ran_naZastepstwa']); } $linia.= ''; // czas na zastępstwa (wg czasu z dziećmi - zgodnie z proporcją, np. 22/18) $tmp = $wymiar_etatu * $d['pensum']/40.0 - $praca_z_dziecmi; // $linia.= ''; $linia.= ''; $tmp = $Q3; if ($Q3>$I3) $tmp = $I3; // $linia.= ''; // zostało g z dziećmi faktycznie // wymiar czasu pracy //$tmp = ($d['ran_Etat']>=0 ? $d['ran_Etat'] : $d['wymczaspracy']); $tmp = $wymiar_etatu; log_val("Etat / wymczaspracy / WYNIK", $d['ran_Etat']." / ".$d['wymczaspracy']." / ".$tmp); $linia.= ''; $linia.= ''; $o.= $linia; } $o.= '
'; // $o.= '
'; $o.= '
'; $o.= '
Czas pracy z dziećmiCzas pracy bez dzieciRozliczenie całego czasu pracy
lekcjeświetlice,
przerwy,
obiady
RAZEMmax. g z dziećmi (roboczo!)zostało g z dziećmi (roboczo!)prace
dodatk.
zespołyTutoringrazem g pracy
zorg. przez nas
pr. wł.
(przygot.)
pr. wł.
(odpocz.)
odpocz.czas na obowiązkiczas na zast.
wg czasu na obowiązki
czas na zast.
wg czasu z dziećmi
zostało g z dziećmi faktyczniewymiar czasu pracy
'.$d['nau_osoba'].''; // $linia.= $d['tutnewE3'].''.$tmp./*' #'.$tmp2.*/''.$tmp_t.''; if ($d['za_duzo_zDz']>0) { $linia.= ''.minute2time(round($d['za_duzo_zDz']*60,2))." za dużo
Max. = ".''.minute2time(round($d['zDz_limit']*60,2)).'').'>'.minute2time(round($sum1*60, 2)).''; } else { $linia.= minute2time(round($sum1*60, 2)); // $linia.= " / ".minute2time(round($d['razem_23']*60, 4)); } $linia.= '
'.$tmp.''.$tmp.''; if ($d['tun_rodzin'] > 0) { $rodzin_tut = 'Rodzin tutoringowych: '.$d['tun_rodzin'].''; $linia.= ''.hours2time($d['tutnewH3']).''; } else $linia.= ''.$d['tutnewH3'].''; $linia.= ''.hours2time($sum1).''; //$linia.= ''; //$linia.= ''.$d['t_przygot'].''; // przygotowanie do lekcji //$linia.= ' / '.$odpoczynek.' = '; $linia.= hours2time($pr_wl_przygot).''.hours2time($pr_wl_odpocz).''.$tmp.''.hours2time($czas_na_obowiazki)./*' #'.$czas_na_obowiazki.*/''.round($Q3,2).'$czas_na_zastepstwa) { log_me($d['ran_naZastepstwa']." ręcznie wpisane", "raz_new"); $linia.= 'raznew_czasNaZast_recznie"'; $linia.= do_Tip('Automatyczne wyliczenie: '.$czas_na_zastepstwa.''); } elseif ($czas_na_zastepstwa > 0) { log_me($czas_na_zastepstwa.">0 {".$d['ran_naZastepstwa']."}", "raz_new"); $linia.= 'raznew_czasNaZast_gt0"'; } elseif ($czas_na_zastepstwa == 0) { log_me("=0 {".$d['ran_naZastepstwa']."}", "raz_new"); $linia.= 'raznew_czasNaZast_eq0"'; } elseif ($czas_na_zastepstwa < 0) { log_me($czas_na_zastepstwa."<0 {".$d['ran_naZastepstwa']."}", "raz_new"); $linia.= 'raznew_czasNaZast_lt0"'; } else { log_me("DZIWNE!!!", "raz_new"); } $linia.= ' name="rn_'.$d['nau_id'].'_naZastepstwa" value="'.(($d['ran_naZastepstwa'].''===''/* or $d['ran_naZastepstwa']<0*/) ? $czas_na_zastepstwa : $d['ran_naZastepstwa']).'" />'.(floor($tmp * 60/45.0)).' | '.( $tmp>0 ? minute2time($tmp*60) : round($tmp,2) ).''.(floor($tmp * 60/45.0)).''.round($tmp,2).'
'; $o.= '
'; $o.= '
'; return $o; } //--- raznew() function showPaski($p_print = FALSE) { $o = "paski do pokazania"; $unit = "showPaski"; dajt($t_start); // global $nvp; $pla_id = getPlan(); $o='
'; $sq_data = "SELECT rn.*, round((tun_dz_kl03*1.6 + tun_dz_kl47*3.33)/60,2) tutnewE3, round(coalesce(tun_rodzin,0)*12/60,2) tutnewH3, round(coalesce(tp.nau_t_przygotowania,0)/60,2) AS t_przygot, n.nau_osoba, n.nau_id, nag.wymczaspracy, v.z_dz2 robzplaB5, v.z_dz3 robzplaC5 FROM v_nauczyciele n LEFT JOIN v_nau_t_przygotowania tp ON tp.nau_id = n.nau_id AND tp.pla_id = $pla_id LEFT JOIN (SELECT round(ifnull(sum(TIME_TO_SEC(TIMEDIFF(nag_do,nag_od))/60/60),0),2) wymczaspracy, nag_nau_id FROM nauczyciele_godziny WHERE nag_szk_id=".$_SESSION['szk_id']." AND nag_pla_id=$pla_id GROUP BY nag_nau_id) nag ON nag_nau_id=n.nau_id LEFT JOIN razem_new rn ON rn.ran_nau_id=n.nau_id AND ran_szk_id=n.nau_szk_id AND ran_pla_id=".$pla_id." LEFT JOIN tutoring_new tn ON tn.tun_nau_id=n.nau_id AND tun_szk_id=n.nau_szk_id AND tun_pla_id=".$pla_id." LEFT JOIN v_nau_stat2 v ON n.nau_id=v.nau_id AND pl_pla_id=".getPlan()." WHERE nau_szk_id=".$_SESSION['szk_id']." ORDER BY nau_osoba_sort"; $data = doSQL($sq_data,$unit); log_val($unit." SQL",$sq_data); $header_print = ''; $header_print.= 'Nauczyciel'; // $header_print.= 'Tutoring
z dziećmi'; $header_print.= 'Lekcje'; $header_print.= 'Świetlice,
przerwy, obiady'; $header_print.= 'razem:
praca z dziećmi'; $header_print.= 'Prace
dodatkowe'; $header_print.= 'Zespoły'; // $header_print.= 'razem:
godziny pracy
zorganiz. przez pracodawcę'; $header_print.= 'Praca
własna'; // $header_print.= 'Odpoczynek'; $header_print.= 'Tutoring'; $header_print.= 'Czas na
obowiązki'; $header_print.= 'Czas na zastępstwa
(ilość lekcji)'; // $header_print.= 'razem
wszystkie
pozycje
'; $header_print.= 'Wymiar etatu (godz./tydz.)'; $header_print.= ''."\n"; // $o.="\n".''; $o.="\n".'
'; if (!$p_print) { $o.=''; $sum1 = 0; /* $linia.= ''; // tutoring z dziećmi $sum1 += $d['tutnewE3']; */ $tmp = $d['robzplaB5']; $tmp = round(time2hours($tmp),2); $sum1 += $tmp; $czas_na_obowiazki += $tmp; $tmp2 = hours2time($tmp); $linia.= ''; // lekcje $E3 = $tmp2; $tmp = $d['robzplaC5']; // log_val("tmp3", $tmp); $tmp = round(time2hours($tmp),2); $sum1 += $tmp; $czas_na_obowiazki += $tmp; $tmp = hours2time($tmp); // log_val("tmp4", $tmp); $linia.= ''; // świetlice, przerwy, obiady $linia.= ''; // razem: praca z dziećmi // $G3 = $sum1; $linia.= ''; // prace dodatkowe $sum1 += $d['ran_PraceDod']; $czas_na_obowiazki += $d['ran_PraceDod']; $linia.= ''; // zespoły $sum1 += $d['ran_ZespOdpr']; $czas_na_obowiazki += $d['ran_ZespOdpr']; // $linia.= ''; // razem: godziny pracy zorganiz. przez pracodawcę // $M3 = $sum1; $wymiar_etatu = ($d['ran_Etat']>=0 ? $d['ran_Etat'] : $d['wymczaspracy']); $odpoczynek = $wymiar_etatu/8; $praca_wlasna = $d['t_przygot'] + $odpoczynek; $linia.= ''; // praca własna // $sum1 += $tmp; $sum1 += $praca_wlasna; $czas_na_obowiazki += $praca_wlasna; $linia.= ''; // tutoring $sum1 += $d['tutnewH3']; $czas_na_obowiazki += $d['tutnewH3']; $czas_na_zastepstwa = floor(($wymiar_etatu - $czas_na_obowiazki)/0.75); /* $tmp = round(($E3*60/45)*0.333,2); $linia.= ''; // przygotowanie do lekcji $sum1 += $tmp; // $N3 = $tmp; $tmp = round($d['wymczaspracy']/8,2); $linia.= ''; // odpoczynek $sum1 += $tmp; // $O3 = $tmp; */ // czas na obowiązki $linia.= ''; // czas na zastepstwa // $linia.= ''; $linia.= ''; $tmp = ($d['ran_Etat']>0 ? $d['ran_Etat'] : $d['wymczaspracy']); if (round($tmp)==$tmp and $tmp<>0) $linia.= ''; // wymiar czasu pracy else if (round($tmp,1)==$tmp and $tmp<>0) $linia.= ''; // wymiar czasu pracy else $linia.= ''; // wymiar czasu pracy /* if (round($d['wymczaspracy'])==$d['wymczaspracy'] and $d['wymczaspracy']<>0) $linia.= ''; // wymiar czasu pracy else if (round($d['wymczaspracy'],1)==$d['wymczaspracy'] and $d['wymczaspracy']<>0) $linia.= ''; // wymiar czasu pracy else $linia.= ''; // wymiar czasu pracy */ $linia.= ''."\n"; if ($p_print) { // $o .= ''; $o .= ''; $o.= ''; $o .= $header_print; } $o.= $linia; if ($p_print) { $o.= ''; } } $o.= '
'; $linia.= hours2time($d['tutnewE3']).''.$tmp2.''.$tmp.''.hours2time($sum1).''.hours2time($d['ran_PraceDod']).''.hours2time($d['ran_ZespOdpr']).''.hours2time($sum1).''.hours2time($praca_wlasna).''.hours2time($d['tutnewH3']).''.hours2time($d['ran_Przygotowanie']>0 ? $d['ran_Przygotowanie'] : $tmp).''.hours2time($tmp).''.hours2time($czas_na_obowiazki).''.$czas_na_zastepstwa.''.($d['ran_naZastepstwa']=="" ? $czas_na_zastepstwa : $d['ran_naZastepstwa']).''.str_replace(".00","",$tmp).''.substr($tmp,"0",-1).''.($d['ran_Etat']<>"" ? $d['ran_Etat'] : ($tmp=="" ? "0":$tmp)).''.str_replace(".00","",$d['wymczaspracy']).''.substr($d['wymczaspracy'],"0",-1).''.($d['ran_Etat']<>"" ? $d['ran_Etat'] : ($d['wymczaspracy']=="" ? "0":$d['wymczaspracy'])).'
'; $o.= '
'; dajt($t_end); $trwalo = elapsed($t_start, $t_end); telme(userInfo()."\n".execFunc($unit,"Paski")."$trwalo"); // $o.= ''; return $o; } //======================================== function get_grun($flags="", $newly_added=""/*ID dodanego przed chwilą GRUN-a*/, $od="", $do="", $wstecz=7) { // Zwrócenie informacji o nieobecności grup global $em_grupa; $unit = "get_grun"; log_me($unit, "flags=$flags, newly_added=$newly_added, od=$od, do=$do, wstecz=$wstecz"); $f_print = isFlag("[print]", $flags); $today = (date('Y-m-d') == $od ? " (dzisiaj)":""); $C_noDel_before = date('Y-m-d'); // nieobecności wcześniejsze od tej daty nie mogą być już kasowane $grun_a = db_get_grun($wstecz, $od, $do); // pokazuj nieobecności max. 7 dni stare log_val("grun_a", $grun_a); $d = ''; $d.= ''; if (!$f_print) $d.= ''; $d.= ''; if (!$f_print) // przy drukowaniu nie ma być pokazywana kolumna z krzyżykami do usuwania wpisów $d.= ''; $d.= ''; $dd = ""; for ($i=0; $i'; // Grupa/Klasa if (!$f_print) $dd.= ''; // Dzień $dd.= ''; // Od $dd.= ''; // Do $dd.= ''; else $dd.= ''; } $dd.= ''; } if ($dd == "") $dd = ''; $d.=$dd.'
'.$em_grupa.'Grupa/KlasaDzieńOdDoPowód
'.$r['grun_data'].' '.dzien_tyg($r['grun_dzien']).''.$r['grun_od'].''.$r['grun_do'].''; // Powód if (!$f_print) { // przy drukowaniu nie ma być pokazywana kolumna z krzyżykami do usuwania wpisów if ($r['grun_data'] < $C_noDel_before) // starsze od pewnej daty nie mogą być już kasowane $dd.= '
Info: Brak danych o nieobecności grup
'; $d_af = ""; // formularz dodawania nieobecności if (!$f_print) { // Dodaj możliwosć dodania nowego wiersza $d.= ''; // formalurz dodawania nowej nieobecności grupy $d_af.= ''; } else { $d = '
Nieobecności grup '.$od.$today.':'.$d.'
'; } return $d.$d_af; } //================ function gen_zah_report_dniTyg($prev_week=0) { // raport historii zastępstw z obecnego (lub jakiegoś wcześniejszego) tygodnia (tydz. liczony od pon.) $unit = "gen_zah_report_dniTyg"; date_default_timezone_set("Europe/Warsaw"); // !!! potrzebne, by nie było exception-a $w_dzis = date('w')-1; $w_dzis = ($w_dzis + 7) % 7; //log_me($unit, "w_dzis=$w_dzis"); try { $day1 = new DateTime(date('Y-m-d')); } catch (Exception $e) { $err = 'Caught exception: '.$e->getMessage(); log_me($unit, $err); telme(userInfo()."\n".execFunc($unit)."\n".$err); } $wstecz = new DateInterval('P'.$w_dzis.'D'); $wprzod = new DateInterval('P'.(4).'D'); $week_interval = new DateInterval('P'.(7).'D'); // $curr_week = day1->format('W'); for ($w=0; $w < $prev_week; $w++) $day1->sub($week_interval); $pon = $day1; $pon->sub($wstecz); $pia = clone $day1; $pia->add($wprzod); $report = db_get_zah_report_dniTyg($pon->format('Y-m-d'),$pia->format('Y-m-d')); unset($day1); unset($pon); unset($pia); unset($wstecz); unset($wprzod); unset($week_interval); return $report; } //================ function gen_zah_report_full($y, $m, $sort="nau_osoba,") { // raport historii zastępstw z danego miesiąca (szczegółowa lista) $unit = "gen_zah_report_full"; dajt($t_start); $d = db_get_zah_report_full($y, $m, $sort); $rep = ""; $naus = array(); for ($i=0; $i".dzien_tyg($r['dow'])."
"; $rep.= "".$r['zah_od'].""; $rep.= "".$r['zah_do'].""; $rep.= "".gru_repl(get_class_val("gru", $r['gru_id'], "nazwa")).""; // $rep.= "".nau_repl(get_class_val("nau", $r['zah_nau_id'], "osoba")).""; $nau_id = $r['zah_nau_id']; if (!isset($naus[$nau_id])) { $naus[$nau_id] = show_nau($nau_id, "td", "","", "[short]"); } $rep.= $naus[$nau_id]; // $rep.= "".nau_repl(get_class_val("nau", $r['zah_za_nau_id'], "osoba")).""; $za_nau_id = $r['zah_za_nau_id']; if (!isset($naus[$za_nau_id])) { $naus[$za_nau_id] = show_nau($za_nau_id, "td", "","", "[short]"); } $rep.= $naus[$za_nau_id]; // $rep.= show_nau($r['zah_za_nau_id'], "td"); $rep.= "".prz_repl(get_class_val("prz", $r['prz_id'], "nazwa")).""; $rep.= ""; } $h = ""; $h.= 'Dzień'; $h.= "Od"; $h.= "Do"; $h.= 'Grupa'; $h.= 'Nauczyciel'; $h.= "Zastępowano"; $h.= "Przedmiot"; $h.= ""; $rep = "Pełny raport zastępstw za miesiąc ".$m."/".$y.":".''.$h.$rep.'
'; // Javascript $rep.= ""; dajt($t_end); $trwalo = elapsed($t_start, $t_end); telme(userInfo()."\n".execFunc($unit,"Raport zastępstw dla Vulcan")."\nsort: ".$sort." $trwalo"); return $rep; } //========== function fix_date_parts(&$y, &$m, &$d, $dni_m=-1) { $unit = "fix_date_parts"; //log_me($unit." start", "Y-m-d = $y-$m-$d"); if ($d > $dni_m) { // dzień za duży $d -= $dni_m; // zmniejsz dzień $m++; // zwiększ miesiąc } if ($d < 1) { // dzień za mały $m--; // zmniejsz miesiąc ; zwiększnie dnia będzie później, bo nie wiadomo jeszcze ile ustawić } if ($m > 12) { $m -= 12; $y++; } if ($m < 1) { $m += 12; $y--; } if ($d < 1) { $d += cal_days_in_month(CAL_GREGORIAN, $m, $y); } log_me($unit." end", "Y-m-d = $y-$m-$d"); } function fix_date(&$data, $lacz="-") { $p = explode($lacz, $data); $y = $p[0]; $m = $p[1]; $d = $p[2]; $dni_m = cal_days_in_month(CAL_GREGORIAN, $m, $y); if ($d > $dni_m) { // dzień za duży $d -= $dni_m; // zmniejsz dzień $m++; // zwiększ miesiąc } if ($d < 1) { // dzień za mały $m--; // zmniejsz miesiąc ; zwiększnie dnia będzie później, bo nie wiadomo jeszcze ile ustawić } if ($m > 12) { $m -= 12; $y++; } if ($m < 1) { $m += 12; $y--; } if ($d < 1) { $d += cal_days_in_month(CAL_GREGORIAN, $m, $y); } $data = $y.$lacz.zz($m).$lacz.zz($d); } function fix_date_ret($data, $lacz="-") { $p = explode($lacz, $data); $y = $p[0]; $m = $p[1]; $d = $p[2]; $dni_m = cal_days_in_month(CAL_GREGORIAN, $m, $y); if ($d > $dni_m) { // dzień za duży $d -= $dni_m; // zmniejsz dzień $m++; // zwiększ miesiąc } if ($d < 1) { // dzień za mały $m--; // zmniejsz miesiąc ; zwiększnie dnia będzie później, bo nie wiadomo jeszcze ile ustawić } if ($m > 12) { $m -= 12; $y++; } if ($m < 1) { $m += 12; $y--; } if ($d < 1) { $d += cal_days_in_month(CAL_GREGORIAN, $m, $y); } $data = $y.$lacz.zz($m).$lacz.zz($d); return $data; } function nextDay(&$p_data) { $unit = "nextDay"; if ($p_data == "-") return; if ($p_data == "--") return; //log_me($unit, "p_data=$p_data"); date_default_timezone_set("Europe/Warsaw"); // !!! potrzebne, by nie było exception-a $d = new DateTime($p_data); $dni1 = new DateInterval("P".(1)."D"); $d->add($dni1); $p_data = $d->format('Y-m-d'); //log_me($unit, "po_data=$p_data"); } function prevDay(&$p_data) { $unit = "prevDay"; if ($p_data == "-") return; if ($p_data == "--") return; //log_me($unit, "p_data=$p_data"); date_default_timezone_set("Europe/Warsaw"); // !!! potrzebne, by nie było exception-a $d = new DateTime($p_data); $dni1 = new DateInterval("P".(1)."D"); $d->sub($dni1); $p_data = $d->format('Y-m-d'); //log_me($unit, "po_data=$p_data"); } //============================================================================================================ function fuzzy($x, &$set, $sh=0.0) { // zwraca wartość funkcji przynaleźności dla zbioru rozmytego zdefiniowanego liniowo //log_me("x=$x", "fuzzy"); $size = count($set); //log_me("size=$size", "fuzzy"); //log_val("set", $set); if ($x <= $set[0]+$sh) { // x przed zakresem return ($set[1]); } for ($i=2; $i<$size; $i+=2) { //log_me("i=$i", "fuzzy"); if ($x < $set[$i]+$sh) { return round(( ($set[$i+1]-$set[$i-1]) * ($x - ($set[$i-2]+$sh))/($set[$i]-$set[$i-2]) + $set[$i-1] )*100)/100; } } return ($set[$i-1]); // x za zakresem => zwróć ostatnią podaną wartość zbioru rozmytego } function max3($v1,$v2,$v3) { // zwraca max z 3 wartosci if ($v1 > $v2) $m = $v1; else $m = $v2; if ($v3 > $m) $m = $v3; return $m; } function wmax3($v1,$v2,$v3) { // zwraca, ktora z 3 wartosci jest najwieksza (jej numer) if ($v1 > $v2) { $m = $v1; $w = 1; } else { $m = $v2; $w = 2; } if ($v3 > $m) $w = 3; return $w; } function subs_autofind($nau,$t=array('','','','',''), $flags="[]", $sql="") { $tu="subs_autofind"; log_me($tu, "nau=".$nau.", ".$t[0].",".$t[1].",".$t[2].",".$t[3].",".$t[4]); $past_2m = array(); // długość zastępstw (h) w ciągu minionych 2 m-cy $past_2m[0] = array(1, 1, 20, 0); // 1-20 = mało $past_2m[1] = array(1, 0, 20, 1, 35, 0); // 20 = średnio $past_2m[2] = array(20, 0, 35, 1); // 20-35 = dużo $past_2w = array(); // długość zastępstw (h) w ciągu minionych 2 tyg. $past_2w[0] = array(0.5, 1, 5, 0); // 0.5-5 = mało $past_2w[1] = array(0.5, 0, 5, 1, 8, 0); // 5 = średnio $past_2w[2] = array(5, 0, 8, 1); // 5-8 = dużo log_me($tu." 1",""); $time_from_prev = array(); // czas (dni), jaki minął od poprzedniego zastępstwa $time_from_prev[0] = array(1/24, 1, 8/24, 0); // 1h-8h = krótko $time_from_prev[1] = array(1/24, 0, 8/24, 1, 3, 0); // 8h = średnio $time_from_prev[2] = array(8/24, 0, 3, 1); // 8h-3 = długo $at_work = array(); // ilość godzin w pracy w dniu $at_work[0] = array(4, 1, 6, 0); // 4-6 = mało $at_work[1] = array(4, 0, 6, 1, 8, 0); // 6 = średnio $at_work[2] = array(6, 0, 8, 1); // 6-8 = dużo $work = array(); // ilość godzin zajęć w dniu $work[0] = array(3, 1, 4, 0); // 3-4 = mało $work[1] = array(3, 0, 4, 1, 5, 0); // 4 = średnio $work[2] = array(4, 0, 5, 1); // 4-5 = dużo $this_nau = array(); // 3 zakresowe "wybranie" nauczyciela do zastępstwa $this_nau[0] = array(0, 1, 50, 0); // 0-50 = nie wybierać $this_nau[1] = array(0, 0, 50, 1, 100, 0); $this_nau[2] = array(50, 0, 100, 1); // 50-100 = wybrać log_me($tu." 1.1",""); if (strpos($flags, "[print]")!==FALSE) $f_print = TRUE; else $f_print = FALSE; log_me($tu." 2",""); $rules = array( // a,b,c,d, z // jeśli reguła została aktywowana 1st zmienną lingwistyczną na termie o indeksie 'a' // reguła została aktywowana 2nd zmienną lingwistyczną na termie o indeksie 'b' // ... // to wnioskiem jest term zmiennej wyjściowej o indeksie 'z' array(1,1,1,3, 2), array(1,1,1,1, 3), array(1,1,3,1, 3), // mało zastępował w 2m, mało zastępował w 2w, długo w pracy, mało z dziećmi => nauczyciel dobry do zastępstwa // array(1,1,1,0, 3), array(2,2,3,0, 2), array(2,2,1,0, 3), array(0,3,1,3, 1), array(3,3,1,0, 1), // array(3,3,1,3, 1), // dużo zast. w 2m, dużo zast. w 2w, krótko w pracy, długo z dziećmi => nauczyciel niedobry do zastępstwa array(1,3,2,0, 2), array(3,1,2,0, 2) // array(2,1,2,1, 3), ); if ($sql=="") { $sql = "SELECT * FROM v_nauczyciele WHERE nau_szk_id=".$_SESSION['szk_id']; $sql.= " AND f_nau_jestWolny(".getPlan().", nau_id, '".nvl($t[0],'NULL')."',".nvl($t[1],'NULL').",".nvl($t[2],'NULL').",".nvl($t[3],'NULL').",".nvl($t[4],'NULL').",'')>0"; $sql.= " AND f_nau_pracuje(".$_SESSION['szk_id'].",".getPlan().", nau_id, '".nvl($t[0],'NULL')."',".nvl($t[1],'NULL').",".nvl($t[2],'NULL').",".nvl($t[3],'NULL').",".nvl($t[4],'NULL').")>0"; $sql.= " AND nau_id<>".nvl($nau,"-1")." ORDER BY nau_osoba"; } log_val("sql", $sql); $q = doSQL($sql, $tu); if ($q) { $in = array(); $inputs = 4; $imp = array(); $imp_ling = 3; $d = $t[0]; // nr dnia tygodnia echo "Sugestie zastępstw za ".show_nau($nau,'span').""." w ".dzien_tyg($d)." od ".$t[1].":".$t[2]." do ".$t[3].":".$t[4]."
"; if ($f_print) { echo ''; echo ''/**/.''; } while($rn = mysql_fetch_row($q, MYSQL_ASSOC)) { if ($f_print) echo "".show_nau($rn['nau_id'],"td").'".'".'".'"; $v[0] = db_get_zah_sum($rn['nau_id'],60)/60; $v[1] = db_get_zah_sum($rn['nau_id'],14)/60; $v[2] = db_nau_atWorkTime_m($rn['nau_id'],$d)/60; $v[3] = db_nau_workTime_m($rn['nau_id'],$d)/60; for ($i=0; $i<$inputs; $i++) { if ($i==0) { $in[$i][0] = fuzzy($v[$i],$past_2m[0]); $in[$i][1] = fuzzy($v[$i],$past_2m[1]); $in[$i][2] = fuzzy($v[$i],$past_2m[2]); } elseif ($i==1) { $in[$i][0] = fuzzy($v[$i],$past_2w[0]); $in[$i][1] = fuzzy($v[$i],$past_2w[1]); $in[$i][2] = fuzzy($v[$i],$past_2w[2]); } elseif ($i==2) { $in[$i][0] = fuzzy($v[$i],$at_work[0]); $in[$i][1] = fuzzy($v[$i],$at_work[1]); $in[$i][2] = fuzzy($v[$i],$at_work[2]); } elseif ($i==3) { $in[$i][0] = fuzzy($v[$i],$work[0]); $in[$i][1] = fuzzy($v[$i],$work[1]); $in[$i][2] = fuzzy($v[$i],$work[2]); } $in[$i]['m'] = max3($in[$i][0],$in[$i][1],$in[$i][2]); // największa wartość $in[$i]['wm'] = wmax3($in[$i][0],$in[$i][1],$in[$i][2]); // numer największej wartości if ($f_print) echo ""; } for ($i=0; $i<$imp_ling; $i++) { // wszystkie termy zmiennej wyjściowej $imp[$i] = 0; } for ($r=0; $r'.$imp[$i].''; $y += (100/($imp_ling-1) * $i) * $imp[$i]; $imps += $imp[$i]; // trzeba będzie podzielić przez sumę wag } // if ($f_print) { echo ''; echo ""; // } // else { $out[$y/$imps][] = $rn['nau_id']; // } } if ($f_print) echo '
Nauczyciel2 m-ce2 tyg.w pracypracujeFuzyfikacjaImplikacja
'./*db_get_zah_sum($rn['nau_id'],60)." == ".*/minute2time(db_get_zah_sum($rn['nau_id'],60))."'.minute2time(db_get_zah_sum($rn['nau_id'],14))."'.minute2time(db_nau_atWorkTime_m($rn['nau_id'],$d))."'.minute2time(db_nau_workTime_m($rn['nau_id'],$d))."".$in[$i][0]."".$in[$i][1].''.$in[$i][2]."'.($y/$imps).'
'; // else return $out; return $out; } } //============================== function needZas_to_telme($p_dz, $p_pla_id, $p_szk_id) { $unit = "needZas_to_telme"; global $em_warn; // dla kogo jeszcze nie zdefiniowano wszyskich zastępstw? $rep = ""; try { $data = db_need_zas_today($p_dz, $p_pla_id, $p_szk_id); if (count($data) > 0) { $rep.= $em_warn.'Brakuje zast. za:'.""; $sep = ''; for ($bz=0; $bzgetMessage(); log_me($unit, $err); telme(userInfo()."\n".execFunc($unit)."\n".$err); } // $rep.= "\np_dz=$p_dz, p_pla_id=$p_pla_id, p_szk_id=$p_szk_id"; return $rep; } ?>