<?php
/***************************************
* Description:
* Autor: Robert Šmalc
* Created date: 12.02.2016
*****************************************/
namespace App\Controllers;
use App\Controllers\FindController as Find;
use App\Models\Model;
use Cache;
use enkaParameters;
use SurveyInfo;
use SurveyMissingValues;
use Common;
use Mobile_Detect;
class CheckController extends Controller
{
public function __construct()
{
parent::getGlobalVariables();
parent::getAllVariables();
}
/************************************************
* Get instance
************************************************/
private static $_instance;
public static function getInstance()
{
if (self::$_instance)
return self::$_instance;
return new CheckController();
}
private function refreshVariables()
{
return parent::getAllVariables();
}
/**
* @desc preveri ali so na trenutni grupi prikazana vprasanja (zaradi branchinga)
*/
public function checkGrupa()
{
$sql = sisplet_query("SELECT id FROM srv_spremenljivka WHERE gru_id = '" . get('grupa') . "' ORDER BY vrstni_red");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
while ($row = mysqli_fetch_array($sql)) {
if ($this->checkSpremenljivka($row['id']))
return true;
}
return false;
}
/**
* @desc preveri ali je spremenljivka vidna (zaradi branchinga) (oz. lahko je nastavljena vidnost samo administratorju)
*/
public function checkSpremenljivka($spremenljivka, $isTestData=false)
{
$checkSpremenljivka = get('checkSpremenljivka');
if (array_key_exists($spremenljivka, $checkSpremenljivka)) {
return $checkSpremenljivka[$spremenljivka];
}
$row = Model::select_from_srv_spremenljivka($spremenljivka);
// ce vprasanje ni vidno ali ce uporabnik nima dostopa do vprasanja
if ($row['visible'] == 0 || !((self::$admin_type <= $row['dostop'] && self::$admin_type >= 0) || (self::$admin_type == -1 && $row['dostop'] == 4))) {
return save('checkSpremenljivka[' . $spremenljivka . ']', false, 1);
}
// Pri testnih podatkih ne upostevamo ifov, ker drugace nic ne napolni
if(!$isTestData){
$sql1 = sisplet_query("SELECT parent FROM srv_branching WHERE element_spr = '$spremenljivka'");
if (!$sql1) echo mysqli_error($GLOBALS['connect_db']);
$row1 = mysqli_fetch_array($sql1);
if (!$this->checkIf($row1['parent']))
return save('checkSpremenljivka[' . $spremenljivka . ']', false, 1);
}
return save('checkSpremenljivka[' . $spremenljivka . ']', true, 1);
}
/**
* @desc preveri ali se elementi v podanem IFu prikazejo ali ne
*/
public function checkIf($if)
{
if ($if == 0) return true;
$checkIf = get('checkIf');
if (array_key_exists($if, $checkIf)) {
return $checkIf[$if];
}
// preverimo po strukturi navzgor
$sql = sisplet_query("SELECT parent FROM srv_branching WHERE element_if = '$if'");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
$row = mysqli_fetch_array($sql);
if (!$this->checkIf($row['parent'])) {
return save('checkIf[' . $if . ']', false, 1);
}
$sql = sisplet_query("SELECT * FROM srv_if WHERE id = '$if'");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
$row = mysqli_fetch_array($sql);
// ce je IF oznacen da se vedno prikaze
if ($row['enabled'] == 1)
return save('checkIf[' . $if . ']', true, 1);
// ce je IF oznacen da se nikoli ne prikaze
if ($row['enabled'] == 2)
return save('checkIf[' . $if . ']', false, 1);
// ce je IF oznacen kot blok, potem se vedno prikaze
if ($row['tip'] == 1)
return save('checkIf[' . $if . ']', true, 1);
$eval = "if (";
//$sql = sisplet_query("SELECT * FROM srv_condition WHERE if_id = '$if' ORDER BY vrstni_red ASC");
$sql = Cache::srv_condition($if);
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
$i = 0;
// zgeneriramo pogoje z oklepaji, ki jih potem spustimo skozi eval
while ($row = mysqli_fetch_array($sql)) {
if ($i++ != 0)
if ($row['conjunction'] == 0)
$eval .= ' && ';
else
$eval .= ' || ';
if ($row['negation'] == 1)
$eval .= ' ! ';
for ($i = 1; $i <= $row['left_bracket']; $i++)
$eval .= ' ( ';
if ($this->checkCondition($row['id']))
$eval .= ' true ';
else
$eval .= ' false ';
for ($i = 1; $i <= $row['right_bracket']; $i++)
$eval .= ' ) ';
}
$eval .= ") return true; else return false; ";
// ne glih best practice, ampak takle mamo...
$eval = @eval($eval);
if ($eval === true)
return save('checkIf[' . $if . ']', true, 1);
return save('checkIf[' . $if . ']', false, 1);
}
/**
* @desc preveri podani condition
*/
public function checkCondition($condition)
{
$sql = sisplet_query("SELECT * FROM srv_condition WHERE id = '$condition'");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
$row = mysqli_fetch_array($sql);
// obicne spremenljivke
if ($row['spr_id'] > 0) {
$row2 = Model::select_from_srv_spremenljivka($row['spr_id']);
// radio, checkbox, dropdown
if ($row2['tip'] <= 3) {
$sql3 = sisplet_query("SELECT * FROM srv_condition_vre c, srv_data_vrednost" . get('db_table') . " v
WHERE c.cond_id='$condition' AND c.vre_id=v.vre_id
AND v.spr_id='$row[spr_id]' AND usr_id='" . get('usr_id') . "'");
// Dodatno preverjanje ce imamo pogoj -1
$sql3b = sisplet_query("SELECT * FROM srv_condition_vre WHERE cond_id='$condition' AND vre_id='-1'");
$sql4b = sisplet_query("SELECT * FROM srv_data_vrednost" . get('db_table') . " WHERE spr_id='$row[spr_id]' AND usr_id='" . get('usr_id') . "'");
if ($row['operator'] == 0 && mysqli_num_rows($sql3) == 0 && mysqli_num_rows($sql3b) == 0)
return false;
elseif ($row['operator'] == 0 && mysqli_num_rows($sql3b) > 0 && mysqli_num_rows($sql4b) > 0)
return false;
elseif ($row['operator'] == 1 && mysqli_num_rows($sql3) > 0)
return false;
elseif ($row['operator'] == 1 && mysqli_num_rows($sql3b) > 0 && mysqli_num_rows($sql4b) == 0)
return false;
// multigrid
} elseif ($row2['tip'] == 6 || $row2['tip'] == 16) {
// tabela radio (brez dvojne tabele - ki gre v checkgrid)
if ($row2['tip'] == 6 && $row2['enota'] != 3) {
$sql3 = sisplet_query("SELECT * FROM srv_condition_grid c, srv_data_grid" . get('db_table') . " d
WHERE c.cond_id='$condition' AND d.spr_id='$row[spr_id]'
AND c.grd_id=d.grd_id AND d.usr_id='" . get('usr_id') . "' AND d.vre_id='$row[vre_id]'");
// Dodatno preverjanje ce imamo pogoj -1
$sql3b = sisplet_query("SELECT * FROM srv_condition_grid WHERE cond_id='$condition' AND grd_id='-1'");
$sql4b = sisplet_query("SELECT * FROM srv_data_grid" . get('db_table') . " WHERE spr_id='$row[spr_id]' AND vre_id='$row[vre_id]' AND usr_id='" . get('usr_id') . "'");
} // tabela checkboxov
else {
$sql3 = sisplet_query("SELECT * FROM srv_condition_grid c, srv_data_checkgrid" . get('db_table') . " d
WHERE c.cond_id='$condition' AND d.spr_id='$row[spr_id]'
AND c.grd_id=d.grd_id AND d.usr_id='" . get('usr_id') . "' AND d.vre_id='$row[vre_id]'");
// Dodatno preverjanje ce imamo pogoj -1
$sql3b = sisplet_query("SELECT * FROM srv_condition_grid WHERE cond_id='$condition' AND grd_id='-1'");
$sql4b = sisplet_query("SELECT * FROM srv_data_checkgrid" . get('db_table') . " WHERE spr_id='$row[spr_id]' AND vre_id='$row[vre_id]' AND usr_id='" . get('usr_id') . "'");
}
if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
if ($row['operator'] == 0 && !mysqli_num_rows($sql3) > 0 && !mysqli_num_rows($sql3b) > 0)
return false;
elseif ($row['operator'] == 0 && mysqli_num_rows($sql3b) > 0 && mysqli_num_rows($sql4b) > 0)
return false;
elseif ($row['operator'] == 1 && !mysqli_num_rows($sql3) == 0)
return false;
elseif ($row['operator'] == 1 && mysqli_num_rows($sql3b) > 0 && mysqli_num_rows($sql4b) == 0)
return false;
} elseif ($row2['tip'] == 19 || $row2['tip'] == 20) {
$sql3 = sisplet_query("SELECT text FROM srv_data_textgrid" . get('db_table') . " WHERE spr_id='$row[spr_id]' AND vre_id='$row[vre_id]' AND usr_id='" . get('usr_id') . "' AND grd_id='$row[grd_id]'");
if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
$row3 = mysqli_fetch_array($sql3);
if ($row['operator'] == 0 && !($row3['text'] == $row['text']))
return false;
elseif ($row['operator'] == 1 && !($row3['text'] != $row['text']))
return false;
elseif ($row['operator'] == 2 && !($row3['text'] < $row['text']))
return false;
elseif ($row['operator'] == 3 && !($row3['text'] <= $row['text']))
return false;
elseif ($row['operator'] == 4 && !($row3['text'] > $row['text']))
return false;
elseif ($row['operator'] == 5 && !($row3['text'] >= $row['text']))
return false;
// textbox
} elseif ($row2['tip'] == 21) {
$sql3 = sisplet_query("SELECT text FROM srv_data_text" . get('db_table') . " WHERE spr_id='$row[spr_id]' AND vre_id='$row[vre_id]' AND usr_id='" . get('usr_id') . "'");
if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
$row3 = mysqli_fetch_array($sql3);
if ($row['operator'] <= 5) {
if ($row['operator'] == 0 && !($row3['text'] == $row['text']))
return false;
elseif ($row['operator'] == 1 && !($row3['text'] != $row['text']))
return false;
// length
} else {
if ($row['operator'] == 6 && !(strlen($row3['text']) == $row['text']))
return false;
elseif ($row['operator'] == 7 && !(strlen($row3['text']) < $row['text']))
return false;
elseif ($row['operator'] == 8 && !(strlen($row3['text']) > $row['text']))
return false;
}
// vsota
} elseif ($row2['tip'] == 18) {
$sql3 = sisplet_query("SELECT text FROM srv_data_text" . get('db_table') . " WHERE spr_id='$row[spr_id]' AND vre_id='$row[vre_id]' AND usr_id='" . get('usr_id') . "'");
if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
$row3 = mysqli_fetch_array($sql3);
if ($row['operator'] == 0 && !($row3['text'] == $row['text']))
return false;
elseif ($row['operator'] == 1 && !($row3['text'] != $row['text']))
return false;
elseif ($row['operator'] == 2 && !($row3['text'] < $row['text']))
return false;
elseif ($row['operator'] == 3 && !($row3['text'] <= $row['text']))
return false;
elseif ($row['operator'] == 4 && !($row3['text'] > $row['text']))
return false;
elseif ($row['operator'] == 5 && !($row3['text'] >= $row['text']))
return false;
// razvrscanje
} elseif ($row2['tip'] == 17) {
$sql3 = sisplet_query("SELECT * FROM srv_condition_grid c, srv_data_rating d
WHERE c.cond_id='$condition' AND d.spr_id='$row[spr_id]'
AND d.vre_id='$row[vre_id]' AND d.usr_id='" . get('usr_id') . "' AND d.vrstni_red=c.grd_id");
if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
if ($row['operator'] == 0 && !mysqli_num_rows($sql3) > 0)
return false;
elseif ($row['operator'] == 1 && !mysqli_num_rows($sql3) == 0)
return false;
// number
} else {
if ($row['grd_id'] == 0) $text = 'text';
else $text = 'text2';
$sql3 = sisplet_query("SELECT " . $text . " AS text FROM srv_data_text" . get('db_table') . " WHERE spr_id='$row[spr_id]' AND usr_id='" . get('usr_id') . "'");
if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
$row3 = mysqli_fetch_array($sql3);
if ($row['operator'] == 0 && !($row3['text'] == $row['text']))
return false;
elseif ($row['operator'] == 1 && !($row3['text'] != $row['text']))
return false;
elseif ($row['operator'] == 2 && !($row3['text'] < $row['text']))
return false;
elseif ($row['operator'] == 3 && !($row3['text'] <= $row['text']))
return false;
elseif ($row['operator'] == 4 && !($row3['text'] > $row['text']))
return false;
elseif ($row['operator'] == 5 && !($row3['text'] >= $row['text']))
return false;
}
// recnum
} elseif ($row['spr_id'] == -1) {
$sqlu = sisplet_query("SELECT recnum FROM srv_user WHERE id = '" . get('usr_id') . "'");
$rowu = mysqli_fetch_array($sqlu);
if (!($rowu['recnum'] % $row['modul'] == $row['ostanek']))
return false;
// calculations
} elseif ($row['spr_id'] == -2) {
$calculation = $this->checkCalculation($row['id']);
if ($row['operator'] == 0 && !($calculation == $row['text']))
return false;
elseif ($row['operator'] == 1 && !($calculation != $row['text']))
return false;
elseif ($row['operator'] == 2 && !($calculation < $row['text']))
return false;
elseif ($row['operator'] == 3 && !($calculation <= $row['text']))
return false;
elseif ($row['operator'] == 4 && !($calculation > $row['text']))
return false;
elseif ($row['operator'] == 5 && !($calculation >= $row['text']))
return false;
// kvote
} elseif ($row['spr_id'] == -3) {
$quota = $this->checkQuota($row['id']);
if ($row['operator'] == 0 && !($quota == $row['text']))
return false;
elseif ($row['operator'] == 1 && !($quota != $row['text']))
return false;
elseif ($row['operator'] == 2 && !($quota < $row['text']))
return false;
elseif ($row['operator'] == 3 && !($quota <= $row['text']))
return false;
elseif ($row['operator'] == 4 && !($quota > $row['text']))
return false;
elseif ($row['operator'] == 5 && !($quota >= $row['text']))
return false;
// naprava
} elseif ($row['spr_id'] == -4) {
if (in_array($row['text'], array('0','1','2','3'))){
// Star nacin detekcije - vedno vezan na prvi prihod, po novem detektiramo vsakic posebej
/*$sqlU = sisplet_query("SELECT device FROM srv_user WHERE id='".get('usr_id')."'");
$rowU = mysqli_fetch_array($sqlU);
if (!($rowU['device'] == $row['text']))
return false;*/
$device = 0;
$useragent = $_SERVER['HTTP_USER_AGENT'];
if ($useragent != '' && get_cfg_var('browscap')) {
$browser_detect = get_browser($useragent, true);
$detect = New Mobile_Detect();
$detect->setUserAgent($useragent);
// Detect naprave (pc, mobi, tablet, robot)
if ($detect->isMobile()) {
if ($detect->isTablet())
$device = 2;
else
$device = 1;
}
elseif ($browser_detect['crawler'] == 1){
$device = 3;
}
}
if (!($device == $row['text']))
return false;
}
}
return true;
}
/**
* @desc izracuna kalkulacijo in vrne rezultat
*/
public function checkCalculation($condition)
{
$sql = sisplet_query("SELECT * FROM srv_calculation WHERE cnd_id = '$condition' ORDER BY vrstni_red ASC");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
$i = 0;
$expression = '';
while ($row = mysqli_fetch_array($sql)) {
if ($i++ != 0)
if ($row['operator'] == 0)
$expression .= ' + ';
elseif ($row['operator'] == 1)
$expression .= ' - ';
elseif ($row['operator'] == 2)
$expression .= ' * ';
elseif ($row['operator'] == 3)
$expression .= ' / ';
for ($i = 1; $i <= $row['left_bracket']; $i++)
$expression .= ' ( ';
// spremenljivke
if ($row['spr_id'] > 0) {
// obicne spremenljivke
if ($row['vre_id'] == 0) {
$row1 = Model::select_from_srv_spremenljivka($row['spr_id']);
if ($row1['tip'] <= 3) { // radio, checkbox, dropdown
$sum = 0;
$sql2 = sisplet_query("SELECT v.variable FROM srv_data_vrednost" . get('db_table') . " d, srv_vrednost v WHERE d.vre_id=v.id AND d.spr_id='$row1[id]' AND d.usr_id='" . get('usr_id') . "'");
while ($row2 = mysqli_fetch_array($sql2)) { // zanka je zaradi checkboxov
$sum += $row2['variable'];
}
$expression .= $sum;
} elseif ($row1['tip'] == 7 || $row1['tip'] == 22 || $row1['tip'] == 25) { // number, calculation, quota
$sql2 = sisplet_query("SELECT text FROM srv_data_text" . get('db_table') . " WHERE spr_id='$row1[id]' AND usr_id='" . get('usr_id') . "'");
if (!$sql2) echo mysqli_error($GLOBALS['connect_db']);
$row2 = mysqli_fetch_array($sql2);
if ($row2['text'] == '') $row2['text'] = 0;
$expression .= $row2['text'];
} elseif ($row1['tip'] == 8) { // datum
$sql2 = sisplet_query("SELECT text FROM srv_data_text" . get('db_table') . " WHERE spr_id='$row1[id]' AND usr_id='" . get('usr_id') . "'");
if (!$sql2) echo mysqli_error($GLOBALS['connect_db']);
$row2 = mysqli_fetch_array($sql2);
if ($row2['text'] == '') $row2['text'] = 0;
$row2['text'] = ceil(strtotime($row2['text']) / (60 * 60 * 24));
$expression .= $row2['text'];
}
// multigrid in checkbox
} elseif ($row['vre_id'] > 0) {
$row1 = Model::select_from_srv_spremenljivka($row['spr_id']);
// checkbox
if ($row1['tip'] == 2) {
$sum = 0;
$sql2 = sisplet_query("SELECT v.variable FROM srv_data_vrednost" . get('db_table') . " d, srv_vrednost v WHERE d.vre_id=v.id AND d.spr_id='$row1[id]' AND d.usr_id='" . get('usr_id') . "'");
while ($row2 = mysqli_fetch_array($sql2)) { // zanka je zaradi checkboxov
$sum += $row2['variable'];
}
$expression .= $sum;
}
// multigrid
else{
$sql1 = sisplet_query("SELECT g.variable, g.other FROM srv_data_grid" . get('db_table') . " d, srv_grid g WHERE g.id=d.grd_id AND g.spr_id=d.spr_id AND d.spr_id='$row[spr_id]' AND d.vre_id='$row[vre_id]' AND d.usr_id='" . get('usr_id') . "'");
$row1 = mysqli_fetch_array($sql1);
// Pri multigridih se missingi pri kalkulacijah stejejo kot 0 (in ne -99, -98...)
if ($row1['other'] < 0)
$row1['variable'] = 0;
$expression .= $row1['variable'];
}
}
// konstante
} elseif ($row['spr_id'] == -1) {
$expression .= $row['number'];
}
for ($i = 1; $i <= $row['right_bracket']; $i++)
$expression .= ' ) ';
}
$expression = 'return ' . $expression . ';';
return eval($expression);
}
/**
* @desc izracuna kvoto in vrne rezultat
*/
public function checkQuota($condition)
{
$sql = sisplet_query("SELECT * FROM srv_quota WHERE cnd_id = '$condition' ORDER BY vrstni_red ASC");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
$i = 0;
$expression = '';
while ($row = mysqli_fetch_array($sql)) {
if ($i++ != 0)
if ($row['operator'] == 0)
$expression .= ' + ';
elseif ($row['operator'] == 1)
$expression .= ' - ';
elseif ($row['operator'] == 2)
$expression .= ' * ';
elseif ($row['operator'] == 3)
$expression .= ' / ';
for ($i = 1; $i <= $row['left_bracket']; $i++)
$expression .= ' ( ';
// spremenljivke
if ($row['spr_id'] > 0) {
$row1 = Model::select_from_srv_spremenljivka($row['spr_id']);
// radio, checkbox, multigrid
if ($row['vre_id'] > 0) {
// multigrid
if ($row1['tip'] == 6)
$sql2 = sisplet_query("SELECT COUNT(*) AS quota
FROM srv_data_grid" . get('db_table') . " d, srv_grid g, srv_user u
WHERE g.id=d.grd_id AND g.spr_id=d.spr_id AND d.spr_id='$row[spr_id]' AND d.vre_id='$row[vre_id]' AND d.grd_id='$row[grd_id]' AND d.usr_id=u.id AND u.deleted='0'");
// multicheckbox
elseif ($row1['tip'] == 16)
$sql2 = sisplet_query("SELECT COUNT(*) AS quota
FROM srv_data_checkgrid" . get('db_table') . " d, srv_grid g, srv_user u
WHERE g.id=d.grd_id AND g.spr_id=d.spr_id AND d.spr_id='$row[spr_id]' AND d.vre_id='$row[vre_id]' AND d.grd_id='$row[grd_id]' AND d.usr_id=u.id AND u.deleted='0'");
// radio, select
elseif ($row1['tip'] == 1 || $row1['tip'] == 3)
$sql2 = sisplet_query("SELECT COUNT(*) AS quota
FROM srv_data_vrednost" . get('db_table') . " d, srv_user u
WHERE d.vre_id='$row[vre_id]' AND d.spr_id='$row1[id]' AND d.usr_id=u.id AND u.deleted='0'");
// checkbox
elseif ($row1['tip'] == 2)
$sql2 = sisplet_query("SELECT COUNT(*) AS quota
FROM srv_data_vrednost" . get('db_table') . " d, srv_user u
WHERE d.vre_id='$row[vre_id]' AND d.spr_id='$row1[id]' AND d.usr_id=u.id AND u.deleted='0'");
$row2 = mysqli_fetch_array($sql2);
$expression .= $row2['quota'];
}
} // konstante (statusi...)
elseif ($row['spr_id'] < 0) {
$status = '';
// Kvota ustreznih odgovorov
if ($row['spr_id'] == -7) {
$status .= ' AND (last_status=\'5\' OR last_status=\'6\') AND lurker=\'0\' ';
} // Kvota posameznih statusov
elseif ($row['spr_id'] > -7) {
$status .= ' AND last_status=\'' . -$row['spr_id'] . '\' ';
}
$sqlU = sisplet_query("SELECT COUNT(id) FROM srv_user WHERE ank_id='".get('anketa')."' ".$status." AND deleted='0'");
$rowU = mysqli_fetch_array($sqlU);
$expression .= $rowU['COUNT(id)'];
}
for ($i = 1; $i <= $row['right_bracket']; $i++)
$expression .= ' ) ';
}
$expression = 'return ' . $expression . ';';
return eval($expression);
}
/************************************************
* Preveri userja, ki se je vrnil in ga (če je tako nastavljeno) preusmeri na stran, kjer je končal
************************************************/
public function check_cookie_return()
{
$row = \SurveyInfo::getInstance()->getSurveyRow();
// EVALVACIJA - nastavljeno je da ga preusmerimo na stran kjer je koncal - za studentsko evalvacijo vedno preusmerjamo z ustreznimi parametri - ZAENKRAT NI VKLOPLJENO
if (Common::checkModule('evalvacija') == '1' && false) {
$sql1 = sisplet_query("SELECT g.id FROM srv_user_grupa" . get('db_table') . " u, srv_grupa g WHERE u.gru_id=g.id AND u.usr_id='" . get('usr_id') . "' ORDER BY g.vrstni_red DESC LIMIT 1");
if (!$sql1) echo mysqli_error($GLOBALS['connect_db']);
$row1 = mysqli_fetch_array($sql1);
save('grupa', $row1['id']);
$grupa = Find::getInstance()->findNextGrupa();
if ($grupa > 0) {
$params = $_SERVER['QUERY_STRING'];
setcookie('ref', get('anketa')); // cookie z referalom (da se ne sprozi redirect zaradi referala pri ?code= )
return header("Location: " . \SurveyInfo::getSurveyLink() . "&grupa=$grupa&" . $params . get('cookie_url') . "&c");
die();
}
}
// nastavljeno je da ga preusmerimo na stran kjer je koncal
if ($row['cookie_return'] == 1) {
$sql1 = sisplet_query("SELECT g.id FROM srv_user_grupa" . get('db_table') . " u, srv_grupa g WHERE u.gru_id=g.id AND u.usr_id='" . get('usr_id') . "' ORDER BY g.vrstni_red DESC LIMIT 1");
if (!$sql1) echo mysqli_error($GLOBALS['connect_db']);
if(mysqli_num_rows($sql1) > 0){
$row1 = mysqli_fetch_array($sql1);
save('grupa', $row1['id']);
$grupa = Find::getInstance()->findNextGrupa();
if ($grupa > 0) {
setcookie('ref', get('anketa')); // cookie z referalom (da se ne sprozi redirect zaradi referala pri ?code= )
return header("Location: " . \SurveyInfo::getSurveyLink() . "&grupa=$grupa" . (isset($_GET['language']) ? '&language=' . $_GET['language'] : '') . (isset($_GET['skupina']) ? '&skupina=' . $_GET['skupina'] : '') . get('cookie_url') . "&c");
die();
}
}
}
}
/**
* preveri, ce je katera od spremenljivk CAPTCHA in preveri, ce je pravilno vnesena
* treba extra preverjat, ce je JS izklopljen
*
*/
public function check_captcha()
{
global $secret_captcha;
// Ce urejamo podatke v admin vmesniku ne preverjamo nicesar
if(isset($_GET['t']) && $_GET['t'] == 'postprocess' || get('grupa') == '0' || get('grupa') == ''){
return;
}
$sql = sisplet_query("SELECT id, params FROM srv_spremenljivka WHERE gru_id='" . get('grupa') . "' AND visible='1' AND tip='21' ORDER BY vrstni_red ASC");
while ($row = mysqli_fetch_array($sql)) {
$spremenljivkaParams = new enkaParameters($row['params']);
$captcha = ($spremenljivkaParams->get('captcha') ? $spremenljivkaParams->get('captcha') : 0);
if ($captcha == 1) {
$recaptchaResponse = $_POST['g-recaptcha-response'];
$request = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret_captcha."&response=".$recaptchaResponse);
// zdaj pa zabeleži mail (pred pošiljanjem)
// zdaj pa še v bazi tistih ki so se ročno dodali
if(strstr($request,"true")){
//
}
else {
echo '<p>Wrong CAPTCHA code.</p><p><a href="#" onclick="javascript:history.go(-1)">Back</a></p>';
die();
}
}
}
}
/**
* preveri, ce preveri, ce je CAPTCHA pravilno vnesena pri uvodu (ce imamo staticen uvod s preverjanjem captche)
*
*/
public function check_captcha_intro(){
global $secret_captcha;
$recaptchaResponse = $_POST['g-recaptcha-response'];
$request = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret_captcha."&response=".$recaptchaResponse);
if(strstr($request,"true")){
//
}
else {
header('Location: ' . SurveyInfo::getSurveyLink(false, false).'?captcha_error=1');
die();
}
}
public function checkMissingForSpremenljivka($spremenljivka, $loop_id)
{
$missing = false;
$smv = new SurveyMissingValues(get('anketa'));
$missing_values = $smv->GetUnsetValuesForSurvey();
if (count($missing_values) > 0) {
$qry = sisplet_query("SELECT id FROM srv_vrednost WHERE spr_id='$spremenljivka' AND other IN ('" . implode('\',\'', array_keys($missing_values)) . "')");
$missing_vrednosti = array();
while ($row = mysqli_fetch_assoc($qry)) {
$missing_vrednosti[] = $row[id];
}
# pogledamo ali imamo kak zapis v srv_data_vrednost. potem je to najbrž missing
$srv_data_vrednost = array();
$sql2_c = sisplet_query("SELECT vre_id FROM srv_data_vrednost" . get('db_table') . " WHERE spr_id='$spremenljivka' AND usr_id='" . get('usr_id') . "' AND loop_id $loop_id");
while ($row2_c = mysqli_fetch_array($sql2_c)) {
#samo če je bil izbran missing -99 ne vem, -98 drugo .....
if (in_array($row2_c['vre_id'], $missing_vrednosti) && $missing == false) {
$missing = $row2_c['vre_id'];
}
}
}
return $missing;
}
// Preverimo, ce je uporabnik ze bil na strani
public function check_subsequent_visit(){
$sql = sisplet_query("SELECT g.id
FROM srv_user_grupa".get('db_table')." u, srv_grupa g
WHERE u.gru_id=g.id AND u.usr_id='".get('usr_id')."' AND g.id='".get('grupa')."'
");
if(mysqli_num_rows($sql) > 0)
return true;
else
return false;
}
}