1KA_F2F/main/survey/app/Controllers/FindController.php
MAY 79fc5b7b02 Prilagoditev za F2F, ostalo:
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!
2022-11-11 14:41:51 +01:00

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;
}
}
}