0 && $fak_active == 1){ $rowStudent = mysqli_fetch_array($sqlStudent); // Preverjanje ce je student izpolnil vse ankete PRED in se lahko prijavi na izpit if($ank_type == 'anketa_pred'){ foreach ($predmeti AS $predmet) { if($predmet != ''){ // Zlepimo predmet in nacin studija (redni/izredni) $predmet_izvedba = $predmet.'_'.$rowStudent['nacin_studija']; $sql = sisplet_query("SELECT * FROM eval_data_anketaPred WHERE student='$student' AND predmet='$predmet_izvedba'"); if (mysqli_num_rows($sql) == 0) { $sqlp = sisplet_query("SELECT DISTINCT idp, predmet, praksa FROM eval_izvajalec WHERE idp='$predmet' AND nacin_studija='".$rowStudent['nacin_studija']."' AND fakulteta='".$fakulteta."'"); if(mysqli_num_rows($sqlp) > 0){ $rowp = mysqli_fetch_array($sqlp); // Ce je praksa 1 ali 2 potem preskocimo anketo PRED, ker nimamo kontaktnih ur if($rowp['praksa'] == '1' || $rowp['praksa'] == '2'){ $return['predmeti_reseni'] .= $predmet.'x'; } else{ if ($return['msg'] != '') $return['msg'] .= ', '; $rowp['predmet'] = str_replace("ccc", "č", str_replace("sss", "š", str_replace("zzz", "ž", str_replace("CCC", "Č", str_replace("SSS", "Š", str_replace("ZZZ", "Ž", str_replace("cc_cc", "ć", $rowp['predmet'])))) ) ) ); $return['msg'] .= ''.$rowp['predmet'].''; // Zabelezimo vse predmete za katere se ni resil ankete $return['predmeti_nereseni'] .= $predmet.'x'; $return['prijava'] = false; } } // Ce slucajno nimamo predmeta v nasi bazi ga oznacimo kot da ga je ze resil (ker drugace bi reseval prazno anketo) else{ $return['predmeti_reseni'] .= $predmet.'x'; } } else{ // Zabelezimo vse predmete za katere je ze resil anketo $return['predmeti_reseni'] .= $predmet.'x'; } } } // Pobrisemo odvecen zadnji separator if(substr($return['predmeti_reseni'], -1) == 'x') $return['predmeti_reseni'] = substr($return['predmeti_reseni'], 0, -1); if(substr($return['predmeti_reseni'], -1) == 'x') $return['predmeti_nereseni'] = substr($return['predmeti_nereseni'], 0, -1); if ($return['msg'] != '') $return['msg'] = 'Pred prijavo morate izpolniti še ankete po zaključku predavanj za naslednje predmete: '. $return['msg'].''; } // Preverjanje ce je student izpolnil vse ankete PO in se lahko prijavi na izpit/visji letnik? elseif($ank_type == 'anketa_po'){ foreach ($predmeti AS $predmet) { if($predmet != ''){ // Zlepimo predmet in nacin studija (redni/izredni) $predmet_izvedba = $predmet.'_'.$rowStudent['nacin_studija']; $sql = sisplet_query("SELECT * FROM eval_data_anketaPo WHERE student='$student' AND predmet='$predmet_izvedba'"); if (mysqli_num_rows($sql) == 0) { $sqlp = sisplet_query("SELECT DISTINCT idp, predmet FROM eval_izvajalec WHERE idp='$predmet' AND nacin_studija='".$rowStudent['nacin_studija']."' AND fakulteta='".$fakulteta."'"); if(mysqli_num_rows($sqlp) > 0){ $rowp = mysqli_fetch_array($sqlp); if ($return['msg'] != '') $return['msg'] .= ', '; $rowp['predmet'] = str_replace("ccc", "č", str_replace("sss", "š", str_replace("zzz", "ž", str_replace("CCC", "Č", str_replace("SSS", "Š", str_replace("ZZZ", "Ž", str_replace("cc_cc", "ć", $rowp['predmet'])))) ) ) ); $return['msg'] .= ''.$rowp['predmet'].''; // Zabelezimo vse predmete za katere se ni resil ankete $return['predmeti_nereseni'] .= $predmet.'x'; $return['prijava'] = false; } // Ce slucajno nimamo predmeta v nasi bazi ga oznacimo kot da ga je ze resil (ker drugace bi reseval prazno anketo) else{ $return['predmeti_reseni'] .= $predmet.'x'; } } else{ // Zabelezimo vse predmete za katere je ze resil anketo $return['predmeti_reseni'] .= $predmet.'x'; } } } // Pobrisemo odvecen zadnji separator if(substr($return['predmeti_reseni'], -1) == 'x') $return['predmeti_reseni'] = substr($return['predmeti_reseni'], 0, -1); if(substr($return['predmeti_reseni'], -1) == 'x') $return['predmeti_nereseni'] = substr($return['predmeti_nereseni'], 0, -1); if ($return['msg'] != '') $return['msg'] = 'Pred prijavo morate izpolniti še ankete po opravljanju izpita za naslednje predmete: '. $return['msg'].''; } // Preverjanje ce je student izpolnil SPLOSNO ANKETO in se lahko prijavi v visji letnik elseif($ank_type == 'anketa_splosna'){ // Ce anketa ni aktivna, se vedno vraca true da se lahko prijavlja $fak_anketa_splosna = self::getFaksData($fakulteta, $ank_type); $sqlA = sisplet_query("SELECT id, active FROM srv_anketa WHERE id='$fak_anketa_splosna'"); $rowA = mysqli_fetch_array($sqlA); if($rowA['active'] == '1'){ // Spremenjeno, ker se studentka vpisana na 2 fakulteti hkrati ni mogla prijaviti, ko je na eni izpolnila splosno anketo, na drugi pa se ne //$sql2 = sisplet_query("SELECT * FROM eval_data_splosna WHERE student='$student' AND ank_id='$fak_anketa_splosna'"); $sql2 = sisplet_query("SELECT * FROM eval_data_splosna WHERE student='$student'"); // Po novem za fdv vse anketiramo in ne preverjamo vzorca if (mysqli_num_rows($sql2) == 0 && (self::check_vzorec($student) || $fakulteta == '3000021')) { //if (mysqli_num_rows($sql2) == 0 && self::check_vzorec($student)) { $return['msg'] = 'Pred vnosom vpisnega lista morate izpolniti še anketo o splošnem zadovoljstvu s fakulteto.'; $return['prijava'] = false; } } } // Preverjanje ce je student izpolnil PODIPLOMSKO ANKETO in se lahko prijavi v visji letnik elseif($ank_type == 'anketa_podipl'){ // Ce anketa ni aktivna, se vedno vraca true da se lahko prijavlja $fak_anketa_podipl = self::getFaksData($fakulteta, $ank_type); $sqlA = sisplet_query("SELECT id, active FROM srv_anketa WHERE id='$fak_anketa_podipl'"); $rowA = mysqli_fetch_array($sqlA); if($rowA['active'] == '1'){ // Podiplomska anketa if($rowStudent['letnik'] == '1'){ // Preverimo ce je podiplomski student ze odgovarjal na splosno podiplomsko anketo $sql2 = sisplet_query("SELECT * FROM eval_data_podipl WHERE student='$student'"); if (mysqli_num_rows($sql2) == 0){ $return['msg'] = 'Pred vnosom vpisnega lista morate izpolniti še podiplomsko anketo.'; $return['prijava'] = false; } } // Podiplomska anketa 2 elseif($rowStudent['letnik'] == '2'){ // Preverimo ce je podiplomski student ze odgovarjal na splosno podiplomsko anketo 2 $sql2 = sisplet_query("SELECT * FROM eval_data_podipl2 WHERE student='$student'"); if (mysqli_num_rows($sql2) == 0){ $return['msg'] = 'Pred vnosom vpisnega lista morate izpolniti še podiplomsko anketo 2.'; $return['prijava'] = false; } } // Podiplomska anketa 3 elseif($rowStudent['letnik'] == '3'){ // Preverimo ce je podiplomski student ze odgovarjal na splosno podiplomsko anketo 3 $sql2 = sisplet_query("SELECT * FROM eval_data_podipl3 WHERE student='$student'"); if (mysqli_num_rows($sql2) == 0){ $return['msg'] = 'Pred vnosom vpisnega lista morate izpolniti še podiplomsko anketo 3.'; $return['prijava'] = false; } } } } } return $return; } // Preverimo, ce student pride v vzorec za izvedbo splosne ankete private static function check_vzorec($student){ $sql = sisplet_query("SELECT pre.id_student as student, pre.letnik as letnik, pro.st_letnik as st_letnik FROM eval_student pre, eval_program pro WHERE pre.id_student='$student' AND pre.id_program=pro.id AND pre.letnik>'0'"); if(mysqli_num_rows($sql) > 0){ $row = mysqli_fetch_array($sql); // Zadnja 2 znaka studenteve sifre (md5) spremenimo iz hex v dec $value = hexdec(substr($row['student'], -2)); $value = (int)$value / 255 * 100; // Zracunamo interval v katerega pade student glede na letnik in stevilo letnikov (ce je 1. letnik je med 0 in 25, 2. je med 25 in 50...) $min = 100 / (int)$row['st_letnik'] * ((int)$row['letnik']-1); $max = 100 / (int)$row['st_letnik'] * (int)$row['letnik']; // Ce gre za 1. letnik vzamemo if($row['letnik'] == 1 && $value <= $max) return true; // Ce gre za zadnji letnik elseif($row['letnik'] == $row['st_letnik'] && $value > $min) return true; // Ce gre za vmesni letnik elseif($value > $min && $value <= $max) return true; } return false; } // Izvedba preusmeritve studenta na ustrezno anketo public static function studentRedirect($ank_type){ // Drugace browser cachira in ne prikaze pravilno ce se takoj vrnemo po koncani header("Cache-Control: no-cache, must-revalidate"); // Dekriptiramo parametre in jih zapisemo nazaj v $_REQUEST $params = array(); $params = self::decryptAES($_REQUEST['params'], $testing=false); $fakulteta = trim($params['fakulteta']); $student = trim($params['student']); $student = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $student); if($ank_type == 'anketa_pred' || $ank_type == 'anketa_po') $predmet = (int) $params['predmet']; $ank_id = 0; // Dobimo podatke o studentu in ce je ze resil anketo $finished = false; if($ank_type == 'anketa_pred' || $ank_type == 'anketa_po' || $ank_type == 'anketa_splosna') $sqlStudent = sisplet_query("SELECT * FROM eval_student WHERE id_student='$student'"); else $sqlStudent = sisplet_query("SELECT * FROM eval_student_podipl WHERE id_student='$student' AND (letnik='1' OR letnik='2' OR letnik='3')"); if(mysqli_num_rows($sqlStudent) > 0){ $rowStudent = mysqli_fetch_array($sqlStudent); // Ce imamo slucajno 2 vnosa za istega studenta - je vpisan hkrati na 2 programa if(mysqli_num_rows($sqlStudent) > 1){ $rowStudent2 = mysqli_fetch_array($sqlStudent); } // Zlepimo predmet in nacin studija (redni/izredni) $predmet_izvedba = $predmet.'_'.$rowStudent['nacin_studija']; // Pogledamo ce imamo slucajno podiplomsko anketo 2 if($ank_type == 'anketa_podipl' && $rowStudent['letnik'] == '2'){ $ank_type = 'anketa_podipl2'; } // Pogledamo ce imamo slucajno podiplomsko anketo 3 if($ank_type == 'anketa_podipl' && $rowStudent['letnik'] == '3'){ $ank_type = 'anketa_podipl3'; } // Dobimo id ustrezne ankete $ank_id = self::getFaksData($fakulteta, $ank_type); // Dobimo podatke o resenosti ankete if($ank_type == 'anketa_pred') $sql = sisplet_query("SELECT * FROM eval_data_anketaPred WHERE predmet='$predmet_izvedba' AND student='$student' AND ank_id='$ank_id'"); elseif($ank_type == 'anketa_po') $sql = sisplet_query("SELECT * FROM eval_data_anketaPo WHERE predmet='$predmet_izvedba' AND student='$student' AND ank_id='$ank_id'"); elseif($ank_type == 'anketa_splosna') $sql = sisplet_query("SELECT * FROM eval_data_splosna WHERE student='$student' AND ank_id='$ank_id'"); elseif($ank_type == 'anketa_podipl') $sql = sisplet_query("SELECT * FROM eval_data_podipl WHERE student='$student' AND ank_id='$ank_id'"); elseif($ank_type == 'anketa_podipl2') $sql = sisplet_query("SELECT * FROM eval_data_podipl2 WHERE student='$student' AND ank_id='$ank_id'"); elseif($ank_type == 'anketa_podipl3') $sql = sisplet_query("SELECT * FROM eval_data_podipl3 WHERE student='$student' AND ank_id='$ank_id'"); // Ce ze imamo odgovor studenta v bazi ga ne spustimo naprej if(mysqli_num_rows($sql) > 0) $finished = true; } // Ce sploh ne obstaja student v bazi ga tudi ne spustimo naprej else $finished = true; // Ce imamo ze vnos oz. ne obstaja student v bazi, prikazemo obvestilo in ne pustimo redirecta if($finished){ echo ''."\n"; echo ' Študentska anketa'."\n"; echo ' '."\n"; echo ''."\n"; if($ank_type == 'anketa_pred' || $ank_type == 'anketa_po') echo 'Anketo za ta predmet ste že izpolnili. Hvala za sodelovanje.'; else echo 'Anketo ste že izpolnili. Hvala za sodelovanje.'; die(); } // Zgradimo ustrezen url $request = ''; // Parametri za anketo PRED if($ank_type == 'anketa_pred'){ $i = 1; $sql = sisplet_query("SELECT * FROM eval_izvajalec WHERE idp='".$predmet."' AND nacin_studija='".$rowStudent['nacin_studija']."' AND fakulteta='".$fakulteta."'"); while ($row = mysqli_fetch_array($sql)) { // v csvju mam kot utf8. v bazo dam kot utf8, izpisem kot utf8, pa ne delajo sumniki... zato replacam... $row['predmet'] = str_replace("ccc", "č", str_replace("sss", "š", str_replace("zzz", "ž", str_replace("CCC", "Č", str_replace("SSS", "Š", str_replace("ZZZ", "Ž", str_replace("cc_cc", "ć", $row['predmet'])))) ) ) ); $row['ime_pedagoga'] = str_replace("ccc", "č", str_replace("sss", "š", str_replace("zzz", "ž", str_replace("CCC", "Č", str_replace("SSS", "Š", str_replace("ZZZ", "Ž", str_replace("cc_cc", "ć", $row['ime_pedagoga'])))) ) ) ); // Posebej dodamo samo za FDV (testno v letu 2018/2019) - lahko dodamo kar za vse, itak ce ni sistemske spr. nima veze $ktmin = $row['st_kt'] * 25; $ktmax = $row['st_kt'] * 30; if ($i == 1) $request .= '&sifpredm='.$predmet_izvedba.'&predmet='.urlencode($row['predmet']).'&stkt='.$row['st_kt'].'&ktmin='.$ktmin.'&ktmax='.$ktmax; $request .= '&izvajalec'.$i.'='.urlencode($row['ime_pedagoga']).'&sifizv'.$i.'='.$row['idpedagoga']; $i++; } $request .= '&sifstud='.$student; $request .= '&siffaks='.$fakulteta; // dobimo program studenta na katerega je vpisan $id_prog = $rowStudent['id_program']; $program = $rowStudent['program']; $request .= '&idprog='.$id_prog.'&program='.urlencode($program); if(mysqli_num_rows($sqlStudent) > 1){ $request .= '&idprog2='.$rowStudent2['id_program'].'&program2='.urlencode($rowStudent2['program']); } $request .= '&letnik='.$rowStudent['letnik']; $request .= '&nacinstud='.$rowStudent['nacin_studija']; } // Parametri za anketo PO elseif($ank_type == 'anketa_po'){ $sql = sisplet_query("SELECT * FROM eval_izvajalec WHERE idp='".$predmet."' AND nacin_studija='".$rowStudent['nacin_studija']."' AND fakulteta='".$fakulteta."'"); $row = mysqli_fetch_array($sql); // v csvju mam kot utf8. v bazo dam kot utf8, izpisem kot utf8, pa ne delajo sumniki... zato replacam... $row['predmet'] = str_replace("ccc", "č", str_replace("sss", "š", str_replace("zzz", "ž", str_replace("CCC", "Č", str_replace("SSS", "Š", str_replace("ZZZ", "Ž", str_replace("cc_cc", "ć", $row['predmet'])))) ) ) ); $ktmin = $row['st_kt'] * 25; $ktmax = $row['st_kt'] * 30; $praksa = $row['praksa']; $request .= '&sifpredm='.$predmet_izvedba.'&predmet='.urlencode($row['predmet']).'&stkt='.$row['st_kt'].'&ktmin='.$ktmin.'&ktmax='.$ktmax.'&praksa='.$praksa; $request .= '&sifstud='.$student; $request .= '&siffaks='.$fakulteta; // dobimo program studenta na katerega je vpisan $id_prog = $rowStudent['id_program']; $program = $rowStudent['program']; $request .= '&idprog='.$id_prog.'&program='.urlencode($program); if(mysqli_num_rows($sqlStudent) > 1){ $request .= '&idprog2='.$rowStudent2['id_program'].'&program2='.urlencode($rowStudent2['program']); } $request .= '&letnik='.$rowStudent['letnik']; $request .= '&nacinstud='.$rowStudent['nacin_studija']; } // Parametri za SPLOSNO anketo in za PODIPLOMSKO SPLOSNO anketo elseif($ank_type == 'anketa_splosna' || $ank_type == 'anketa_podipl' || $ank_type == 'anketa_podipl2' || $ank_type == 'anketa_podipl3'){ $request .= '&sifstud='.$student; $request .= '&siffaks='.$fakulteta; $request .= '&idprog='.$rowStudent['id_program'].'&program='.urlencode($rowStudent['program']); // Pri splosni anketi zapisemo tudi letnik in dodaten program (ce obstaja) if($ank_type == 'anketa_splosna'){ if(mysqli_num_rows($sqlStudent) > 1){ $request .= '&idprog2='.$rowStudent2['id_program'].'&program2='.urlencode($rowStudent2['program']); } } $request .= '&letnik='.$rowStudent['letnik']; $request .= '&nacinstud='.$rowStudent['nacin_studija']; } // Se preverimo da imamo vse nujne spremenljivke if($ank_id < 1 || $request == ''){ echo 'Napaka!'; echo '
ID ankete: '.$ank_id; echo '
Parametri: '.$request; die(); } // Encodamo z base64 $request_encoded = urlencode(base64_encode($request)); // Dobimo hash ankete $sqlHash = sisplet_query("SELECT hash FROM srv_anketa WHERE id='".$ank_id."'"); $rowHash = mysqli_fetch_array($sqlHash); // Redirectamo na ustrezeno anketo header('Location: https://anketa.uni-lj.si/student/a/'.$rowHash['hash'].'?enc='.$request_encoded); } // Testiranje kriptiranja parametrov public static function studentTest(){ if(isset($_REQUEST['encrypt']) && $_REQUEST['encrypt'] == '1'){ //$string = 'fakulteta=3000004&student=0001840F06C3752D4F51B58EB5286590&predmet=0517'; //$string = 'fakulteta=3000071&student=0001840F06C3752D4F51B58EB5286590&predmet=1402'; $string = 'fakulteta=3000071&predmet=1511&student=0a25994554e936f9a9a71c07053826fb'; $string = 'fakulteta=3000071&predmet=1511&student=C90BE9EB07C51B1B47A0FE56EA4AAE5F'; $string = 'fakulteta=3000004&student=6b474f63abaa45485a027748017c9b45'; $encryptedString = self::encryptAES($string); echo 'Original:
'; echo $string; echo '

'; echo 'Kripitirano:
'; echo $encryptedString; } else{ // Dekriptiramo parametre in jih zapisemo nazaj v $_REQUEST $params = array(); $params = self::decryptAES($_REQUEST['params'], $testing=true); $fak_id = $params['fakulteta']; // Dobimo id ustrezne ankete $fakulteta = self::getFaksData($fak_id, 'ime'); echo '


'; echo 'FAKULTETA: '.$fakulteta.'

'; echo 'DEKRIPTIRANI PARAMETRI:
'; foreach($params as $key => $param){ echo $key.': '.$param; echo '
'; } } } // Vrne podatek o fakulteti private static function getFaksData($fak_id, $what){ $sql = sisplet_query("SELECT * FROM eval_fakulteta WHERE id='$fak_id'"); if(mysqli_num_rows($sql) > 0){ $row = mysqli_fetch_array($sql); if(isset($row[$what])) return $row[$what]; else return -1; } else return -1; } // Enkripcija stringa - AES256 (CBC mode) public static function encryptAES($stringClear){ // Kljuc v hex pretvorimo v binary //$aes256Key = pack('H*', "7d51622d752a7e2c3952372e422d3f2126247945686150445a25546525"); $aes256Key = pack('H*', "725F826C530E8FC17014AD08A427EE9ACB169204C037278B5D5E5F89F3ED0764"); // Generiramo random iv $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND); $iv = utf8_encode('f23fff7891abcd12'); //echo 'Besedilo: '.$stringClear.'

'; echo 'vektor: '.$iv.'

'; //$xx = unpack('H*', $iv); //var_dump($xx); // Kriptiramo besedilo z AES256 CBC $stringEncrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $aes256Key, $stringClear, MCRYPT_MODE_CBC, $iv); //$xx= htmlspecialchars($stringEncrypted); echo 'kriptirano: '.$stringEncrypted.'

'; //echo htmlspecialchars(utf8_encode($stringEncrypted)).'

'; //$byte_array = unpack('H*', $stringEncrypted); //$hex = $byte_array[1]; //echo $hex; echo 'pripnemo vektor: '.$iv.$stringEncrypted.'

'; // Pripnemo iv in encodamo (base64 in potem se urlencode) $stringEncrypted = urlencode(base64_encode($iv.$stringEncrypted)); echo 'se base64 cez kriptirano besedilo: '.$stringEncrypted.'

'; /*echo 'IV: '.$iv.'
'; echo 'Zacetno besedilo: '.$stringClear.'
'; echo 'Kriptirano besedilo: '.$stringEncrypted.'

';*/ // Dekriptiramo //self::decryptAES($stringEncrypted); return $stringEncrypted; } // Dekripcija stringa public static function decryptAES($stringEncrypted, $testing=false){ // Kljuc v hex pretvorimo v binary //$aes256Key = pack('H*', "7d51622d752a7e2c3952372e422d3f2126247945686150445a25546525"); $aes256Key = pack('H*', "725F826C530E8FC17014AD08A427EE9ACB169204C037278B5D5E5F89F3ED0764"); if($testing){ echo '

Params: '.$stringEncrypted.'
'; echo 'Kljuc: '.unpack('H*',$aes256Key)[1].'
'; } // Decodamo $stringDecrypted = urldecode($stringEncrypted); if($testing){ echo '

'; echo 'Urldecode: '.$stringDecrypted.'
'; } $stringDecrypted = base64_decode($stringEncrypted); if($testing){ echo 'Base64: '.$stringDecrypted.'
'; } // Preberemo iv (prvih 16 znakov) in ga odstranimo od kriptiranega besedila $iv = substr($stringDecrypted, 0, 16); $stringDecrypted = substr($stringDecrypted, 16); if($testing){ echo 'Vektor: '.$iv.'
'; echo 'Kriptiran string: '.$stringDecrypted.'

'; } // Dekripcija besedila $stringDecrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $aes256Key, $stringDecrypted, MCRYPT_MODE_CBC, $iv); if($testing){ echo '

'; echo 'Dekriptiran string: '.$stringDecrypted.'

'; } // Na koncu zapisemo parametre v $_REQUEST (da ni potrebno popravljat v vseh skriptah:)) /*$params = explode("&", $stringDecrypted); foreach($params as $param){ $parameter = explode("=", $param); $_REQUEST[$parameter[0]] = $parameter[1]; }*/ // Na koncu vrnemo vse dekriptirane parametre $params = explode("&", $stringDecrypted); $params_array = array(); foreach($params as $param){ $parameter = explode("=", $param); $params_array[$parameter[0]] = $parameter[1]; } return $params_array; } } ?>