308 lines
11 KiB
PHP

<?php
/***************************************
* Description: Glavni model, ki skrbi za povezovanje s podatkovno bazo
* Autor: Robert Šmalc
* Created date: 22.01.2016
*****************************************/
namespace App\Models;
// Iz admin/survey
use SurveyAdvancedParadataLog;
class Model
{
/**
* @param object $db A PDO database connection
*/
function __construct($db)
{
try {
$this->db = $db;
} catch (PDOException $e) {
exit('Database connection could not be established.');
}
}
/**
* @desc Vrne vse uporabnike iz baze
*/
public static function db_select_users()
{
return sisplet_query("SELECT name, surname, id, email FROM users ORDER BY name ASC");
}
/**
* @desc Vrne podatke o uporabniku
*/
public static function db_select_user($uid)
{
return sisplet_query("SELECT name, surname, id, email FROM users WHERE id='$uid'");
}
/** Ob spremembi označimo da je potrebno osvežit tabelo s seznamom anket
*
*/
public static function setUpdateSurveyList()
{
# popravimo še polje za osvežitev podatkov seznama anket uporablja class: class.SurveyList.php
$updateString = "INSERT DELAYED INTO srv_survey_list (id, updated) VALUES ('" . get('anketa') . "', '1') ON DUPLICATE KEY UPDATE updated='1'";
$s = sisplet_query($updateString);
if (!$s) echo mysqli_error($GLOBALS['connect_db']);
}
/**
* pobere in zakesira podatke o spremenljivki (ker se to zlo velikokrat bere)
*
* @param mixed $spremenljivka
*/
public static function select_from_srv_spremenljivka($spremenljivka)
{
$anketa = get('anketa');
$srv_premenljivka = get('select_from_srv_spremenljivka');
if (array_key_exists($spremenljivka, get('select_from_srv_spremenljivka'))) {
return $srv_premenljivka[$spremenljivka];
}
// tole se splaca tam kjer se itak vse spremenljivke preberejo, sam vprasanje, ce se povsod??
$sql = sisplet_query("SELECT s.* FROM srv_spremenljivka s, srv_grupa g WHERE s.gru_id=g.id AND g.ank_id='$anketa'");
while ($row = mysqli_fetch_array($sql)) {
$srv_premenljivka[$row['id']] = save('select_from_srv_spremenljivka[' . $row['id'] . ']', $row, 1);
}
if (array_key_exists($spremenljivka, get('select_from_srv_spremenljivka'))) {
return $srv_premenljivka[$spremenljivka];
}
$sql = sisplet_query("SELECT * FROM srv_spremenljivka WHERE id = '$spremenljivka'");
$srv_premenljivka[$spremenljivka] = mysqli_fetch_array($sql);
return $srv_premenljivka[$spremenljivka];
}
public static function generate_order_by_field($spremenljivka, $usr_id = 0)
{
$orderby_array = array();
$order = '';
$randomsort = false;
$sql1 = sisplet_query("SELECT random, vrstni_red FROM srv_vrednost WHERE spr_id = '$spremenljivka' ORDER BY vrstni_red ASC");
while ($row1 = mysqli_fetch_assoc($sql1)) {
if ($order != '') $order .= ", ";
// zapecene na tem mestu (oz. normalno sortirane)
// pustimo sortiranje po vrstnem redu
if ($row1['random'] == 0) {
$orderby_array[$row1['vrstni_red']] = $row1['vrstni_red'];
$order .= "'" . $row1['vrstni_red'] . "'";
}
// random sortirane vrednosti
elseif ($row1['random'] == 1) {
$randomsort = true;
// da se pri vracanju nazaj znova ne randomizirajo odgovori
$seed = '';
if ($usr_id > 0) {
$seed_num = (int)$usr_id + (int)$spremenljivka;
mt_srand($seed_num);
$seed = random_int(0, PHP_INT_MAX);
}
// na random izberemo (tiste, ki se random sortirajo) in jih damo na prosto mesto
$sql2 = sisplet_query("SELECT vrstni_red FROM srv_vrednost WHERE spr_id='$spremenljivka' AND random='1' ORDER BY RAND(" . $seed . ")");
while ($row2 = mysqli_fetch_assoc($sql2)) {
if (!in_array($row2['vrstni_red'], $orderby_array)) {
$orderby_array[$row1['vrstni_red']] = $row2['vrstni_red'];
$order .= "'" . $row2['vrstni_red'] . "'";
break;
}
}
}
// Sortiranje po abecedi padajoče ali naraščajoče
elseif ($row1['random'] == 2 || $row1['random'] == 3) {
// mysql default = ASC
if ($row1['random'] == 3)
$asc_desc = "DESC";
$sql2 = sisplet_query("SELECT vrstni_red FROM srv_vrednost WHERE spr_id='$spremenljivka' AND (random='2' OR random='3') ORDER BY naslov " . $asc_desc);
while ($row2 = mysqli_fetch_assoc($sql2)) {
if (!in_array($row2['vrstni_red'], $orderby_array)) {
$orderby_array[$row1['vrstni_red']] = $row2['vrstni_red'];
$order .= "'" . $row2['vrstni_red'] . "'";
break;
}
}
}
// Posebno sortiranje posebej za NIJZ glede na dan v tednu (samo na nijz virtualki)
global $site_domain;
if(($spremenljivka == '9907732' || $spremenljivka == '9907735' || $spremenljivka == '9921570' || $spremenljivka == '9921573') && $site_domain == 'anketa.nijz.si'){
$day_of_week = date('w');
// Popravimo nedeljo iz 0 na 7
if($day_of_week == 0)
$day_of_week = 7;
$order = '';
for($i=0; $i<7; $i++){
$order .= '\'';
$order .= ($day_of_week + $i > 7) ? $day_of_week+$i-7 : $day_of_week+$i;
$order .= '\', ';
}
$order = substr($order, 0, -2);
}
}
if ($order == '') $order = '1';
// Ce nismo v admin vmesniku (preview) ne shranjujemo vrstnega reda
if(!isset($_GET['a']) || ($_GET['a'] != 'preview_spremenljivka' && $_GET['a'] != 'showspremenljivkaSingleVarPopup')){
// Shranimo vrstni red ce imamo random
if($randomsort){
$vrstni_red = str_replace('\'', "", $order);
$vrstni_red = str_replace(' ', "", $vrstni_red);
$sql = sisplet_query("INSERT INTO srv_data_random_spremenljivkaContent
(usr_id, spr_id, vrstni_red)
VALUES
('".$usr_id."', '".$spremenljivka."', '".$vrstni_red."')
ON DUPLICATE KEY UPDATE vrstni_red='".$vrstni_red."'
");
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
}
// Napredni parapodatki - belezenje vrstnega reda pri random
if (SurveyAdvancedParadataLog::getInstance()->paradataEnabled() && $randomsort){
$event_type = 'question';
$event = 'random_sort';
$data = array('usr_id' => $usr_id);
$data['data'] = array(
'spr_id' => $spremenljivka,
'vre_order' => mysqli_real_escape_string($GLOBALS['connect_db'], $order)
);
SurveyAdvancedParadataLog::getInstance()->logData($event_type, $event, $data);
}
}
return $order;
}
/**
* pri masovnem vnosu, vnasalci vnasajo kot vrednost vrstni_red, ki ga je treba sedaj pretvoriti v ID
*
* @param mixed $spr_id
* @param mixed $vrednost
*/
public static function mass_insert($spr_id, $tip, $vrednost)
{
switch ($tip) {
case 1:
case 3:
$sql = sisplet_query("SELECT id FROM srv_vrednost WHERE spr_id='$spr_id' AND vrstni_red='$vrednost'");
$row = mysqli_fetch_array($sql);
return $row['id'];
break;
case 2:
$i = 1;
foreach ($vrednost AS $key => $val) {
if ($val == 1) {
$sql = sisplet_query("SELECT id FROM srv_vrednost WHERE spr_id='$spr_id' AND vrstni_red='$i'");
$row = mysqli_fetch_array($sql);
$vrednost[$key] = $row['id'];
}
$i++;
}
return $vrednost;
break;
default:
return $vrednost;
}
}
/**
* uporabniku pobrise status lurkerja (da je dejansko nekaj vnesel)
*
*/
public static function user_not_lurker()
{
// ni vec lurker, vse je ok
if (get('lurker') == 0)
return '';
// cache podatkov iz baze
if (get('lurker') == -1) {
$sql = sisplet_query("SELECT lurker FROM srv_user WHERE id='" . get('usr_id') . "'");
$row = mysqli_fetch_array($sql);
save('lurker', $row['lurker']);
}
// pobrisemo mu status lurkerja
if (get('lurker') == 1) {
$sql = sisplet_query("UPDATE srv_user SET lurker='0' WHERE id = '" . get('usr_id') . "'");
save('lurker', 0);
}
}
/**
* @desc polovimo vrednost 99,98,97, če jo imamo shranjeno
*/
public static function getOtherValue($spremenljivka)
{
$getOtherValue = get('getOtherValue');
if (array_key_exists($spremenljivka, $getOtherValue)) {
return $getOtherValue[$spremenljivka];
}
$stringOther = "SELECT vre_id FROM srv_specialdata_vrednost WHERE spr_id='" . $spremenljivka . "' AND usr_id='" . get('usr_id') . "'";
$sqlOther = sisplet_query($stringOther);
$rowOther = mysqli_fetch_assoc($sqlOther);
return save('getOtherValue[' . $spremenljivka . ']', $rowOther['vre_id'], 1);
}
/**
* @desc polovimo vrednost 99,98,97, če jo imamo shranjeno
*/
public static function setOtherValue($spremenljivka, $vrednost = null)
{
if ($vrednost != null)
$sqlInsert = sisplet_query("INSERT INTO srv_specialdata_vrednost (spr_id, vre_id, usr_id) " .
"VALUES ('" . $spremenljivka . "', '" . $vrednost . "', '" . get('usr_id') . "') " .
"ON DUPLICATE KEY UPDATE vre_id='" . $vrednost . "'");
else
$sqlDelete = sisplet_query("DELETE from srv_specialdata_vrednost WHERE spr_id = '" . $spremenljivka . "' AND usr_id = '" . get('usr_id') . "'");
return mysqli_affected_rows($GLOBALS['connect_db']);
}
}