phpDocumentor koliportal
[ class tree: koliportal ] [ index: koliportal ] [ all elements ]

Source for file init.inc.php

Documentation is available at init.inc.php

  1. <?php
  2. /**
  3. * @package koliportal
  4. * @todo mysql indexek!
  5. * @todo css menü jobbra
  6. */
  7. error_reporting(E_ALL);
  8. // session_start();
  9.  
  10. $trusted_hosts = array();
  11.  
  12. /** Megbízható hostok hozzáadása
  13. *
  14. * A config.inc.php -ben megadott megbízható hostokat kezeli le. Ezek azok
  15. * a hostok, ahonnan nem szükséges bejelentkezni a fórum olvasásához.
  16. *
  17. * @param string $host A megbízható host vagy IP címe
  18. */
  19. function add_trusted_host($host)
  20. {
  21. global $trusted_hosts;
  22. /* FIXME: hibakezelés? */
  23. $trusted_hosts[] = trim($host);
  24. }
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31. /** Beállítások betöltése */
  32. (dirname(__FILE__) . "/config.inc.php");
  33.  
  34. $errc = 0;
  35.  
  36. if (!isset($_SESSION["login"]))
  37. {
  38. $_SESSION["login"] = false;
  39. }
  40.  
  41. /** Hibatípus - adatbázishiba */
  42. ("ERROR_DB", 1);
  43. /** Hibatípus - betyárkodási kisérlet */
  44. ("ERROR_HACK", 2);
  45. $j = 1;
  46. /** Üzenetkód a debug_echo() függvényhez. */
  47. ("DEBUG_SQL", $j++);
  48. /** Üzenetkód a debug_echo() függvényhez. */
  49. ("DEBUG_CODE", $j++);
  50. /** Üzenetkód a debug_echo() függvényhez. */
  51. ("DEBUG_H1", $j++);
  52. /** Üzenetkód a debug_echo() függvényhez. */
  53. ("DEBUG_H2", $j++);
  54. /** Üzenetkód a debug_echo() függvényhez. */
  55. ("DEBUG_MYLOG", $j++);
  56. unset($j);
  57. $j = 1;
  58. /** Felhasználótípus (users.ut -hoz van köze). FIXME: sql-be át kellene rakni */
  59. ("UT_ADMIN", $j++);
  60. /** Felhasználótípus (users.ut -hoz van köze). FIXME: sql-be át kellene rakni */
  61. ("UT_ASTUDENT", $j++);
  62. /** Felhasználótípus (users.ut -hoz van köze). FIXME: sql-be át kellene rakni */
  63. ("UT_OSTUDENT", $j++);
  64. unset($j);
  65.  
  66. $database = mysql_connect(DBHOST, DBUSER, DBPASS)
  67. or die("Az adatbázis nem elérhető!");
  68. mysql_select_db(DBNAME, $database)
  69. or die("Az adatbázis nem elérhető!");
  70. /** Az adatbázisban tárolt változók kezeléséhez */
  71. (dirname(__FILE__) . "/lib/func.variables.php");
  72. /** Hibakeresési üzenetek megjelenítése
  73. *
  74. * Segíti a program nyomkövetését.
  75. *
  76. * @param string $t a megjelenítendő üzenet
  77. * @param int $type üzenet típusa, DEBUG_* konstans
  78. */
  79. function debug_echo($t, $type = 0)
  80. {
  81. if (!defined("DEBUG_OFF")) // FIXME: stylesheet is ettől függően
  82. {
  83. $debug_class[DEBUG_SQL] = "debug_sql";
  84. $debug_class[DEBUG_CODE] = "debug_code";
  85. $debug_class[DEBUG_H1] = "debug_h1";
  86. $debug_class[DEBUG_H2] = "debug_h2";
  87. $debug_class[DEBUG_MYLOG] = "mylog";
  88. $class = '';
  89. if (($type != 0) && isset($debug_class[$type]))
  90. {
  91. $class = ' class="' . $debug_class[$type] . '"';
  92. } else {
  93. $class = ' class="debug"';
  94. }
  95. if (!defined("DEBUG_OFF"))
  96. {
  97. echo "<p$class>$t</p>";
  98. flush();
  99. }
  100. }
  101. }
  102.  
  103. /** Naplózófüggvény
  104. *
  105. * Naplófájlba mentei a paraméterként megkapott szöveget.
  106. *
  107. * @param string $data A naplózandó szöveg
  108. */
  109. function mylog($data)
  110. {
  111. $tolog = strftime("%Y-%m-%d %H:%M:%S\t", mktime());
  112. $tolog .= $_SERVER["REMOTE_ADDR"];
  113. $tolog .= "\t$data\n";
  114. // FIXME: naplózást bekapcsolni, define("LOG_FILE", stb)
  115. //$lf = fopen (dirname(__FILE__) . "/logs/" . strftime("gyuri-%Y-%m-%d.txt", mktime()), "a+");
  116. //fwrite ($lf, $tolog);
  117. //fclose ($lf);
  118. if (defined("DEBUG_OFF"))
  119. {
  120. printf("<p>hiba</p>");
  121. } else {
  122. debug_echo($tolog, DEBUG_MYLOG);
  123. }
  124. }
  125.  
  126. /** Tranzakciókezelés
  127. *
  128. * A t_start(), t_rollback() és a t_commit() fügvények hívják,
  129. * végrehajtja a megadott parancsot az adatbázison. Hiba esetén leállítja
  130. * a programfutást.
  131. *
  132. * @param string $c SQL parancs
  133. */
  134. function t_command($c)
  135. {
  136. global $database;
  137. $res = mysql_query($c, $database);
  138. if ($res === false)
  139. {
  140. mylog(ERROR_DB);
  141. mylog($c);
  142. die();
  143. }
  144. }
  145. /** Tranzakció indítása
  146. */
  147. function t_start()
  148. {
  149. /* FIXME: -BEGIN */
  150. //t_command("START TRANSACTION;");
  151. t_command("BEGIN;");
  152. }
  153.  
  154. /** Tranzakcíó visszavonása */
  155. t_rollback()
  156. {
  157. t_command("ROLLBACK;");
  158. }
  159. /** Tranzakció érvényesítése */
  160. t_commit()
  161. {
  162. t_command("COMMIT;");
  163. }
  164. /* FIXME: Az ERROR_* stringek helyett számok, és aszerinti naplózás */
  165. /** Hibakezelés
  166. *
  167. * Hiba esetén hibaüzenet megjelenítése, esetlegesen naplózása, majd
  168. * a programfutás leállítása a függvény feladata.
  169. *
  170. * @param string $data Hibaüzenet
  171. * @param string $query Kiegészítő üzenet, pl. a meghiusult sql kérés
  172. */
  173. function myerr($data, $query = '')
  174. {
  175. if (is_numeric($data))
  176. {
  177. switch($data)
  178. {
  179. case ERROR_DB:
  180. $text = "Adatbázis hiba!";
  181. mylog($query);
  182. mylog(mysql_error());
  183. break;
  184. case ERROR_HACK:
  185. $text = "Trükkös!";
  186. break;
  187. }
  188. }
  189. else
  190. {
  191. $text = $data;
  192. }
  193.  
  194. /* FIXME: ha ERROR_DB, akkor mysql_error() a logba! */
  195. /* FIXME: rollback! */
  196. mylog($text);
  197. die();
  198. }
  199. /** 0/1 igen/nem szöveggé alakítása
  200. *
  201. * A 0 bementő értékre "nem"-et ad vissza, minden más értékre
  202. * pedig "igen"-t. A felhasználóbarátabb megjelenítéshez kell néhány
  203. * táblázat esetén.
  204. *
  205. * @param int $in A logikai igen/nem értékké alakítandó szám
  206. */
  207. function igennem($in)
  208. {
  209. $ret = '';
  210. if ($in == 0)
  211. $ret = 'nem';
  212. else
  213. $ret = 'igen';
  214. return $ret;
  215. }
  216. /** Igen/nem-ből 1/0 átalakítás (reverse igennem())
  217. *
  218. * A bemenete első karaktere alapján eldönti, hogy a kifejezés logikai
  219. * igaz vagy hamis, illetve 0 vagy 1.
  220. *
  221. * @param string $rin A logikai érték szövegesen
  222. */
  223. function rigennem($rin)
  224. {
  225. $ret = 0;
  226. if (strlen($rin) == 0)
  227. return 0;
  228. $s = strtolower(substr($rin, 0, 1));
  229. if ($s == "0")
  230. return 0;
  231. if ($s == "1")
  232. return 1;
  233. if ($s == 'i')
  234. return 1;
  235. }
  236. /** Nem kiírása
  237. *
  238. * A users tábla sex attributuma alapján visszadja magyarul a hallgató
  239. * nemét:
  240. * M: féri
  241. * F: nő
  242. *
  243. * @param char $s A nem rövidítése
  244. */
  245. function sprint_sex($s)
  246. {
  247. $r = '';
  248. if ('M' === $s)
  249. {
  250. $r = 'férfi';
  251. } else {
  252. $r = 'nő';
  253. }
  254. return $r;
  255. }
  256. /** Hibák megjelenítése
  257. *
  258. * A tömbként megkapott hibaüzeneteket jeleníti meg
  259. *
  260. * @param array $errs A hibaüzeneteket tartalmaztó tömb
  261. */
  262. function show_errors($errs)
  263. {
  264. if (count($errs) > 0)
  265. {
  266. ?>
  267. <p id="errors">
  268. <?php
  269. reset($errs);
  270. while (list(, $text) = each($errs))
  271. {
  272. ?>
  273. <?= $text ?><br />
  274. <?php
  275. }
  276. ?>
  277. </p>
  278. <?php
  279. }
  280. }
  281. /** Hallgató nevének lekérdezése
  282. *
  283. * Lekérdezi egy hallgató nevét a hallgatói azonosítója alapján
  284. *
  285. * @param int $s_id a hallgató azonosítója (users.sid)
  286. */
  287. function get_student_name($s_id)
  288. {
  289. global $database;
  290. if (!is_numeric($s_id))
  291. {
  292. return 'nem';
  293. }
  294. $sql_q = "SELECT users.realname AS realname FROM users
  295. WHERE sid = '$s_id'";
  296. //debug_echo($sql_q, DEBUG_SQL);
  297. $s_res = mysql_query($sql_q, $database)
  298. or myerr(ERROR_DB, $sql_q);
  299. $s_arr = mysql_fetch_assoc($s_res)
  300. or myerr(ERROR_DB, $sql_q);
  301. return $s_arr["realname"];
  302. }
  303. /** Szoba nevének lekérdezése
  304. *
  305. * Lekérdezi egy szoba nevét (rooms.rnum) a szoba azonosítója alapján.
  306. *
  307. * @param int $r_id a szoba azonosítója
  308. */
  309. function get_room_name($r_id)
  310. {
  311. global $database;
  312.  
  313. $sql_q = "SELECT rooms.rnum AS roomname FROM rooms
  314. WHERE roomid = '$r_id'";
  315. $r_res = mysql_query($sql_q, $database)
  316. or myerr(ERROR_DB, $sql_q);
  317. $r_arr = mysql_fetch_assoc($r_res)
  318. or myerr(ERROR_DB, $sql_q);
  319. return $r_arr["roomname"];
  320. }
  321.  
  322.  
  323. /** konstansok a szobákhoz */
  324.  
  325. define("ST_HOMOGEN", "ST_HOMOGEN");
  326. /** Csak fiúk kerülhetnek a szobába */
  327. ("ST_MALE", "ST_MALE");
  328. /** Csak lányok kerülhetnek a szobába */
  329. ("ST_FEMALE", "ST_FEMALE");
  330. /** A szobába vegyesen is kerülhetnek hallgatók. */
  331. ("ST_HETEROGEN", "ST_HETEROGEN");
  332. /** Minden egyéb esethez, ha pl. üres a szoba, stb.*/
  333. ("ST_ALL", "ST_ALL");
  334. /** ST_* konstansok nevének visszaadása
  335. * @param string $s ST_* konstans
  336. * @param int $texttype 1: szobára vonatkozik, 2: hallgatóra
  337. * @return A konstans jelentése
  338. */
  339. function get_stname($s, $texttype = 1)
  340. {
  341. $ret = '';
  342. switch ($s)
  343. {
  344. case ST_HOMOGEN:
  345. $ret = "homogén"; // FIXME: normálisabb elnevezés
  346. $ret2 = "azonos nemű";
  347. break;
  348. case ST_HETEROGEN:
  349. $ret = "heterogén";
  350. $ret2 = "páros szobát/vegyes nemeloszlású";
  351. break;
  352. case ST_MALE:
  353. $ret = "fiúszoba";
  354. $ret2 = 'hímnemű';
  355. break;
  356. case ST_FEMALE:
  357. $ret = "lányszoba";
  358. $ret2 = "nőnemű";
  359. break;
  360. case ST_ALL:
  361. $ret = "bármilyen szoba";
  362. $ret2 = "bármilyen nemű";
  363. break;
  364. default:
  365. myerr("Ilyen szoba/hallgató nem lehet!");
  366. break;
  367. }
  368. if (1 === $texttype)
  369. {
  370. return $ret;
  371. } else {
  372. return $ret2;
  373. }
  374. }
  375. /** Felhasználó bejelentkezettségének ellenőrzése
  376. *
  377. * Ellenőrzi, hogy bejelentkezett-e a felhasználó, valamint, hogy a
  378. * bejelentkezés óta eltelt időben nem lett-e a kitiltva a rendszerből.
  379. *
  380. * @todo Szebb lenne, ha users.sid alapján selectelne az adatbázisban, de
  381. * ahhoz meg kellene fordítani a sorrendet.
  382. *
  383. * @return bool true ha minden rendben van, false ha nincs bejelentkezve,
  384. * vagy időközben ki lett tiltva.
  385. */
  386. function check_login()
  387. {
  388. global $database;
  389. static $disabled_checked = false; /* egy futás alatt elég egyszer, true ha már ellenőriztük */
  390. static $dis = false;
  391. if (!isset($_SESSION["username"]) || (strlen($_SESSION["username"]) < 3))
  392. {
  393. return false;
  394. }
  395. if (false === $disabled_checked)
  396. {
  397. $disabled_checked = true;
  398. $sql_q = sprintf("SELECT disabled FROM users WHERE username = '%s'",
  399. $_SESSION["username"]);
  400. //debug_echo($sql_q, DEBUG_SQL);
  401.  
  402. $c_res = mysql_query($sql_q, $database)
  403. or myerr(ERROR_DB, $sql_q);
  404. $c_arr = mysql_fetch_assoc($c_res);
  405. if (false === $c_arr)
  406. {
  407. unset($_SESSION);
  408. return false;
  409. }
  410. if ('N' === $c_arr["disabled"])
  411. {
  412. $dis = false; // felesleges, ez a default
  413. } else {
  414. $dis = true;
  415. }
  416. }
  417. if (true === $dis)
  418. {
  419. return false;
  420. }
  421. $ret = false;
  422. if (true === $_SESSION["login"])
  423. {
  424. $ret = true;
  425. }
  426. return $ret;
  427. }
  428. /** Segédfüggvény a selected="selected" megjelenítéséhez
  429. *
  430. * A formokon belül a select beviteli mezőnél az alapértelmezetten
  431. * kiválasztott option elemhez megjeleníti, hogy 'selected="selected"'
  432. * a megkapott feltételtől függően.
  433. * Átláthatóbb lesz a kód.
  434. *
  435. * Pl:
  436. * <select name="sx">
  437. * <option value="1"<?= is_selected(1 == $x)?>>1</option>
  438. * <option value="2"<?= is_selected(2 == $x)?>>2</option>
  439. * ...
  440. * </select>
  441. *
  442. * @param bool $b A megjelenítés feltétele
  443. * @return string A fenti szöveg vagy üres karakterlánc
  444. */
  445. function is_selected($b)
  446. {
  447. $ret = '';
  448. if ($b)
  449. {
  450. $ret = ' selected="selected"';
  451. }
  452. return $ret;
  453. }
  454.  
  455. /** Épületek listájának lekérdezése
  456. *
  457. * Lekérdezi az adatbázisból és egy tömbbe pakolja az épületek rekordjait.
  458. *
  459. * @return array Épületek rekordjai tömbben
  460. */
  461. function get_buildings_list()
  462. {
  463. global $database;
  464. $blist = array();
  465. $sql_q = "SELECT * FROM buildings";
  466. $bres = mysql_query($sql_q, $database)
  467. or myerr(ERROR_DB, $sql_q);
  468. while ($barr = mysql_fetch_assoc($bres))
  469. {
  470. $blist[$barr["bid"]] = $barr;
  471. }
  472.  
  473. return $blist;
  474. }
  475.  
  476. /** Hallgatók kezelésével kapcsolatos függvények */
  477. (dirname(__FILE__) . "/lib/lib.students.php");
  478.  
  479.  
  480. /** Megbízható host ellenőrzése
  481. *
  482. * Ellenőrzi, hogy a kliens IP címe benne van-e a megbízható IP címek/hostok
  483. * listájában.
  484. *
  485. * @return bool true, ha igen, false ha nem
  486. */
  487. function is_trusted_host()
  488. {
  489. global $trusted_hosts;
  490. /* elég csak egyszer megkeresni egy futás alatt, mert az eredményt el
  491. tudjuk rakni egy static változóba */
  492. static $checked = false;
  493. static $check_result;
  494. $ret = false;
  495. if (false === $checked)
  496. {
  497. $ra = trim($_SERVER["REMOTE_ADDR"]);
  498. //debug_echo(sprintf("is_trusted_host(): %s", $ra));
  499. if (false === array_search($ra, $trusted_hosts)) {
  500. $ret = false; /* nem megbízható */
  501. } else {
  502. $ret = true; /* megbízható */
  503. }
  504. $checked = true;
  505. $check_result = $ret;
  506. } else {
  507. //debug_echo(sprintf("is_trusted_host() (re)"));
  508. $ret = $check_result;
  509. }
  510. return $ret;
  511. }
  512. /** Futásidő kiírása
  513. *
  514. * @param string $t A futásidő előtt megjelenő szöveg
  515. */
  516. function debug_runtime($t = '')
  517. {
  518. global $start_time;
  519. list($end_sec, $end_ssec) = explode(" ", microtime());
  520. $end_time = $end_sec + $end_ssec;
  521. debug_echo($t . ": " . round(($end_time - $start_time), 3) . " sec");
  522. }
  523.  
  524. /** Egy CSV fájlsor létrehozása
  525. *
  526. * @param array $d bemeneti adatok
  527. * @param array $o a kimenetre ilyen sorrendben kerüljenek
  528. * @param string $sip a CSV fájl mezőit elválasztó karakter
  529. * @return strint A CSV fájl egy sora
  530. */
  531. function make_csv_line($d, $o, $sep = ';')
  532. {
  533. $line = false;
  534. reset($o);
  535. while (list(, $index) = each ($o))
  536. {
  537. if (false !== $line)
  538. {
  539. $line .= $sep;
  540. }
  541. if (isset($d[$index]))
  542. {
  543. $line .= $d[$index];
  544. }
  545. }
  546. return $line;
  547. }
  548.  
  549. /** Egy CSV sor feldolgozása
  550. *
  551. * @param string $line A feldolgozandó CSV sor
  552. * @param array $o A bementi sorban ilyen sorrendben és ilyen indexxel szerepelnek az adatok
  553. * @param string $sep A CSV fájl mezőit elválasztó karakter
  554. * @return array A CSV fájl egy sora tömbként, a megfelelő indexek alatt a tartalommal
  555. */
  556. function csv2array($line, $o, $sep = ';')
  557. {
  558. $line = addslashes(trim($line));
  559. $ret = array();
  560. $ff = explode(";", $line);
  561. $i = 0;
  562. reset($o);
  563. while (list(, $index) = each ($o))
  564. {
  565. $ret[$index] = (isset($ff[$i]) ? trim($ff[$i]) : '');
  566. $i++;
  567. }
  568. return $ret;
  569. }
  570.  
  571. /** Létezik-e egy szoba?
  572. *
  573. * @param int $room_id A keresett szoba azonosítója
  574. @ @return bool true: létezik, false: nem létezik
  575. */
  576. function is_room_exist($room_id)
  577. {
  578. global $database;
  579. if (!is_numeric($room_id))
  580. {
  581. return false; // ilyen biztos nincs :>
  582. }
  583. $sql_q = "SELECT * FROM rooms WHERE roomid = '$room_id'";
  584. $sql_res = mysql_query($sql_q, $database)
  585. or myerr(ERROR_DB, $sql_q);
  586. $sql_arr = mysql_fetch_assoc($sql_res);
  587. if (false === $sql_arr)
  588. {
  589. return false;
  590. }
  591. return true;
  592. }
  593.  
  594. /* CSV-beli mezők sorrendje szobalista esetén */
  595. $CSV_ROOMLIST_FSEQ =
  596. array("roomid", "rnum", "rname", "space", "bid", "rtype", "bid", "av");
  597. $CSV_BUILDINGLIST_FSEQ =
  598. array("bid", "bsname", "bname");
  599. ?>

Documentation generated on Wed, 18 May 2005 19:24:31 +0200 by phpDocumentor 1.3.0RC3