631 lines
23 KiB
PHP
631 lines
23 KiB
PHP
<?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'){
|
|
$sql2 = sisplet_query("SELECT * FROM eval_data_splosna WHERE student='$student' AND ank_id='$fak_anketa_splosna'");
|
|
// 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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
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')");
|
|
|
|
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';
|
|
}
|
|
|
|
// 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'");
|
|
|
|
// 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
|
|
elseif($ank_type == 'anketa_splosna' || $ank_type == 'anketa_podipl' || $ank_type == 'anketa_podipl2'){
|
|
|
|
$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));
|
|
|
|
// Redirectamo na ustrezeno anketo
|
|
header('Location: https://anketa.uni-lj.si/student/a/'.$ank_id.'?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:<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;
|
|
}
|
|
}
|
|
|
|
?>
|