示例#1
0
function student_zadaca()
{
    global $userid, $conf_files_path;
    require "lib/autotest.php";
    // Akcije
    if ($_REQUEST['akcija'] == "slanje") {
        akcijaslanje();
        return;
    }
    // Poslani parametri
    $zadaca = intval($_REQUEST['zadaca']);
    $predmet = intval($_REQUEST['predmet']);
    $ag = intval($_REQUEST['ag']);
    $q10 = myquery("select naziv from predmet where id={$predmet}");
    if (mysql_num_rows($q10) < 1) {
        zamgerlog("nepoznat predmet {$predmet}", 3);
        // nivo 3: greska
        zamgerlog2("nepoznat predmet", $predmet);
        biguglyerror("Nepoznat predmet");
        return;
    }
    $q15 = myquery("select naziv from akademska_godina where id={$ag}");
    if (mysql_num_rows($q10) < 1) {
        zamgerlog("nepoznata akademska godina {$ag}", 3);
        // nivo 3: greska
        zamgerlog2("nepoznata akademska godina", $ag);
        // nivo 3: greska
        biguglyerror("Nepoznata akademska godina");
        return;
    }
    // Da li student slusa predmet?
    $q17 = myquery("select sp.predmet from student_predmet as sp, ponudakursa as pk where sp.student={$userid} and sp.predmet=pk.id and pk.predmet={$predmet} and pk.akademska_godina={$ag}");
    if (mysql_num_rows($q17) < 1) {
        zamgerlog("student ne slusa predmet pp{$predmet}", 3);
        zamgerlog2("student ne slusa predmet", $predmet, $ag);
        biguglyerror("Niste upisani na ovaj predmet");
        return;
    }
    $ponudakursa = mysql_result($q17, 0, 0);
    //  IMA LI AKTIVNIH?
    // TODO: provjeriti da li je aktivan modul...
    $q10 = myquery("select count(*) from zadaca where predmet={$predmet} and akademska_godina={$ag} and aktivna=1");
    if (mysql_result($q10, 0, 0) == 0) {
        zamgerlog("nijedna zadaća nije aktivna, predmet pp{$predmet}", 3);
        zamgerlog2("nijedna zadaca nije aktivna", $predmet);
        niceerror("Nijedna zadaća nije aktivna");
        return;
    }
    //  ODREĐIVANJE ID ZADAĆE
    // Da li neko pokušava da spoofa zadaću?
    if ($zadaca != 0) {
        $q20 = myquery("SELECT count(*) FROM zadaca as z, student_predmet as sp, ponudakursa as pk\n\tWHERE sp.student={$userid} and sp.predmet=pk.id and pk.predmet=z.predmet and pk.akademska_godina=z.akademska_godina and z.id={$zadaca}");
        if (mysql_result($q20, 0, 0) == 0) {
            zamgerlog("student nije upisan na predmet (zadaca z{$zadaca})", 3);
            zamgerlog2("student ne slusa predmet za zadacu", $zadaca);
            biguglyerror("Ova zadaća nije iz vašeg predmeta");
            return;
        }
    }
    // Ili predmet
    if ($ponudakursa != 0) {
        $q25 = myquery("select count(*) from student_predmet where student={$userid} and predmet={$ponudakursa}");
        if (mysql_result($q25, 0, 0) == 0) {
            zamgerlog("student nije upisan na predmet (predmet p{$ponudakursa})", 3);
            zamgerlog2("student ne slusa ponudukursa", $ponudakursa);
            biguglyerror("Niste upisani na ovaj predmet");
            return;
        }
        // Odgovarajuci predmet i zadaca
        if ($zadaca != 0) {
            $q27 = myquery("select count(*) from zadaca where id={$zadaca} and predmet={$predmet} and akademska_godina={$ag}");
            if (mysql_result($q27, 0, 0) == 0) {
                zamgerlog("zadaca i predmet ne odgovaraju (predmet p{$ponudakursa}, zadaca z{$zadaca})", 3);
                zamgerlog2("zadaca i ponudakursa ne odgovaraju", $ponudakursa, $zadaca);
                biguglyerror("Ova zadaća nije iz vašeg predmeta");
                return;
            }
        }
    }
    // Nije izabrana konkretna zadaca
    if ($zadaca == 0) {
        // Zadnja zadaca na kojoj je radio/la
        $q30 = myquery("SELECT z.id FROM zadatak as zk, zadaca as z\n\tWHERE z.id=zk.zadaca and z.aktivna=1 and z.rok>curdate() and z.predmet={$predmet} and z.akademska_godina={$ag} and zk.student={$userid}\n\tORDER BY z.id DESC LIMIT 1");
        if (mysql_num_rows($q30) > 0) {
            $zadaca = mysql_result($q30, 0, 0);
        } else {
            // Nije radio ni na jednoj od aktivnih zadaca$predmet_id
            // Daj najstariju aktivnu zadacu
            $q40 = myquery("select id from zadaca where predmet={$predmet} and akademska_godina={$ag} and rok>curdate() and aktivna=1 order by id limit 1");
            if (mysql_num_rows($q40) > 0) {
                $zadaca = mysql_result($q40, 0, 0);
            } else {
                // Ako ni ovdje nema rezultata, znači da je svim
                // zadaćama istekao rok. Daćemo zadnju zadaću.
                // Da li ima aktivnih provjerili smo u $q10
                $q50 = myquery("select id from zadaca where predmet={$predmet} and akademska_godina={$ag} and aktivna=1 order by id desc limit 1");
                $zadaca = mysql_result($q50, 0, 0);
            }
        }
    }
    // Standardna lokacija zadaca:
    $lokacijazadaca = "{$conf_files_path}/zadace/{$predmet}-{$ag}/{$userid}/";
    // Ove vrijednosti će nam trebati kasnije
    $q60 = myquery("select naziv,zadataka,UNIX_TIMESTAMP(rok),programskijezik,attachment,dozvoljene_ekstenzije from zadaca where id={$zadaca}");
    $naziv = mysql_result($q60, 0, 0);
    $brojzad = mysql_result($q60, 0, 1);
    $rok = mysql_result($q60, 0, 2);
    $jezik = mysql_result($q60, 0, 3);
    $attachment = mysql_result($q60, 0, 4);
    $zadaca_dozvoljene_ekstenzije = mysql_result($q60, 0, 5);
    //  ODREĐIVANJE ZADATKA
    // Poslani parametar:
    $zadatak = intval($_REQUEST['zadatak']);
    if ($zadatak == 0) {
        // Prvi neurađeni zadatak u datoj zadaći
        // NOTE: subquery
        $q70 = myquery("select zk.redni_broj from zadatak as zk where zk.student={$userid} and zk.zadaca={$zadaca} and (select count(*) from zadatak as zk2 where zk2.student={$userid} and zk2.zadaca={$zadaca} and zk2.redni_broj=zk.redni_broj)=0 order by zk.redni_broj limit 1");
        if (mysql_num_rows($q70) > 0) {
            $zadatak = mysql_result($q70, 0, 0);
        } else {
            $zadatak = $brojzad;
        }
    }
    // Akcije vezane za autotest
    if ($_REQUEST['akcija'] == "test_detalji") {
        $test = intval($_REQUEST['test']);
        // Provjera spoofinga testa
        $q10 = myquery("SELECT COUNT(*) FROM autotest WHERE id={$test} AND zadaca={$zadaca} AND zadatak={$zadatak}");
        if (mysql_result($q10, 0, 0) == 0) {
            niceerror("Odabrani test nije sa odabrane zadaće.");
            return;
        }
        autotest_detalji($test, $userid, false);
        return;
    }
    if ($_REQUEST['akcija'] == "test_sa_kodom") {
        if ($attachment) {
            niceerror("Download zadaće poslane kao attachment sa ugrađenim testnim kodom trenutno nije podržano.");
            return;
        }
        $test = intval($_REQUEST['test']);
        // Provjera spoofinga testa
        $q10 = myquery("SELECT COUNT(*) FROM autotest WHERE id={$test} AND zadaca={$zadaca} AND zadatak={$zadatak}");
        if (mysql_result($q10, 0, 0) == 0) {
            niceerror("Odabrani test nije sa odabrane zadaće.");
            return;
        }
        $kod = autotest_sa_kodom($test, $userid, false);
        ?>
	<textarea rows="20" cols="80" name="program" wrap="off"><?php 
        echo $kod;
        ?>
</textarea>
	<?php 
        return;
    }
    //  NAVIGACIJA
    print "<br/><br/><center><h1>{$naziv}, Zadatak: {$zadatak}</h1></center>\n";
    // Statusne ikone:
    $stat_icon = array("zad_bug", "zad_preg", "zad_copy", "zad_bug", "zad_preg", "zad_ok");
    $stat_tekst = array("Bug u programu", "Pregled u toku", "Zadaća prepisana", "Bug u programu", "Pregled u toku", "Zadaća OK");
    ?>


<!-- zadace -->
<center>
<table cellspacing="0" cellpadding="2" border="0" id="zadace">
	<thead>
		<tr>
<?php 
    ?>
	<td>&nbsp;</td>
<?php 
    // Zaglavlje tabele - potreban nam je max. broj zadataka u zadaci
    $q20 = myquery("select zadataka from zadaca where predmet={$predmet} and akademska_godina={$ag} order by zadataka desc limit 1");
    $broj_zadataka = mysql_result($q20, 0, 0);
    for ($i = 1; $i <= $broj_zadataka; $i++) {
        ?>
<td>Zadatak <?php 
        echo $i;
        ?>
.</td><?php 
    }
    ?>
		<td>Rok za slanje</td>
		</tr>
	</thead>
<tbody>
<?php 
    // Tijelo tabele
    // LEGENDA STATUS POLJA:
    // 0 - nepoznat status
    // 1 - nova zadaća
    // 2 - prepisana
    // 3 - ne može se kompajlirati
    // 4 - prošla test, predstoji kontrola
    // 5 - pregledana
    /* Ovo se sve moglo kroz SQL rijesiti, ali necu iz razloga:
    1. PHP je citljiviji
    2. MySQL <4.1 ne podrzava subqueries */
    $bodova_sve_zadace = 0;
    $q21 = myquery("select id, naziv, bodova, zadataka, UNIX_TIMESTAMP(rok) from zadaca where predmet={$predmet} and akademska_godina={$ag} order by komponenta, id");
    while ($r21 = mysql_fetch_row($q21)) {
        $m_zadaca = $r21[0];
        $m_mogucih += $r21[2];
        $m_maxzadataka = $r21[3];
        ?>
<tr>
	<th><?php 
        echo $r21[1];
        ?>
</th>
	<?php 
        for ($m_zadatak = 1; $m_zadatak <= $broj_zadataka; $m_zadatak++) {
            // Ako tekuća zadaća nema toliko zadataka, ispisujemo blank polje
            if ($m_zadatak > $m_maxzadataka) {
                ?>
<td>&nbsp;</td><?php 
                continue;
            }
            // Uzmi samo rjesenje sa zadnjim IDom
            $q22 = myquery("select status,bodova,komentar from zadatak where student={$userid} and zadaca={$m_zadaca} and redni_broj={$m_zadatak} order by id desc limit 1");
            if ($m_zadaca == $zadaca && $m_zadatak == $zadatak) {
                $bgcolor = ' bgcolor="#DDDDFF"';
            } else {
                $bgcolor = "";
            }
            if (mysql_num_rows($q22) < 1) {
                ?>
<td <?php 
                echo $bgcolor;
                ?>
><a href="?sta=student/zadaca&predmet=<?php 
                echo $predmet;
                ?>
&ag=<?php 
                echo $ag;
                ?>
&zadaca=<?php 
                echo $m_zadaca;
                ?>
&zadatak=<?php 
                echo $m_zadatak;
                ?>
"><img src="images/16x16/zad_novi.png" width="16" height="16" border="0" align="center" title="Novi zadatak" alt="Novi zadatak"></a></td><?php 
            } else {
                $status = mysql_result($q22, 0, 0);
                $bodova_zadatak = mysql_result($q22, 0, 1);
                if (strlen(mysql_result($q22, 0, 2)) > 2) {
                    $imakomentar = "<img src=\"images/16x16/komentar.png\"  width=\"15\" height=\"14\" border=\"0\" title=\"Ima komentar\" alt=\"Ima komentar\" align=\"center\">";
                } else {
                    $imakomentar = "";
                }
                ?>
<td <?php 
                echo $bgcolor;
                ?>
><a href="?sta=student/zadaca&predmet=<?php 
                echo $predmet;
                ?>
&ag=<?php 
                echo $ag;
                ?>
&zadaca=<?php 
                echo $m_zadaca;
                ?>
&zadatak=<?php 
                echo $m_zadatak;
                ?>
"><img src="images/16x16/<?php 
                echo $stat_icon[$status];
                ?>
.png" width="16" height="16" border="0" align="center" title="<?php 
                echo $stat_tekst[$status];
                ?>
" alt="<?php 
                echo $stat_tekst[$status];
                ?>
"> <?php 
                echo $bodova_zadatak;
                ?>
 <?php 
                echo $imakomentar;
                ?>
</a></td>
	<?php 
            }
        }
        ?>
		<td><?php 
        if ($r21[4] < time()) {
            print "<font color=\"red\">";
        }
        print date("d. m. Y. H:i:s", $r21[4]);
        if ($r21[4] < time()) {
            print "</font>";
        }
        ?>
</td>
	</tr>
	<?php 
    }
    ?>
</tbody>
</table>
</center>
<?php 
    //  PORUKE I KOMENTARI
    // Upit za izvjestaj skripte i komentar tutora
    ?>
<br/><br/>
<center>
<table width="600" border="0"><tr><td>
<?php 
    $q110 = myquery("select izvjestaj_skripte, komentar, userid, status, bodova from zadatak where student={$userid} and zadaca={$zadaca} and redni_broj={$zadatak} order by id desc limit 1");
    if (mysql_num_rows($q110) > 0) {
        $poruka = mysql_result($q110, 0, 0);
        $komentar = mysql_result($q110, 0, 1);
        $tutor = mysql_result($q110, 0, 2);
        $status_zadace = mysql_result($q110, 0, 3);
        $bodova = mysql_result($q110, 0, 4);
        // Statusni ekran
        autotest_status_display($userid, $zadaca, $zadatak, false);
        // Vrijeme slanja - to neće biti isti slog kao onaj koji vraća $q110 jer taj je možda status koji je upisao tutor
        $q113 = myquery("SELECT UNIX_TIMESTAMP(vrijeme) FROM zadatak WHERE student={$userid} AND userid={$userid} AND zadaca={$zadaca} AND redni_broj={$zadatak} ORDER BY id DESC LIMIT 1");
        if (mysql_num_rows($q113) > 0) {
            ?>
		<p>Zadatak poslan: <?php 
            echo date("d.m.Y. H:i:s", mysql_result($q113, 0, 0));
            ?>
</p>
		<?php 
        } else {
            ?>
		<p>Zadatak nije poslan (tutor upisao/la bodove)</p>
		<?php 
        }
        // Rezultati automatskog testiranja
        $nalaz_autotesta = autotest_tabela($userid, $zadaca, $zadatak, false);
        if ($nalaz_autotesta != "") {
            print "<p>Rezultati testiranja:</p>\n{$nalaz_autotesta}\n";
        }
        // Poruke i komentari tutora
        if (preg_match("/\\w/", $poruka)) {
            $poruka = str_replace("\n", "<br/>\n", $poruka);
            ?>
<p>Poruka kod kompajliranja:<br/><b><?php 
            echo $poruka;
            ?>
</b></p><?php 
        }
        if (preg_match("/\\w/", $komentar)) {
            $komentar = str_replace("\n", "<br/>\n", $komentar);
            // Link za odgovor na komentar
            $link = "";
            if ($tutor > 0) {
                $q115 = myquery("select a.login,o.ime,o.prezime from auth as a, osoba as o where o.id={$tutor} and a.id=o.id");
                $naslov = urlencode("Odgovor na komentar ({$naziv}, Zadatak {$zadatak})");
                $tekst = urlencode("> {$komentar}");
                $primalac = urlencode(mysql_result($q115, 0, 0) . " (" . mysql_result($q115, 0, 1) . " " . mysql_result($q115, 0, 2) . ")");
                $link = " (<a href=\"?sta=common/inbox&akcija=compose&naslov={$naslov}&tekst={$tekst}&primalac={$primalac}\">odgovor</a>)";
            }
            ?>
<p>Komentar tutora: <b><?php 
            echo $komentar;
            ?>
</b><?php 
            echo $link;
        }
    }
    // Istek roka za slanje zadace
    if ($rok <= time()) {
        print "<p><b>Vrijeme za slanje ove zadaće je isteklo.</b></p>";
        // Ovo je onemogućavalo copy&paste u Firefoxu :(
        //$readonly = "DISABLED";
    } else {
        $readonly = "";
    }
    //  FORMA ZA SLANJE
    if ($attachment) {
        print "</td></tr></table>\n";
        // Attachment
        $q120 = myquery("select filename,UNIX_TIMESTAMP(vrijeme) from zadatak where zadaca={$zadaca} and redni_broj={$zadatak} and student={$userid} order by id desc limit 1");
        if (mysql_num_rows($q120) > 0) {
            $filename = mysql_result($q120, 0, 0);
            $the_file = "{$lokacijazadaca}/{$zadaca}/{$filename}";
            if ($filename && file_exists("{$conf_files_path}/zadace/{$predmet}-{$ag}") && file_exists($the_file)) {
                // Utvrđujemo stvarno vrijeme slanja
                $q130 = myquery("SELECT UNIX_TIMESTAMP(vrijeme) from zadatak where zadaca={$zadaca} and redni_broj={$zadatak} and student={$userid} and userid={$userid} order by id desc limit 1");
                if (mysql_num_rows($q130) > 0) {
                    $vrijeme = mysql_result($q130, 0, 0);
                } else {
                    $vrijeme = mysql_result($q120, 0, 1);
                }
                $vrijeme = date("d. m. Y. H:i:s", $vrijeme);
                $velicina = nicesize(filesize($the_file));
                $icon = "images/mimetypes/" . getmimeicon($the_file);
                $dllink = "index.php?sta=common/attachment&zadaca={$zadaca}&zadatak={$zadatak}";
                ?>
			<center><table width="75%" border="1" cellpadding="6" cellspacing="0" bgcolor="#CCCCCC"><tr><td>
			<a href="<?php 
                echo $dllink;
                ?>
"><img src="<?php 
                echo $icon;
                ?>
" border="0"></a>
			</td><td>
			<p>Poslani fajl: <b><a href="<?php 
                echo $dllink;
                ?>
"><?php 
                echo $filename;
                ?>
</a></b><br/>
			Datum slanja: <b><?php 
                echo $vrijeme;
                ?>
</b><br/>
			Veličina: <b><?php 
                echo $velicina;
                ?>
</b></p>
			</td></tr></table></center>
			<?php 
                print "<p>Ako želite promijeniti datoteku iznad, izaberite novu i kliknite na dugme za slanje:</p>";
            }
        } else {
            print "<p>Izaberite datoteku koju želite poslati i kliknite na dugme za slanje.";
            if ($zadaca_dozvoljene_ekstenzije != "") {
                print " Dozvoljeni su sljedeći tipovi datoteka: <b>{$zadaca_dozvoljene_ekstenzije}</b>.";
            }
            print "</p>\n";
        }
        ?>

	<form action="index.php" method="POST" enctype="multipart/form-data">
	<input type="hidden" name="sta" value="student/zadaca">
	<input type="hidden" name="akcija" value="slanje">
	<input type="hidden" name="predmet" value="<?php 
        echo $predmet;
        ?>
">
	<input type="hidden" name="ag" value="<?php 
        echo $ag;
        ?>
">
	<input type="hidden" name="zadaca" value="<?php 
        echo $zadaca;
        ?>
">
	<input type="hidden" name="zadatak" value="<?php 
        echo $zadatak;
        ?>
">
	<input type="hidden" name="labgrupa" value="<?php 
        echo $labgrupa;
        ?>
">
	<input type="file" name="attachment" size="50">
	</center>
	<p>&nbsp;</p>
	<?php 
    } else {
        // Forma
        $q130 = myquery("select ekstenzija from programskijezik where id={$jezik}");
        $ekst = mysql_result($q130, 0, 0);
        if ($status_zadace == 2) {
            ?>
<p>Zadaća je prepisana i ne može se ponovo poslati</p><?php 
        } else {
            if ($rok > time()) {
                ?>
<p>Kopirajte vaš zadatak u tekstualno polje ispod:</p>
		</td></tr></table>

		<?php 
            }
        }
        // Moze li se izbaciti labgrupa ispod?
        ?>
	
		</td></tr></table>
	<center>
	<?php 
        echo genform("POST");
        ?>
	<input type="hidden" name="zadaca" value="<?php 
        echo $zadaca;
        ?>
">
	<input type="hidden" name="zadatak" value="<?php 
        echo $zadatak;
        ?>
">
	<input type="hidden" name="akcija" value="slanje">
	<input type="hidden" name="labgrupa" value="<?php 
        echo $labgrupa;
        ?>
">
	
	<textarea rows="20" cols="80" name="program" <?php 
        echo $readonly;
        ?>
 wrap="off"><?php 
        $the_file = "{$lokacijazadaca}{$zadaca}/{$zadatak}{$ekst}";
        $tekst_zadace = "";
        if (file_exists("{$conf_files_path}/zadace/{$predmet}-{$ag}") && file_exists($the_file)) {
            $tekst_zadace = join("", file($the_file));
        }
        $tekst_zadace = htmlspecialchars($tekst_zadace);
        print $tekst_zadace;
        ?>
</textarea>
	</center>	

	<?php 
    }
    ?>

<center><input type="submit" value=" Pošalji zadatak! "></center>
</form>
<?php 
}
示例#2
0
function saradnik_zadaca()
{
    global $conf_files_path, $userid, $user_siteadmin;
    require "lib/autotest.php";
    require "lib/manip.php";
    // radi update_komponente
    // --------------------
    // Standardni ulazni podaci i potrebne varijable
    $stud_id = intval($_REQUEST['student']);
    $zadaca = intval($_REQUEST['zadaca']);
    $zadatak = intval($_REQUEST['zadatak']);
    // Prava pristupa
    if (!$user_siteadmin) {
        // Da li je nastavnik na predmetu?
        $q10 = myquery("select count(*) from nastavnik_predmet as np, zadaca as z where z.id={$zadaca} and z.predmet=np.predmet and z.akademska_godina=np.akademska_godina and np.nastavnik={$userid}");
        if (mysql_result($q10, 0, 0) < 1) {
            zamgerlog("privilegije (student u{$stud_id} zadaca z{$zadaca})", 3);
            // nivo 3: greska
            niceerror("Nemate pravo izmjene ove zadaće");
            return;
        }
        // Ogranicenja (tabela: ogranicenje) ne provjeravamo jer bi to bilo prekomplikovano,
        // a pitanje je da li ima smisla
    }
    // Podaci o zadaci
    $q20 = myquery("select p.geshi, p.ekstenzija, z.attachment, z.naziv, z.zadataka, z.komponenta, z.predmet, z.akademska_godina, z.programskijezik from zadaca as z, programskijezik as p where z.id={$zadaca} and z.programskijezik=p.id");
    if (mysql_num_rows($q20) < 1) {
        zamgerlog("nepostojeca zadaca {$zadaca}", 3);
        niceerror("Neispravna zadaća.");
        exit;
    }
    $jezik = mysql_result($q20, 0, 0);
    $ekst = mysql_result($q20, 0, 1);
    $attach = mysql_result($q20, 0, 2);
    $naziv_zadace = mysql_result($q20, 0, 3);
    $komponenta = mysql_result($q20, 0, 5);
    $predmet = mysql_result($q20, 0, 6);
    $ag = mysql_result($q20, 0, 7);
    $id_jezika = mysql_result($q20, 0, 8);
    if (mysql_result($q20, 0, 4) < $zadatak || $zadatak < 1) {
        zamgerlog("pokusao pristupiti nepostojecem zadatku {$zadatak} u zadaci z{$zadaca}", 3);
        niceerror("Neispravan broj zadatka.");
        exit;
    }
    // Podaci o studentu
    $q50 = myquery("select ime, prezime from osoba where id={$stud_id}");
    if (mysql_num_rows($q50) < 1) {
        zamgerlog("nepostojeci student {$stud_id}", 3);
        niceerror("Neispravan student.");
        exit;
    }
    $ime_studenta = mysql_result($q50, 0, 0);
    $prezime_studenta = mysql_result($q50, 0, 1);
    $lokacijazadaca = "{$conf_files_path}/zadace/{$predmet}-{$ag}/{$stud_id}/";
    // --------------------
    // AKCIJE
    // Akcija: Ispis diffa
    if ($_GET['akcija'] == "diff") {
        $diff_id = intval($_GET['diff_id']);
        $q60 = myquery("select diff from zadatakdiff where zadatak={$diff_id}");
        $diff = mysql_result($q60, 0, 0);
        // Ovo ispod nema potrebe jer je diff već escapovan prilikom
        // inserta u bazu (stud_zadaca.php)
        // $diff = str_replace("\n\n","\n",$diff);
        // $diff = htmlspecialchars($diff);
        print "<pre>{$diff}</pre>\n\n";
        return;
    }
    // Akcija: Izvršenje programa
    if ($_POST['akcija'] == "izvrsi" && check_csrf_token()) {
        // čuvamo poslane podatke u bazi (ako ih nema)
        function izvrsi($stdin, $jezik, $lokacijazadaca, $zadaca, $zadatak, $ekst)
        {
            global $conf_files_path;
            // priprema fajlova
            $tstdin = str_replace('\\n', "\n", $stdin);
            // više nije dvostruki escape
            $tstdin = str_replace('\\N', "\n", $tstdin);
            $tstdin .= "\n";
            $result = file_put_contents("{$conf_files_path}/tmp/zamger-gdb.txt", "run\nbt\n");
            if ($result) {
                $result = file_put_contents("{$conf_files_path}/tmp/zamger-input.txt", $tstdin);
            }
            if (!$result) {
                zamgerlog("nije uspjelo kreiranje datoteka", 3);
                niceerror("Ne mogu kreirati potrebne datoteke u direktoriju /tmp");
                return;
            }
            // kompajliranje - FIXME: nema podrške za jezike?
            if ($jezik == "C++") {
                $kompajler = "g++";
            } else {
                $kompajler = "gcc";
            }
            $the_file = "{$lokacijazadaca}{$zadaca}/{$zadatak}{$ekst}";
            $stdout = array();
            exec("{$kompajler} -lm  -ggdb {$the_file} -o {$conf_files_path}/tmp/zamger.out 2>&1", $stdout, $retvar);
            if ($retvar != 0) {
                niceerror("Kompajliranje nije uspjelo! Slijedi ispis");
                print "<pre>" . join("\n", $stdout) . "</pre>\n\n";
                // čišćenje
                unlink("{$conf_files_path}/tmp/zamger-gdb.txt");
                unlink("{$conf_files_path}/tmp/zamger-input.txt");
                unlink("{$conf_files_path}/tmp/zamger.out");
                return;
            }
            // izvršenje
            unset($stdout);
            chmod("{$conf_files_path}/tmp/zamger.out", 0755);
            exec("gdb --batch --command={$conf_files_path}/tmp/zamger-gdb.txt {$conf_files_path}/tmp/zamger.out <{$conf_files_path}/tmp/zamger-input.txt 2>&1", $stdout, $retvar);
            // Čistimo viškove iz stdout-a
            $ispis = join("\n", $stdout);
            $ispis = preg_replace("/^Using .*? library .*?\n/", "", $ispis);
            $ok = strpos($ispis, "\nProgram exited normally.\n");
            if ($ok) {
                $ispis = substr($ispis, 0, $ok);
            } else {
                $greska = strpos($ispis, "\nProgram received signal SIGABRT, Aborted.\n");
                $backtrace = substr($ispis, $greska + 42);
                $ispis = substr($ispis, 0, $greska);
            }
            ?>
		<center><table width="95%" style="border:1px solid silver;" bgcolor="#FFF3F3"><tr><td>
		<pre><?php 
            echo $ispis;
            ?>
</pre>
		</td></tr></table></center><br/><?php 
            if ($ok) {
                ?>
<p><img src="images/16x16/zad_ok.png" width="16" height="16"> 
			Program se izvršio bez problema.</p><?php 
            } else {
                ?>
<p><img src="images/16x16/zad_bug.png" width="16" height="16">
			Program se krahirao. Backtrace (obratiti pažnju na zadnje linije):</p>
			<pre><?php 
                echo $backtrace;
                ?>
</pre>
			<?php 
            }
            // čišćenje
            unlink("{$conf_files_path}/tmp/zamger-gdb.txt");
            unlink("{$conf_files_path}/tmp/zamger-input.txt");
            unlink("{$conf_files_path}/tmp/zamger.out");
        }
        ?>
	<h1>Rezultat izvršenja:</h1>
	<?php 
        if ($_POST['sve']) {
            $q70 = myquery("select ulaz from stdin where zadaca={$zadaca} and redni_broj={$zadatak}");
            while ($r70 = mysql_fetch_row($q70)) {
                print "<h2>Ulaz: '{$r70['0']}'</h2>";
                izvrsi($r70[0], $jezik, $lokacijazadaca, $zadaca, $zadatak, $ekst);
            }
        } else {
            $stdin = $_POST['stdin'];
            $mstdin = my_escape($stdin);
            $q70 = myquery("select count(*) from stdin where ulaz='{$mstdin}' and zadaca={$zadaca} and redni_broj={$zadatak}");
            if (mysql_result($q70, 0, 0) == 0) {
                $q80 = myquery("insert into stdin set ulaz='{$mstdin}', zadaca={$zadaca}, redni_broj={$zadatak}");
            }
            izvrsi($stdin, $jezik, $lokacijazadaca, $zadaca, $zadatak, $ekst);
        }
        ?>
	<p><a href="javascript:history.go(-1)">Nazad</a></p>
	<?php 
        return;
    }
    // Akcija: Izmjena statusa
    if ($_POST['akcija'] == "slanje" && check_csrf_token()) {
        $komentar = my_escape($_POST['komentar']);
        $status = intval($_POST['status']);
        $bodova = floatval(str_replace(",", ".", $_POST['bodova']));
        // Osiguravamo da se filename prenese u svaku sljedeću instancu zadatka
        $filename = $izvjestaj_skripte = '';
        $q90 = myquery("select filename, izvjestaj_skripte from zadatak where zadaca={$zadaca} and redni_broj={$zadatak} and student={$stud_id}  order by id desc limit 1");
        if (mysql_num_rows($q90) > 0) {
            $filename = mysql_real_escape_string(mysql_result($q90, 0, 0));
            $izvjestaj_skripte = mysql_real_escape_string(mysql_result($q90, 0, 1));
            // Već je sanitiziran HTML
        }
        $q100 = myquery("insert into zadatak set zadaca={$zadaca}, redni_broj={$zadatak}, student={$stud_id}, status={$status}, bodova={$bodova}, vrijeme=now(), komentar='{$komentar}', filename='{$filename}', izvjestaj_skripte='{$izvjestaj_skripte}', userid={$userid}");
        // Odredjujemo ponudu kursa (za update komponente)
        $q110 = myquery("select pk.id from student_predmet as sp, ponudakursa as pk where sp.student={$stud_id} and sp.predmet=pk.id and pk.predmet={$predmet} and pk.akademska_godina={$ag}");
        update_komponente($stud_id, mysql_result($q110, 0, 0), $komponenta);
        zamgerlog("izmjena zadace (student u{$stud_id} zadaca z{$zadaca} zadatak {$zadatak})", 2);
        // Nakon izmjene statusa, nastavljamo normalno sa prikazom zadatka
    }
    if ($_REQUEST["akcija"] == "test_detalji") {
        $test = intval($_REQUEST['test']);
        // Provjera spoofinga testa
        $q10 = myquery("SELECT COUNT(*) FROM autotest WHERE id={$test} AND zadaca={$zadaca} AND zadatak={$zadatak}");
        if (mysql_result($q10, 0, 0) == 0) {
            niceerror("Odabrani test nije sa odabrane zadaće.");
            return;
        }
        autotest_detalji($test, $stud_id, true);
        return;
    }
    if ($_REQUEST["akcija"] == "brisi_testove" && check_csrf_token()) {
        autotest_brisi_rezultate($stud_id, $zadaca, $zadatak);
        nicemessage("Rezultati testova obrisani.");
        ?>
	<p><a href="?sta=saradnik/zadaca&amp;student=<?php 
        echo $stud_id;
        ?>
&amp;zadaca=<?php 
        echo $zadaca;
        ?>
&amp;zadatak=<?php 
        echo $zadatak;
        ?>
">Nazad</a></p>
	<?php 
        return;
    }
    // --------------------
    // PRIKAZ ZADATKA
    // Header
    ?>
<h1><a href="?sta=saradnik/student&amp;student=<?php 
    echo $stud_id;
    ?>
&amp;predmet=<?php 
    echo $predmet;
    ?>
&amp;ag=<?php 
    echo $ag;
    ?>
" onclick="window.opener.open(this.href); return false;"><?php 
    echo $ime_studenta . " " . $prezime_studenta;
    ?>
</a>, <?php 
    echo $naziv_zadace . ", Zadatak " . $zadatak . ".";
    ?>
</h1>
<?php 
    // Da li ispisati zadatak ili dugme za download attachmenta?
    if ($attach == 0) {
        // Nije attachment
        $src = "";
        $the_file = "{$lokacijazadaca}{$zadaca}/{$zadatak}{$ekst}";
        $no_lines = 0;
        if (file_exists($the_file)) {
            if ($_REQUEST["akcija"] == "test_sa_kodom") {
                $test = intval($_REQUEST['test']);
                // Provjera spoofinga testa
                $q10 = myquery("SELECT COUNT(*) FROM autotest WHERE id={$test} AND zadaca={$zadaca} AND zadatak={$zadatak}");
                if (mysql_result($q10, 0, 0) == 0) {
                    niceerror("Odabrani test nije sa odabrane zadaće.");
                    return;
                }
                $src = autotest_sa_kodom($test, $stud_id, true);
            } else {
                $src = file_get_contents($the_file);
            }
            $no_lines = count(explode("\n", $src));
            // geshi - biblioteka za syntax highlighting
            include_once 'lib/geshi/geshi.php';
            $geshi = new GeSHi($src, $jezik);
            ?>
		<center><table width="95%" style="border:1px solid silver;"><tr>
		<!-- Brojevi linija -->
		<td bgcolor="#CCCCCC" align="left"><pre><?php 
            for ($i = 1; $i <= $no_lines; $i++) {
                print "{$i}\n";
            }
            ?>
</pre></td>
		<td  bgcolor="#F3F3F3" align="left">
		<?php 
            print $geshi->parse_code();
            ?>
</td></tr></table></center><br/><?php 
            if ($_REQUEST["akcija"] == "test_sa_kodom") {
                return;
            }
            // Formular za izvršavanje programa
            if ($id_jezika > 0) {
                ?>
			<script type="text/javascript" src="js/combo-box.js"></script>
			<center><table style="border:1px solid silver;" cellspacing="0" cellpadding="6"><tr><td>
			Izvrši program sa sljedećim parametrima (kucajte \n za tipku enter):<br/>
			<?php 
                echo genform("POST");
                ?>
			<input type="hidden" name="akcija" value="izvrsi">
			<select name="stdin" onKeyPress="edit(event)" onBlur="this.editing = false;">
			<?php 
                // Zadnje korišteni stdin se čuva u bazi
                $q120 = myquery("select ulaz from stdin where zadaca={$zadaca} and redni_broj={$zadatak} order by id desc");
                if (mysql_num_rows($q120) < 1) {
                    print "<option></option>";
                }
                // bez ovoga nije moguće upisati novi tekst
                while ($r120 = mysql_fetch_row($q120)) {
                    print "<option value=\"{$r120['0']}\">{$r120['0']}</option>\n";
                }
                ?>
			</select><br/>
		
			<b>Pažnja!</b> Prije pokretanja provjerite da li program sadrži opasne naredbe.<br/>
			<input type="submit" value=" Izvrši program "> <input type="submit" name="sve" value=" Izvrši sve primjere odjednom ">
			</form></table></center><br/>&nbsp;<br/>
			<?php 
            }
        }
    } else {
        // Attachment
        $q130 = myquery("select filename,UNIX_TIMESTAMP(vrijeme) from zadatak where zadaca={$zadaca} and redni_broj={$zadatak} and student={$stud_id} order by id desc limit 1");
        if (mysql_num_rows($q130) > 0) {
            $filename = mysql_result($q130, 0, 0);
            $the_file = "{$lokacijazadaca}{$zadaca}/{$filename}";
            if ($filename && file_exists($the_file)) {
                $vrijeme = date("d. m. Y. h:i:s", mysql_result($q130, 0, 1));
                $velicina = nicesize(filesize($the_file));
                $icon = "images/mimetypes/" . getmimeicon($the_file);
                $dllink = "index.php?sta=common/attachment&student={$stud_id}&zadaca={$zadaca}&zadatak={$zadatak}";
                ?>
			<center><table width="75%" border="1" cellpadding="6" cellspacing="0" bgcolor="#CCCCCC"><tr><td>
			<a href="<?php 
                echo $dllink;
                ?>
"><img src="<?php 
                echo $icon;
                ?>
" border="0"></a>
			</td><td>
			<p>Poslani fajl: <b><a href="<?php 
                echo $dllink;
                ?>
"><?php 
                echo $filename;
                ?>
</a></b><br/>
			Veličina: <b><?php 
                echo $velicina;
                ?>
</b></p>
			</td></tr></table></center><br/>
			<?php 
            } else {
                ?>
			<center><table width="75%" border="1" cellpadding="6" cellspacing="0" bgcolor="#CCCCCC"><tr><td>
			<b><font color="red">Student je zaboravio priložiti datoteku.</font></b>
			</td></tr></table></center><br/>
			<?php 
            }
        }
    }
    // Prikaz statusa sa log-om i izmjena
    $q140 = myquery("select status,bodova,izvjestaj_skripte,komentar from zadatak where zadaca={$zadaca} and redni_broj={$zadatak} and student={$stud_id} order by id desc limit 1");
    if (mysql_num_rows($q140) > 0) {
        $status = mysql_result($q140, 0, 0);
        $bodova = mysql_result($q140, 0, 1);
        $izvjestaj_skripte = str_replace("\n", "<br/>", mysql_result($q140, 0, 2));
        $komentar = mysql_result($q140, 0, 3);
        $komentar = str_replace("\"", "&quot;", $komentar);
        // Koristimo poseban upit da bismo odredili vrijeme slanja prve verzije
        $q150 = myquery("select UNIX_TIMESTAMP(vrijeme) from zadatak where zadaca={$zadaca} and redni_broj={$zadatak} and student={$stud_id} order by id limit 1");
        $vrijeme_slanja = date("d. m. Y. H:i:s", mysql_result($q150, 0, 0));
        ?>
	
	<table border="0">
	<tr>
		<td>Vrijeme slanja:</td>
		<td><b><?php 
        echo $vrijeme_slanja;
        ?>
</b></td>
	</tr>
	<?php 
        // Autotest nalaz
        $nalaz_autotesta = autotest_tabela($stud_id, $zadaca, $zadatak, true);
        if ($nalaz_autotesta != "") {
            ?>
	<tr>
		<td>Rezultati testiranja:</td>
		<td>
		<p><?php 
            echo genform("POST");
            ?>
		<input type="hidden" name="akcija" value="brisi_testove">
		<input type="submit" value=" Obriši sve rezultate testiranja ">
		</form></p>
		<?php 
            print $nalaz_autotesta;
        }
        if ($id_jezika > 0) {
            ?>
	<tr>
		<td>Izvještaj skripte:</td>
		<td><i><?php 
            echo $izvjestaj_skripte;
            ?>
</i></td>
	</tr>
		<?php 
        }
        if ($status == 1 && !$user_siteadmin) {
            // nema mijenjanja ako je status 1 = ceka se automatska provjera
            print "Izmjena zadaće nije moguća jer se čeka automatsko testiranje";
        } else {
            print genform("POST");
        }
        ?>
	<input type="hidden" name="akcija" value="slanje">
	<?php 
    } else {
        print genform("POST");
        ?>
	<input type="hidden" name="akcija" value="slanje">

	<table border="0">
	<tr>
		<td>&nbsp;</td>
		<td><b>Unos bodova za zadaću koja nije poslana:</b></td>
	</tr>
	<?php 
    }
    // Dio forme koji se prikazuje bez obzira da li je u pitanju kreiranje nove zadaće ili promjena postojeće
    ?>
<tr>
	<td>Status</td>
	<td><select id="status" name="status"><?php 
    function myoption($nr, $tx, $sel)
    {
        print "{$sel}";
        print "<option value={$nr}";
        if ($nr == $sel) {
            print " selected";
        }
        print ">{$tx}</option>";
    }
    // tabela status kodova
    $statusi_array = array("nepoznat status", "sačekati automatsko testiranje!", "prepisana", "ne može se kompajlirati", "nova zadaća, potrebno pregledati", "pregledana");
    $brstatusa = 6;
    for ($i = 0; $i < $brstatusa; $i++) {
        myoption($i, $statusi_array[$i], $status);
    }
    ?>
</select></td>
</tr>
<tr>
	<td>Bodova:</td>
	<td><input type="text" size="20" name="bodova" value="<?php 
    echo $bodova;
    ?>
" onchange="javascript:document.getElementById('status').value=5;"></td>
</tr>
<tr>
	<td valign="top">Komentar:</td>
	<td><textarea cols="50" rows="5" name="komentar"><?php 
    echo $komentar;
    ?>
</textarea></td>
</tr>
<tr>
	<td colspan="2" align="center"><?php 
    if ($status != 1 || $user_siteadmin) {
        ?>
<input type="submit" value="Izmijeni vrijednosti"><?php 
    }
    ?>
</td>
</tr>
</table>
</form>



<?php 
    ##### HISTORIJA IZMJENA ######
    $q160 = myquery("select id,UNIX_TIMESTAMP(vrijeme),status,bodova,komentar,userid from zadatak where zadaca={$zadaca} and redni_broj={$zadatak} and student={$stud_id} order by vrijeme");
    if (mysql_num_rows($q160) > 1) {
        ?>

<p>Historija izmjena:</p>
<ul><?php 
        while ($r160 = mysql_fetch_row($q160)) {
            $imeprezime = "";
            if ($r160[5] > 0) {
                $q165 = myquery("select ime, prezime from osoba where id={$r160['5']}");
                if (mysql_num_rows($q165) > 0) {
                    $imeprezime = mysql_result($q165, 0, 0) . " " . mysql_result($q165, 0, 1);
                }
            }
            $vrijeme_slanja = date("d. m. Y. H:i:s", $r160[1]);
            print "<li><b>{$vrijeme_slanja}";
            if ($imeprezime != "") {
                print " ({$imeprezime})";
            }
            print ":</b> " . $statusi_array[$r160[2]];
            if ($r160[3] > 0) {
                print " (" . $r160[3] . " bodova)";
            }
            if (strlen($r160[4]) > 0) {
                print " - &quot;" . $r160[4] . "&quot;";
            }
            $q170 = myquery("select count(zadatak) from zadatakdiff where zadatak={$r160['0']}");
            if (mysql_result($q170, 0, 0) > 0) {
                print " (<a href=\"index.php?sta=saradnik/zadaca&akcija=diff&zadaca={$zadaca}&zadatak={$zadatak}&student={$stud_id}&diff_id={$r160['0']}\">diff</a>)";
            }
            print "</li>";
        }
        ?>
</ul><?php 
    }
    // Kraj historije izmjena
}