2020-08-14 13:36:36 +02:00
< ? php
//include_once('../../function.php');
class EvalvacijaMain {
// Izvedba ustrezne kontrole za prijavo
public static function studentCheck ( $ank_type ){
$student = $_REQUEST [ 'student' ];
// Anketa PRED in PO
if ( $ank_type == 'anketa_pred' || $ank_type == 'anketa_po' ){
$predmeti_string = $_REQUEST [ 'predmeti' ];
$predmeti = explode ( 'x' , $predmeti_string );
$predmeti = array_map ( 'intval' , $predmeti );
$check = self :: check_prijava ( $ank_type , $student , $predmeti );
$output = array ();
$output [ 'student' ] = $student ;
$output [ 'prijava' ] = $check [ 'prijava' ];
$output [ 'msg' ] = $check [ 'msg' ];
$output [ 'predmeti_reseni' ] = $check [ 'predmeti_reseni' ];
$output [ 'predmeti_nereseni' ] = $check [ 'predmeti_nereseni' ];
}
// SPLOSNA in PODIPLOMSKA anketa
else {
$check = self :: check_prijava ( $ank_type , $student );
$output = array ();
$output [ 'student' ] = $student ;
$output [ 'prijava' ] = $check [ 'prijava' ];
$output [ 'msg' ] = $check [ 'msg' ];
}
// Vrnemo JSON odgovor
echo json_encode ( $output , JSON_UNESCAPED_SLASHES );
}
// Preverimo ce se student lahko prijavi (na izpit oz. v visji letnik - ce je izpolnil ustrezne ankete)
private static function check_prijava ( $ank_type , $student , $predmeti = array ()){
// Preberemo podatke o studentu (da lahko zlepimo nacim studija s predmetom)
if ( $ank_type == 'anketa_pred' || $ank_type == 'anketa_po' ){
$return = array ();
$return [ 'prijava' ] = true ;
$return [ 'msg' ] = '' ;
$return [ 'predmeti_nereseni' ] = '' ;
$return [ 'predmeti_reseni' ] = '' ;
$sqlStudent = sisplet_query ( " SELECT * FROM eval_student WHERE id_student=' $student ' " );
}
elseif ( $ank_type == 'anketa_splosna' ){
$return = array ();
$return [ 'prijava' ] = true ;
$return [ 'msg' ] = '' ;
$sqlStudent = sisplet_query ( " SELECT * FROM eval_student WHERE id_student=' $student ' " );
}
else {
$return = array ();
$return [ 'prijava' ] = true ;
$return [ 'msg' ] = '' ;
$sqlStudent = sisplet_query ( " SELECT * FROM eval_student_podipl WHERE id_student=' $student ' " );
}
// Ce nimamo fakultete oz. ni aktivirana, vedno dovolimo prijavo (vrnemo da je student vse resil)
$fakulteta = isset ( $_REQUEST [ 'fakulteta' ]) ? $_REQUEST [ 'fakulteta' ] : 0 ;
$fak_active = self :: getFaksData ( $fakulteta , 'active' );
// Ce imamo studenta v bazi pustimo naprej preverjanje - drugače vrnemo da je že vse resil
if ( mysqli_num_rows ( $sqlStudent ) > 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: <a href="ankete.asp">' . $return [ 'msg' ] . '</a>' ;
}
// 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: <a href="ankete.asp">' . $return [ 'msg' ] . '</a>' ;
}
// 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' ){
2020-08-27 21:17:36 +02:00
// 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 ' " );
2020-08-14 13:36:36 +02:00
// 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 ;
}
}
2021-07-21 10:09:00 +02:00
// 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 ;
}
}
2020-08-14 13:36:36 +02:00
}
}
}
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
2021-07-21 10:09:00 +02:00
$sqlStudent = sisplet_query ( " SELECT * FROM eval_student_podipl WHERE id_student=' $student ' AND (letnik='1' OR letnik='2' OR letnik='3') " );
2020-08-14 13:36:36 +02:00
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' ;
}
2021-07-21 10:09:00 +02:00
// Pogledamo ce imamo slucajno podiplomsko anketo 3
if ( $ank_type == 'anketa_podipl' && $rowStudent [ 'letnik' ] == '3' ){
$ank_type = 'anketa_podipl3' ;
}
2020-08-14 13:36:36 +02:00
// 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 ' " );
2021-07-21 10:09:00 +02:00
elseif ( $ank_type == 'anketa_podipl3' )
$sql = sisplet_query ( " SELECT * FROM eval_data_podipl3 WHERE student=' $student ' AND ank_id=' $ank_id ' " );
2020-08-14 13:36:36 +02:00
// 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 '<head>' . " \n " ;
echo ' <title>Študentska anketa</title>' . " \n " ;
echo ' <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' . " \n " ;
echo '</head>' . " \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
2021-07-21 10:09:00 +02:00
elseif ( $ank_type == 'anketa_splosna' || $ank_type == 'anketa_podipl' || $ank_type == 'anketa_podipl2' || $ank_type == 'anketa_podipl3' ){
2020-08-14 13:36:36 +02:00
$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 '<br />ID ankete: ' . $ank_id ;
echo '<br />Parametri: ' . $request ;
die ();
}
// Encodamo z base64
$request_encoded = urlencode ( base64_encode ( $request ));
2021-09-30 14:11:09 +02:00
// Dobimo hash ankete
$sqlHash = sisplet_query ( " SELECT hash FROM srv_anketa WHERE id=' " . $ank_id . " ' " );
$rowHash = mysqli_fetch_array ( $sqlHash );
2020-08-14 13:36:36 +02:00
// Redirectamo na ustrezeno anketo
2021-09-30 14:11:09 +02:00
header ( 'Location: https://anketa.uni-lj.si/student/a/' . $rowHash [ 'hash' ] . '?enc=' . $request_encoded );
2020-08-14 13:36:36 +02:00
}
// 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:<br />' ;
echo $string ;
echo '<br /><br />' ;
echo 'Kripitirano:<br />' ;
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 '<br /><br /><br />' ;
echo 'FAKULTETA: ' . $fakulteta . '<br /><br />' ;
echo 'DEKRIPTIRANI PARAMETRI: <br />' ;
foreach ( $params as $key => $param ){
echo $key . ': ' . $param ;
echo '<br />' ;
}
}
}
// 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.'<br><br>';
echo 'vektor: ' . $iv . '<br /><br />' ;
//$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 . '<br><br>' ;
//echo htmlspecialchars(utf8_encode($stringEncrypted)).'<br><br>';
//$byte_array = unpack('H*', $stringEncrypted);
//$hex = $byte_array[1];
//echo $hex;
echo 'pripnemo vektor: ' . $iv . $stringEncrypted . '<br><br>' ;
// Pripnemo iv in encodamo (base64 in potem se urlencode)
$stringEncrypted = urlencode ( base64_encode ( $iv . $stringEncrypted ));
echo 'se base64 cez kriptirano besedilo: ' . $stringEncrypted . '<br><br>' ;
/* echo 'IV: ' . $iv . '<br />' ;
echo 'Zacetno besedilo: ' . $stringClear . '<br />' ;
echo 'Kriptirano besedilo: ' . $stringEncrypted . '<br /><br />' ; */
// 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 '<br /><br />Params: ' . $stringEncrypted . '<br />' ;
echo 'Kljuc: ' . unpack ( 'H*' , $aes256Key )[ 1 ] . '<br />' ;
}
// Decodamo
$stringDecrypted = urldecode ( $stringEncrypted );
if ( $testing ){
echo '<br /><br />' ;
echo 'Urldecode: ' . $stringDecrypted . '<br />' ;
}
$stringDecrypted = base64_decode ( $stringEncrypted );
if ( $testing ){
echo 'Base64: ' . $stringDecrypted . '<br />' ;
}
// 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 . '<br />' ;
echo 'Kriptiran string: ' . $stringDecrypted . '<br><br>' ;
}
// Dekripcija besedila
$stringDecrypted = mcrypt_decrypt ( MCRYPT_RIJNDAEL_128 , $aes256Key , $stringDecrypted , MCRYPT_MODE_CBC , $iv );
if ( $testing ){
echo '<br /><br />' ;
echo 'Dekriptiran string: ' . $stringDecrypted . '<br><br>' ;
}
// 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 ;
}
}
?>