773 lines
31 KiB
PHP
773 lines
31 KiB
PHP
<?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;
|
|
use AppSettings;
|
|
|
|
|
|
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()
|
|
{
|
|
|
|
// 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=".AppSettings::getInstance()->getSetting('google-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(){
|
|
|
|
$recaptchaResponse = $_POST['g-recaptcha-response'];
|
|
$request = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".AppSettings::getInstance()->getSetting('google-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;
|
|
}
|
|
} |