diff options
author | M.Gergo | 2018-07-06 11:14:41 +0200 |
---|---|---|
committer | M.Gergo | 2018-07-06 11:14:41 +0200 |
commit | 43de9af71f7f4ca5731b94a06d688ae8412ba427 (patch) | |
tree | 54835de1dfcda504c02da261f0dc26885aed2e89 /mayor-orig/www/include/modules/naplo/admin | |
parent | 50310b0e4513ee3fcce67351ae61e8fff851130e (diff) | |
download | mayor-43de9af71f7f4ca5731b94a06d688ae8412ba427.tar.gz mayor-43de9af71f7f4ca5731b94a06d688ae8412ba427.zip |
2018/Feb/28 -i állapot hozzáadva, mint a módosítások kiindulási állapota
Diffstat (limited to 'mayor-orig/www/include/modules/naplo/admin')
7 files changed, 814 insertions, 0 deletions
diff --git a/mayor-orig/www/include/modules/naplo/admin/azonositok.php b/mayor-orig/www/include/modules/naplo/admin/azonositok.php new file mode 100644 index 00000000..9d85b3e5 --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/admin/azonositok.php @@ -0,0 +1,14 @@ +<?php + + function getOsztalyNevsorEsOid($osztalyId) { + + $q = "SELECT diakId, TRIM(CONCAT_WS(' ',viseltNevElotag, ViseltCsaladiNev, viseltUtoNev)) AS diakNev, viseltCsaladinev, viseltUtonev, oId + FROM diak LEFT JOIN osztalyDiak USING (diakId) + WHERE osztalyId=%u + AND beDt<=CURDATE() AND (kiDt >= CURDATE() OR kiDt IS NULL) + AND (statusz != 'jogviszonya lezárva' OR jogviszonyVege < CURDATE()) ORDER BY diakNev, oId"; + return db_query($q, array('fv' => 'getOsztalyAzonositok', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => array($osztalyId)), $lr); + + } + +?> diff --git a/mayor-orig/www/include/modules/naplo/admin/checksql.php b/mayor-orig/www/include/modules/naplo/admin/checksql.php new file mode 100644 index 00000000..cb751521 --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/admin/checksql.php @@ -0,0 +1,98 @@ +<?php + + + + function checkSqlConsistency($queryFile,$db,&$Q_ERR) + { + + $convert = array("%DB%" => intezmenyDbNev(__INTEZMENY)); + + $fp = fopen($queryFile, 'r'); + $query = fread($fp, filesize($queryFile)); + fclose($fp); + + // A tárolt eljárásoknak, függvényeknek "DELIMITER //" és "DELIMITER ; //" között kell lenniük - egy blokkban a file végén! + list($query, $delimiter) = explode('DELIMITER //', $query); + + // Tábladefiníciók - normál query-k + $QUERIES = explode(';', str_replace("\n", '', $query)); + for ($i = 0; $i < count($QUERIES); $i++) { + $q = $QUERIES[$i]; + if (trim($q) != '' and substr($q, 0, 2) != '--' and substr($q, 0, 3) != '/*!') { + if (is_array($convert)) foreach ( $convert as $mit=>$mire ) $q = str_replace($mit,$mire,$q); + } + if (substr($q,0,6) == 'CREATE') { + $_q = str_replace(' ','',$q); + $first = $second = 0; + for ($c = 0; $c<strlen($_q); $c++) { + if ($_q[$c]==='`') { + if ($first==0) $first = $c; + else { + $second = $c; break; + } + } + } + $table = substr($_q,$first+1,$second-$first-1); + $r = db_query("SHOW CREATE TABLE $table",array('modul'=>$db,'result'=>'record')); + $q1 = str_replace("\n",'',str_replace(' ','',$r['Create Table'])); + $q2 = str_replace(' ','',$_q); + $q1_tmp = substr($q1,0,strrpos($q1,")")); + $q2_tmp = substr($q2,0,strrpos($q2,")")); + if ($q1_tmp!=$q2_tmp) { + $Q_ERR[]=array('inDb'=>$r['Create Table'],'inFile'=>$q); + } + } + } + } + + + +/* +Paul's Simple Diff Algorithm v 0.1 +(C) Paul Butler 2007 <http://www.paulbutler.org/> +May be used and distributed under the zlib/libpng license. +This code is intended for learning purposes; it was written with short +code taking priority over performance. It could be used in a practical +application, but there are a few ways it could be optimized. +Given two arrays, the function diff will return an array of the changes. +I won't describe the format of the array, but it will be obvious +if you use print_r() on the result of a diff on some test data. +htmlDiff is a wrapper for the diff command, it takes two strings and +returns the differences in HTML. The tags used are <ins> and <del>, +which can easily be styled with CSS. +*/ + +function diff($old, $new){ +foreach($old as $oindex => $ovalue){ +$nkeys = array_keys($new, $ovalue); +foreach($nkeys as $nindex){ +$matrix[$oindex][$nindex] = isset($matrix[$oindex - 1][$nindex - 1]) ? +$matrix[$oindex - 1][$nindex - 1] + 1 : 1; +if($matrix[$oindex][$nindex] > $maxlen){ +$maxlen = $matrix[$oindex][$nindex]; +$omax = $oindex + 1 - $maxlen; +$nmax = $nindex + 1 - $maxlen; +} +} +} +if($maxlen == 0) return array(array('d'=>$old, 'i'=>$new)); +return array_merge( +diff(array_slice($old, 0, $omax), array_slice($new, 0, $nmax)), +array_slice($new, $nmax, $maxlen), +diff(array_slice($old, $omax + $maxlen), array_slice($new, $nmax + $maxlen))); +} + +function htmlDiff($old, $new){ +$diff = diff(explode(' ', $old), explode(' ', $new)); +foreach($diff as $k){ +if(is_array($k)) +$ret .= (!empty($k['d'])?"<del>".implode(' ',$k['d'])."</del> ":''). +(!empty($k['i'])?"<ins>".implode(' ',$k['i'])."</ins> ":''); +else $ret .= $k . ' '; +} +return $ret; +} + + + +?> diff --git a/mayor-orig/www/include/modules/naplo/admin/intezmenyek.php b/mayor-orig/www/include/modules/naplo/admin/intezmenyek.php new file mode 100644 index 00000000..654a4c56 --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/admin/intezmenyek.php @@ -0,0 +1,117 @@ +<?php + + function updateNaploSession($sessionID,$rovidnev) { + if (defined('__TANEV')) { + $q = "UPDATE session SET intezmeny='%s',tanev=%u WHERE sessionID='%s'"; + $v = array($rovidnev,__TANEV,$sessionID); + } else { + $q = "UPDATE session SET intezmeny='%s' WHERE sessionID='%s'"; + $v = array($rovidnev,$sessionID); + } + $r = db_query($q, array('fv' => 'updateNaploSession', 'modul' => 'naplo_base', 'values' => $v)); + } + + function intezmenyBejegyzese($OMKod, $nev, $rovidnev) { + + $lr = db_connect('naplo_base', array('fv' => 'intezmenyBejegyzese')); + + $q = "SELECT COUNT(*) FROM intezmeny WHERE alapertelmezett=1"; + $num = db_query($q, array('fv' => 'intezmenyBejegyzese', 'modul' => 'naplo_base', 'result' => 'value'), $lr); + + if ($num > 0) $alapertelmezett = 0; + else $alapertelmezett = 1; + + $q = "INSERT INTO intezmeny (OMKod, nev, rovidnev, alapertelmezett) + VALUES ('%s', '%s', '%s', %u)"; + $v = array($OMKod, $nev, $rovidnev, $alapertelmezett); + $r = db_query($q, array('fv' => 'intezmenyBejegyzese', 'modul' => 'naplo_base', 'values' => $v), $lr); + + db_close($lr); + } + + function intezmenyModositas($ADAT) { + + $q = "UPDATE intezmeny SET nev='%s', OMKod='%s', alapertelmezett=%u, fenntarto='%s' WHERE rovidNev='".__INTEZMENY."' "; + $v = array($ADAT['nev'], $ADAT['OMKod'], $ADAT['alapertelmezett'], $ADAT['fenntarto']); + return db_query($q, array('fv' => 'intezmenyModositas', 'modul' => 'naplo_base', 'values' => $v)); + + } + + function intezmenyTorles($intezmeny) { + + $q = "DELETE FROM intezmeny WHERE rovidNev='%s'"; + return db_query($q, array('fv' => 'intezmenyTorles', 'modul' => 'naplo_base', 'values' => array($intezmeny))); + + } + + function getIntezmeny($intezmeny) { + + $q = "SELECT * FROM `intezmeny` WHERE `rovidNev`='%s'"; + $ret = db_query($q, array('fv' => 'getIntezmeny', 'modul' => 'naplo_base', 'result' => 'record', 'values' => array($intezmeny))); + + $q = "SELECT * FROM `%s`.`telephely`"; + $ret['telephely'] = db_query($q, array('fv' => 'getIntezmeny', 'modul' => 'naplo_base', 'result' => 'indexed', 'values' => array(intezmenyDbNev($intezmeny)))); + + return $ret; + + } + + function telephelyModositas($ADAT) { + + $v = array( + __INTEZMENYDBNEV, + // Telephely adatai + readVariable($ADAT['telephelyNev'], 'sql', null), + readVariable($ADAT['telephelyRovidNev'], 'sql', null), + readVariable($ADAT['alapertelmezett'], 'numeric unsigned', 0, array(0,1)), + readVariable($ADAT['cimHelyseg'], 'sql', null), + readVariable($ADAT['cimIrsz'], 'numeric', 'NULL'), + readVariable($ADAT['cimKozteruletNev'], 'sql', null), + readVariable($ADAT['cimKozteruletJelleg'], 'sql', null), + readVariable($ADAT['cimHazszam'], 'sql', null), + readVariable($_POST['telefon'], 'string'), + readVariable($_POST['fax'], 'string'), + readVariable($_POST['email'], 'string'), + readVariable($_POST['honlap'], 'string'), + readVariable($_POST['telephelyId'], 'id') + ); + + $q = "UPDATE `%s`.`telephely` + SET `telephelyNev`='%s', `telephelyRovidNev`='%s', `alapertelmezett`=%u, + `cimHelyseg`='%s', `cimIrsz`=%u, `cimKozteruletNev`='%s',`cimKozteruletJelleg`='%s', `cimHazszam`='%s', + `telefon`='%s',`fax`='%s',`email`='%s',`honlap`='%s' + WHERE `telephelyId`='%s' "; + + return db_query($q, array('fv' => 'telephelyModositas', 'modul' => 'naplo_base', 'values' => $v)); + + } + + function ujTelephely($ADAT) { + + $v = array( + __INTEZMENYDBNEV, + // Telephely adatai + readVariable($ADAT['telephelyNev'], 'sql', null), + readVariable($ADAT['telephelyRovidNev'], 'sql', null), + readVariable($ADAT['alapertelmezett'], 'numeric unsigned', 0, array(0,1)), + readVariable($ADAT['cimHelyseg'], 'sql', null), + readVariable($ADAT['cimIrsz'], 'numeric', 'NULL'), + readVariable($ADAT['cimKozteruletNev'], 'sql', null), + readVariable($ADAT['cimKozteruletJelleg'], 'sql', null), + readVariable($ADAT['cimHazszam'], 'sql', null), + readVariable($_POST['telefon'], 'string'), + readVariable($_POST['fax'], 'string'), + readVariable($_POST['email'], 'string'), + readVariable($_POST['honlap'], 'string'), + ); + + $q = "INSERT INTO `%s`.`telephely` + (`telephelyNev`,`telephelyRovidNev`,`alapertelmezett`,`cimHelyseg`,`cimIrsz`,`cimKozteruletNev`,`cimKozteruletJelleg`,`cimHazszam`, + `telefon`,`fax`,`email`,`honlap`) + VALUES ('%s', '%s', %u,'%s', %u, '%s','%s', '%s','%s','%s','%s','%s')"; + + return db_query($q, array('fv' => 'ujTelephely', 'modul' => 'naplo_base', 'values' => $v)); + + } + +?> diff --git a/mayor-orig/www/include/modules/naplo/admin/szemeszterek.php b/mayor-orig/www/include/modules/naplo/admin/szemeszterek.php new file mode 100644 index 00000000..6e4c2149 --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/admin/szemeszterek.php @@ -0,0 +1,48 @@ +<?php + + function idoszakTorles($idoszakId) { + $q = "DELETE FROM idoszak WHERE idoszakId=%u"; + return db_query($q, array('fv' => 'idoszakTorles', 'modul' => 'naplo_intezmeny', 'values' => array($idoszakId))); + } + + function idoszakModositas($idoszakId, $tolDt, $igDt) { + $q = "UPDATE idoszak SET tolDt='%s', igDt='%s' WHERE idoszakId=%u"; + $v = array($tolDt, $igDt, $idoszakId); + return db_query($q, array('fv' => 'idoszakModositas', 'modul' => 'naplo_intezmeny', 'values' => $v)); + } + + function ujIdoszak($tolDt, $igDt, $tipus, $tanev = '', $szemeszter = '', $idoszakTipusok = '') { + // dátum ellenőrzés + if (strtotime($tolDt) > strtotime($igDt)) { + $_SESSION['alert'][] = 'message:wrong_data:dt:'.str_replace(':', '.', $tolDt.' - '.$igDt); + return false; + } + // típus ellenőrzés + if (!is_array($idoszakTipusok)) $idoszakTipusok = getIdoszakTipusok(); + if (!in_array($tipus, $idoszakTipusok)) { + $_SESSION['alert'][] = 'message:wrong_data:idoszak.tipus:'.$tipus; + return false; + } + // tanev/szemeszter beállítás + if ($tanev == '' || $szemeszter == '') { + $q = "SELECT tanev, szemeszter FROM szemeszter WHERE kezdesDt <= '%s' AND '%s' <= zarasDt"; + $v = array($igDt, $tolDt); + $ret = db_query($q, array('fv' => 'ujIdoszak', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => $v)); + if (is_array($ret) && count($ret) == 1) { + $tanev = $ret[0]['tanev']; + $szemeszter = $ret[0]['szemeszter']; + } else { + return false; + } + } + // idoszak felvétele + $q = "INSERT INTO idoszak (tolDt, igDt, tipus, tanev, szemeszter) VALUES ('%s', '%s', '%s', %u, %u)"; + $v = array($tolDt, $igDt, $tipus, $tanev, $szemeszter); + return db_query($q, array('fv' => 'ujIdoszak', 'modul' => 'naplo_intezmeny', 'values' => $v)); + } + + function getIdoszakTipusok() { + return getEnumField('naplo_intezmeny', 'idoszak', 'tipus'); + } + +?> diff --git a/mayor-orig/www/include/modules/naplo/admin/szuloiAzonositok.php b/mayor-orig/www/include/modules/naplo/admin/szuloiAzonositok.php new file mode 100644 index 00000000..585292bf --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/admin/szuloiAzonositok.php @@ -0,0 +1,14 @@ +<?php + require_once('include/modules/naplo/share/szulo.php'); + function getOsztalyNevsorEsSzulo($osztalyId) { + + $q = "SELECT diakId, TRIM(CONCAT_WS(' ',viseltNevElotag, ViseltCsaladiNev, viseltUtoNev)) AS diakNev, viseltCsaladinev, viseltUtonev, oId, anyaId, apaId + FROM diak LEFT JOIN osztalyDiak USING (diakId) + WHERE osztalyId=%u + AND beDt<=CURDATE() AND (kiDt >= CURDATE() OR kiDt IS NULL) + AND (statusz != 'jogviszonya lezárva' OR jogviszonyVege < CURDATE()) ORDER BY diakNev, oId"; + return db_query($q, array('fv' => 'getOsztalyAzonositok', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => array($osztalyId))); + + } + +?> diff --git a/mayor-orig/www/include/modules/naplo/admin/tanevek.php b/mayor-orig/www/include/modules/naplo/admin/tanevek.php new file mode 100644 index 00000000..cf2b32db --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/admin/tanevek.php @@ -0,0 +1,390 @@ +<?php + + function updateNaploSession($sessionID,$rovidnev='',$tanev=__TANEV) { + if ($tanev) { + $q = "UPDATE session SET intezmeny='%s',tanev=%u WHERE sessionID='%s'"; + $v = array($rovidnev,$tanev,$sessionID); + } else { + $q = "UPDATE session SET intezmeny='%s' WHERE sessionID='%s'"; + $v = array($rovidnev,$sessionID); + } + $r = db_query($q, array('fv' => 'updateNaploSession', 'modul' => 'naplo_base', 'values' => $v)); + } + + function szemeszterBejegyzes($szemeszterObj) { + + global $mayorCache; + $mayorCache->delType('szemeszter'); + + $tanev = $szemeszterObj['tanev']; + $szemeszter = $szemeszterObj['szemeszter']; + $statusz = $szemeszterObj['statusz']; + $kDt = $szemeszterObj['kezdesDt']; + $zDt = $szemeszterObj['zarasDt']; + + if ($tanev != '' && $szemeszter != '') { + $lr = db_connect('naplo_intezmeny', array('fv' => 'szemeszterBejegyzes')); + + $q = "SELECT COUNT(*) FROM szemeszter WHERE szemeszter=%u AND tanev=%u"; + $v = array($szemeszter, $tanev); + $num = db_query($q, array('fv' => 'szemeszterBejegyzes', 'modul' => 'naplo_intezmeny', 'result' => 'value', 'values' => $v), $lr); + if ($num == 0) { + + $q = "INSERT INTO szemeszter (tanev,szemeszter, statusz, kezdesDt, zarasDt) + VALUES (%u, %u, '%s', '%s', '%s')"; + $v = array($tanev, $szemeszter, $statusz, $kDt, $zDt); + $r = db_query($q, array('fv' => 'szemeszterBejegyzes', 'modul' => 'naplo_intezmeny', 'values' => $v), $lr); + + } else { + $_SESSION['alert'][] = 'message:letezo_szemeszter:'."$tanev:$szemeszter"; + } + db_close($lr); + } + } + + function szemeszterTorles($szemeszterId) { + + global $mayorCache; + $mayorCache->delType('szemeszter'); + + $lr = db_connect('naplo_intezmeny', array('fv' => 'szemeszterTorles')); + if (!$lr) return false; + + $q = 'DELETE FROM szemeszter WHERE szemeszterId IN ('.implode(',', array_fill(0, count($szemeszterId), '%u')).')'; + $r = db_query($q, array('fv' => 'szemeszterTorles', 'modul' => 'naplo_intezmeny', 'values' => $szemeszterId), $lr); + + db_close($lr); + return $r; + + } + + + function activateTanev($tanev) { + setTanevStatus($tanev,'aktív'); + } + + function closeTanev($ADAT) { + + global $ZaradekIndex; + global $mayorCache; + $mayorCache->delType('szemeszter'); + + $tanev = $ADAT['tanev']; + + if (strtotime($ADAT['tanevAdat']['zarasDt']) >= time()) { + $_SESSION['alert'][] = "message:wrong_data:A tanév még nem ért véget!:$tanev tanév vége ".$ADAT['tanevAdat']['zarasDt']; + return false; + } + if (strtotime($ADAT['tanevAdat']['zarasDt']) >= strtotime($ADAT['dt'])) { + $_SESSION['alert'][] = "message:wrong_data:A tanév csak az utolsó tanítási nap utáni hatállyal zárható le!:$tanev tanév vége ".$ADAT['tanevAdat']['zarasDt'].': zárás dátuma '.$ADAT['dt']; + return false; + } + $Szemeszter = $ADAT['tanevAdat']['szemeszter']; + $vDiakok = getVegzoDiakok(array('tanev' => $tanev)); + // A függvénynek nincs statusz paramétere // $vDiakok = getVegzoDiakok(array('tanev' => $tanev, 'statusz' => array('jogviszonyban van','magántanuló','jogviszonya felfüggesztve'))); + //vegzoOsztalyok, vjlOsztalyok, vatOsztalyok + + if (in_array('vegzosJogviszonyLezaras', $ADAT['step'])) { + + // Azoknak a jogviszonyát kell csak lezárni, akik csak végzős osztálynak tagjai - és az osztályaik meg vannak jelölve (diak tábla) + $oDiakok = getDiakokByOsztalyId($ADAT['vjlOsztaly'], array('tanev' => $tanev, 'result' => '', 'statusz' => array('jogviszonyban van','magántanuló','jogviszonya felfüggesztve'))); + $vjlDiakIds = array(); + for ($i = 0; $i < count($oDiakok); $i++) { + $diakId = $oDiakok[$i]['diakId']; + if (!in_array($diakId, $vjlDiakIds)) { // Ha még nem választottuk ki (jöhet többször, mert lehet egy diák több osztályban) + if (in_array($diakId, $vDiakok)) { + $vjlDiakIds[] = $diakId; + // A jogviszony lezárás egyúttal: + // - tankörökből való kiléptetés + // - osztályokból való kiléptetés + $D = array( + 'diakId' => $diakId, 'jogviszonyValtasDt' => $ADAT['dt'], 'ujStatusz' => 'jogviszonya lezárva', 'tanev' => $tanev, + 'lezarasZaradekIndex' => $ZaradekIndex['jogviszony']['lezárás']['tanulmányait befejezte'] + ); + diakJogviszonyValtas($D); + } else { + $_SESSION['alert'][] = "info:wrong_data:Nem végzős:$diakId (jogviszonyát nem zárjuk le)"; + } + } + } +// if (count($vjlDiakIds) > 0) diakJogviszonyLezaras($vjlDiakIds, $ADAT['dt'], $olr = ''); + + } + + if (in_array('vegzosOsztalyokLezarasa', $ADAT['step'])) { + // A megjelölt végzős osztályokból kiléptetjük a diákokat (osztaly-Diak tábla) + $osztalyIds = array(); + for ($i = 0; $i < count($ADAT['vegzoOsztalyok']); $i++) $osztalyIds[] = $ADAT['vegzoOsztalyok'][$i]['osztalyId']; + osztalyLezaras($osztalyIds, $ADAT['dt']); + } + if (in_array('vegzosAzonositokTorlese', $ADAT['step'])) { + + require_once('include/modules/session/search/searchAccount.php'); + // Végzősök azonosítóinak törlése (mayor_private.accounts - lezárt jogviszonyúak) + + $q = "SELECT oId FROM diak WHERE statusz='jogviszonya lezárva' AND oId IS NOT NULL"; + $oIds = db_query($q, array('fv' => 'closeTanev/azonosítók lekérdezése', 'modul' => 'naplo_intezmeny', 'result' => 'idonly')); + foreach ($oIds as $index => $oId) { + $ret = searchAccount('studyId', $oId, array('userAccount'), 'private'); + if ($ret['count'] == 1) deleteAccount($ret[0]['userAccount'][0], 'private'); + else $_SESSION['alert'][] = "info:wrong_data:nincs diák account:oId=$oId"; + } + } + + if (in_array('vegzosSzuloAzonositokTorlese', $ADAT['step'])) { + + require_once('include/modules/session/search/searchAccount.php'); + // Végzősök szülői azonosítóinak törlése (mayor_parent.accounts - pontosabban: lezárt jogviszonyúak userAccount=NULL) + $q = "SELECT szulo.userAccount + FROM diak LEFT JOIN szulo ON szuloId IN (apaId,anyaId,gondviseloId) + WHERE szulo.userAccount IS NOT NULL GROUP BY szulo.userAccount + HAVING SUM(IF(diak.statusz IN ('jogviszonyban van','magántanuló','vendégtanuló','jogviszonya felfüggesztve'), 1, 0)) = 0 + AND SUM(IF(diak.statusz IN ('jogviszonya lezárva','felvételt nyert'),1,0)) > 0"; + + $userAccounts = db_query($q, array('fv' => 'closeTanev/azonosítók lekérdezése', 'modul' => 'naplo_intezmeny', 'result' => 'idonly')); + foreach ($userAccounts as $index => $userAccount) { + $ret = searchAccount('userAccount', $userAccount, array('userAccount'), 'parent'); + if ($ret['count'] == 1) + deleteAccount($ret[0]['userAccount'][0], 'parent'); + else + $_SESSION['alert'][] = "message:wrong_data:nincs szülő account:userAccount=$userAccount"; + + $q = "UPDATE szulo SET userAccount=NULL WHERE userAccount IN ('".implode("','", array_fill(0, count($userAccounts), '%s'))."')"; + + db_query($q, array('fv' => 'closeTanev', 'modul' => 'naplo_intezmeny', 'values' => $userAccounts)); + } + + } + + if (in_array('tanevLezaras', $ADAT['step'])) { + + // A tanév lezárása + setTanevStatus($tanev,'lezárt'); + + $Wnemszamit = defWnemszamit(); + // A tanévhez tartozó hiányzási adatok lekérdezése és rögzítése + $tanevDb = tanevDbNev(__INTEZMENY, $tanev); + foreach ($Szemeszter as $i => $szAdat) { + if ($szAdat['statusz'] == 'aktív') { // tervezett és lezárt szemeszter nem zárható le... + // replace - ha megnyitunk és újra lezárunk egy tanévet... + $q = "REPLACE INTO ".__INTEZMENYDBNEV.".hianyzasOsszesites + SELECT diakId, %u AS tanev, %u AS szemeszter, + COUNT(IF(tipus='hianyzas' AND statusz='igazolt',1,NULL)) AS igazolt, + COUNT(IF(tipus='hianyzas' AND statusz='igazolatlan',1,NULL)) AS igazolatlan, + SUM(IF(tipus='késés' AND statusz='igazolatlan',perc,NULL)) AS kesesPercOsszeg, + + COUNT(IF(tipus='hianyzas' AND statusz='igazolt' AND tankorTipus.jelleg='gyakorlat',1,NULL)) AS gyakorlatIgazolt, + COUNT(IF(tipus='hianyzas' AND statusz='igazolatlan' AND tankorTipus.jelleg='gyakorlat',1,NULL)) AS gyakorlatIgazolatlan, + SUM(IF(tipus='késés' AND statusz='igazolatlan' AND tankorTipus.jelleg='gyakorlat',perc,NULL)) AS gyakorlatKesesPercOsszeg, + + COUNT(IF(tipus='hianyzas' AND statusz='igazolt' AND tankorTipus.jelleg='elmélet',1,NULL)) AS elmeletIgazolt, + COUNT(IF(tipus='hianyzas' AND statusz='igazolatlan' AND tankorTipus.jelleg='elmélet',1,NULL)) AS elmeletIgazolatlan, + SUM(IF(tipus='késés' AND statusz='igazolatlan' AND tankorTipus.jelleg='elmélet',perc,NULL)) AS elmeletKesesPercOsszeg + + FROM `%s`.hianyzas ".$Wnemszamit['join']." + WHERE ( + tipus = 'hiányzás' + OR (tipus='késés' AND statusz='igazolatlan' AND perc IS NOT NULL) + ) AND dt<='%s' + ".$Wnemszamit['nemszamit']." + GROUP BY diakId"; + $v = array($tanev, $szAdat['szemeszter'], $tanevDb, $szAdat['zarasDt']); + $r = db_query($q, array('fv' => 'closeTanev/hianyzasOsszesites', 'modul' => 'naplo_intezmeny', 'values' => $v)); + // A hozott hiányzások hozzáadása + $q = "UPDATE ".__INTEZMENYDBNEV.".hianyzasOsszesites SET + igazolt = igazolt + ( + SELECT IFNULL(SUM(dbHianyzas),0) FROM `%s`.hianyzasHozott AS `hh` + WHERE hh.diakId = hianyzasOsszesites.diakId AND hh.statusz='igazolt' AND hh.dt<='%s' + ), + igazolatlan = igazolatlan + ( + SELECT IFNULL(SUM(dbHianyzas),0) FROM `%s`.hianyzasHozott AS `hh` + WHERE hh.diakId = hianyzasOsszesites.diakId AND hh.statusz='igazolatlan' AND hh.dt<='%s' + ) + WHERE tanev=%u AND szemeszter=%u"; + $v = array($tanevDb, $szAdat['zarasDt'], $tanevDb, $szAdat['zarasDt'], $tanev, $szAdat['szemeszter']); + $r = db_query($q, array('fv' => 'closeTanev/hianyzasOsszesites/hozott', 'modul' => 'naplo_intezmeny', 'values' => $v)); + } + } + } + + return true; + + } + + function setTanevStatus($tanev,$statusz) { + global $mayorCache; + $mayorCache->delType('szemeszter'); + + $q = "UPDATE szemeszter SET statusz='%s' WHERE tanev=%u"; + $v = array($statusz, $tanev); + return db_query($q, array('fv' => 'setTanevStatus', 'modul' => 'naplo_intezmeny', 'values' => $v)); + } + + + function refreshOsztalyNaplo($dbNev, $tanev) { + + global $mayorCache; + $mayorCache->flushdb(); + + $lr = db_connect('naplo_intezmeny', array('priv' => 'Write', 'fv' => 'refreshOsztalyNaplo')); + if (!$lr) return false; + + $q = "SELECT `osztalyId`,"._osztalyJel($tanev)." AS `osztalyJel`,"._evfolyam($tanev)." AS evfolyam,"._evfolyamJel($tanev)." AS evfolyamJel + FROM `osztaly` LEFT JOIN mayor_naplo.osztalyJelleg USING (osztalyJellegId) + WHERE kezdoTanev<=%u AND vegzoTanev>=%u + ORDER BY evfolyam, evfolyamJel, kezdoTanev, jel"; + + $v = array($tanev, $tanev); + $ret = db_query($q, array('fv' => 'refreshOsztalyNaplo', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => $v), $lr); + if (!is_array($ret)) return false; + foreach ($ret as $key => $sor) { + $q = "REPLACE INTO `%s`.osztalyNaplo (osztalyId,osztalyJel,evfolyam,evfolyamJel) VALUES (%u,'%s',%u,'%s')"; + $v = array($dbNev, $sor['osztalyId'], $sor['osztalyJel'], $sor['evfolyam'], $sor['evfolyamJel']); + db_query($q, array('fv' => 'refreshOsztalyNaplo', 'modul' => 'naplo_intezmeny', 'values' => $v), $lr); + } + + db_close($lr); + return true; + + + } + + function szemeszterModositasOrig($ADAT) { + + + for ($i = 0; $i < count($ADAT); $i++) { + + $kezdesDt = $ADAT[$i]['kezdesDt']; $zarasDt = $ADAT[$i]['zarasDt']; + $tanev = $ADAT[$i]['tanev']; $szemeszter = $ADAT[$i]['szemeszter']; + + $q = "SELECT zarasDt FROM szemeszter WHERE tanev=%u AND szemeszter=%u"; + $v = array($tanev, $szemeszter); + $zDt = db_query($q, array('fv' => 'szemeszterModositas', 'modul' => 'naplo_intezmeny', 'values' => $v, 'result'=>'value')); + + $q = "SELECT count(*) FROM zaroJegy WHERE hivatalosDt='%s'"; + $v = array($zDt); + $db = db_query($q, array('fv' => 'szemeszterModositas', 'modul' => 'naplo_intezmeny', 'values' => $v, 'result'=>'value')); + + if ($db==0) { + + $q = "UPDATE szemeszter SET kezdesDt='%s',zarasDt='%s' WHERE tanev=%u AND szemeszter=%u"; + $v = array($kezdesDt, $zarasDt, $tanev, $szemeszter); + db_query($q, array('fv' => 'szemeszterModositas', 'modul' => 'naplo_intezmeny', 'values' => $v)); + + } else { + $_SESSION['alert'][] = 'error:wrong_data:van már a '.$zDt.'-hez rögzített zárójegy!'; + return false; + } + } + + } + + /* + * A szemeszter dátumhatárainak módosítása több dolgot is érint. + * 1. A zárójegyek hivatalos dátuma a szemszter záró dátuma - kivéve a vizsgajegyket. + * - megoldás: módosítsuk a zárójegy dátumát + * 2. A tanév nap táblája a tanév kezdetétől a végéig tartalmaz napokat. + * - vegyük fel, illetve töröljük a hiányzó napokat (??) + * 3. Elképzelhető, hogy a már beírt órákat, és ezen keresztül hiányzásokat és jegyeket is érinti a módosítás (ora tábla) + * - Ha órák törlésével járna, akkor egyszerűbb nem megengedni a módosítást. Ha kell, akkor előre törölje az órákat külön! + */ + function szemeszterModositas($ADAT) { + + global $mayorCache; + $mayorCache->flushdb(); + + $success = true; + for ($i = 0; $i < count($ADAT); $i++) { + + unset($tolDt); unset($igDt); + $kezdesDt = $ADAT[$i]['kezdesDt']; $zarasDt = $ADAT[$i]['zarasDt']; + $tanev = $ADAT[$i]['tanev']; $szemeszter = $ADAT[$i]['szemeszter']; + $tanevDb = tanevDbNev(__INTEZMENY, $tanev); + + $lr = db_connect('naplo_intezmeny', array('fv' => 'szemeszterModositas')); + db_start_trans($lr); + + // a korábbi szemeszter zárás dátumának és státuszának lekérdezése + $q = "SELECT statusz, kezdesDt, zarasDt FROM szemeszter WHERE tanev=%u AND szemeszter=%u"; + $v = array($tanev, $szemeszter); + $ret = db_query($q, array('fv' => 'szemeszterModositas/select', 'modul' => 'naplo_intezmeny', 'values' => $v, 'result'=>'record')); + $kDt = $ret['kezdesDt']; $zDt = $ret['zarasDt']; + if ($ret['statusz'] == 'lezárt') { + // lezárt szemeszter adatait ne változtassuk + $_SESSION['alert'][] = 'message:wrong_data:lezárt szemeszter! (szemeszter='.$tanev.'/'.$szemeszter.')'; + db_rollback($lr); db_close($lr); $success = false; continue; + } + if (($szemeszter == 1 && $kezdesDt != $kDt) || ($szemeszter == 2 && $zarasDt != $zDt)) { + // tanév kezdő vagy záró dátumának módosítása + if ($ret['statusz'] == 'aktív') { + // A tanév adatbázisát is érintik a változások + if ($szemeszter == 1 && $kezdesDt > $kDt) { + // Ha az év elejéből el kellene venni napokat, akkor ellenőrizzük, hogy vannak-e órák ezekre a napokra már beírva + $q = "SELECT COUNT(*) FROM `$tanevDb`.`ora` WHERE `dt` < '%s'"; + $v = array($kezdesDt); + $db = db_query($q, array('fv' => 'szemeszterModositas/ora - kezdés', 'modul' => 'naplo_intezmeny', 'values' => $v, 'result' => 'value'), $lr); + if ($db === "0") { + // Ha nincs betöltött óra, akkor módosíthatók a nap tábla megfelelő rekordjai; munkanapok --> szorgalmi időszakon kívüli munkanap + $q = "UPDATE `$tanevDb`.`nap` SET tipus='szorgalmi időszakon kívüli munkanap', orarendiHet=0 + WHERE `dt` < '%s' AND tipus IN ('tanítási nap','speciális tanítási nap','tanítás nélküli munkanap')"; + $v = array($kezdesDt); + $db = db_query($q, array('fv' => 'szemeszterModositas/delete nap', 'modul' => 'naplo_intezmeny', 'values' => $v, 'result' => 'value'), $lr); + } else { + // Ha van, akkor hibát üzenünk és nem hajtjuk végre a módosítást + $_SESSION['alert'][] = 'message:insufficient_access:szemeszterMododitas/tanév később kezdés:A dátumváltoztatás már betöltött órákat érintene!'; + db_rollback($lr, 'szemeszterModositas/van betöltött óra!'); db_close($lr); $success = false; continue; + } + } elseif ($szemeszter == 2 && $zarasDt < $zDt) { + // Ha az év végéből kell elvenni napokat, akkor ellenőrizzük, hogy vannak-e _lekötött_ órák ezekre a napokra már beírva + $q = "SELECT COUNT(*) FROM `$tanevDb`.`ora` WHERE `dt` > '%s' AND munkaido='lekötött'"; + $v = array($zarasDt); + $db = db_query($q, array('fv' => 'szemeszterModositas/ora - zárás', 'modul' => 'naplo_intezmeny', 'values' => $v, 'result' => 'value'), $lr); + if ($db === "0") { + // Ha nincs betöltött óra, akkor módosíthatók a nap tábla megfelelő rekordjai; munkanapok --> szorgalmi időszakon kívüli munkanap + $q = "UPDATE `$tanevDb`.`nap` SET tipus='szorgalmi időszakon kívüli munkanap', orarendiHet=0 + WHERE `dt` > '%s' AND tipus IN ('tanítási nap','speciális tanítási nap','tanítás nélküli munkanap')"; + $v = array($zarasDt); + $db = db_query($q, array('fv' => 'szemeszterModositas/delete nap', 'modul' => 'naplo_intezmeny', 'values' => $v, 'result' => 'value'), $lr); + } else { + // Ha van, akkor hibát üzenünk és nem hajtjuk végre a módosítást + $_SESSION['alert'][] = 'message:insufficient_access:szemeszterMododitas/tanév rövidítés:A dátumváltoztatás már betöltött órákat érintene!'; + db_rollback($lr, 'szemeszterModositas/van betöltött óra!'); db_close($lr); $success = false; continue; + } + } elseif ($szemeszter == 1 && $kezdesDt < $kDt) { + // éves munkaterv (nap tábla) bővítése + $tolDt = $kezdesDt; $igDt = date('Y-m-d', strtotime('-1 day', strtotime($kDt))); + } elseif ($szemeszter == 2 && $zarasDt > $zDt) { + // éves munkaterv (nap tábla) bővítése + $tolDt = date('Y-m-d', strtotime('+1 day', strtotime($zDt))); $igDt = $zarasDt; + } + if (isset($tolDt) && isset($igDt)) { + $Hetek = array(1); + $r = napokHozzaadasa($tanev, $tolDt, $igDt, $ADAT[$i], $lr); + unset($tolDt); unset($igDt); + if (!$r) { db_rollback($lr, 'szemeszterModositas/nap felvétel'); db_close($lr); $success = false; continue; } + /*orarendiHetekHozzarendelese($tolDt, $igDt, $Hetek, $lr);*/ + } + } // aktív tanév + } // tanév hossza változik + // Az érintett, vizsgához nem kapcsolódó zárójegyek hivatalos dátumának módosítása + $q = "UPDATE zaroJegy LEFT JOIN vizsga USING (zaroJegyId) SET hivatalosDt='%s' WHERE hivatalosDt='%s' AND vizsgaId IS NULL"; + $v = array($zarasDt, $zDt); + $r = db_query($q, array('fv' => 'szemeszterModositas', 'modul' => 'naplo_intezmeny', 'values' => $v, 'result'=>'value')); + if ($r === false) { db_rollback($lr, 'szemeszterModositas/zarójegyek'); db_close($lr); $success = false; continue; } + // A szemeszter kezdés és zárás dátumának módosítása + $q = "UPDATE szemeszter SET kezdesDt='%s',zarasDt='%s' WHERE tanev=%u AND szemeszter=%u"; + $v = array($kezdesDt, $zarasDt, $tanev, $szemeszter); + $r = db_query($q, array('fv' => 'szemeszterModositas', 'modul' => 'naplo_intezmeny', 'values' => $v)); + if ($r === false) { db_rollback($lr, 'szemeszterModositas/dátum módosítás'); db_close($lr); $success = false; continue; } + + db_commit($lr); + db_close($lr); + + $_SESSION['alert'][] = 'info:success:tanev='.$tanev.', szemeszter='.$szemeszter; + + } + return $success; + + } + +?>
\ No newline at end of file diff --git a/mayor-orig/www/include/modules/naplo/admin/tankorok.php b/mayor-orig/www/include/modules/naplo/admin/tankorok.php new file mode 100644 index 00000000..23887dbd --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/admin/tankorok.php @@ -0,0 +1,133 @@ +<?php + + function updateTankor($file, $MEZO_LISTA, $KULCS_MEZOK, $mezo_elvalaszto = ' ', $rovatfej = false) { + + + if (!file_exists($file)) { + $_SESSION['alert'][] = 'message:file_not_found:'.$file; + return false; + } + + if (!is_array($MEZO_LISTA)) { + $_SESSION['alert'][] = 'message:wrong_parameter:MEZO_LISTA'; + return false; + } + + if (!is_array($KULCS_MEZOK)) { + $_SESSION['alert'][] = 'message:wrong_parameter:KULCS_MEZOK'; + return false; + } + + // A frissítendő attribútumok listája + $attrList = array_values(array_filter($MEZO_LISTA)); + + $fp = fopen($file,'r'); + if (!$fp) { + $_SESSION['alert'][] = 'message:file_open_error:'.$file; + return false; + } + + $lr = db_connect('naplo_intezmeny', array('fv' => 'updateTankor')); + if (!$lr) { + fclose($fp); + return false; + } + + // Az első sor kihagyása + if ($rovatfej) $sor = fgets($fp,1024); + + // TárgyId-k átváltása + $keyNev = array_search('targyNev',$MEZO_LISTA); + if (!$keyNev && $keyNev !== 0) $keyNev = false; + if ($keyNev) { + $keyId = array_search('targyId',$MEZO_LISTA); + if (!$keyId && $keyId !== 0) { // Ha nincs targyId, akkor felvezzük a mező listába + $keyId = count($MEZO_LISTA); + $MEZO_LISTA[] = 'targyId'; + } + $MEZO_LISTA[$keyNev] = ''; // A targyNev nem játszik szerepet többet, csak a targyId + $targyak = array(); // $targyNev --> $targyId átalakítás tárolása + $attrList = array_values(array_filter($MEZO_LISTA)); // az attrList újragenerálása (targyNev helyett targyId) + if (in_array($keyNev,$KULCS_MEZOK)) { // Ha a targyNev kulcs lenne, akkor legyen helyette a tagyId a kulcs (ha már eleve benne volt a targyId, akkor most kétszer lesz benne - nem baj!) + $k = array_search($keyNev,$KULCS_MEZOK); + $KULCS_MEZOK[$k] = $keyId; + } + } + + while ($sor = fgets($fp,1024)) { + + $adatSor = explode($mezo_elvalaszto,chop($sor)); + $update = $hianyzoTargyId = false; + + // targyId megállapítása a targyNev alapján + if ( + $keyNev !== false // Ha van targyNev mező + && $adatSor[$keyNev] != '' // és nem üres + && $adatSor[$keyId] == '' // de nincs megadva targyId + + ) { + if (!isset($targyak[$adatSor[$keyNev]])) { // Ha még nem kérdeztük le a targyId-t + $q = "SELECT targyId FROM targy WHERE targyNev='%s'"; + $v = array($adatSor[$keyNev]); + $targyak[$adatSor[$keyNev]] = db_query($q, array( + 'fv' => 'updateTankor', 'modul' => 'naplo_intezmeny', 'result' => 'value', 'values' => $v + ), $lr); + if (!$targyak[$adatSor[$keyNev]]) { + $_SESSION['alert'][] = 'message:wrong_data:tárgyNév:'.$adatSor[$keyNev].':'.$num.':'.$sor; + $hianyzoTargyId = true; + } + } + $adatSor[$keyId] = $targyak[$adatSor[$keyNev]]; + } + // Innentől ha lehetett, akkor a targyNev le lett cserélve targyId-re - minden megy a sima frissítés szerint + + // keresési feltétel összerakása + $where = ''; + for ($i=0; $i<count($KULCS_MEZOK); $i++) { + if ($adatSor[$KULCS_MEZOK[$i]] != '') { + $where .= ' AND '.$MEZO_LISTA[$KULCS_MEZOK[$i]]."='".$adatSor[$KULCS_MEZOK[$i]]."' "; + } + } + if ($where != '') { + $where = substr($where,5); + $q = 'SELECT COUNT(*) FROM tankor WHERE '.$where; + $num = db_query($q, array('fv' => 'updateTankor', 'modul' => 'naplo_intezmeny', 'result' => 'value'), $lr); + $update = ($num > 0); + } + if ($update) { + $UPDATE = array(); + for ($i = 0; $i < count($MEZO_LISTA); $i++) { + if ( + $MEZO_LISTA[$i] != '' + and $adatSor[$i] != '' + and !in_array($i,$KULCS_MEZOK) + ) { + $UPDATE[] = $MEZO_LISTA[$i]."='".$adatSor[$i]."'"; + } + } + if (count($UPDATE) > 0) { + $q = 'UPDATE tankor SET '.implode(',',$UPDATE).' WHERE '.$where; + $r = db_query($q, array('fv' => 'updateTankor', 'modul' => 'naplo_intezmeny'), $lr); + } + } elseif (!$hianyzoTargyId) { + $value = array(); + for ($i=0; $i<count($MEZO_LISTA); $i++) { + if ($MEZO_LISTA[$i] != '') $value[] .= $adatSor[$i]; + } + $VALUES[] = "('".implode("','",$value)."')"; + } + + } // while + if (count($VALUES) > 0) { + $q = 'INSERT INTO tankor ('.implode(",",$attrList).') VALUES '.implode(",\n",$VALUES); + $r = db_query($q, array('fv' => 'updateTankor', 'modul' => 'naplo_intezmeny'), $lr); + } + + db_close($lr); + + fclose($fp); + + } + + +?> |