- <?php
- /** Kívánságlista-felület
- * @package koliportal
- * @author Karakó Miklós <palacsint_X_freemail.hu>
- * @copyright Copyright © 2005, Karakó Miklós
- */
- $newuser = '';
-
- /* FIXME: pref értékének fixálása módosításkor mondjuk tömb alapján!
- diák törlésekor wishes.wsid stb pref értékének fixálása! */
-
- /* lekérdezi a wishes.pref maximális értékét a $sid userhez */
- /** Egy hallgató kivánságlistájának számosságának lekérdezése
- *
- * Lekérdezi az adatbázisból egy hallgató kívánságlistjának számosságát,
- * pontosabban wishes tábla pref értékének maximumát azon rekordok közül,
- * amelyek az adott hallgatóhoz tartoznak.
- *
- * @param int $sid A hallgató azonosítója (users.sid)
- * @return int A wishes.pref maximális értéke, üres eredménytábla esetén 0.
- */
- function get_max_pref($sid)
- {
- global $database;
- $sql_q = "SELECT max(pref) AS maxpref FROM wishes WHERE sid = '$sid'";
- $res = mysql_query($sql_q, $database)
- or myerr(ERROR_DB, $sql_q);
-
- if (($num = mysql_num_rows($res)) === false)
- {
- myerr(ERROR_DB, $sql_q);
- }
- if ($num == 0)
- {
- $ret = 0;
- } else {
- $arr = mysql_fetch_assoc($res)
- or myerr(ERROR_DB, $sql_q);
- $ret = $arr["maxpref"];
- }
-
- return $ret;
- }
-
- if (isset($_POST) && (count($_POST) > 0))
- {
- /* új hallgatót kell felvenni */
- if (isset($_POST["new"]) && isset($_POST["newuser"]))
- {
- $newuser = addslashes($_POST["newuser"]);
-
- if ($_SESSION["username"] == $newuser)
- {
- $errc++;
- $errs[] = "Saját magaddal nem lehetsz egy szobában!";
- // FUN FIXME!
- }
-
- /* létezik-e a megadott diák? */
- if ($errc == 0)
- {
- $sql_q = "SELECT * FROM users WHERE ut = 'UT_ASTUDENT' AND username = '$newuser'";
- $sql_res = mysql_query($sql_q, $database)
- or myerr("Adatbázis hiba!");
- if (mysql_num_rows($sql_res) !== 1)
- {
- $errc++;
- $errs[] = "A megadott felhasználónév nem szerepel az adatbázisban!";
- }
- }
-
- /* benne van-e már a listában a diák? */
- if ($errc == 0)
- {
- $newarr = mysql_fetch_assoc($sql_res)
- or myerr("Adatbázis hiba.");
- $wish_wsid = $newarr["sid"];
- $sql_q = "SELECT * FROM wishes WHERE sid = '" . $_SESSION["sid"] . "' AND
- wsid = '$wish_wsid'";
- $sql_res = mysql_query($sql_q, $database)
- or myerr("Adatbázis hiba!");
- if (mysql_num_rows($sql_res) === 1)
- {
- $errc++;
- $errs[] = "A megadott ($newuser) diák már szerepel a listában!";
- }
- }
-
- /* a hallgatóval azonos épületben van-e a diák? */
- if (0 === $errc)
- {
- if ($newarr["bid"] != $_SESSION["bid"])
- {
- $errc++;
- $errs[] = "A megadott ($newuser) diák nem egy épületben van veled!";
- }
- }
-
- /* maximum MAXPREF ember lehet a listán, ha több van nem
- engedjük a felvételt */
- if ($errc == 0)
- {
- $maxpref = get_max_pref($_SESSION["sid"]);
- if ($maxpref > MAXPREF)
- {
- $errs[] = "A lista megtelt, új diák felvétele nem lehetséges!";
- $errc++;
- }
- /*
- $mp_q = "SELECT max(pref) as maxpref FROM wishes WHERE sid = '" . $_SESSION["sid"] . "'";
- $mp_res = mysql_query($mp_q, $database)
- or myerr(ERROR_DB);
- $mp_arr = mysql_fetch_assoc($mp_res)
- or myerr(ERROR_DB);
- $maxpref = $mp_arr["maxpref"] + 1;
- if ($maxpref > MAXPREF)
- {
- $errs[] = "A lista megtelt, új diák felvétele nem lehetséges!";
- $errc++;
- }*/
- }
-
- /* felvétel a listába */
- if ($errc == 0)
- {
- $maxpref++;
- $sql_i = "INSERT INTO wishes (sid, wsid, pref) VALUES
- ('" . $_SESSION["sid"] . "', '$wish_wsid', '$maxpref')";
- $sql_res = mysql_query($sql_i, $database)
- or myerr(ERROR_DB);
- if (mysql_affected_rows($database) === 1)
- {
- $errc++;
- $errs[] = "A felvétel sikeres!";
- }
- }
- /* felvétel a listába */
- } /* új hallgató felvétele a listába */
- }
- elseif (isset($_GET["delazon"]))
- {
- $delete_ok = false;
- /* FIXME: át kell sorszámozni a többit a wishes tablaban! */
- /* FIXME: tranzakciokezeles! */
- $delazon = addslashes($_GET["delazon"]);
- if (!is_numeric($delazon))
- {
- myerr(ERROR_HACK);
- }
-
- /* wishes.pref lekérdezése */
- if ($errc == 0)
- {
- $sql_q = "SELECT * FROM wishes WHERE sid = '" . $_SESSION["sid"] . "' AND
- wsid = '$delazon'";
- $sql_res = mysql_query($sql_q, $database)
- or myerr(ERROR_DB);
- if (mysql_num_rows($sql_res) !== 1)
- {
- $errc++;
- $errs[] = "Nem létezik a törlendő diák!";
- }
- }
-
- /* wishes.pref eltárolása */
- /* START TRANSACTION */
- if ($errc === 0)
- {
- $parr = mysql_fetch_assoc($sql_res)
- or myerr(ERROR_DB);
- $del_pref = $parr["pref"];
-
- t_start();
- }
-
- /* töröljük a listából */
- if ($errc == 0)
- {
- $sql_q = "DELETE FROM wishes WHERE sid = '" . $_SESSION["sid"] . "' AND
- wsid = '$delazon'";
- $sql_res = mysql_query($sql_q, $database)
- or myerr(ERROR_DB);
- if (($afrows = mysql_affected_rows($database)) === -1)
- {
- myerr(ERROR_DB);
- }
- if ($afrows === 0)
- {
- $errs[] = "A megadott diák nem szerepel a listában!";
- $errc++;
- }
- if ($afrows === 1)
- {
- $errs[] = "A törlés sikeres!";
- $delete_ok = true;
- }
- }
-
- /* sorszámok átírása */
- if (($errc === 0) && ($delete_ok))
- {
- $sql_q = "UPDATE wishes SET pref = pref - 1
- WHERE sid = '" . $_SESSION["sid"] . "'
- AND pref > '$del_pref'";
- $sql_res = mysql_query($sql_q, $database)
- or myerr(ERROR_DB);
- if (mysql_affected_rows($database) === -1)
- {
- $errc++;
- $errs[] = "A törlés sikertelen!";
- }
- }
-
- /* tranzakció lezárása/eldobása */
- if ($errc === 0)
- {
- t_commit();
- }
- else
- {
- /* rollback! */
- t_rollback();
-
- }
- }
- elseif (isset($_GET["felazon"]) && is_numeric($_GET["felazon"]))
- {
- /* FIXME: meg kellene vizsgálni, hogy létezi-e ilyen pref érték a listában */
- $azon = addslashes($_GET["felazon"]);
- if (($azon <= 1) || ($azon > MAXPREF) || ($azon > get_max_pref($_SESSION["sid"])))
- {
- myerr(ERROR_HACK);
- }
-
- t_start();
-
- $sql_csere = array();
- $sql_csere[1] = "UPDATE wishes SET pref = pref + 1 WHERE
- sid = '" . $_SESSION["sid"] . "' AND pref >= '$azon' - 1;";
- $sql_csere[2] = "UPDATE wishes SET pref = pref - 2 WHERE
- sid = '" . $_SESSION["sid"] . "' AND pref = '$azon' + 1;";
- $sql_csere[3] = "UPDATE wishes SET pref = pref - 1 WHERE
- sid = '" . $_SESSION["sid"] . "' AND pref > '$azon';";
- for ($i = 1; $i <= 3; $i++)
- {
- mysql_query($sql_csere[$i], $database)
- or myerr(ERROR_DB);
- }
-
- t_commit();
-
- }
- elseif (isset($_GET["leazon"]) && is_numeric($_GET["leazon"]))
- {
- /* le, tehát növel a "leazon" pref értékét 1-el */
- /* FIXME: ha az utolsó a listában, akkor nem kellene engedni */
- $azon = addslashes($_GET["leazon"]);
- if (($azon >= MAXPREF) || ($azon >= get_max_pref($_SESSION["sid"])))
- {
- myerr(ERROR_HACK);
- }
-
- t_start();
- // FIXME: update .wsid alapján!
- $sql_csere = array();
- $sql_csere[1] = "UPDATE wishes SET pref = pref + 1 WHERE
- sid = '" . $_SESSION["sid"] . "' AND pref >= '$azon';";
- $sql_csere[2] = "UPDATE wishes SET pref = pref - 2 WHERE
- sid = '" . $_SESSION["sid"] . "' AND pref = '$azon' + 2;";
- $sql_csere[3] = "UPDATE wishes SET pref = pref - 1 WHERE
- sid = '" . $_SESSION["sid"] . "' AND pref > '$azon' + 1;";
- for ($i = 1; $i <= 3; $i++)
- {
- mysql_query($sql_csere[$i], $database)
- or myerr(ERROR_DB);
- }
- t_commit();
- }
- ?>
-
- <?php
- show_errors($errs);
-
- $sql_q = "SELECT * FROM wishes, users
- WHERE wishes.sid = '" . $_SESSION["sid"] . "'
- AND wishes.wsid = users.sid
- AND users.ut = 'UT_ASTUDENT'
- ORDER BY wishes.pref";
- debug_echo($sql_q, DEBUG_SQL);
- ?>
- <form id="addlist" action="<?= $_SERVER["PHP_SELF"] ?>?page=<?= $page ?>" method="post">
-
- <table id="szobatarsjeloltek">
- <tr>
- <th colspan="3">Szobatársjelöltek</th>
- </tr>
- <tr>
- <th>sr.</th>
- <th>Név (login)</th>
- <th>műveletek</th>
- </tr>
- <?php
-
- $sql_res = mysql_query($sql_q, $database);
- if ($sql_res === false)
- {
- myerr("Adatbázis hiba!");
- }
-
-
- $rnum = mysql_num_rows($sql_res);
- if ($rnum === false) { myerr(ERROR_DB); }
- $i = 0;
- $rnum--;
-
- while ($arr = mysql_fetch_assoc($sql_res))
- {
- /* FIXME: az elsőnél nem kell a fel, az utolsónál meg a le */
- ?>
- <tr>
- <td class="sr"><?= $arr["pref"] ?></td>
- <td><?= $arr["realname"] ?> (<?= $arr["username"] ?>)</td>
- <td><a href="<?= $_SERVER["PHP_SELF"] ?>?page=<?= $page ?>&delazon=<?= $arr["sid"] ?>">törlés</a>,
- <?php
- if ($i > 0) {
- ?>
- <a href="<?= $_SERVER["PHP_SELF"] ?>?page=<?= $page ?>&felazon=<?= $arr["pref"] ?>">fel</a>,
- <?php
- }
- if ($i < $rnum) {
- ?>
- <a href="<?= $_SERVER["PHP_SELF"] ?>?page=<?= $page ?>&leazon=<?= $arr["pref"] ?>">le</a>
- <?php
- }
- $i++;
- ?>
- </td>
- </tr>
-
- <?php
-
- }
-
- // FIXME: ez se jelentjen meg, ha már túl sokan vannak
-
- ?>
- <tr>
- <th colspan="3">Új hallgató hozzáadása
-
- </th>
- </tr>
- <tr>
- <td>username:</td>
- <td><input type="text" size="20" id="newuser" name="newuser" value="<?= $newuser ?>"/></td>
- <td><input type="submit" id="new" name="new" value="felvesz" /></td>
- </tr>
-
- </table>
- </form>