- <?php
- /**
- * @package koliportal
- * @todo mysql indexek!
- * @todo css menü jobbra
- */
- error_reporting(E_ALL);
- // session_start();
-
- $trusted_hosts = array();
-
- /** Megbízható hostok hozzáadása
- *
- * A config.inc.php -ben megadott megbízható hostokat kezeli le. Ezek azok
- * a hostok, ahonnan nem szükséges bejelentkezni a fórum olvasásához.
- *
- * @param string $host A megbízható host vagy IP címe
- */
- function add_trusted_host($host)
- {
- global $trusted_hosts;
- /* FIXME: hibakezelés? */
- $trusted_hosts[] = trim($host);
- }
-
-
-
-
-
-
- /** Beállítások betöltése */
- (dirname(__FILE__) . "/config.inc.php");
-
-
- $errc = 0;
-
-
- if (!isset($_SESSION["login"]))
- {
- $_SESSION["login"] = false;
- }
-
- /** Hibatípus - adatbázishiba */
- ("ERROR_DB", 1);
- /** Hibatípus - betyárkodási kisérlet */
- ("ERROR_HACK", 2);
-
- $j = 1;
- /** Üzenetkód a debug_echo() függvényhez. */
- ("DEBUG_SQL", $j++);
- /** Üzenetkód a debug_echo() függvényhez. */
- ("DEBUG_CODE", $j++);
- /** Üzenetkód a debug_echo() függvényhez. */
- ("DEBUG_H1", $j++);
- /** Üzenetkód a debug_echo() függvényhez. */
- ("DEBUG_H2", $j++);
- /** Üzenetkód a debug_echo() függvényhez. */
- ("DEBUG_MYLOG", $j++);
- unset($j);
-
-
- $j = 1;
- /** Felhasználótípus (users.ut -hoz van köze). FIXME: sql-be át kellene rakni */
- ("UT_ADMIN", $j++);
- /** Felhasználótípus (users.ut -hoz van köze). FIXME: sql-be át kellene rakni */
- ("UT_ASTUDENT", $j++);
- /** Felhasználótípus (users.ut -hoz van köze). FIXME: sql-be át kellene rakni */
- ("UT_OSTUDENT", $j++);
- unset($j);
-
- $database = mysql_connect(DBHOST, DBUSER, DBPASS)
- or die("Az adatbázis nem elérhető!");
- mysql_select_db(DBNAME, $database)
- or die("Az adatbázis nem elérhető!");
-
- /** Az adatbázisban tárolt változók kezeléséhez */
- (dirname(__FILE__) . "/lib/func.variables.php");
-
- /** Hibakeresési üzenetek megjelenítése
- *
- * Segíti a program nyomkövetését.
- *
- * @param string $t a megjelenítendő üzenet
- * @param int $type üzenet típusa, DEBUG_* konstans
- */
- function debug_echo($t, $type = 0)
- {
- if (!defined("DEBUG_OFF")) // FIXME: stylesheet is ettől függően
- {
- $debug_class[DEBUG_SQL] = "debug_sql";
- $debug_class[DEBUG_CODE] = "debug_code";
- $debug_class[DEBUG_H1] = "debug_h1";
- $debug_class[DEBUG_H2] = "debug_h2";
- $debug_class[DEBUG_MYLOG] = "mylog";
-
- $class = '';
- if (($type != 0) && isset($debug_class[$type]))
- {
- $class = ' class="' . $debug_class[$type] . '"';
- } else {
- $class = ' class="debug"';
- }
-
- if (!defined("DEBUG_OFF"))
- {
- echo "<p$class>$t</p>";
- flush();
- }
- }
- }
-
- /** Naplózófüggvény
- *
- * Naplófájlba mentei a paraméterként megkapott szöveget.
- *
- * @param string $data A naplózandó szöveg
- */
- function mylog($data)
- {
- $tolog = strftime("%Y-%m-%d %H:%M:%S\t", mktime());
- $tolog .= $_SERVER["REMOTE_ADDR"];
- $tolog .= "\t$data\n";
- // FIXME: naplózást bekapcsolni, define("LOG_FILE", stb)
- //$lf = fopen (dirname(__FILE__) . "/logs/" . strftime("gyuri-%Y-%m-%d.txt", mktime()), "a+");
- //fwrite ($lf, $tolog);
- //fclose ($lf);
- if (defined("DEBUG_OFF"))
- {
- printf("<p>hiba</p>");
- } else {
- debug_echo($tolog, DEBUG_MYLOG);
- }
- }
-
- /** Tranzakciókezelés
- *
- * A t_start(), t_rollback() és a t_commit() fügvények hívják,
- * végrehajtja a megadott parancsot az adatbázison. Hiba esetén leállítja
- * a programfutást.
- *
- * @param string $c SQL parancs
- */
- function t_command($c)
- {
- global $database;
- $res = mysql_query($c, $database);
- if ($res === false)
- {
- mylog(ERROR_DB);
- mylog($c);
- die();
- }
- }
-
- /** Tranzakció indítása
- */
- function t_start()
- {
- /* FIXME: -BEGIN */
- //t_command("START TRANSACTION;");
- t_command("BEGIN;");
- }
-
- /** Tranzakcíó visszavonása */
- t_rollback()
- {
- t_command("ROLLBACK;");
- }
-
- /** Tranzakció érvényesítése */
- t_commit()
- {
- t_command("COMMIT;");
- }
-
-
- /* FIXME: Az ERROR_* stringek helyett számok, és aszerinti naplózás */
- /** Hibakezelés
- *
- * Hiba esetén hibaüzenet megjelenítése, esetlegesen naplózása, majd
- * a programfutás leállítása a függvény feladata.
- *
- * @param string $data Hibaüzenet
- * @param string $query Kiegészítő üzenet, pl. a meghiusult sql kérés
- */
- function myerr($data, $query = '')
- {
-
- if (is_numeric($data))
- {
- switch($data)
- {
- case ERROR_DB:
- $text = "Adatbázis hiba!";
- mylog($query);
- mylog(mysql_error());
- break;
- case ERROR_HACK:
- $text = "Trükkös!";
- break;
- }
-
- }
- else
- {
- $text = $data;
- }
-
- /* FIXME: ha ERROR_DB, akkor mysql_error() a logba! */
- /* FIXME: rollback! */
- mylog($text);
- die();
- }
-
- /** 0/1 igen/nem szöveggé alakítása
- *
- * A 0 bementő értékre "nem"-et ad vissza, minden más értékre
- * pedig "igen"-t. A felhasználóbarátabb megjelenítéshez kell néhány
- * táblázat esetén.
- *
- * @param int $in A logikai igen/nem értékké alakítandó szám
- */
- function igennem($in)
- {
- $ret = '';
- if ($in == 0)
- $ret = 'nem';
- else
- $ret = 'igen';
- return $ret;
- }
-
-
- /** Igen/nem-ből 1/0 átalakítás (reverse igennem())
- *
- * A bemenete első karaktere alapján eldönti, hogy a kifejezés logikai
- * igaz vagy hamis, illetve 0 vagy 1.
- *
- * @param string $rin A logikai érték szövegesen
- */
-
- function rigennem($rin)
- {
- $ret = 0;
- if (strlen($rin) == 0)
- return 0;
- $s = strtolower(substr($rin, 0, 1));
- if ($s == "0")
- return 0;
- if ($s == "1")
- return 1;
- if ($s == 'i')
- return 1;
-
- }
-
- /** Nem kiírása
- *
- * A users tábla sex attributuma alapján visszadja magyarul a hallgató
- * nemét:
- * M: féri
- * F: nő
- *
- * @param char $s A nem rövidítése
- */
- function sprint_sex($s)
- {
- $r = '';
- if ('M' === $s)
- {
- $r = 'férfi';
- } else {
- $r = 'nő';
- }
-
- return $r;
- }
-
-
- /** Hibák megjelenítése
- *
- * A tömbként megkapott hibaüzeneteket jeleníti meg
- *
- * @param array $errs A hibaüzeneteket tartalmaztó tömb
- */
- function show_errors($errs)
- {
- if (count($errs) > 0)
- {
- ?>
- <p id="errors">
- <?php
- reset($errs);
- while (list(, $text) = each($errs))
- {
- ?>
- <?= $text ?><br />
- <?php
-
- }
- ?>
- </p>
- <?php
- }
- }
-
-
- /** Hallgató nevének lekérdezése
- *
- * Lekérdezi egy hallgató nevét a hallgatói azonosítója alapján
- *
- * @param int $s_id a hallgató azonosítója (users.sid)
- */
- function get_student_name($s_id)
- {
- global $database;
-
- if (!is_numeric($s_id))
- {
- return 'nem';
- }
-
-
- $sql_q = "SELECT users.realname AS realname FROM users
- WHERE sid = '$s_id'";
- //debug_echo($sql_q, DEBUG_SQL);
- $s_res = mysql_query($sql_q, $database)
- or myerr(ERROR_DB, $sql_q);
- $s_arr = mysql_fetch_assoc($s_res)
- or myerr(ERROR_DB, $sql_q);
- return $s_arr["realname"];
- }
-
- /** Szoba nevének lekérdezése
- *
- * Lekérdezi egy szoba nevét (rooms.rnum) a szoba azonosítója alapján.
- *
- * @param int $r_id a szoba azonosítója
- */
- function get_room_name($r_id)
- {
- global $database;
-
- $sql_q = "SELECT rooms.rnum AS roomname FROM rooms
- WHERE roomid = '$r_id'";
- $r_res = mysql_query($sql_q, $database)
- or myerr(ERROR_DB, $sql_q);
- $r_arr = mysql_fetch_assoc($r_res)
- or myerr(ERROR_DB, $sql_q);
- return $r_arr["roomname"];
-
- }
-
-
- /** konstansok a szobákhoz */
-
- define("ST_HOMOGEN", "ST_HOMOGEN");
- /** Csak fiúk kerülhetnek a szobába */
- ("ST_MALE", "ST_MALE");
- /** Csak lányok kerülhetnek a szobába */
- ("ST_FEMALE", "ST_FEMALE");
- /** A szobába vegyesen is kerülhetnek hallgatók. */
- ("ST_HETEROGEN", "ST_HETEROGEN");
- /** Minden egyéb esethez, ha pl. üres a szoba, stb.*/
- ("ST_ALL", "ST_ALL");
-
- /** ST_* konstansok nevének visszaadása
- * @param string $s ST_* konstans
- * @param int $texttype 1: szobára vonatkozik, 2: hallgatóra
- * @return A konstans jelentése
- */
- function get_stname($s, $texttype = 1)
- {
- $ret = '';
- switch ($s)
- {
- case ST_HOMOGEN:
- $ret = "homogén"; // FIXME: normálisabb elnevezés
- $ret2 = "azonos nemű";
- break;
- case ST_HETEROGEN:
- $ret = "heterogén";
- $ret2 = "páros szobát/vegyes nemeloszlású";
- break;
- case ST_MALE:
- $ret = "fiúszoba";
- $ret2 = 'hímnemű';
- break;
- case ST_FEMALE:
- $ret = "lányszoba";
- $ret2 = "nőnemű";
- break;
- case ST_ALL:
- $ret = "bármilyen szoba";
- $ret2 = "bármilyen nemű";
- break;
- default:
- myerr("Ilyen szoba/hallgató nem lehet!");
- break;
- }
-
- if (1 === $texttype)
- {
- return $ret;
- } else {
- return $ret2;
- }
-
- }
-
-
- /** Felhasználó bejelentkezettségének ellenőrzése
- *
- * Ellenőrzi, hogy bejelentkezett-e a felhasználó, valamint, hogy a
- * bejelentkezés óta eltelt időben nem lett-e a kitiltva a rendszerből.
- *
- * @todo Szebb lenne, ha users.sid alapján selectelne az adatbázisban, de
- * ahhoz meg kellene fordítani a sorrendet.
- *
- * @return bool true ha minden rendben van, false ha nincs bejelentkezve,
- * vagy időközben ki lett tiltva.
- */
- function check_login()
- {
- global $database;
-
- static $disabled_checked = false; /* egy futás alatt elég egyszer, true ha már ellenőriztük */
-
- static $dis = false;
-
- if (!isset($_SESSION["username"]) || (strlen($_SESSION["username"]) < 3))
- {
- return false;
- }
-
- if (false === $disabled_checked)
- {
- $disabled_checked = true;
- $sql_q = sprintf("SELECT disabled FROM users WHERE username = '%s'",
- $_SESSION["username"]);
- //debug_echo($sql_q, DEBUG_SQL);
-
- $c_res = mysql_query($sql_q, $database)
- or myerr(ERROR_DB, $sql_q);
- $c_arr = mysql_fetch_assoc($c_res);
-
- if (false === $c_arr)
- {
- unset($_SESSION);
- return false;
- }
- if ('N' === $c_arr["disabled"])
- {
- $dis = false; // felesleges, ez a default
- } else {
- $dis = true;
- }
-
- }
-
- if (true === $dis)
- {
- return false;
- }
-
-
- $ret = false;
- if (true === $_SESSION["login"])
- {
- $ret = true;
- }
- return $ret;
- }
-
-
- /** Segédfüggvény a selected="selected" megjelenítéséhez
- *
- * A formokon belül a select beviteli mezőnél az alapértelmezetten
- * kiválasztott option elemhez megjeleníti, hogy 'selected="selected"'
- * a megkapott feltételtől függően.
- * Átláthatóbb lesz a kód.
- *
- * Pl:
- * <select name="sx">
- * <option value="1"<?= is_selected(1 == $x)?>>1</option>
- * <option value="2"<?= is_selected(2 == $x)?>>2</option>
- * ...
- * </select>
- *
- * @param bool $b A megjelenítés feltétele
- * @return string A fenti szöveg vagy üres karakterlánc
- */
-
- function is_selected($b)
- {
- $ret = '';
- if ($b)
- {
- $ret = ' selected="selected"';
- }
- return $ret;
- }
-
-
- /** Épületek listájának lekérdezése
- *
- * Lekérdezi az adatbázisból és egy tömbbe pakolja az épületek rekordjait.
- *
- * @return array Épületek rekordjai tömbben
- */
- function get_buildings_list()
- {
- global $database;
-
- $blist = array();
- $sql_q = "SELECT * FROM buildings";
-
- $bres = mysql_query($sql_q, $database)
- or myerr(ERROR_DB, $sql_q);
- while ($barr = mysql_fetch_assoc($bres))
- {
- $blist[$barr["bid"]] = $barr;
- }
-
- return $blist;
- }
-
-
-
- /** Hallgatók kezelésével kapcsolatos függvények */
- (dirname(__FILE__) . "/lib/lib.students.php");
-
-
- /** Megbízható host ellenőrzése
- *
- * Ellenőrzi, hogy a kliens IP címe benne van-e a megbízható IP címek/hostok
- * listájában.
- *
- * @return bool true, ha igen, false ha nem
- */
- function is_trusted_host()
- {
- global $trusted_hosts;
- /* elég csak egyszer megkeresni egy futás alatt, mert az eredményt el
- tudjuk rakni egy static változóba */
- static $checked = false;
- static $check_result;
-
- $ret = false;
- if (false === $checked)
- {
- $ra = trim($_SERVER["REMOTE_ADDR"]);
- //debug_echo(sprintf("is_trusted_host(): %s", $ra));
-
- if (false === array_search($ra, $trusted_hosts)) {
- $ret = false; /* nem megbízható */
- } else {
- $ret = true; /* megbízható */
- }
- $checked = true;
- $check_result = $ret;
- } else {
- //debug_echo(sprintf("is_trusted_host() (re)"));
- $ret = $check_result;
- }
-
- return $ret;
- }
-
- /** Futásidő kiírása
- *
- * @param string $t A futásidő előtt megjelenő szöveg
- */
-
- function debug_runtime($t = '')
- {
- global $start_time;
- list($end_sec, $end_ssec) = explode(" ", microtime());
- $end_time = $end_sec + $end_ssec;
- debug_echo($t . ": " . round(($end_time - $start_time), 3) . " sec");
- }
-
-
- /** Egy CSV fájlsor létrehozása
- *
- * @param array $d bemeneti adatok
- * @param array $o a kimenetre ilyen sorrendben kerüljenek
- * @param string $sip a CSV fájl mezőit elválasztó karakter
- * @return strint A CSV fájl egy sora
- */
- function make_csv_line($d, $o, $sep = ';')
- {
- $line = false;
- reset($o);
- while (list(, $index) = each ($o))
- {
- if (false !== $line)
- {
- $line .= $sep;
- }
- if (isset($d[$index]))
- {
- $line .= $d[$index];
- }
- }
-
- return $line;
- }
-
- /** Egy CSV sor feldolgozása
- *
- * @param string $line A feldolgozandó CSV sor
- * @param array $o A bementi sorban ilyen sorrendben és ilyen indexxel szerepelnek az adatok
- * @param string $sep A CSV fájl mezőit elválasztó karakter
- * @return array A CSV fájl egy sora tömbként, a megfelelő indexek alatt a tartalommal
- */
- function csv2array($line, $o, $sep = ';')
- {
- $line = addslashes(trim($line));
- $ret = array();
- $ff = explode(";", $line);
-
- $i = 0;
- reset($o);
- while (list(, $index) = each ($o))
- {
- $ret[$index] = (isset($ff[$i]) ? trim($ff[$i]) : '');
- $i++;
- }
-
- return $ret;
- }
-
-
-
-
- /** Létezik-e egy szoba?
- *
- * @param int $room_id A keresett szoba azonosítója
- @ @return bool true: létezik, false: nem létezik
- */
- function is_room_exist($room_id)
- {
- global $database;
-
- if (!is_numeric($room_id))
- {
- return false; // ilyen biztos nincs :>
- }
- $sql_q = "SELECT * FROM rooms WHERE roomid = '$room_id'";
- $sql_res = mysql_query($sql_q, $database)
- or myerr(ERROR_DB, $sql_q);
- $sql_arr = mysql_fetch_assoc($sql_res);
- if (false === $sql_arr)
- {
- return false;
- }
- return true;
- }
-
- /* CSV-beli mezők sorrendje szobalista esetén */
- $CSV_ROOMLIST_FSEQ =
- array("roomid", "rnum", "rname", "space", "bid", "rtype", "bid", "av");
- $CSV_BUILDINGLIST_FSEQ =
- array("bid", "bsname", "bname");
-
-
- ?>