Dopolnjena opomba k nastavitvi kodne tabele za SQL. De-1KAizacija: Ukinjenih nekaj info@1ka.si emailov, odstranjenih nekaj testnih petrovih nastavitev. Tudi lastna instalacija ima pravico do obvestil o grdem početju (phishing ipd). GDPR na 1KA pošljemo samo, če NI lastna instalacija. Dopolnitve za fieldwork delo: - 1ka data izvoz - grupa glede na kodo in ne le kuki Tako lahko anketar nadaljuje z anketiranjem istega respondenta z vnosom iste kode. Prej se je grupa nastavljala le glede na kuki, kar je bilo neuporabno za fieldwork. - skok na isto, ne naslednjo stran na koncu PREJ: izpolnil si 1, 2, 3 in zaprl na 3. strani. 3. stran se ni shranila, ker nisi dal NEXT. NAslednjič ko si odprl isti link, ki nadaljeval na *naslednji* strani (4.) Tako si imel podatke za 1.; 2.; 4.,... stran. ZDAJ: izpolniš 1, 2, 3, zapreš. 3. stran se seveda ni shranila, ker si zaprl. Ko ponovno odpreš anketo, te vrže na ISTO ZADNJO stran - torej tretjo. - možen lokalni dump podatkov iz crontaba (zaščiteno s kodo) - settings.php ima dodano nastavitev kode za dump podatkov. Tega ni smiselno dati v nastavitve, ker se mora poklicati iz cron joba na SERVERJU, tako da mora itak štaufat admin, ki pripravljal laptop. Skripte za terensko združevanje so ločen modul in jih bi porinil v ločenem patchu. POZOR, preveriti je treba še BodyController (ali je bil ugly hack za narobe nastavljeno anketo, ali je bilo kaj drugega). Avtomatsko je namreč disablalo popravljanje ankete anketarjem!
324 lines
11 KiB
PHP
324 lines
11 KiB
PHP
<?php
|
|
/***************************************
|
|
* Description:
|
|
* Autor: Robert Šmalc
|
|
* Created date: 01.03.2016
|
|
*****************************************/
|
|
|
|
namespace App\Controllers;
|
|
|
|
use Cache;
|
|
|
|
class FindController 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 FindController();
|
|
}
|
|
|
|
|
|
/**
|
|
* poisce, ce ima podani element parenta, ki je loop
|
|
*
|
|
*/
|
|
public static function find_parent_loop($element_spr, $element_if = 0)
|
|
{
|
|
$anketa = get('anketa');
|
|
$sql = sisplet_query("SELECT parent FROM srv_branching WHERE element_spr = '$element_spr' AND element_if = '$element_if' AND ank_id='$anketa'");
|
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
|
$row = mysqli_fetch_array($sql);
|
|
|
|
if ($row['parent'] == 0) return 0;
|
|
|
|
$sql = sisplet_query("SELECT id FROM srv_if WHERE id = '$row[parent]' AND tip = '2'");
|
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
|
if (mysqli_num_rows($sql) > 0)
|
|
return $row['parent'];
|
|
else
|
|
return self::find_parent_loop(0, $row['parent']);
|
|
|
|
}
|
|
|
|
/**
|
|
* poisce naslednjo vre_id v loopu
|
|
*
|
|
*/
|
|
public function findNextLoopId($if_id = 0)
|
|
{
|
|
|
|
if ($if_id == 0) {
|
|
$sql = sisplet_query("SELECT if_id FROM srv_loop_data WHERE id='" . get('loop_id') . "'");
|
|
$row = mysqli_fetch_array($sql);
|
|
$if_id = $row['if_id'];
|
|
$loop_id = get('loop_id');
|
|
}
|
|
else
|
|
$loop_id = 0;
|
|
|
|
$sql = sisplet_query("SELECT spr_id, max FROM srv_loop WHERE if_id = '$if_id'");
|
|
$row = mysqli_fetch_array($sql);
|
|
$spr_id = $row['spr_id'];
|
|
$max = $row['max'];
|
|
|
|
$spr = Cache::srv_spremenljivka($spr_id);
|
|
|
|
// Radio, checkbox, sn imena
|
|
if ($spr['tip'] == 2 || $spr['tip'] == 3 || $spr['tip'] == 9) {
|
|
|
|
$data_vrednost = array();
|
|
if ($spr['tip'] == 9)
|
|
$sql1 = sisplet_query("SELECT vre_id FROM srv_data_text" . get('db_table') . " WHERE spr_id='$spr_id' AND usr_id='" . get('usr_id') . "'");
|
|
else
|
|
$sql1 = sisplet_query("SELECT vre_id FROM srv_data_vrednost" . get('db_table') . " WHERE spr_id='$spr_id' AND usr_id='" . get('usr_id') . "'");
|
|
|
|
while ($row1 = mysqli_fetch_array($sql1)) {
|
|
$data_vrednost[$row1['vre_id']] = 1;
|
|
}
|
|
|
|
$vre_id = '';
|
|
$i = 1;
|
|
$sql = sisplet_query("SELECT lv.vre_id, lv.tip FROM srv_loop_vre lv, srv_vrednost v WHERE lv.if_id='$if_id' AND lv.vre_id=v.id ORDER BY v.vrstni_red ASC");
|
|
while ($row = mysqli_fetch_array($sql)) {
|
|
|
|
if ($row['tip'] == 0) { // izbran
|
|
if (isset($data_vrednost[$row['vre_id']])) {
|
|
$vre_id .= ', ' . $row['vre_id'];
|
|
$i++;
|
|
}
|
|
} elseif ($row['tip'] == 1) { // ni izbran
|
|
if (!isset($data_vrednost[$row['vre_id']])) {
|
|
$vre_id .= ', ' . $row['vre_id'];
|
|
$i++;
|
|
}
|
|
} elseif ($row['tip'] == 2) { // vedno
|
|
$vre_id .= ', ' . $row['vre_id'];
|
|
$i++;
|
|
} // nikoli nimamo sploh v bazi, zato ni potrebno nic, ker se nikoli ne prikaze
|
|
|
|
if ($i > $max && $max > 0) break;
|
|
}
|
|
|
|
$vre_id = substr($vre_id, 2);
|
|
if ($vre_id == '')
|
|
return null;
|
|
|
|
$sql = sisplet_query("SELECT l.id FROM srv_loop_data l, srv_vrednost v WHERE l.if_id='$if_id' AND l.id > '$loop_id' AND l.vre_id IN ($vre_id) AND l.vre_id=v.id ORDER BY l.id ASC");
|
|
|
|
|
|
if (!$sql) {
|
|
echo 'err56545' . mysqli_error($GLOBALS['connect_db']);
|
|
die();
|
|
}
|
|
$row = mysqli_fetch_array($sql);
|
|
|
|
if (mysqli_num_rows($sql) > 0)
|
|
return $row['id'];
|
|
else
|
|
return null;
|
|
}
|
|
// Number
|
|
elseif ($spr['tip'] == 7) {
|
|
|
|
$sql1 = sisplet_query("SELECT text FROM srv_data_text" . get('db_table') . " WHERE spr_id='$spr_id' AND usr_id='" . get('usr_id') . "'");
|
|
$row1 = mysqli_fetch_array($sql1);
|
|
|
|
$num = (int)$row1['text'];
|
|
$sql2 = sisplet_query("SELECT id FROM srv_loop_data WHERE if_id='$if_id' AND id <= '$loop_id'");
|
|
if (mysqli_num_rows($sql2) >= $num || (mysqli_num_rows($sql2) >= $max && $max > 0))
|
|
return null;
|
|
|
|
$sql = sisplet_query("SELECT id FROM srv_loop_data WHERE if_id='$if_id' AND id > '$loop_id'");
|
|
$row = mysqli_fetch_array($sql);
|
|
|
|
if (mysqli_num_rows($sql) > 0)
|
|
return $row['id'];
|
|
else
|
|
return null;
|
|
|
|
}
|
|
// Ranking
|
|
elseif ($spr['tip'] == 17) {
|
|
|
|
$data_vrednost = array();
|
|
$sql1 = sisplet_query("SELECT vre_id FROM srv_data_rating WHERE spr_id='$spr_id' AND usr_id='" . get('usr_id') . "' ORDER BY vrstni_red ASC");
|
|
|
|
while ($row1 = mysqli_fetch_array($sql1)) {
|
|
$data_vrednost[$row1['vre_id']] = 1;
|
|
}
|
|
|
|
$vre_id = '';
|
|
$i = 1;
|
|
$sql = sisplet_query("SELECT lv.vre_id, lv.tip FROM srv_loop_vre lv, srv_vrednost v WHERE lv.if_id='$if_id' AND lv.vre_id=v.id ORDER BY v.vrstni_red ASC");
|
|
while ($row = mysqli_fetch_array($sql)) {
|
|
|
|
if ($row['tip'] == 0) { // izbran
|
|
if (isset($data_vrednost[$row['vre_id']])) {
|
|
$vre_id .= ', ' . $row['vre_id'];
|
|
$i++;
|
|
}
|
|
} elseif ($row['tip'] == 1) { // ni izbran
|
|
if (!isset($data_vrednost[$row['vre_id']])) {
|
|
$vre_id .= ', ' . $row['vre_id'];
|
|
$i++;
|
|
}
|
|
} elseif ($row['tip'] == 2) { // vedno
|
|
$vre_id .= ', ' . $row['vre_id'];
|
|
$i++;
|
|
} // nikoli nimamo sploh v bazi, zato ni potrebno nic, ker se nikoli ne prikaze
|
|
|
|
if ($i > $max && $max > 0) break;
|
|
}
|
|
|
|
$vre_id = substr($vre_id, 2);
|
|
if ($vre_id == '')
|
|
return null;
|
|
|
|
|
|
// Ce gre za prvi loop poiscemo ranking odgovor na prvem mestu
|
|
if($loop_id == 0){
|
|
$sql = sisplet_query("SELECT l.id FROM srv_loop_data l, srv_data_rating dr
|
|
WHERE l.if_id='$if_id' AND l.id > '$loop_id' AND l.vre_id IN ($vre_id)
|
|
AND l.vre_id=dr.vre_id AND dr.usr_id='".get('usr_id')."' AND dr.vrstni_red = '1'
|
|
");
|
|
}
|
|
// Ce gre za kasnejsi loop poiscemo naslednji ranking odgovor
|
|
else{
|
|
$sql2 = sisplet_query("SELECT dr.vrstni_red FROM srv_loop_data l, srv_data_rating dr WHERE l.if_id='$if_id' AND l.id='$loop_id' AND dr.vre_id=l.vre_id AND dr.usr_id='".get('usr_id')."'");
|
|
if(mysqli_num_rows($sql2) > 0){
|
|
$row2 = mysqli_fetch_array($sql2);
|
|
|
|
$sql = sisplet_query("SELECT l.id FROM srv_loop_data l, srv_vrednost v, srv_data_rating dr
|
|
WHERE l.if_id='$if_id' AND l.id != '$loop_id' AND l.vre_id IN ($vre_id)
|
|
AND l.vre_id=v.id
|
|
AND dr.vre_id=v.id AND dr.usr_id='".get('usr_id')."' AND dr.vrstni_red > '".$row2['vrstni_red']."'
|
|
ORDER BY dr.vrstni_red ASC
|
|
");
|
|
}
|
|
else
|
|
return null;
|
|
}
|
|
|
|
if (!$sql) {
|
|
echo 'err56545' . mysqli_error($GLOBALS['connect_db']);
|
|
die();
|
|
}
|
|
$row = mysqli_fetch_array($sql);
|
|
|
|
|
|
if (mysqli_num_rows($sql) > 0)
|
|
return $row['id'];
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @desc poisce prejsnjo stran - grupo, 0 pomeni konec
|
|
*/
|
|
public static function findPrevGrupa()
|
|
{
|
|
$anketa = get('anketa');
|
|
$grupa = get('grupa');
|
|
|
|
$sql = sisplet_query("SELECT vrstni_red FROM srv_grupa WHERE id = '$grupa'");
|
|
$row = mysqli_fetch_array($sql);
|
|
$vrstni_red = $row['vrstni_red'];
|
|
|
|
$sql = sisplet_query("SELECT id FROM srv_grupa WHERE ank_id='$anketa' AND vrstni_red<'$vrstni_red' ORDER BY vrstni_red DESC LIMIT 1");
|
|
|
|
// naslednja stran
|
|
if (mysqli_num_rows($sql) > 0) {
|
|
|
|
$row = mysqli_fetch_array($sql);
|
|
return $row['id'];
|
|
|
|
// konec
|
|
} else {
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @desc poisce naslednjo stran - grupo, 0 pomeni konec
|
|
*/
|
|
public function findNextGrupa($gru_id=0)
|
|
{
|
|
//vrstni red trenutne grupe
|
|
if (get('grupa') > 0) {
|
|
$sql = sisplet_query("SELECT vrstni_red FROM srv_grupa WHERE id = '" . get('grupa') . "'");
|
|
$row = mysqli_fetch_array($sql);
|
|
$vrstni_red = $row['vrstni_red'];
|
|
}
|
|
elseif ($gru_id > 0) {
|
|
$sql = sisplet_query("SELECT vrstni_red FROM srv_grupa WHERE id = '" . $gru_id . "'");
|
|
$row = mysqli_fetch_array($sql);
|
|
$vrstni_red = $row['vrstni_red'];
|
|
}
|
|
else {
|
|
$vrstni_red = 0;
|
|
}
|
|
|
|
$sql = sisplet_query("SELECT id FROM srv_grupa WHERE ank_id='" . get('anketa') . "' AND vrstni_red>'$vrstni_red' ORDER BY vrstni_red ASC LIMIT 1");
|
|
|
|
// naslednja stran
|
|
if (mysqli_num_rows($sql) > 0) {
|
|
$row = mysqli_fetch_array($sql);
|
|
return $row['id'];
|
|
}
|
|
// konec
|
|
else {
|
|
return 0;
|
|
}
|
|
}
|
|
/**
|
|
* @desc poisce naslednjo stran - grupo, 0 pomeni konec
|
|
*/
|
|
public function findSameGrupa($gru_id=0)
|
|
{
|
|
//vrstni red trenutne grupe
|
|
if (get('grupa') > 0) {
|
|
$sql = sisplet_query("SELECT vrstni_red FROM srv_grupa WHERE id = '" . get('grupa') . "'");
|
|
$row = mysqli_fetch_array($sql);
|
|
$vrstni_red = $row['vrstni_red'];
|
|
}
|
|
elseif ($gru_id > 0) {
|
|
$sql = sisplet_query("SELECT vrstni_red FROM srv_grupa WHERE id = '" . $gru_id . "'");
|
|
$row = mysqli_fetch_array($sql);
|
|
$vrstni_red = $row['vrstni_red'];
|
|
}
|
|
else {
|
|
$vrstni_red = 0;
|
|
}
|
|
|
|
$sql = sisplet_query("SELECT id FROM srv_grupa WHERE ank_id='" . get('anketa') . "' AND vrstni_red='$vrstni_red' ORDER BY vrstni_red ASC LIMIT 1");
|
|
|
|
// naslednja stran
|
|
if (mysqli_num_rows($sql) > 0) {
|
|
$row = mysqli_fetch_array($sql);
|
|
return $row['id'];
|
|
}
|
|
// konec
|
|
else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
}
|