function get_room_depth($room_id){ if ($room_id == 1){return 1;} list($parent_room_id) = db_list(db_fetch("SELECT id FROM choose_rooms WHERE room_1=$room_id OR room_2=$room_id")); if ($parent_room_id){ return 1 + get_room_depth($parent_room_id); } return 1; }
/** * remove all metadata that have been expired for more than file ttd * then remove all files and logs without metadata * * @return Void */ function db_purge() { global $purge_interval, $file_ttd; # abort if last purge has been less than purge interval ago if (filemtime('metadata/.LAST_PURGE') > time() - $purge_interval) { return; } # get list of files, oldest first $files = array_reverse(db_list()); # remove metadata of expired files foreach ($files as $file) { if ($file['expire'] + $file_ttd > time()) { # continue to next step when first file is encountered that has not expired more than file ttd ago break; } else { unlink('metadata/' . $file['id']); } } # open log directory $files = dir('logs'); # remove all log files without associated metadata while ($file = $files->read()) { if (substr($file, 0, 1) == '.') { continue; } else { if (!db_exists($file, 'metadata')) { unlink('logs/' . $file); } } } # open file directory $files = dir('files'); # remove all uploaded files without associated metadata while ($file = $files->read()) { if (substr($file, 0, 1) == '.') { continue; } else { if (!db_exists($file, 'metadata')) { unlink('files/' . $file); } } } # timestamp this purge touch('metadata/.LAST_PURGE'); }
foreach ($ret['rows'] as $row){ $clothing[$row['id']] = $row; } foreach ($avatars as $k => $row){ foreach ($row['details'] as $slot => $id){ $avatars[$k]['details'][$slot] = $clothing[$id]; } } } # # some totals # list($count_avatars) = db_list(db_fetch("SELECT COUNT(*) FROM glitchmash_avatars")); list($count_votes) = db_list(db_fetch("SELECT COUNT(*) FROM glitchmash_votes")); $smarty->assign('count_avatars', $count_avatars); $smarty->assign('count_votes', $count_votes); # # output # $smarty->display('page_top.txt'); ?>
function table_types2($table) { global $db_driver; if ('mysql' == $db_driver) { $types = array(); $rows = @db_list("SHOW COLUMNS FROM `{$table}`"); if (!($rows && count($rows))) { return false; } foreach ($rows as $row) { $type = $row['Type']; preg_match('#^[a-z]+#', $type, $match); $type = $match[0]; $types[$row['Field']] = $type; } } if ('pgsql' == $db_driver) { $types = db_assoc("SELECT column_name, udt_name FROM information_schema.columns WHERE table_name ='{$table}' ORDER BY ordinal_position"); if (!count($types)) { return false; } foreach ($types as $col => $type) { // "_" also in regexp - error when retrieving column info from "pg_class", // udt_name might be "_aclitem" / "_text". preg_match('#^[a-z_]+#', $type, $match); $type = $match[0]; $types[$col] = $type; } } foreach ($types as $col => $type) { if ('varchar' == $type) { $type = 'char'; } if ('integer' == $type) { $type = 'int'; } if ('timestamp' == $type) { $type = 'time'; } $types[$col] = $type; } return $types; }
function table_edit_form_generate($tablename, $r = "") { global $tables; //this is for add if (!$r) { $r = new stdClass(); } if (isset($tables[$tablename]["fields"])) { foreach ($tables[$tablename]["fields"] as $value) { //this is for add if (!isset($r->{$value})) { $r->{$value} = ""; } if (str_end($value, "_check")) { form_checkbox("{~" . str_start($value, "_check") . "}:", $value, $r->{$value}); } else { if (str_end($value, "_time")) { $shortname = str_start($value, "_time"); form_timestamp($shortname, $shortname, $r->{$value}); } else { if (str_end($value, "_id")) { $cap = substr($value, 0, strlen($value) - 3); $table = $cap . "s"; if (!isset($tables[$table])) { $table = str_prefix($tablename) . $table; } $fields = "id"; //use first field as list value foreach ($tables[$table]['fields'] as $list_value) { $fields .= ", {$list_value}"; break; } $list = db_list(db_query("SELECT {$fields} FROM {$table}")); $table = table_long_alias($table); form_list($table, $value, $list, $r->{$value}); } else { // $r->$value = htmlentities($r->$value,ENT_QUOTES); if (str_end($value, "_text")) { form_textarea("{~" . str_start($value, "_text") . "}", $value, $r->{$value}); } else { form_input("{~{$value}}", $value, $r->{$value}); } } } } } } }
function table_columns($table) { // @columns global $db_driver, $global_columns; static $cache_columns = array(); if (isset($cache_columns[$table])) { return $cache_columns[$table]; } if ('mysql' == $db_driver) { $columns = array(); $rows = @db_list("SHOW COLUMNS FROM `{$table}`"); /* [Field] => id [Type] => int(11) [Null] => NO [Key] => PRI [Default] => [Extra] => */ if (!($rows && count($rows))) { return false; } if (!isset($global_columns[$table])) { $global_columns[$table] = array(); } foreach ($rows as $row) { $type = $row['Type']; // for example "VARCHAR(50)" preg_match('#^[a-z]+#i', $type, $match); $type = strtolower($match[0]); $type = ColumnType($type); $columns[$row['Field']] = $type; $global_columns[$table][] = array("name" => $row["Field"], "type" => $type, "pk" => $row["Key"] == "PRI" || $row["Key"] == "UNI", "notnull" => $row["Null"] == "NO", "default" => $row["Default"]); } } else { if ('pgsql' == $db_driver) { $columns = db_list("SELECT column_name, udt_name, column_default, is_nullable FROM information_schema.columns WHERE table_name = '{$table}' ORDER BY ordinal_position"); dump($columns); // column_name // udt_name // column_default - default value // is_nullable /* [table_catalog] => test [table_schema] => public [table_name] => some22 [column_name] => id [ordinal_position] => 1 [column_default] => [is_nullable] => NO [data_type] => integer [character_maximum_length] => [udt_catalog] => test [udt_schema] => pg_catalog [udt_name] => int4 [dtd_identifier] => 1 [is_self_referencing] => NO [is_identity] => NO [is_generated] => NEVER [is_updatable] => YES */ // To get primary key for a table in postgresql: //db_exe("CREATE TABLE some33 (id integer PRIMARY KEY, name varchar(30)) "); //dump(db_list("SELECT * FROM information_schema.table_constraints WHERE table_name = 'some33'")); //dump(db_list("SELECT * FROM information_schema.key_column_usage WHERE table_name = 'some33'")); if (!count($columns)) { return false; } foreach ($columns as $col => $type) { // "_" also in regexp - error when retrieving column info from "pg_class" - through a Custom query in SQL Editor POPUP. // udt_name might be "_aclitem" / "_text". // $type == for example "VARCHAR(50)" preg_match('#^[a-z_]+#i', $type, $match); $type = strtolower($match[0]); $type = ColumnType($type); $columns[$col] = $type; } } else { if ("sqlite" == $db_driver) { $rawColumns = db_list("PRAGMA table_info(\"{$table}\")"); /* [cid] => 0 [name] => id [type] => INTEGER [notnull] => 0 [dflt_value] => [pk] => 1 */ if (!count($rawColumns)) { return false; } foreach ($rawColumns as $row) { if ($row["type"]) { preg_match("#^[a-z]+#i", $row["type"], $match); $type = strtolower($match[0]); $type = ColumnType($type); } else { // type might be empty: sqlite_sequence table // Solved by not querying sqlite_ special: AND name NOT LIKE 'sqlite_%' $type = ""; } $col = $row["name"]; $columns[$col] = $type; $global_columns[$table][] = array("name" => $row["name"], "type" => $type, "pk" => (int) $row["pk"], "notnull" => (int) $row["notnull"], "default" => $row["dflt_value"]); } } } } $cache_columns[$table] = $columns; return $columns; }
), array( 'win_id' => $win, 'lose_id' => $lose, 'date_updated' => time(), )); # # update counts for the 2 choices # list($wins1) = db_list(db_fetch("SELECT COUNT(*) FROM glitchmash_votes WHERE win_id=$win")); list($wins2) = db_list(db_fetch("SELECT COUNT(*) FROM glitchmash_votes WHERE win_id=$lose")); list($losses1) = db_list(db_fetch("SELECT COUNT(*) FROM glitchmash_votes WHERE lose_id=$win")); list($losses2) = db_list(db_fetch("SELECT COUNT(*) FROM glitchmash_votes WHERE lose_id=$lose")); db_update('glitchmash_avatars', array( 'votes' => $wins1+$losses1, 'wins' => $wins1, 'enough_votes' => (($wins1+$losses1) >= $vote_limit) ? 1 : 0, 'ratio' => $wins1 / ($wins1+$losses1), ), "id=$win"); db_update('glitchmash_avatars', array( 'votes' => $wins2+$losses2, 'wins' => $wins2, 'enough_votes' => (($wins2+$losses2) >= $vote_limit) ? 1 : 0, 'ratio' => $wins2 / ($wins2+$losses2), ), "id=$lose");
$ret = curl_api_call('/simple/auth.check', array( 'oauth_token' => $oauth_token, )); db_insert_dupe('glitchmash_players', array( 'tsid' => AddSlashes($ret['player_tsid']), 'date_added' => time(), 'oauth_token' => AddSlashes($oauth_token), 'name' => AddSlashes($ret['player_name']), ), array( 'oauth_token' => AddSlashes($oauth_token), 'name' => AddSlashes($ret['player_name']), )); # # player is logged in - go and import their avatar # $tsid_enc = AddSlashes($ret['player_tsid']); list($count) = db_list(db_fetch("SELECT COUNT(*) FROM glitchmash_avatars WHERE player_tsid='$tsid_enc'")); if ($count){ header("location: /checkcookie/?redir=".urlencode('/you/?login=1')); }else{ header("location: /checkcookie/?redir=".urlencode('/import/')); } exit; ?>
'date_updated' => time(), 'details' => AddSlashes(serialize($avatar)), ); $hash2 = $hash; unset($hash2['date_added']); db_insert_dupe('glitchmash_avatars', $hash, $hash2); # # mark only the latest one as active # $tsid_enc = AddSlashes($cfg['user']['tsid']); list($latest_id) = db_list(db_fetch("SELECT id FROM glitchmash_avatars WHERE player_tsid='$tsid_enc' ORDER BY date_updated DESC LIMIT 1")); $latest_id = intval($latest_id); db_write("UPDATE glitchmash_avatars SET is_active=0 WHERE player_tsid='$tsid_enc' AND id!=$latest_id"); db_write("UPDATE glitchmash_avatars SET is_active=1 WHERE player_tsid='$tsid_enc' AND id=$latest_id"); # # done # header("location: /you/?imported=1"); exit; ?>
function nastavnik_zadace() { global $userid, $user_siteadmin, $conf_files_path; require "lib/manip.php"; require "lib/autotest.php"; global $mass_rezultat; // za masovni unos studenata u grupe global $_lv_; // radi autogenerisanih formi // Parametri potrebni za Moodle integraciju global $conf_moodle, $conf_moodle_url, $conf_moodle_db, $conf_moodle_prefix, $conf_moodle_reuse_connection, $conf_moodle_dbhost, $conf_moodle_dbuser, $conf_moodle_dbpass; global $__lv_connection, $conf_use_mysql_utf8; // Parametri $predmet = intval($_REQUEST['predmet']); $ag = intval($_REQUEST['ag']); // Naziv predmeta $q5 = myquery("select naziv from predmet where id={$predmet}"); if (mysql_num_rows($q5) < 1) { biguglyerror("Nepoznat predmet"); zamgerlog("ilegalan predmet {$predmet}", 3); //nivo 3: greska zamgerlog2("nepoznat predmet", $predmet); return; } $predmet_naziv = mysql_result($q5, 0, 0); // Da li korisnik ima pravo ući u modul? if (!$user_siteadmin) { $q10 = myquery("select nivo_pristupa from nastavnik_predmet where nastavnik={$userid} and predmet={$predmet} and akademska_godina={$ag}"); if (mysql_num_rows($q10) < 1 || mysql_result($q10, 0, 0) == "asistent") { zamgerlog("nastavnik/ispiti privilegije (predmet pp{$predmet})", 3); zamgerlog2("nije nastavnik na predmetu", $predmet, $ag); biguglyerror("Nemate pravo pristupa ovoj opciji"); return; } } // Dozvoljene ekstenzije $q13 = myquery("select naziv from ekstenzije"); $dozvoljene_ekstenzije = array(); while ($r13 = mysql_fetch_row($q13)) { array_push($dozvoljene_ekstenzije, $r13[0]); } // Da li predmet posjeduje komponente za zadaće? $q15 = myquery("select k.id, k.naziv from komponenta as k, tippredmeta_komponenta as tpk, akademska_godina_predmet as agp where agp.akademska_godina={$ag} and agp.predmet={$predmet} and agp.tippredmeta=tpk.tippredmeta and tpk.komponenta=k.id and k.tipkomponente=4"); if (mysql_num_rows($q15) < 1) { zamgerlog("ne postoji komponenta za zadace na predmetu pp{$predmet} ag{$ag}", 3); zamgerlog2("ne postoji komponenta za zadace", $predmet, $ag); niceerror("U sistemu bodovanja za ovaj predmet nije definisana nijedna komponenta zadaće."); print "<p>Da biste nastavili, promijenite <a href=\"?sta=nastavnik/tip?predmet={$predmet}&ag={$ag}\">sistem bodovanja</a> za ovaj predmet.</p>\n"; return; } if (mysql_num_rows($q15) > 1) { niceerror("U sistemu bodovanja za ovaj predmet je definisano više od jedne komponente za zadaće."); print "<p>Ovaj modul trenutno podržava samo jednu komponentu zadaća. Ako imate potrebu za rad sa više od jedne komponente zadaća istovremeno, kontaktirajte administratora Zamgera. U suprotnom, provjerite <a href=\"?sta=nastavnik/tip?predmet={$predmet}&ag={$ag}\">sistem bodovanja</a> za ovaj predmet za slučaj da je ova situacija posljedica greške.</p>\n"; print "<p>Koristićemo komponentu označenu nazivom: <b>" . mysql_result($q15, 0, 1) . "</b></p>"; } $komponenta_za_zadace = mysql_result($q15, 0, 0); ?> <p> </p> <p><h3><?php echo $predmet_naziv; ?> - Zadaće</h3></p> <?php # Masovni unos zadaća if ($_POST['akcija'] == "massinput" && strlen($_POST['nazad']) < 1 && check_csrf_token()) { if ($_POST['fakatradi'] != 1) { $ispis = 1; } else { $ispis = 0; } // Provjera ostalih parametara $zadaca = intval($_REQUEST['_lv_column_zadaca']); $zadatak = intval($_REQUEST['zadatak']); $q20 = myquery("select naziv,zadataka,bodova,komponenta,predmet,akademska_godina from zadaca where id={$zadaca}"); if (mysql_num_rows($q20) < 1) { zamgerlog("nepostojeca zadaca {$zadaca}", 3); // 3 = greška zamgerlog2("nepostojeca zadaca", $zadaca); niceerror("Morate najprije kreirati zadaću"); print "\n<p>Koristite formular "Kreiranje zadaće" koji se nalazi na prethodnoj stranici. Ukoliko ne vidite nijednu zadaću na spisku "Postojeće zadaće", koristite dugme Refresh vašeg web preglednika.</p>\n"; return; } if (mysql_result($q20, 0, 1) < $zadatak) { zamgerlog("zadaca {$zadaca} nema {$zadatak} zadataka", 3); zamgerlog2("zadaca nema toliko zadataka", $zadaca, $zadatak); niceerror("Zadaća \"" . mysql_result($q20, 0, 0) . "\" nema {$zadatak} zadataka."); return; } $maxbodova = mysql_result($q20, 0, 2); $komponenta = mysql_result($q20, 0, 3); // Provjera spoofanja zadaće if ($predmet != mysql_result($q20, 0, 4) || $ag != mysql_result($q20, 0, 5)) { zamgerlog("zadaca z{$zadaca} nije u predmetu pp{$predmet}", 3); zamgerlog2("id zadace i predmeta se ne poklapaju", $zadaca, $predmet, $ag); niceerror("Pogresan ID zadace!"); return; } if ($ispis) { ?> Akcije koje će biti urađene:<br/><br/> <?php echo genform("POST"); ?> <input type="hidden" name="fakatradi" value="1"> <input type="hidden" name="_lv_column_zadaca" value="<?php echo $zadaca; ?> "> <table border="0" cellspacing="1" cellpadding="2"> <!-- FIXME: prebaciti stilove u CSS? --> <thead> <tr bgcolor="#999999"> <td><font style="font-family:DejaVu Sans,Verdana,Arial,sans-serif;font-size:11px;color:white;">Prezime</font></td> <td><font style="font-family:DejaVu Sans,Verdana,Arial,sans-serif;font-size:11px;color:white;">Ime</font></td> <td><font style="font-family:DejaVu Sans,Verdana,Arial,sans-serif;font-size:11px;color:white;">Bodovi / Komentar</font></td> </tr> </thead> <tbody> <?php } $greska = mass_input($ispis); // Funkcija koja parsira podatke if (count($mass_rezultat) == 0) { niceerror("Niste unijeli ništa."); return; } foreach ($mass_rezultat['ime'] as $student => $ime) { $prezime = $mass_rezultat['prezime'][$student]; $bodova = $mass_rezultat['podatak1'][$student]; $bodova = str_replace(",", ".", $bodova); // Student neocijenjen (prazno mjesto za ocjenu) if (floatval($bodova) == 0 && strpos($bodova, "0") === FALSE) { if ($ispis) { print "Student '{$prezime} {$ime}' - nema zadaću (nije unesen broj bodova {$bodova})<br/>"; } continue; } // Bodovi moraju biti manji od maximalnih borova $bodova = floatval($bodova); if ($bodova > $maxbodova) { if ($ispis) { print "-- Studenta '{$prezime} {$ime}' ima {$bodova} bodova što je više od maksimalnih {$maxbodova}<br/>"; //$greska=1; continue; } } // Zaključak if ($ispis) { print "Student '{$prezime} {$ime}' - zadaća {$zadaca}, bodova {$bodova}<br/>"; } else { // Odredjujemo zadnji filename $q25 = myquery("select filename from zadatak where zadaca={$zadaca} and redni_broj={$zadatak} and student={$student} order by id desc limit 1"); if (mysql_num_rows($q25) > 0) { $filename = mysql_result($q25, 0, 0); } else { $filename = ''; } $status_pregledana = 5; // status 5: pregledana $q30 = myquery("insert into zadatak set zadaca={$zadaca}, redni_broj={$zadatak}, student={$student}, status={$status_pregledana}, bodova={$bodova}, vrijeme=NOW(), filename='{$filename}', userid={$userid}"); zamgerlog2("bodovanje zadace", $student, $zadaca, $zadatak, $bodova); // Treba nam ponudakursa za update komponente $q35 = myquery("select sp.predmet from student_predmet as sp, ponudakursa as pk where sp.student={$student} and sp.predmet=pk.id and pk.predmet={$predmet} and pk.akademska_godina={$ag}"); $ponudakursa = mysql_result($q35, 0, 0); update_komponente($student, $ponudakursa, $komponenta); // update statistike } } if ($ispis) { if ($greska == 0) { ?> </tbody></table> <p>Potvrdite upis ispita i bodova ili se vratite na prethodni ekran.</p> <p><input type="submit" name="nazad" value=" Nazad "> <input type="submit" value=" Potvrda"></p> </form> <?php } else { ?> </tbody></table> <p>U unesenim podacima ima grešaka. Da li ste izabrali ispravan format ("Prezime[TAB]Ime" vs. "Prezime Ime")? Vratite se nazad kako biste ovo popravili.</p> <p><input type="submit" name="nazad" value=" Nazad "></p> </form> <?php } return; } else { zamgerlog("masovno upisane zadaće na predmet pp{$predmet}, zadaća z{$zadaca}, zadatak {$zadatak}", 2); // 2 = edit ?> Bodovi iz zadaća su upisani. <script language="JavaScript"> location.href='?sta=nastavnik/zadace&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> '; </script> <?php } } // Akcija za kreiranje nove, promjenu postojeće ili brisanje zadaće if ($_POST['akcija'] == "edit" && $_POST['potvrdabrisanja'] != " Nazad " && check_csrf_token()) { $edit_zadaca = intval($_POST['zadaca']); // Prava pristupa if ($edit_zadaca > 0) { $q86 = myquery("select predmet, akademska_godina from zadaca where id={$edit_zadaca}"); if (mysql_num_rows($q86) < 1) { niceerror("Nepostojeća zadaća sa IDom {$edit_zadaca}"); zamgerlog("promjena nepostojece zadace {$edit_zadaca}", 3); zamgerlog2("nepostojeca zadaca", $edit_zadaca); return 0; } if (mysql_result($q86, 0, 0) != $predmet || mysql_result($q86, 0, 1) != $ag) { niceerror("Zadaća nije sa izabranog predmeta"); zamgerlog("promjena zadace: zadaca {$edit_zadaca} nije sa predmeta pp{$predmet}", 3); zamgerlog2("id zadace i predmeta se ne poklapaju", $edit_zadaca, $predmet, $ag); return 0; } } // Brisanje postavke zadaće (a ne čitave zadaće!) if ($_POST['dugmeobrisi'] == "Obriši") { $q100 = myquery("select postavka_zadace from zadaca where id={$edit_zadaca}"); $filepath = "{$conf_files_path}/zadace/{$predmet}-{$ag}/postavke/" . mysql_result($q100, 0, 0); unlink($filepath); $q110 = myquery("update zadaca set postavka_zadace='' where id={$edit_zadaca}"); nicemessage("Postavka zadaće obrisana"); print "<a href=\"?sta=nastavnik/zadace&predmet={$predmet}&ag={$ag}&_lv_nav_id={$edit_zadaca}\">Nazad</a>\n"; zamgerlog("obrisana postavka zadace z{$edit_zadaca}", 2); zamgerlog2("obrisana postavka zadace", $edit_zadaca); return; } // Brisanje zadaće if ($_POST['brisanje'] == " Obriši ") { if ($edit_zadaca <= 0) { return; } // Ne bi se smjelo desiti $q86 = myquery("select predmet, akademska_godina from zadaca where id={$edit_zadaca}"); if (mysql_num_rows($q86) < 1) { niceerror("Nepostojeća zadaća sa IDom {$edit_zadaca}"); zamgerlog("brisanje nepostojece zadace {$edit_zadaca}", 3); zamgerlog2("nepostojeca zadaca", $edit_zadaca); return 0; } if (mysql_result($q86, 0, 0) != $predmet || mysql_result($q86, 0, 1) != $ag) { niceerror("Zadaća nije sa izabranog predmeta"); zamgerlog("brisanje zadace: zadaca {$edit_zadaca} nije sa predmeta pp{$predmet}", 3); zamgerlog2("id zadace i predmeta se ne poklapaju", $edit_zadaca, $predmet, $ag); return 0; } if ($_POST['potvrdabrisanja'] == " Briši ") { // Brišemo srodne testove $q84 = myquery("delete from autotest_replace where zadaca={$edit_zadaca}"); $q85 = myquery("delete from autotest_rezultat where autotest in (select id from autotest where zadaca={$edit_zadaca})"); $q86 = myquery("delete from autotest where zadaca={$edit_zadaca}"); // Brišemo zadaću $q87 = myquery("delete from zadatak where zadaca={$edit_zadaca}"); $q88 = myquery("delete from zadaca where id={$edit_zadaca}"); zamgerlog("obrisana zadaca {$edit_zadaca} sa predmeta pp{$predmet}", 4); zamgerlog2("obrisana zadaca", $edit_zadaca); nicemessage("Zadaća uspješno obrisana"); ?> <script language="JavaScript"> location.href='?sta=nastavnik/zadace&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> '; </script> <?php return; } else { $q96 = myquery("select count(*) from zadatak where zadaca={$edit_zadaca}"); $broj_zadataka = mysql_result($q96, 0, 0); $q97 = myquery("select count(*) from autotest where zadaca={$edit_zadaca}"); $broj_testova = mysql_result($q97, 0, 0); print genform("POST"); ?> Brisanjem zadaće obrisaćete i sve do sada unesene ocjene i poslane zadatke! Da li ste sigurni da to želite?<br> U pitanju je <b><?php echo $broj_zadataka; ?> </b> jedinstvenih slogova u bazi!<br><br> <?php if ($broj_testova > 0) { ?> Također ćete obrisati i <b><?php echo $broj_testova; ?> </b> testova.<br><br> <?php } ?> <input type="submit" name="potvrdabrisanja" value=" Briši "> <input type="submit" name="potvrdabrisanja" value=" Nazad "> <?php return; } } // Kreiranje ili izmjena zadaće $naziv = trim(my_escape($_POST['naziv'])); $zadataka = intval($_POST['zadataka']); $bodova = floatval(str_replace(",", ".", $_POST['bodova'])); $dan = intval($_POST['day']); $mjesec = intval($_POST['month']); $godina = intval($_POST['year']); $sat = intval($_POST['sat']); $minuta = intval($_POST['minuta']); $sekunda = intval($_POST['sekunda']); if ($_POST['aktivna']) { $aktivna = 1; } else { $aktivna = 0; } if ($_POST['attachment']) { $attachment = 1; } else { $attachment = 0; } $programskijezik = intval($_POST['_lv_column_programskijezik']); if ($_POST['automatsko_testiranje']) { $automatsko_testiranje = 1; } else { $automatsko_testiranje = 0; } $postavka_file = $_FILES['postavka_zadace_file']['name']; if ($postavka_file != "") { if (!file_exists("{$conf_files_path}/zadace/{$predmet}-{$ag}/postavke")) { mkdir("{$conf_files_path}/zadace/{$predmet}-{$ag}/postavke", 0755, true); } copy($_FILES['postavka_zadace_file']['tmp_name'], "{$conf_files_path}/zadace/{$predmet}-{$ag}/postavke/{$postavka_file}"); $sql_add_postavka_file = ", postavka_zadace = '{$postavka_file}'"; } else { $sql_add_postavka_file = ""; } if (intval($_POST['attachment']) == 1 && isset($_POST['dozvoljene_eks'])) { $ekstenzije = array_unique($_POST['dozvoljene_eks']); $dozvoljene_ekstenzije_selected = implode(',', $ekstenzije); } else { $dozvoljene_ekstenzije_selected = null; } // Provjera ispravnosti if (!preg_match("/\\w/", $naziv)) { niceerror("Naziv zadaće nije dobar."); return 0; } if ($zadataka <= 0 || $bodova < 0 || $zadataka > 100 || $bodova > 100) { niceerror("Broj zadataka ili broj bodova nije dobar"); return 0; } if (!checkdate($mjesec, $dan, $godina)) { niceerror("Odabrani datum je nemoguć"); return 0; } if ($sat < 0 || $sat > 24 || $minuta < 0 || $minuta > 60 || $sekunda < 0 || $sekunda > 60) { niceerror("Vrijeme nije dobro"); return 0; } $mysqlvrijeme = time2mysql(mktime($sat, $minuta, $sekunda, $mjesec, $dan, $godina)); // Provjera duplog imena zadace $q90 = myquery("select count(*) from zadaca where naziv like '{$naziv}' and predmet={$predmet} and akademska_godina={$ag} and id!={$edit_zadaca}"); if (mysql_result($q90, 0, 0) > 0) { niceerror("Zadaća pod imenom '{$naziv}' već postoji! Izaberite neko drugo ime."); zamgerlog("zadaca sa nazivom '{$naziv}' vec postoji", 3); return 0; } // Kreiranje nove if ($edit_zadaca == 0) { // $komponenta_za_zadace određena na početku fajla $q92 = myquery("insert into zadaca set predmet={$predmet}, akademska_godina={$ag}, naziv='{$naziv}', zadataka={$zadataka}, bodova={$bodova}, rok='{$mysqlvrijeme}', aktivna={$aktivna}, attachment={$attachment}, programskijezik={$programskijezik}, automatsko_testiranje={$automatsko_testiranje}, dozvoljene_ekstenzije = '{$dozvoljene_ekstenzije_selected}', komponenta={$komponenta_za_zadace} {$sql_add_postavka_file}"); $edit_zadaca = mysql_insert_id(); if ($edit_zadaca == 0) { niceerror("Dodavanje zadaće nije uspjelo"); zamgerlog("dodavanje zadace nije uspjelo pp{$predmet}, naziv '{$naziv}'", 3); zamgerlog2("dodavanje zadace nije uspjelo", $predmet, $zadataka, $bodova, $naziv); } else { nicemessage("Kreirana nova zadaća '{$naziv}'"); zamgerlog("kreirana nova zadaca z{$edit_zadaca}", 2); zamgerlog2("kreirana nova zadaca", $edit_zadaca); } // Izmjena postojece zadace } else { // Ako se smanjuje broj zadataka, moraju se obrisati bodovi $q94 = myquery("select zadataka, komponenta from zadaca where id={$edit_zadaca}"); $oldzadataka = mysql_result($q94, 0, 0); if ($zadataka < $oldzadataka) { // Prilikom brisanja svakog zadatka updatujemo komponentu studenta $komponenta = mysql_result($q94, 0, 1); $q96 = myquery("select id,student from zadatak where zadaca={$edit_zadaca} and redni_broj>{$zadataka} and redni_broj<={$oldzadataka} order by student"); $oldstudent = 0; while ($r96 = mysql_fetch_row($q96)) { $q97 = myquery("delete from zadatak where id={$r96['0']}"); if ($oldstudent != 0 && $oldstudent != $r96[1]) { update_komponente($oldstudent, $predmet, $komponenta); } $oldstudent = $r96[1]; } if ($oldstudent != 0) { // log samo ako je bilo nesto zamgerlog("Smanjen broj zadataka u zadaci z{$edit_zadaca}", 4); zamgerlog2("smanjen broj zadataka u zadaci", $edit_zadaca); } // Brišemo i relevantne testove $q84 = myquery("delete from autotest_replace where zadaca={$edit_zadaca} and zadatak>{$zadataka}"); $q85 = myquery("delete from autotest_rezultat where autotest in (select id from autotest where zadaca={$edit_zadaca} and zadatak>{$zadataka})"); $q86 = myquery("delete from autotest where zadaca={$edit_zadaca} and zadatak>{$zadataka}"); } $q94 = myquery("update zadaca set naziv='{$naziv}', zadataka={$zadataka}, bodova={$bodova}, rok='{$mysqlvrijeme}', aktivna={$aktivna}, attachment={$attachment}, programskijezik={$programskijezik}, automatsko_testiranje={$automatsko_testiranje}, dozvoljene_ekstenzije='{$dozvoljene_ekstenzije_selected}' {$sql_add_postavka_file} where id={$edit_zadaca}"); nicemessage("Ažurirana zadaća '{$naziv}'"); zamgerlog("azurirana zadaca z{$edit_zadaca}", 2); zamgerlog2("azurirana zadaca", $edit_zadaca); } } // Akcija: AUTOTESTOVI if ($_REQUEST['akcija'] == "autotestovi") { $zadaca = intval($_REQUEST['zadaca']); $backLink = "?sta=nastavnik/zadace&predmet={$predmet}&ag={$ag}"; $linkPrefix = "{$backLink}&zadaca={$zadaca}&akcija=autotestovi"; $backLink = "<a href=\"?{$backLink}&_lv_nav_id={$zadaca}\">Nazad na popis zadaća</a>"; // Provjera spoofinga zadaće $q10 = myquery("SELECT COUNT(*) FROM zadaca WHERE id={$zadaca} AND predmet={$predmet} AND akademska_godina={$ag}"); if (mysql_result($q10, 0, 0) == 0) { nicemessage("Nepoznat ID zadaće {$zadaca}."); return; } autotest_admin($zadaca, $linkPrefix, $backLink); return; } // Spisak postojećih zadaća $_lv_["where:predmet"] = $predmet; $_lv_["where:akademska_godina"] = $ag; $_lv_["where:komponenta"] = $komponenta_za_zadace; // određena na početku fajla print "Postojeće zadaće:<br/>\n"; print db_list("zadaca"); // Kreiranje nove zadace ili izmjena postojeće $izabrana = intval($_REQUEST['_lv_nav_id']); if ($izabrana == 0) { $izabrana = intval($edit_zadaca); } if ($izabrana == 0) { ?> <p><hr/></p> <p><b>Kreiranje zadaće</b><br/> <?php $znaziv = $zaktivna = $zattachment = $zjezik = ""; $zzadataka = 0; $zbodova = 0; $tmpvrijeme = time(); } else { ?> <p><hr/></p> <p><b>Izmjena zadaće</b></p> <?php $q100 = myquery("select predmet, akademska_godina, naziv, zadataka, bodova, rok, aktivna, programskijezik, attachment, dozvoljene_ekstenzije, postavka_zadace, automatsko_testiranje from zadaca where id={$izabrana}"); if ($predmet != mysql_result($q100, 0, 0) || $ag != mysql_result($q100, 0, 1)) { niceerror("Zadaća ne pripada vašem predmetu"); zamgerlog("zadaca {$izabrana} ne pripada predmetu pp{$predmet}", 3); zamgerlog2("id zadace i predmeta se ne poklapaju", $izabrana, $predmet, $ag); return; } $znaziv = mysql_result($q100, 0, 2); $zzadataka = intval(mysql_result($q100, 0, 3)); $zbodova = floatval(mysql_result($q100, 0, 4)); $tmpvrijeme = mysql2time(mysql_result($q100, 0, 5)); if (mysql_result($q100, 0, 6) == 1) { $zaktivna = "CHECKED"; } else { $zaktivna = ""; } $zjezik = mysql_result($q100, 0, 7); if (mysql_result($q100, 0, 8) == 1) { $zattachment = "CHECKED"; } else { $zattachment = ""; } $dozvoljene_ekstenzije_selected = mysql_result($q100, 0, 9); $postavka_zadace = mysql_result($q100, 0, 10); $automatsko_testiranje = mysql_result($q100, 0, 11); } $zdan = date('d', $tmpvrijeme); $zmjesec = date('m', $tmpvrijeme); $zgodina = date('Y', $tmpvrijeme); $zsat = date('H', $tmpvrijeme); $zminuta = date('i', $tmpvrijeme); $zsekunda = date('s', $tmpvrijeme); // JavaScript za provjeru validnosti forme ?> <script language="JavaScript"> function IsNumeric(sText) { var ValidChars = "0123456789."; var IsNumber=true; var Char; for (i = 0; i < sText.length && IsNumber == true; i++) { Char = sText.charAt(i); if (ValidChars.indexOf(Char) == -1) { IsNumber = false; } } return IsNumber;0 } function provjera() { // var forma=document.getElementById("kreiranje_zadace"); var naziv=document.getElementById("naziv"); if (parseInt(naziv.value.length)<1) { alert("Niste unijeli naziv"); naziv.style.border=1; naziv.style.backgroundColor="#FF9999"; naziv.focus(); return false; } var zadataka=document.getElementById("zadataka"); if (!IsNumeric(zadataka.value)) { alert("Neispravan broj zadataka!"); zadataka.style.border=1; zadataka.style.backgroundColor="#FF9999"; zadataka.focus(); return false; } if (parseInt(zadataka.value)<=0) { alert("Broj zadataka u zadaći mora biti veći od nule, npr. 1"); zadataka.style.border=1; zadataka.style.backgroundColor="#FF9999"; zadataka.focus(); return false; } var bodova=document.getElementById("bodova"); if (!IsNumeric(bodova.value)) { alert("Neispravan broj bodova!"); bodova.style.border=1; bodova.style.backgroundColor="#FF9999"; bodova.focus(); return false; } if (parseFloat(bodova.value)<0) { alert("Broj bodova koje nosi zadaća mora biti veći ili jednak nuli, npr. 2 boda"); bodova.style.border=1; bodova.style.backgroundColor="#FF9999"; bodova.focus(); return false; } return true; } function onemoguci_ekstenzije(chk) { var attachment = document.getElementById("attachment"); var dozvoljene_ekstenzije = document.getElementById("dozvoljene_ekstenzije"); var jezik = document.getElementById("_lv_column_programskijezik"); if (attachment.checked) { dozvoljene_ekstenzije.style.display = ''; } else { dozvoljene_ekstenzije.style.display = 'none'; for (i = 0; i < chk.length; i++) chk[i].checked = false; } } </script> <?php // Forma za kreiranje zadaće unset($_REQUEST['aktivna']); unset($_REQUEST['attachment']); unset($_REQUEST['automatsko_testiranje']); print genform("POST", "kreiranje_zadace\" enctype=\"multipart/form-data\" onsubmit=\"return provjera();"); ?> <input type="hidden" name="akcija" value="edit"> <input type="hidden" name="zadaca" value="<?php echo $izabrana; ?> "> Naziv: <input type="text" name="naziv" id="naziv" size="30" value="<?php echo $znaziv; ?> "><br><br> Broj zadataka: <input type="text" name="zadataka" id="zadataka" size="4" value="<?php echo $zzadataka; ?> "> Max. broj bodova: <input type="text" name="bodova" id="bodova" size="3" value="<?php echo $zbodova; ?> "><br><br> Rok za slanje: <?php echo datectrl($zdan, $zmjesec, $zgodina); ?> <input type="text" name="sat" size="1" value="<?php echo $zsat; ?> "> <b>:</b> <input type="text" name="minuta" size="1" value="<?php echo $zminuta; ?> "> <b>:</b> <input type="text" name="sekunda" size="1" value="<?php echo $zsekunda; ?> "> <br><br> <input type="checkbox" name="aktivna" <?php echo $zaktivna; ?> > Aktivna <input type="checkbox" value="1" id="attachment" onclick="onemoguci_ekstenzije(this.form.dozvoljene_eks)" name="attachment" <?php echo $zattachment; ?> > Slanje zadatka u formi attachmenta<br><br> <span id="dozvoljene_ekstenzije" style="display:none" title="Oznacite željene ekstenzije"> Dozvoljene ekstenzije (Napomena: Ukoliko ne odaberete nijednu ekstenziju sve ekstenzije postaju dozvoljene): <?php $dozvoljene_ekstenzije_selected = explode(',', $dozvoljene_ekstenzije_selected); foreach ($dozvoljene_ekstenzije as $doz_ext) { ?> <input type="checkbox" name="dozvoljene_eks[]" <?php if (in_array($doz_ext, $dozvoljene_ekstenzije_selected)) { echo 'checked="checked"'; } ?> value="<?php echo $doz_ext; ?> " /> <?php echo $doz_ext; } ?> <br><br> </span> Programski jezik: <?php echo db_dropdown("programskijezik", $zjezik); ?> <br><br> <?php if ($zjezik != 0) { // Ako nije definisan programski jezik, nećemo ni nuditi automatsko testiranje... ? if ($automatsko_testiranje == 1) { $add_testiranje = "CHECKED"; } else { $add_testiranje = ""; } ?> <input type="checkbox" name="automatsko_testiranje" <?php echo $add_testiranje; ?> > Automatsko testiranje<br> <a href="?sta=nastavnik/zadace&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &zadaca=<?php echo $izabrana; ?> &akcija=autotestovi">Kliknite ovdje da definišete testove</a><br><br> <?php } ?> Postavka zadaće: <?php if ($postavka_zadace == "") { ?> <input type="file" name="postavka_zadace_file" size="45"><?php } else { ?> <a href="?sta=common/attachment&zadaca=<?php echo $izabrana; ?> &tip=postavka"><img src="images/16x16/preuzmi.png" width="16" height="16" border="0"> <?php echo $postavka_zadace; ?> </a> <input type="submit" name="dugmeobrisi" value="Obriši"> <?php } ?> <br><br> <input type="submit" value=" Pošalji "> <input type="reset" value=" Poništi "> <?php if ($izabrana > 0) { ?> <input type="submit" name="brisanje" value=" Obriši "><?php } echo "<script> onemoguci_ekstenzije('');</script>"; ?> </form> <?php /* $_lv_["label:programskijezik"] = "Programski jezik"; $_lv_["label:zadataka"] = "Broj zadataka"; $_lv_["label:bodova"] = "Max. broj bodova"; $_lv_["label:attachment"] = "Slanje zadatka u formi attachmenta"; $_lv_["label:rok"] = "Rok za slanje"; $_lv_["hidden:vrijemeobjave"] = 1; print db_form("zadaca");*/ // Formular za masovni unos zadaća $format = intval($_POST['format']); if (!$_POST['format']) { $q110 = myquery("select vrijednost from preference where korisnik={$userid} and preferenca='mass-input-format'"); if (mysql_num_rows($q110) > 0) { $format = mysql_result($q110, 0, 0); } else { //default vrijednost $format = 0; } } $separator = intval($_POST['separator']); if (!$_POST['separator']) { $q120 = myquery("select vrijednost from preference where korisnik={$userid} and preferenca='mass-input-separator'"); if (mysql_num_rows($q120) > 0) { $separator = mysql_result($q120, 0, 0); } else { //default vrijednost $separator = 0; } } $q130 = myquery("select count(*) from zadaca where predmet={$predmet} and akademska_godina={$ag}"); if (mysql_result($q130, 0, 0) > 0) { ?> <p><hr/></p> <p><b>Masovni unos zadaća</b><br/> <?php print genform("POST"); if (strlen($_POST['nazad']) > 1) { $izabrana = $_POST['_lv_column_zadaca']; } else { $izabrana = -1; } ?> <input type="hidden" name="fakatradi" value="0"> <input type="hidden" name="akcija" value="massinput"> <input type="hidden" name="nazad" value=""> <input type="hidden" name="brpodataka" value="1"> <input type="hidden" name="duplikati" value="0"> Izaberite zadaću: <?php echo db_dropdown("zadaca", $izabrana); ?> Izaberite zadatak: <select name="zadatak"><?php $q112 = myquery("select zadataka from zadaca where predmet={$predmet} and akademska_godina={$ag} order by zadataka desc limit 1"); for ($i = 1; $i <= mysql_result($q112, 0, 0); $i++) { print "<option value=\"{$i}\">{$i}</option>\n"; } ?> </select><br/><br/> <textarea name="massinput" cols="50" rows="10"><?php if (strlen($_POST['nazad']) > 1) { print $_POST['massinput']; } ?> </textarea><br/> <br/>Format imena i prezimena: <select name="format" class="default"> <option value="0" <?php if ($format == 0) { print "SELECTED"; } ?> >Prezime[TAB]Ime</option> <option value="1" <?php if ($format == 1) { print "SELECTED"; } ?> >Ime[TAB]Prezime</option> <option value="2" <?php if ($format == 2) { print "SELECTED"; } ?> >Prezime Ime</option> <option value="3" <?php if ($format == 3) { print "SELECTED"; } ?> >Ime Prezime</option></select> Separator: <select name="separator" class="default"> <option value="0" <?php if ($separator == 0) { print "SELECTED"; } ?> >Tab</option> <option value="1" <?php if ($separator == 1) { print "SELECTED"; } ?> >Zarez</option></select><br/><br/> <input type="submit" value=" Dodaj "> </form></p> <?php } else { ?> <p><hr/></p> <p><b>Masovni unos zadaća NIJE MOGUĆ</b><br/> Najprije kreirajte zadaću koristeći formular iznad</p> <?php } /* // IMPORT ZADAĆA IZ MOODLA //Prikupljanje id-a moodle predmeta iz zamger baze radi poredjenja $q200 = myquery("SELECT moodle_id FROM moodle_predmet_id WHERE predmet='$predmet'"); if ($conf_moodle && mysql_num_rows($q200)>0) { $id_predmeta_value = mysql_result($q200,0,0); // Ima li zadaća u Moodlu? $moodle_con = $__lv_connection; if (!$conf_moodle_reuse_connection) { // Pravimo novu konekciju za moodle, kod iz dbconnect2() u libvedran if (!($moodle_con = mysql_connect($conf_moodle_dbhost, $conf_moodle_dbuser, $conf_moodle_dbpass))) { biguglyerror(mysql_error()); exit; } if (!mysql_select_db($conf_moodle_db, $moodle_con)) { biguglyerror(mysql_error()); exit; } if ($conf_use_mysql_utf8) { mysql_set_charset("utf8",$moodle_con); } } $q300 = mysql_query("SELECT itemname FROM $conf_moodle_db.$conf_moodle_prefix"."grade_items WHERE itemmodule='assignment' AND itemtype='mod'", $moodle_con) or die ("Greska u upitu 300: " .mysql_error()); // Ako nema, ne ispisujemo ništa if (mysql_num_rows($q300)<1) return; $za_value = mysql_fetch_array($q300); print genform("POST"); ?> <p><hr/></p> <h4>Import svih zadaća iz Moodle-a</h4> <p>Klikom na import importuju se sve zadaće za sve studente</p> <p><br/><b>Napomena:</b> Sve zadaće moraju imati ista imena kao u Moodle-u!</p> <input type="hidden" name="akcija" value="import_svih"> <? //Import svih zadaca if ($_POST['akcija'] == "import_svih" && check_csrf_token()) { //Prikupljanje imena zadaca iz Zamger baze $q210 = myquery("SELECT naziv FROM zadaca WHERE predmet='$predmet' AND akademska_godina='$ag'"); if (mysql_num_rows($q210)<1) { niceerror("Nema zadaća u zamgeru"); zamgerlog("predmet pp$predmet ne sadrzi niti jednu zadacu u zamgeru",3); return; } while ($r210 = mysql_fetch_array($q210)) { //Prikupljanje podataka iz Moodle tabele //Prikupljaju se id predmeta, ime zadace i JMBG svih studenata //Posto se pri prikupljanju zadace porede po imenu trebaju imati isti naziv u Moodle-u kao i u Zamgeru $q220 = mysql_query("SELECT c.id, gi.itemname, u.firstname, u.lastname FROM $conf_moodle_db.$conf_moodle_prefix"."grade_grades gg, $conf_moodle_db.$conf_moodle_prefix"."user u, $conf_moodle_db.$conf_moodle_prefix"."grade_items gi, $conf_moodle_db.$conf_moodle_prefix"."course c WHERE gi.itemname = '$r210[0]' AND c.id = '$id_predmeta_value' AND gg.userid=u.id AND gg.itemid=gi.id AND gi.courseid=c.id", $moodle_con) or die ("Greska u upitu 220: " .mysql_error()); if (mysql_num_rows($q220)<1) { niceerror("Nema podataka u Moodle-u"); zamgerlog("Nema podataka u Moodle-u za zadacu $r210[0]",3); return; } //Ubacivanje podataka u zamger tabelu while ($r220 = mysql_fetch_array($q220)) { //$bodovi sadrzi vrijednost zadace iz $row1 za date vrijednosti (trenutni student, trenutna zadaca i trenutni predmet) $q230 = mysql_query("SELECT gg.finalgrade FROM $conf_moodle_db.$conf_moodle_prefix"."grade_grades gg, $conf_moodle_db.$conf_moodle_prefix"."user u, $conf_moodle_db.$conf_moodle_prefix"."grade_items gi, $conf_moodle_db.$conf_moodle_prefix"."course c WHERE gi.itemname='$r220[1]' AND c.id='$r220[0]' AND u.firstname='$r220[2]' AND u.lastname='$r220[3]' AND gg.userid=u.id AND gg.itemid=gi.id AND gi.courseid=c.id", $moodle_con) or die ("Greska u upitu 230: " .mysql_error()); if (mysql_num_rows($q230)<1) { niceerror("Zadaća nema bodova u Moodle-u"); zamgerlog("Zadaca: $r210[0] nema bodova",3); return; } $bodovi_value = mysql_fetch_array($q230); //zadaca_id sadrzi id zadace trenutne vrijednosti u $row1 $q240 = myquery("SELECT z.id FROM zadaca z, moodle_predmet_id p WHERE z.naziv='$r220[1]' AND p.moodle_id='$r220[0]' AND p.predmet=z.predmet"); if (mysql_num_rows($q240)<1) { niceerror("Nema zadaća u zamgeru"); zamgerlog("Predmet $predmet ne sadrzi niti jednu zadacu u zamgeru",3); return; } $zadaca_id_value = mysql_fetch_array($q240); //$student_id vraca id studenta koji se trenutno cita iz $row1 $q250 = myquery("SELECT id FROM osoba WHERE ime='$r220[2]' AND prezime='$r220[3]'"); if (mysql_num_rows($q250)<1) { niceerror("Student ne postoji zamgeru"); zamgerlog("Student $r220[2] $r220[3] ne postoji u zamgeru",3); return; } $student_id_value = mysql_fetch_array($q250); $q260 = "INSERT INTO zadatak (zadaca, redni_broj, student, status, bodova, vrijeme, userid) VALUES ('$zadaca_id_value[0]', '1', '$student_id_value[0]', '5', '$bodovi_value[0]', 'SYSDATE()', '$userid')"; myquery($q260); //upit za dobijanje komponente za zadace $q270 = myquery ("SELECT komponenta FROM zadaca WHERE id=$zadaca_id_value[0]"); if (mysql_num_rows($q270)<1) { niceerror("Nema komponente"); zamgerlog("Nema komponenti u zamgeru",3); return; } $komponenta_value = mysql_fetch_array($q270); // Treba nam ponudakursa za update komponente $q280 = myquery("SELECT sp.predmet FROM student_predmet as sp, ponudakursa as pk WHERE sp.student='$student_id_value[0]' and sp.predmet=pk.id and pk.predmet=$predmet and pk.akademska_godina='$ag'"); $pk_value = mysql_result($q280,0,0); update_komponente($student_id_value[0],$pk_value,$komponenta_value[0]); } } nicemessage("Import uspješan"); zamgerlog("zadace su importovane iz Moodle-a", 2); } ?> <table> <tr> <td><input type="submit" name="sve_zadace" value="Import"><br/></td> </tr> </table> </form> <? // Import pojedinačnih zadaća iz Moodla print genform("POST"); ?> <h4></br>Import zadaća iz Moodle-a sa advanced upload-a</h4> <input type="hidden" name="akcija" value="import_selected"> <input type="hidden" name="moodle_zadace" value="<?=$za_value?>"> <? if ($_POST['akcija'] == "import_selected" && check_csrf_token()) { $q310 = mysql_query("SELECT u.firstname, u.lastname, gi.itemname, gi.grademax FROM $conf_moodle_db.$conf_moodle_prefix"."grade_grades gg, $conf_moodle_db.$conf_moodle_prefix"."user u, $conf_moodle_db.$conf_moodle_prefix"."grade_items gi, $conf_moodle_db.$conf_moodle_prefix"."course c WHERE gi.itemmodule='assignment' AND gi.itemtype='mod' AND c.id = '$id_predmeta_value' AND gg.userid=u.id AND gg.itemid=gi.id AND gi.courseid=c.id", $moodle_con) or die ("Greska u upitu 310: " .mysql_error()); while ($r310 = mysql_fetch_array($q310)) { $q320 = mysql_query("SELECT gg.finalgrade FROM $conf_moodle_db.$conf_moodle_prefix"."grade_grades gg, $conf_moodle_db.$conf_moodle_prefix"."user u, $conf_moodle_db.$conf_moodle_prefix"."grade_items gi, $conf_moodle_db.$conf_moodle_prefix"."course c WHERE gi.itemmodule='assignment' AND c.id='$id_predmeta_value' AND u.firstname='$r310[0]' AND u.lastname='$r310[1]' AND gg.userid=u.id AND gg.itemid=gi.id AND gi.courseid=c.id", $moodle_con) or die ("Greska u upitu 320: " .mysql_error()); if (mysql_num_rows($q320)<1) { niceerror("Zadaća nema bodova u Moodle-u"); zamgerlog("Zadaca: $r310[2] nema bodova",3); return; } $bodovi_value = mysql_fetch_array($q320); $q330 = myquery ("SELECT id FROM komponenta WHERE naziv='Zadace (ETF BSc)'"); if (mysql_num_rows($q330)<1) { niceerror("Nema komponente"); zamgerlog("Nema komponenti u zamgeru",3); return; } $komponenta_value = mysql_fetch_array($q330); $q340 = myquery("SELECT z.id FROM zadaca z, moodle_predmet_id p WHERE z.naziv='$za_value' AND p.moodle_id='$id_predmeta_value' AND p.predmet=z.predmet"); if (mysql_num_rows($q340)<1) { $q350 = myquery ("INSERT INTO zadaca (naziv, predmet, akademska_godina, zadataka, bodova, rok, aktivna, programskijezik, attachment, komponenta, vrijemeobjave) VALUES ('$row1[2]', '$predmet', '$ag', 1, '$r310[3]', 'SYSDATE()', 1, 0, 0, '$komponenta_value[0]', 'SYSDATE()')"); nicemessage("Kreirana nova zadaća '$naziv'"); zamgerlog("kreirana nova zadaca z$edit_zadaca prilikom importa iz Moodla", 2); $q340 = myquery("SELECT z.id FROM zadaca z, moodle_predmet_id p WHERE z.naziv='$za_value' AND p.moodle_id='$id_predmeta_value' AND p.predmet=z.predmet"); } $zadaca_id_value = mysql_fetch_array($q340); $q360 = myquery("SELECT id FROM osoba WHERE ime='$row1[0]' AND prezime='$row1[1]'"); if (mysql_num_rows($q360)<1) { niceerror("Student ne postoji zamgeru"); zamgerlog("Student $row1[2] $row1[3] ne postoji u zamgeru",3); return; } $student_id_value = mysql_fetch_array($q360); $q370 = "INSERT INTO zadatak (zadaca, redni_broj, student, status, bodova, vrijeme, userid) VALUES ('$zadaca_id_value[0]', '1', '$student_id_value[0]', '5', '$bodovi_value[0]', 'SYSDATE()', '$userid')"; myquery($q370); $q380 = myquery("SELECT sp.predmet FROM student_predmet as sp, ponudakursa as pk WHERE sp.student='$student_id_value[0]' and sp.predmet=pk.id and pk.predmet=$predmet and pk.akademska_godina='$ag'"); $pk_value = mysql_result($q380,0,0); update_komponente($student_id_value[0],$pk_value,$komponenta_value[0]); } nicemessage("Import uspješan"); zamgerlog("Zadace su importovane iz Moodle-a", 2); } ?> <table> <tr> <td>Izaberite zadaću: <select name="moodle_zadaca"><? foreach ($za_value as $zaneki) { print "<option value=\"$zaneki\">$zaneki</option>\n"; } ?> </select></td></tr> <tr> <td><input type="submit" name="advanced_zadace" value="Import"><br/></td> </tr> </table> </form> <? // Diskonektujemo moodle if (!$conf_moodle_reuse_connection) { mysql_close($moodle_con); } }*/ }
function db_tablelist() { return db_list('TABLES'); }
function nastavnik_kvizovi() { global $userid, $user_siteadmin; global $_lv_; // Parametri $predmet = intval($_REQUEST['predmet']); $ag = intval($_REQUEST['ag']); // Naziv predmeta $q5 = myquery("select naziv from predmet where id={$predmet}"); if (mysql_num_rows($q5) < 1) { biguglyerror("Nepoznat predmet"); zamgerlog("ilegalan predmet {$predmet}", 3); //nivo 3: greska zamgerlog2("nepoznat predmet", $predmet); return; } $predmet_naziv = mysql_result($q5, 0, 0); // Da li korisnik ima pravo ući u modul? if (!$user_siteadmin) { $q10 = myquery("select nivo_pristupa from nastavnik_predmet where nastavnik={$userid} and predmet={$predmet} and akademska_godina={$ag}"); if (mysql_num_rows($q10) < 1 || mysql_result($q10, 0, 0) == "asistent") { zamgerlog("nastavnik/ispiti privilegije (predmet pp{$predmet})", 3); zamgerlog2("nije nastavnik na predmetu", $predmet, $ag); biguglyerror("Nemate pravo pristupa ovoj opciji"); return; } } ?> <p> </p> <p><h3><?php echo $predmet_naziv; ?> - Kvizovi</h3></p> <p>Napomena: Ovaj modul je još uvijek u fazi razvoja i nije dovoljno testiran. Ne preporučujemo njegovo korištenje.</p> <?php // Akcija - editovanje pitanja if ($_REQUEST['akcija'] == "pitanja") { $kviz = intval($_REQUEST['kviz']); $q200 = myquery("select naziv, predmet, akademska_godina from kviz where id={$kviz}"); if (mysql_num_rows($q200) < 1) { niceerror("Nepostojeći kviz {$kviz}"); zamgerlog("editovanje pitanja: nepostojeci kviz {$kviz}", 3); zamgerlog2("nepostojeci kviz (editovanje pitanja)", $kviz); return; } if (mysql_result($q200, 0, 1) != $predmet || mysql_result($q200, 0, 2) != $ag) { niceerror("Kviz nije sa ovog predmeta"); zamgerlog("editovanje pitanja: kviz {$kviz} nije sa predmeta pp{$predmet} ag{$ag}", 3); zamgerlog2("id kviza i predmeta se ne poklapaju (editovanje pitanja)", $predmet, $ag, $kviz); return; } $naziv_kviza = mysql_result($q200, 0, 0); // Subakcije if ($_REQUEST['subakcija'] == "potvrda_novo" && check_csrf_token()) { $tekst = my_escape($_REQUEST['tekst']); $bodova = floatval(str_replace(',', '.', $_REQUEST['bodova'])); if ($_REQUEST['vidljivo']) { $vidljivo = 1; } else { $vidljivo = 0; } $tip = my_escape($_REQUEST['tip']); $q300 = myquery("insert into kviz_pitanje set kviz={$kviz}, tip='{$tip}', tekst='{$tekst}', bodova={$bodova}, vidljivo={$vidljivo}"); $pitanje = mysql_insert_id(); // Ako je korisnik unosio odgovore prije kreiranja pitanja, njihov id pitanja je 0 $q315 = myquery("update kviz_odgovor set kviz_pitanje={$pitanje} where kviz_pitanje=0"); nicemessage("Pitanje uspješno dodano"); zamgerlog2("dodano pitanje na kviz", $pitanje); ?> <script language="JavaScript"> location.href='?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja&subakcija=izmijeni&pitanje=<?php echo $pitanje; ?> '; </script> <?php return; } if ($_REQUEST['subakcija'] == "potvrda_izmjene" && check_csrf_token()) { $pitanje = intval($_REQUEST['pitanje']); $tekst = my_escape($_REQUEST['tekst']); $bodova = floatval(str_replace(',', '.', $_REQUEST['bodova'])); if ($_REQUEST['vidljivo']) { $vidljivo = 1; } else { $vidljivo = 0; } $tip = my_escape($_REQUEST['tip']); $q320 = myquery("select kviz from kviz_pitanje where id={$pitanje}"); if (mysql_num_rows($q320) == 0) { niceerror("Pitanje je obrisano!"); zamgerlog("potvrda editovanja pitanja: pitanje {$pitanje} ne postoji", 3); zamgerlog2("pitanje na kvizu ne postoji (potvrda editovanja)", $pitanje); return; } if (mysql_result($q320, 0, 0) != $kviz) { niceerror("Pitanje nije sa ovog kviza"); zamgerlog("potvrda editovanja pitanja: pitanje {$pitanje} nije sa kviza {$kviz} (pp{$predmet} ag{$ag})", 3); zamgerlog2("id pitanja i kviza se ne poklapaju (potvrda editovanja)", $pitanje, $kviz); return; } $q330 = myquery("update kviz_pitanje set tekst='{$tekst}', tip='{$tip}', bodova={$bodova}, vidljivo={$vidljivo} where id={$pitanje}"); nicemessage("Pitanje uspješno izmijenjeno"); zamgerlog2("izmijenjeno pitanje na kvizu", $pitanje); ?> <script language="JavaScript"> location.href='?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja&subakcija=izmijeni&pitanje=<?php echo $pitanje; ?> '; </script> <?php return; } if ($_REQUEST['subakcija'] == "obrisi") { // brisanje pitanja - ovdje ce nam trebati potvrda! $pitanje = intval($_REQUEST['pitanje']); $q320 = myquery("select kviz from kviz_pitanje where id={$pitanje}"); if (mysql_num_rows($q320) == 0) { niceerror("Pitanje je već obrisano!"); zamgerlog("potvrda brisanja pitanja: pitanje {$pitanje} ne postoji", 3); zamgerlog2("pitanje ne postoji (potvrda brisanja)", $pitanje); return; } if (mysql_result($q320, 0, 0) != $kviz) { niceerror("Pitanje nije sa ovog kviza"); zamgerlog("potvrda brisanja pitanja: pitanje {$pitanje} nije sa kviza {$kviz} (pp{$predmet} ag{$ag})", 3); zamgerlog2("id pitanja i kviza se ne poklapaju (potvrda brisanja)", $pitanje, $kviz); return; } $q335 = myquery("delete from kviz_odgovor where kviz_pitanje={$pitanje}"); $q336 = myquery("delete from kviz_pitanje where id={$pitanje}"); nicemessage("Pitanje uspješno obrisano"); zamgerlog2("obrisano pitanje sa kviza", $kviz, $pitanje); ?> <script language="JavaScript"> location.href='?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja'; </script> <?php return; } if ($_REQUEST['subakcija'] == "dodaj_odgovor" && check_csrf_token()) { $pitanje = intval($_REQUEST['pitanje']); $tekst = my_escape($_REQUEST['tekst']); if ($_REQUEST['tacan']) { $tacan = 1; } else { $tacan = 0; } if ($pitanje > 0) { $q320 = myquery("select kviz from kviz_pitanje where id={$pitanje}"); if (mysql_num_rows($q320) == 0 || mysql_result($q320, 0, 0) != $kviz) { niceerror("Pitanje nije sa ovog kviza"); zamgerlog("dodavanje odgovora: pitanje {$pitanje} nije sa kviza {$kviz} (pp{$predmet} ag{$ag})", 3); zamgerlog2("id pitanja i kviza se ne poklapaju (dodavanje odgovora)", $pitanje, $kviz); return; } } $q340 = myquery("insert into kviz_odgovor set kviz_pitanje={$pitanje}, tekst='{$tekst}', tacan={$tacan}"); nicemessage("Odgovor uspješno dodan"); zamgerlog2("dodan odgovor na pitanje", mysql_insert_id()); if ($pitanje > 0) { ?> <script language="JavaScript"> location.href='?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja&subakcija=izmijeni&pitanje=<?php echo $pitanje; ?> '; </script> <?php } else { ?> <script language="JavaScript"> location.href='?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja'; </script> <?php } return; } if ($_REQUEST['subakcija'] == "obrisi_odgovor") { // && check_csrf_token()) { $odgovor = intval($_REQUEST['odgovor']); $q350 = myquery("select kp.kviz, kp.id from kviz_pitanje as kp, kviz_odgovor as ko where ko.id={$odgovor} and ko.kviz_pitanje=kp.id"); if (mysql_num_rows($q350) == 0) { // Moguće da je odgovor dat prije pitanja $q355 = myquery("select kviz_pitanje from kviz_odgovor where id={$odgovor}"); if (mysql_num_rows($q355) == 0) { niceerror("Odgovor je već obrisan!"); zamgerlog("brisanje odgovora: odgovor {$odgovor} ne postoji", 3); zamgerlog2("odgovor ne postoji (brisanje odgovora)", $odgovor); return; } } else { if (mysql_result($q350, 0, 0) != $kviz) { niceerror("Odgovor ne postoji ili pitanje nije sa ovog kviza"); zamgerlog("brisanje odgovora: odgovor {$odgovor} nije sa kviza {$kviz} (pp{$predmet} ag{$ag})", 3); zamgerlog2("id odgovora i kviza se ne poklapaju (brisanje odgovora)", $odgovor, $kviz); return; } } $q360 = myquery("delete from kviz_odgovor where id={$odgovor}"); nicemessage("Odgovor uspješno obrisan"); $dodaj = ""; if (mysql_num_rows($q350) != 0) { $dodaj = "&subakcija=izmijeni&pitanje=" . mysql_result($q350, 0, 1); } zamgerlog2("obrisan odgovor sa kviza", $odgovor, $kviz); ?> <script language="JavaScript"> location.href='?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja<?php echo $dodaj; ?> '; </script> <?php return; } if ($_REQUEST['subakcija'] == "toggle_tacnost") { // && check_csrf_token()) { $odgovor = intval($_REQUEST['odgovor']); $q370 = myquery("select kp.kviz, kp.id, ko.tacan from kviz_pitanje as kp, kviz_odgovor as ko where ko.id={$odgovor} and ko.kviz_pitanje=kp.id"); if (mysql_num_rows($q370) == 0 || mysql_result($q370, 0, 0) != $kviz) { niceerror("Odgovor ne postoji ili pitanje nije sa ovog kviza"); zamgerlog("toggle tacnost: odgovor {$odgovor} nije sa kviza {$kviz} (pp{$predmet} ag{$ag})", 3); zamgerlog2("id odgovora i kviza se ne poklapaju (toggle tacnosti)", $odgovor, $kviz); return; } if (mysql_result($q370, 0, 2) == 1) { $tacan = 0; } else { $tacan = 1; } $q380 = myquery("update kviz_odgovor set tacan={$tacan} where id={$odgovor}"); nicemessage("Odgovor proglašen za (ne)tačan"); zamgerlog2("odgovor proglasen za (ne)tacan", $odgovor, $tacan); ?> <script language="JavaScript"> location.href='?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja&subakcija=izmijeni&pitanje=<?php echo mysql_result($q370, 0, 1); ?> '; </script> <?php return; } if ($_REQUEST['subakcija'] == "kopiraj_pitanja" && check_csrf_token()) { $drugi_kviz = intval($_REQUEST['_lv_column_kviz']); $q740 = myquery("SELECT naziv FROM kviz WHERE id={$drugi_kviz}"); // Dozvoljavamo kopiranje sa kviza sa drugog predmeta!? if (mysql_num_rows($q740) == 0) { niceerror("Nepoznat kviz"); zamgerlog2("nepoznat ID kviza", $drugi_kviz); return; } $q700 = myquery("SELECT id, tip, tekst, bodova, vidljivo FROM kviz_pitanje WHERE kviz={$drugi_kviz}"); while ($r700 = mysql_fetch_row($q700)) { $staro_pitanje = $r700[0]; $tekst = mysql_real_escape_string($r700[2]); $q710 = myquery("INSERT INTO kviz_pitanje SET kviz={$kviz}, tip='{$r700['1']}', tekst='{$tekst}', bodova={$r700['3']}, vidljivo={$r700['4']}"); $novo_pitanje = mysql_insert_id(); // Kreiranje odgovora na pitanje $q720 = myquery("SELECT tekst, tacan, vidljiv FROM kviz_odgovor WHERE kviz_pitanje={$staro_pitanje}"); while ($r720 = mysql_fetch_row($q720)) { $tekst = mysql_real_escape_string($r720[0]); $q730 = myquery("INSERT INTO kviz_odgovor SET kviz_pitanje={$novo_pitanje}, tekst='{$tekst}', tacan={$r720['1']}, vidljiv={$r720['2']}"); } } nicemessage("Prekopirana pitanja sa kviza"); zamgerlog2("prekopirana pitanja sa kviza", $kviz, $drugi_kviz); ?> <script language="JavaScript"> location.href='?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja'; </script> <?php return; } ?> <h3>Izmjena pitanja za kviz "<?php echo $naziv_kviza; ?> "</h3> <a href="?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &_lv_nav_id=<?php echo $kviz; ?> ">Nazad na podešavanje parametara kviza</a><br><br> <table border="0" cellspacing="1" cellpadding="2"> <tr bgcolor="#999999"> <td><font style="font-family:DejaVu Sans,Verdana,Arial,sans-serif;font-size:11px;color:white;">R.br.</font></td> <td><font style="font-family:DejaVu Sans,Verdana,Arial,sans-serif;font-size:11px;color:white;">Tekst pitanja</font></td> <td><font style="font-family:DejaVu Sans,Verdana,Arial,sans-serif;font-size:11px;color:white;">Odgovori</font></td> <td><font style="font-family:DejaVu Sans,Verdana,Arial,sans-serif;font-size:11px;color:white;">Bodova</font></td> <td><font style="font-family:DejaVu Sans,Verdana,Arial,sans-serif;font-size:11px;color:white;">Vidljivo?</font></td> <td> </td> </tr> <?php $rbr = 0; $q210 = myquery("select id, tip, tekst, bodova, vidljivo from kviz_pitanje where kviz={$kviz}"); while ($r210 = mysql_fetch_row($q210)) { // Pribavljamo odgovore $odgovori = ""; $q220 = myquery("select tekst, tacan from kviz_odgovor where kviz_pitanje={$r210['0']} order by tacan desc"); if (mysql_num_rows($q220) < 1) { $odgovori = "<font color=\"red\">Nema ponuđenih odgovora</font>"; } $broj_tacnih = 0; while ($r220 = mysql_fetch_row($q220)) { $odgovori .= "'{$r220['0']}'"; if ($r220[1] == 1) { $odgovori .= " (*)"; $broj_tacnih++; } $odgovori .= ", "; } if (mysql_num_rows($q220) > 0 && $broj_tacnih == 0) { $odgovori = "<font color=\"red\">Nije ponuđen tačan odgovor</font><br>\n" . $odgovori; } else { if (mysql_num_rows($q220) > 0 && $r210[1] == 'mcma' && $broj_tacnih == 1) { $odgovori = "<font color=\"red\">Ponuđen je samo jedan tačan odgovor</font><br>\n" . $odgovori; } } $vidljivo = "NE"; if ($r210[4] == 1) { $vidljivo = "DA"; } $rbr++; ?> <tr> <td><?php echo $rbr; ?> </td> <td><?php echo $r210[2]; ?> </td> <td><?php echo $odgovori; ?> </td> <td><?php echo $r210[3]; ?> </td> <td><?php echo $vidljivo; ?> </td> <td><a href="?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja&subakcija=obrisi&pitanje=<?php echo $r210[0]; ?> ">Obriši</a> * <a href="?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja&subakcija=izmijeni&pitanje=<?php echo $r210[0]; ?> ">Izmijeni</a></td> </tr> <?php } print "</table>\n<br><br>\n"; if (mysql_num_rows($q210) == 0) { print genform("POST"); ?> <input type="hidden" name="subakcija" value="kopiraj_pitanja"> <p>Kopiraj pitanja sa kviza:<?php $_lv_["where:predmet"] = $predmet; $_lv_["where:akademska_godina"] = $ag; print db_dropdown("kviz"); ?> <input type="submit" value=" Kreni "> </p></form><?php } if ($_REQUEST['subakcija'] == "izmijeni") { ?> <a href="?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja">Dodaj novo pitanje</a><br><br> <a name="izmjena"></a> <b>Izmjena pitanja</b><br> <?php $pitanje = intval($_REQUEST['pitanje']); $q230 = myquery("select kviz, tip, tekst, bodova, vidljivo from kviz_pitanje where id={$pitanje}"); if (mysql_num_rows($q230) < 1) { niceerror("Nepostojeće pitanje {$pitanje}"); zamgerlog("editovanje pitanja: nepostojece pitanje {$pitanje}", 3); zamgerlog2("nepostojece pitanje (editovanje pitanja)", $pitanje); return; } if (mysql_result($q230, 0, 0) != $kviz) { niceerror("Pitanje nije sa ovog kviza"); zamgerlog("editovanje pitanja: pitanje {$pitanje} nije sa kviza {$kviz} (pp{$predmet} ag{$ag})", 3); zamgerlog2("id pitanja i kviza se ne poklapaju (editovanje pitanja)", $pitanje, $kviz); return; } $tip = mysql_result($q230, 0, 1); $tekst = mysql_result($q230, 0, 2); $bodova = mysql_result($q230, 0, 3); if (mysql_result($q230, 0, 4) == 1) { $vidljivo = "CHECKED"; } else { $vidljivo = ""; } $subakcija = "potvrda_izmjene"; } else { print "<b>Dodajte novo pitanje</b><br>\n"; $tekst = $vidljiv = ""; $bodova = $pitanje = 0; $tip = "mcsa"; $subakcija = "potvrda_novo"; } unset($_REQUEST['subakcija']); unset($_GET['subakcija']); ?> <?php echo genform("POST"); ?> <input type="hidden" name="subakcija" value="<?php echo $subakcija; ?> "> <input type="hidden" name="pitanje" value="<?php echo $pitanje; ?> "> <table border="0"> <tr><td>Tekst pitanja:</td><td><input type="text" size="50" name="tekst" value="<?php echo $tekst; ?> "></td></tr> <tr><td>Bodova:</td><td><input type="text" size="5" name="bodova" value="<?php echo $bodova; ?> "></td></tr> <tr><td>Tip pitanja:</td><td> <select name="tip"> <option value="mcsa" <?php if ($tip == "mcsa") { print "SELECTED"; } ?> >MCSA</option> <option value="mcma" <?php if ($tip == "mcma") { print "SELECTED"; } ?> >MCMA</option> <option value="tekstualno" <?php if ($tip == "tekstualno") { print "SELECTED"; } ?> >Tekstualno</option> </select> <a href="#" onclick="javascript:window.open('legenda-pitanja.html','blah6','width=320,height=300');">Legenda tipova pitanja</a> </td></tr> <tr><td align="right"><input type="checkbox" name="vidljivo" value="1" <?php echo $vidljivo; ?> ></td><td>Pitanje vidljivo</td></tr> </table> <br>Ponuđeni odgovori:<br> <ul> <?php $q240 = myquery("select id, tekst, tacan, vidljiv from kviz_odgovor where kviz_pitanje={$pitanje}"); if (mysql_num_rows($q240) == 0) { print "<li>Do sada nije unesen nijedan odgovor</li>\n"; } while ($r240 = mysql_fetch_row($q240)) { print "<li>"; if ($r240[3] == 0) { print "<font color=\"#AAAAAA\">"; } print $r240[1]; if ($r240[2] == 1) { print " (TAČAN)"; $toggle_link = "Proglasi za netačan"; } else { $toggle_link = "Proglasi za tačan"; } if ($r240[3] == 0) { print "</font> - nevidljiv"; } ?> - <a href="?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja&subakcija=obrisi_odgovor&odgovor=<?php echo $r240[0]; ?> ">Obriši</a> - <a href="?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja&subakcija=toggle_tacnost&odgovor=<?php echo $r240[0]; ?> "><?php echo $toggle_link; ?> </a></li> <?php } ?> </ul> <input type="submit" value="Promjena pitanja"><br> </form> <br> Dodajte odgovor na ovo pitanje:<br> <?php echo genform("POST"); ?> <input type="hidden" name="subakcija" value="dodaj_odgovor"> <input type="hidden" name="pitanje" value="<?php echo $pitanje; ?> "> Tekst odgovora: <input type="text" name="tekst" size="50"><br> <input type="checkbox" name="tacan" value="1"> Tačan<br> <input type="submit" value="Dodaj"><br> </form> <?php return; } // Akcija - statistički pregled rezultata kviza if ($_REQUEST['akcija'] == "rezultati") { $kviz = intval($_REQUEST['kviz']); $q600 = myquery("select naziv, predmet, akademska_godina, broj_pitanja, prolaz_bodova from kviz where id={$kviz}"); if (mysql_num_rows($q600) < 1) { niceerror("Nepostojeći kviz {$kviz}"); zamgerlog("editovanje pitanja: nepostojeci kviz {$kviz}", 3); zamgerlog2("nepostojeci kviz (editovanje pitanja)", $kviz); return; } if (mysql_result($q600, 0, 1) != $predmet || mysql_result($q600, 0, 2) != $ag) { niceerror("Kviz nije sa ovog predmeta"); zamgerlog("editovanje pitanja: kviz {$kviz} nije sa predmeta pp{$predmet} ag{$ag}", 3); zamgerlog2("id kviza i predmeta se ne poklapaju (editovanje pitanja)", $predmet, $ag, $kviz); return; } $naziv_kviza = mysql_result($q600, 0, 0); $max_bodova = mysql_result($q600, 0, 3); $prolaz_bodova = mysql_result($q600, 0, 4); $broj_bodova = array(); $ukupno = $max_broj = $ukupno_prolaz = 0; for ($i = 0; $i <= $max_bodova; $i++) { $q620 = myquery("SELECT COUNT(*) FROM kviz_student WHERE kviz={$kviz} AND dovrsen=1 AND bodova>={$i} AND bodova<" . ($i + 1)); $broj_bodova[$i] = mysql_result($q620, 0, 0); $ukupno += $broj_bodova[$i]; if ($broj_bodova[$i] > $max_broj) { $max_broj = $broj_bodova[$i]; } if ($i >= $prolaz_bodova) { $ukupno_prolaz += $broj_bodova[$i]; } } $q630 = myquery("SELECT COUNT(*) FROM kviz_student WHERE kviz={$kviz} AND dovrsen=0"); $nedovrsenih = mysql_result($q630, 0, 0); ?> <p>Popunilo kviz: <b><?php echo $ukupno; ?> </b> studenata<br /> Nisu dovršili popunjavanje kviza: <b><?php echo $nedovrsenih; ?> </b> studenata<br /> Ostvarilo prolazne bodove: <b><?php echo $ukupno_prolaz; ?> </b> studenata (<?php echo procenat($ukupno_prolaz, $ukupno); ?> )</p> <h3><?php echo $naziv_kviza; ?> </h3> <h4>Distribucija bodova</h4> <div id="grafik"> <div style="width:300px;height:200px;margin:5px;"> <?php foreach ($broj_bodova as $bod => $broj) { if ($broj == 0) { $broj_pixela_print = 170; } else { $broj_pixela = $broj / $max_broj * 200; $broj_pixela_print = intval(200 - $broj_pixela); } if ($bod < $prolaz_bodova) { $boja = "red"; } else { $boja = "green"; } ?> <div style="width:45px; height:200px; background:<?php echo $boja; ?> ;margin-left:5px;float:left;"> <div style="width:45px;height:<?php echo $broj_pixela_print; ?> px;background:white;"> </div> <span style="color:white;font-size: 25px; text-align: center; "> <?php echo $bod; ?> </span> </div> <?php } ?> </div> <div style="width:300px;height:50px;margin:5px;"> <?php foreach ($broj_bodova as $bod => $broj) { ?> <div style="width:45px; margin-left:5px; text-align: center; float:left; "> <?php echo $broj; ?> (<?php echo procenat($broj, $ukupno); ?> ) </div> <?php } ?> </div> </div> <?php // Statistika pitanja ?> <h3>Statistika pitanja</h3> <table border="1" style="border-collapse:collapse"> <tr><th>Pitanje</th><th>Uk. odgovora</th><th>Tačnih</th></tr> <?php $q640 = myquery("SELECT id, tekst, ukupno, tacnih FROM kviz_pitanje WHERE kviz={$kviz} ORDER BY tacnih/ukupno"); while ($r640 = mysql_fetch_row($q640)) { $id_pitanja = $r640[0]; $pitanje = $r640[1]; if (strlen($pitanje) > 60) { $skr_pitanje = mb_substr($pitanje, 0, 50) . "..."; } else { $skr_pitanje = $pitanje; } $odgovora = $r640[2]; $tacnih = $r640[3]; ?> <tr> <td title="<?php echo $pitanje; ?> "> <a href="?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja&subakcija=izmijeni&pitanje=<?php echo $id_pitanja; ?> #izmjena"><?php echo $skr_pitanje; ?> </a></td> <td><?php echo $odgovora; ?> </td> <td><?php echo $tacnih; ?> (<?php echo procenat($tacnih, $odgovora); ?> )</td> </tr> <?php } ?> </table> <?php return; } // Kopiranje kvizova sa prošlogodišnjeg predmeta if ($_REQUEST['akcija'] === "prosla_godina" && strlen($_POST['nazad']) < 1) { $old_ag = $ag - 1; // Ovo je po definiciji prošla godina $greska = false; $q499 = myquery("SELECT naziv FROM akademska_godina WHERE id={$old_ag}"); if (mysql_num_rows($q499) == 0) { niceerror("Nije pronađena prošla akademska godina."); zamgerlog("nije pronadjena akademska godina {$old_ag}"); zamgerlog2("nije pronadjena akademska godina", $old_ag); $greska = true; } if (!$greska) { $q500 = myquery("SELECT naziv FROM kviz WHERE predmet={$predmet} AND akademska_godina={$old_ag}"); if (mysql_num_rows($q500) == 0) { niceerror("Prošle godine nije bio definisan nijedan kviz"); zamgerlog("prosle godine nije bio definisan nijedan kviz {$predmet} {$old_ag}"); zamgerlog2("prosle godine nije bio definisan nijedan kviz", $predmet, $old_ag); $greska = true; } } if (!$greska && $_REQUEST['potvrda'] === "potvrdjeno" && check_csrf_token()) { $q510 = myquery("SELECT id, naziv, vrijeme_pocetak, vrijeme_kraj, ip_adrese, prolaz_bodova, broj_pitanja, trajanje_kviza, aktivan FROM kviz WHERE predmet={$predmet} AND akademska_godina={$old_ag}"); while ($r510 = mysql_fetch_row($q510)) { // Kreiranje novog kviza $stari_kviz = $r510[0]; print "<p>Kopiram kviz {$r510['1']}...</p>"; $naziv = mysql_real_escape_string($r510[1]); $q520 = myquery("INSERT INTO kviz SET naziv='{$naziv}', predmet={$predmet}, akademska_godina={$ag}, vrijeme_pocetak='{$r510['2']}', vrijeme_kraj='{$r510['3']}', ip_adrese='{$r510['4']}', prolaz_bodova={$r510['5']}, broj_pitanja={$r510['6']}, trajanje_kviza={$r510['7']}, aktivan={$r510['8']}"); $novi_kviz = mysql_insert_id(); // Kreiranje pitanja $q530 = myquery("SELECT id, tip, tekst, bodova, vidljivo FROM kviz_pitanje WHERE kviz={$stari_kviz}"); while ($r530 = mysql_fetch_row($q530)) { $staro_pitanje = $r530[0]; $tekst = mysql_real_escape_string($r530[2]); $q540 = myquery("INSERT INTO kviz_pitanje SET kviz={$novi_kviz}, tip='{$r530['1']}', tekst='{$tekst}', bodova={$r530['3']}, vidljivo={$r530['4']}"); $novo_pitanje = mysql_insert_id(); // Kreiranje odgovora na pitanje $q550 = myquery("SELECT tekst, tacan, vidljiv FROM kviz_odgovor WHERE kviz_pitanje={$staro_pitanje}"); while ($r550 = mysql_fetch_row($q550)) { $tekst = mysql_real_escape_string($r550[0]); $q560 = myquery("INSERT INTO kviz_odgovor SET kviz_pitanje={$novo_pitanje}, tekst='{$tekst}', tacan={$r550['1']}, vidljiv={$r550['2']}"); } } } nicemessage("Kopiranje završeno!"); print "<a href=\"?sta=nastavnik/kvizovi&predmet={$predmet}&ag={$ag}\">Povratak na stranicu kvizova</a>\n"; return; } else { if (!$greska) { nicemessage("Kopiram sljedeće kvizove iz akademske " . mysql_result($q499, 0, 0) . ". godine."); print "\n<ul>\n"; while ($r500 = mysql_fetch_row($q500)) { print "<li>{$r500['0']}</li>\n"; } print "</ul>\n"; print genform("POST"); ?> <input type="hidden" name="potvrda" value="potvrdjeno"> <p>Da li ste sigurni?</p> <p><input type="submit" name="nazad" value=" Nazad "> <input type="submit" value=" Potvrda"></p> </form> <?php } } return; } // Korektno brisanje kviza if ($_REQUEST['_lv_action_delete']) { $kviz = intval($_REQUEST['_lv_column_id']); $q200 = myquery("select naziv, predmet, akademska_godina from kviz where id={$kviz}"); if (mysql_num_rows($q200) < 1) { niceerror("Nepostojeći kviz {$kviz}"); zamgerlog("brisanje kviza: nepostojeci kviz {$kviz}", 3); zamgerlog2("nepostojeci kviz (brisanje kviza)", $kviz); return; } if (mysql_result($q200, 0, 1) != $predmet || mysql_result($q200, 0, 2) != $ag) { niceerror("Kviz nije sa ovog predmeta"); zamgerlog("brisanje kviza: kviz {$kviz} nije sa predmeta pp{$predmet} ag{$ag}", 3); zamgerlog2("id kviza i predmeta se ne poklapaju (brisanje kviza)", $predmet, $ag, $kviz); return; } $q400 = myquery("select id from kviz_pitanje where kviz={$kviz}"); // Brisemo odgovore while ($r400 = mysql_fetch_row($q400)) { $q410 = myquery("delete from kviz_odgovor where kviz_pitanje={$r400['0']}"); } $q420 = myquery("delete from kviz_pitanje where kviz={$kviz}"); $q430 = myquery("delete from kviz_student where kviz={$kviz}"); // db_form() će pobrisati stavku iz tabele kviz zamgerlog2("obrisan kviz", $predmet, $ag, $kviz); } // Provjeravamo da li je raspon dobro unesen if (($_REQUEST['_lv_action'] == "edit" || $_REQUEST['_lv_action'] == "add") && !$_REQUEST['_lv_action_delete']) { $ip_adresa_losa = false; if ($_REQUEST['_lv_action'] == "edit") { $id_kviza = intval($_REQUEST['_lv_column_id']); // Dodajemo logging zamgerlog("izmijenjen kviz {$id_kviza} (pp{$predmet})", 2); zamgerlog2("izmijenjen kviz", $id_kviza); } else { $labgrupa = intval($_REQUEST['_lv_column_labgrupa']); $naziv = my_escape($_REQUEST['_lv_column_naziv']); $pb = floatval($_REQUEST['_lv_column_prolaz_bodova']); $q100 = myquery("select id from kviz where predmet={$predmet} and akademska_godina={$ag} and naziv='{$naziv}' and labgrupa={$labgrupa} and prolaz_bodova={$pb}"); $id_kviza = mysql_result($q100, 0, 0); zamgerlog("dodan novi kviz {$id_kviza} (pp{$predmet})", 2); zamgerlog2("dodan kviz", $id_kviza); } $ip_adrese = $_REQUEST['_lv_column_ip_adrese']; foreach (explode(",", $ip_adrese) as $blok) { if (strstr($blok, "/")) { // blok adresa u CIDR formatu list($baza, $maska) = explode("/", $blok); if ($baza != long2ip(ip2long($baza))) { $ip_adresa_losa = true; break; } if ($maska != intval($maska)) { $ip_adresa_losa = true; break; } if ($maska < 1 || $maska > 32) { $ip_adresa_losa = true; break; } } else { if (strstr($blok, "-")) { // raspon adresa sa crticom list($pocetak, $kraj) = explode("-", $blok); if ($pocetak != long2ip(ip2long($pocetak))) { $ip_adresa_losa = true; break; } if ($kraj != long2ip(ip2long($kraj))) { $ip_adresa_losa = true; break; } } else { // pojedinačna adresa if ($blok != long2ip(ip2long($blok))) { $ip_adresa_losa = true; break; } } } } // Vraćamo se na editovanje lošeg kviza if ($ip_adresa_losa) { $_REQUEST['_lv_nav_id'] = $id_kviza; $_GET['_lv_nav_id'] = $id_kviza; $_POST['_lv_nav_id'] = $id_kviza; niceerror("Neispravan format IP adrese"); ?> <p>Raspon IP adresa treba biti u jednom od formata:<br> - CIDR format (npr. 123.45.67.89/24)<br> - raspon početak-kraj sa crticom (npr. 123.45.67.89-123.45.67.98)<br> - pojedinačna adresa<br> Takođe možete navesti više raspona ili pojedinačnih adresa razdvojenih zarezom.</p> <?php } } // Spisak postojećih kvizova $_lv_["where:predmet"] = $predmet; $_lv_["where:akademska_godina"] = $ag; $_lv_["new_link"] = "Unos novog kviza"; print "Odaberite neki od postojećih kvizova koji želite administrirati:<br/>\n"; print db_list("kviz"); $q1000 = myquery("SELECT COUNT(*) FROM kviz WHERE predmet={$predmet} AND akademska_godina={$ag}"); if (mysql_result($q1000, 0, 0) == 0) { print "<p><a href=\"?sta=nastavnik/kvizovi&predmet={$predmet}&ag={$ag}&akcija=prosla_godina\">Prekopiraj kvizove sa prošle akademske godine</a></p>\n"; } print "<hr>\n"; $kviz = intval($_REQUEST['_lv_nav_id']); if ($kviz > 0) { ?> <h3>Izmjena kviza</h3> <ul> <li><a href="?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=pitanja">Izmijenite pitanja na kvizu</a></li> <li><a href="?sta=nastavnik/kvizovi&predmet=<?php echo $predmet; ?> &ag=<?php echo $ag; ?> &kviz=<?php echo $kviz; ?> &akcija=rezultati">Rezultati kviza (do sada poslani odgovori)</a></li> </ul> <?php } else { ?> <h3>Kreiranje novog kviza</h3> <p>Unesite podatke o novom kvizu koji želite kreirati:</p><br> <?php } $_lv_["label:vrijeme_pocetak"] = "Početak"; $_lv_["label:vrijeme_kraj"] = "Kraj"; $_lv_["label:labgrupa"] = "Samo za studente iz grupe"; $_lv_["label:ip_adrese"] = "Ograniči na IP adrese"; $_lv_["label:prolaz_bodova"] = "Minimum bodova za prolaz"; $_lv_["label:trajanje_kviza"] = "Trajanje kviza (u sekundama)"; $_lv_["hidden:predmet"] = 1; $_lv_["hidden:akademska_godina"] = 1; print db_form("kviz", "kvizform"); // Markiramo loše polje if ($ip_adresa_losa) { ?> <script> var element = document.getElementsByName('_lv_column_ip_adrese'); element[0].style.backgroundColor = "#FF9999"; element[0].focus(); element[0].select(); </script> <?php } }