array('seq' => '0', 'spr' => 'undefined', 'grd' => 'undefined')); # array drugih variable, kamor shranimo spr, grid_id, in sequenco
public $variabla2 = array('0' => array('seq' => '0', 'spr' => 'undefined', 'grd' => 'undefined')); # array drugih variable, kamor shranimo spr, grid_id, in sequenco
public $variablesList = null; # Seznam vseh variabel nad katerimi lahko izvajamo meanse (zakeširamo)
public $_CURRENT_STATUS_FILTER = ''; # filter po statusih, privzeto izvažamo 6 in 5
public $_HAS_TEST_DATA = false; # ali anketa vsebuje testne podatke
public $doValues = true; # checkbox Prikaži vrednosti
private $sessionData; # podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
public function __construct($sid)
{
global $global_user_id;
if (is_null($sid))
$sid = $_GET['anketa'];
// v kolikor ni ID ankete potem nič ne prikazujemo
if ((int)$sid <= 0) {
echo 'Invalid Survey ID!';
exit();
}
// ID ankete
$this->anketa = $sid;
// Preveri, če ia parameter id strukture
$this->pregledAnalizeSamoZaEnoStrukturo();
# polovimo vrsto tabel (aktivne / neaktivne)
SurveyInfo::getInstance()->SurveyInit($this->anketa);
$this->db_table = SurveyInfo::getInstance()->getSurveyArchiveDBString();
# Inicializiramo in polovimo nastavitve missing profila
SurveyStatusProfiles::Init($this->anketa);
SurveyUserSetting::getInstance()->Init($this->anketa, $global_user_id);
$this->_CURRENT_STATUS_FILTER = STATUS_FIELD . ' ~ /6|5/';
SurveyStatusProfiles::Init($this->anketa);
SurveyMissingProfiles::Init($this->anketa, $global_user_id);
SurveyConditionProfiles::Init($this->anketa, $global_user_id);
SurveyZankaProfiles::Init($this->anketa, $global_user_id);
SurveyTimeProfiles::Init($this->anketa, $global_user_id);
SurveyVariablesProfiles::Init($this->anketa);
SurveyDataSettingProfiles:: Init($this->anketa);
// Poskrbimo za datoteko s podatki
$SDF = SurveyDataFile::get_instance();
$SDF->init($this->anketa);
$SDF->prepareFiles();
$this->headFileName = $SDF->getHeaderFileName();
$this->dataFileName = $SDF->getDataFileName();
$this->dataFileStatus = $SDF->getStatus();
// preberemo nastavitve iz baze (prej v sessionu)
SurveyUserSession::Init($this->anketa);
// V kolikor ni shranjeno polje v bazi potem pobrišemo trenutno, kar je nastavljeno, da se izognemo napakam, ki bi se pojavile v nadaljevanju
if (!empty(SurveyUserSession::getData()) && !is_array(SurveyUserSession::getData()))
SurveyUserSession::delete();
$this->sessionData = SurveyUserSession::getData();
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
if (!empty($_GET['s'])) {
$this->sessionData['means']['struktura'] = (int)$_GET['s'];
} elseif (!empty($this->sessionData['means']['struktura'])) {
unset($this->sessionData['means']['struktura']);
}
SurveyUserSession::saveData($this->sessionData);
}
// V kolikor preverjamo anketo za učitelja z že izbranimi parametri potem pobrišemo nastavitve iz baze
if (!is_null($this->struktura))
$this->sessionData['means']['filterHierarhija'] = array();
if ($this->dataFileStatus == FILE_STATUS_NO_DATA || $this->dataFileStatus == FILE_STATUS_NO_FILE || $this->dataFileStatus == FILE_STATUS_SRV_DELETED) {
Common::noDataAlert();
exit();
}
if ($this->headFileName !== null && $this->headFileName != '') {
$this->_HEADERS = unserialize(file_get_contents($this->headFileName));
}
// Kdar je variable2 prazna in podatki še niso shranjeni v bazi potem prikažemo vse odgovore;
if (!is_null($this->struktura) || (empty($this->sessionData['means']['means_variables']['variabla2']) || sizeof($this->sessionData['means']['means_variables']['variabla2']) < 1) && !empty($this->_HEADERS)) {
$polje = array();
if (!empty($this->getVariableList(2))) {
foreach ($this->getVariableList(2) as $vprasanje) {
if ($vprasanje['canChoose']) {
$polje[] = [
'seq' => $vprasanje['sequence'],
'spr' => $vprasanje['spr_id'],
'grd' => 'undefined'
];
}
}
}
$this->sessionData['means']['means_variables']['variabla2'] = $polje;
if (!empty($this->struktura))
$this->variabla2 = $polje;
// dodan js, da osveži vse elemente in vse izbrane spremenljivke shrani v bazo
echo '';
}
# nastavimo vse filtre
// $this->setUpFilter();
# nastavimo uporabniške nastavitve
$this->readUserSettings();
if (!empty($this->struktura)) {
// posodobimo vse filtre, ki so bili izbrani
echo '';
}
}
/**
* Pogledamo, če imamo id strukture in potem prikažemo rezulatate samo teh reševanj
*/
private function pregledAnalizeSamoZaEnoStrukturo()
{
if (is_null($_GET['s']) || is_string((int)$_GET['s']))
return null;
$this->struktura = (int)$_GET['s'];
}
private function readUserSettings()
{
$sdsp = SurveyDataSettingProfiles:: getSetting();
$this->doValues = $sdsp['doValues'] == '1' ? true : false;
}
public function ajax()
{
#nastavimo variable če so postane
$this->setPostVars();
# izvedemo akcijo
switch ($_GET['a']) {
case 'changeDropdown':
$this->displayDropdowns();
break;
case 'change':
$this->displayData();
break;
case 'add_new_variable':
$this->addNewVariable();
break;
case 'changeMeansSubSetting':
$this->changeMeansSubSetting();
break;
case 'changeMeansShowChart':
$this->changeMeansShowChart();
break;
case 'posodobi-ucitelja':
$this->posodobiPodatkeZaUcitelja();
break;
case 'posodobi-izbran-predmet':
$this->posodobiIzbranPredmet();
break;
case 'posodobi-seznam-za-ucitelje':
$this->posodobiSeznamFiltrovUcitelja();
breake;
case 'pobrisi-filter':
$this->pobrisiFilterUciteljevAliHierarhije();
break;
default:
print_r("
");
print_r($_GET);
print_r($_POST);
break;
}
}
function Display()
{
global $lang;
$hierarhija_type = (!empty($_SESSION['hierarhija'][$this->anketa]['type']) ? $_SESSION['hierarhija'][$this->anketa]['type'] : null);
// meni za izbiranlje za filtre
$this->displayHierarhijaAliUcitelji();
# ali imamo testne podatke
if ($this->_HAS_TEST_DATA) {
# izrišemo bar za testne podatke
$SSH = new SurveyStaticHtml($this->anketa);
$SSH->displayTestDataBar(true);
}
# preberemo prednastavljene variable iz seje, če obstajajo
# v koolikor gledamo za specifični ID, potem prikažemo trenutne podatke
if (is_null($_GET['s']))
$this->presetVariables();
// v kolikor gre za specifično anketo potem naredimo skrito polje z ID-jem strukture tega učitelja
if (!is_null($this->struktura))
echo '';
// $this->DisplayLinks();
// $this->DisplayFilters();
// ruleta za izbiro po učiteljih
if ($hierarhija_type < 5) {
$prikazi_fitre = is_array($this->sessionData['means']['strukturaUcitelj']);
$prikazi_rezultate = (isset($this->sessionData['means']['uciteljFilter']) && $this->sessionData['means']['uciteljFilter'] == 'predmeti');
echo '
';
// Prikažemo seznam učiteljev za agregirane analize
$this->displayDropdownSeznamUciteljev();
echo '
'; #id="div_means_data"
}
/**
* Izpišemo opcijo za izbiro ali filtri hierarhije ali filtri po učiteljih
*
* @return html
*/
public function displayHierarhijaAliUcitelji()
{
$hierarhija_type = (!empty($_SESSION['hierarhija'][$this->anketa]['type']) ? $_SESSION['hierarhija'][$this->anketa]['type'] : null);
global $lang;
if ($hierarhija_type > 4)
return null;
echo '
';
}
/**
* Izriše seznam vseh učiteljev, ki so v strukturi
*
* @return html
*/
private function displayDropdownSeznamUciteljev()
{
$vsi_uporabniki_upraviceni_do_evalvacije = (new \Hierarhija\Model\HierarhijaOnlyQuery())->queryStrukturaUsers($this->anketa, ' AND hs.level=(SELECT MAX(level) FROM srv_hierarhija_struktura WHERE anketa_id=' . $this->anketa . ') GROUP BY users.id');
echo '';
echo '';
}
/**
* Izriše seznam vseh učiteljev in strukture - za 1 predmet
*
* @return html
*/
private function displayDropdownSeznamUciteljevZaSpecificniPredmet()
{
$struktura_uporabnikov = (new \Hierarhija\Model\HierarhijaOnlyQuery())->queryStrukturaUsers($this->anketa, ' AND hs.level=(SELECT MAX(level) FROM srv_hierarhija_struktura WHERE anketa_id=' . $this->anketa . ')');
echo '';
echo '';
}
public function displayDropdowns()
{
global $lang;
$variables1 = $this->getVariableList(1);
$variables2 = $this->getVariableList(2);
// V kolikor je struktura 0 in post request je notri ID strukture potem zapišemo v globalno spremenljivko
if (is_null($this->struktura) && !empty($_POST['strukturaId']))
$this->struktura = (int)$_POST['strukturaId'];
// Pridobimo strukturo za specifično anketo
$imena_sifrantov_ucitelja = array();
if (!is_null($this->struktura)) {
$this->sessionData['means']['filterHierarhija'] = array();
$imena_sifrantov_ucitelja = $this->pridobiStrukturoZaUcitelja();
}
### Levi meni za prikaz vloge
echo '
';
### Prikaz elementov hierarhije in nivojev, ki so že zaklenjeni
echo '
struktura) || is_array($this->sessionData['means']['struktura']) || isset($this->sessionData['means']['strukturaUcitelj'])) ? ' style="display:none;"' : '') . '>';
echo $lang['srv_hierarchy_label_analyse'];
echo ' ';
#### Pridobimo strukturo hierarhije
$struktura_hierarhije = $this->hierarhijaUporabnika(); //tukaj dobimo samo polja, do katerih ima uporabnik dovoljenje
#### V kolikor je učitelj oz. poljuben uporabnik na določeni ravni potem preverimo max št nivojev
$max_st_nivojev = sisplet_query("SELECT MAX(level) AS max
FROM
srv_hierarhija_ravni AS r
LEFT JOIN
srv_hierarhija_sifranti AS s
ON
s.hierarhija_ravni_id = r.id
WHERE
r.anketa_id = '" . $this->anketa . "'
ORDER BY level", "obj")->max;
// filter za vsak nivo shranimo v polje in v kolikor se filter ponovi potem izpišemo vedno samo enega
foreach ($this->_HEADERS as $h_key => $header) {
preg_match('/^(?:nivo)([0-9]+)/', $header['variable'], $match);
if ((int)$h_key > 0 && sizeof($match) > 0) {
echo '
';
echo '';
echo '
';
// Prikaz chosen za vse šifrante, ki jih imamo
echo '';
echo ' ';
}
}
echo '';
echo '
';
echo '';
echo '';
echo ' ';
// Ikone za izvoz (so tukaj da se refreshajo ob ajax klicu)
$this->displayExport();
}
/**
* Pridobimo hierarhijo uporabnika, ki je prijavljen
*
* @return (array) $hierarhija
*/
public function hierarhijaUporabnika()
{
# Podatki za pregled nivojev hierarhije
$hierarhija_type = \Hierarhija\HierarhijaHelper::preveriTipHierarhije($this->anketa);
if (empty($hierarhija_type))
return false;
if ($hierarhija_type > 4) {
$struktura_user = (new \Hierarhija\Model\HierarhijaQuery())->pridobiHierarhijoNavzgor($this->anketa, true);
$hierarhija = array();
foreach ($struktura_user as $key => $struktura) {
foreach ($struktura as $row) {
$nivo = trim($row['nivo'], 'nivo');
### Gremo skozi hierarhijo in v kolikor ima uporabnik več izvedenih anket (za različne letnike) potem vpišemo vse unikatne nivoje hierarhije;
if (!in_array($nivo, $hierarhija) &&
(is_array($hierarhija[$nivo]) &&
!in_array($row['st_odgovora'], $hierarhija[$nivo]) || empty($hierarhija[$nivo]))
) {
$hierarhija[$nivo][] = $row['st_odgovora'];
}
// else {
//
//// $st_last = 0;
// ### V kolikor obstaja element potem vedno prepišemo zadnjega vnešenega
//// if (isset($hierarhija[$nivo]) && sizeof($hierarhija[$nivo]) > 0)
//// $st_last = sizeof($hierarhija[$nivo]) - 1;
//
//// $hierarhija[$nivo][$st_last] = $row['st_odgovora']; //če se je nivo ponovil ga vedno vpišemo na prvo mesto
//
// }
}
}
return $hierarhija;
}
return 'admin';
}
/**
* Pridobimo strukturo za učitelja za specifično anketo in vrnemo imena vseh šifrantov, ker jih bomo uporabili za filtriranje
*
* @return (array) $imena_sifrantov
*/
public function pridobiStrukturoZaUcitelja()
{
$struktura = \Hierarhija\Model\HierarhijaQuery::posodobiSifranteVrednostiGledeNaTrenutenIdStrukture($this->struktura);
$imena_sifrantov = array();
foreach ($struktura as $row) {
$sql = sisplet_query("SELECT ime FROM srv_hierarhija_sifranti WHERE id='" . $row['id_sifranta'] . "'", "obj");
$imena_sifrantov[] = $sql->ime;
}
return $imena_sifrantov;
}
/**
* Osvežimo vse podatke, ki so potrebni za pridobitev pdoatkov
*
* @return html
*/
public function displayData($filter_hierarhija = null)
{
global $site_path;
$br = '';
$means = array();
if (!file_exists($site_path . EXPORT_FOLDER . '/export_data_' . $this->anketa . '.dat')) {
echo 'Ni odgovorov';
die();
}
# če ne uporabljamo privzetega časovnega profila izpišemo opozorilo
SurveyTimeProfiles::printIsDefaultProfile(false);
# če imamo filter ifov ga izpišemo
SurveyConditionProfiles::getConditionString();
# če imamo filter spremenljivk ga izpišemo
SurveyVariablesProfiles::getProfileString($doNewLine, true);
# če imamo rekodiranje
$SR = new SurveyRecoding($this->anketa);
$SR->getProfileString();
if ($this->getSelectedVariables(1) !== null && $this->getSelectedVariables(2) !== null) {
$variables1 = $this->getSelectedVariables(2);
$variables2 = $this->getSelectedVariables(1);
$c1 = 0;
$c2 = 0;
# odvisno ok checkboxa prikazujemo druge variable v isti tabeli ali v svoji
if ($this->sessionData['means']['meansSeperateTables'] == true || !isset($this->sessionData['means']['meansSeperateTables'])) {
#prikazujemo ločeno
if (is_array($variables2) && count($variables2) > 0) {
foreach ($variables2 AS $v_second) {
if (is_array($variables1) && count($variables1) > 0) {
foreach ($variables1 AS $v_first) {
$_means = $this->createMeans($v_first, $v_second);
if ($_means != null) {
$means[$c1][0] = $_means;
}
$c1++;
}
}
}
}
} else {
#prikazujemo v isti tabeli
if (is_array($variables2) && count($variables2) > 0) {
foreach ($variables2 AS $v_second) {
if (is_array($variables1) && count($variables1) > 0) {
foreach ($variables1 AS $v_first) {
$_means = $this->createMeans($v_first, $v_second);
if ($_means != null) {
$means[$c1][$c2] = $_means;
}
$c2++;
}
}
$c1++;
$c2 = 0;
}
}
}
//ddd($means);
if (is_array($means) && count($means) > 0) {
$counter = 0;
foreach ($means AS $mean_sub_grup) {
echo($br);
$this->displayMeansTable($mean_sub_grup);
$br = ' ';
// Zvezdica za vkljucitev v porocilo
$spr2 = $mean_sub_grup[0]['v1']['seq'] . '-' . $mean_sub_grup[0]['v1']['spr'] . '-' . $mean_sub_grup[0]['v1']['grd'];
$spr1 = $mean_sub_grup[0]['v2']['seq'] . '-' . $mean_sub_grup[0]['v2']['spr'] . '-' . $mean_sub_grup[0]['v2']['grd'];
SurveyAnalysis::Init($this->anketa);
SurveyAnalysis::addCustomReportElement($type = 6, $sub_type = 0, $spr1, $spr2);
// Izrisemo graf za tabelo - zaenkrat samo admin
if ($this->sessionData['mean_charts']['showChart'] && $_GET['m'] != 'analysis_creport') {
$tableChart = new SurveyTableChart($this->anketa, $this, 'mean', $counter);
$tableChart->display();
}
$counter++;
}
}
} else {
# dropdowni niso izbrani
}
if ($this->aliImaPravicoDoPrikazaOdprtihOdgovorov()) {
echo '
';
foreach ($this->_HEADERS AS $skey => $spremenljivka) {
if ($spremenljivka['tip'] == 21) {
if ($spremenljivka['cnt_all'] == 1) {
// če je enodimenzionalna prikažemo kot frekvence
// predvsem zaradi vprašanj tipa: language, email...
$this->izrisiOdprteOdgovoreZaUcitelja($skey, $spremenljivka);
// $this->sumTextVertical($skey, 'sums');
//
} else {
SurveyAnalysis::sumMultiText($skey, 'sums');
}
}
}
echo '
';
}
}
/**
* Preverimo, če je res učitelj in če ima pravico do odprtih odgovorov
*
* @return boolean
*/
public function aliImaPravicoDoPrikazaOdprtihOdgovorov()
{
global $global_user_id;
// Pridobimo max število nivojev
$max_st = (new \Hierarhija\Model\HierarhijaOnlyQuery())->getRavni($this->anketa, 'MAX(level) AS max_level')->fetch_object()->max_level;
$struktura = sisplet_query("SELECT s.level AS level FROM srv_hierarhija_struktura_users AS u LEFT JOIN srv_hierarhija_struktura AS s ON s.id=u.hierarhija_struktura_id WHERE s.anketa_id='" . $this->anketa . "' AND u.user_id='" . $global_user_id . "'", "obj");
if (is_array($struktura) && $struktura[0]->level == $max_st || $struktura->level == $max_st)
return true;
return false;
}
/*
* Pridobimo strukture za učitelja na vseh nivojih
*/
public function posodobiPodatkeZaUcitelja($user_id = null)
{
if (empty($_POST['user_id']) && is_null($user_id))
return null;
if (is_null($user_id))
$user_id = $_POST['user_id'];
// Pridobimo uporabnika za vse njegove predmete
$vsi_predmeti_uporabnika = (new \Hierarhija\Model\HierarhijaOnlyQuery())->queryStrukturaUsers($this->anketa, ' AND hs.level=(SELECT MAX(level) FROM srv_hierarhija_struktura WHERE anketa_id=' . $this->anketa . ') AND users.id="' . $user_id . '"');
$struktura_ids = [];
while ($row = $vsi_predmeti_uporabnika->fetch_object()) {
$struktura_ids[] = $row->id;
}
// Pridobimo vse šifrante od učitelja navzgor - celo strukturo
$this->struktura_ucitelj = [];
foreach ($struktura_ids as $struktura_id) {
$struktura_baza = \Hierarhija\Model\HierarhijaQuery::posodobiSifranteVrednostiGledeNaTrenutenIdStrukture($struktura_id);
foreach ($struktura_baza as $key => $row) {
// $struktura_id - je ID strukture na kateremse nahaja učitelj
// $key - je level na katerem je šifrant
// $row['id_sifranta'] - je ID sifranta kateri je na tem nivoju
$this->struktura_ucitelj[$struktura_id][$key]['sifrant'] = $row['id_sifranta'];
// Šifrant preverimo glede na vrstni red
$this->struktura_ucitelj[$struktura_id][$key]['stevilka'] = $this->pridobiStZaSpecificniSifrant($row['hierarhija_ravni_id'], $row['id_sifranta']);
}
}
// Filtriranje po učitelju
if (isset($this->struktura_ucitelj) && sizeof($this->struktura_ucitelj) > 0)
$this->sessionData['means']['strukturaUcitelj'] = $this->struktura_ucitelj;
// Shranimo spremenjene nastavitve v bazo
SurveyUserSession::saveData($this->sessionData);
return $this->struktura_ucitelj;
}
/*
* Pridobimo strukture za učitelja na vseh nivojih
*/
public function posodobiIzbranPredmet()
{
if (empty($_POST['strukutra_id']))
return null;
$struktura_id = $_POST['strukutra_id'];
// Pridobimo vse šifrante od učitelja navzgor - celo strukturo
$this->struktura_ucitelj = [];
$struktura_baza = \Hierarhija\Model\HierarhijaQuery::posodobiSifranteVrednostiGledeNaTrenutenIdStrukture($struktura_id);
foreach ($struktura_baza as $key => $row) {
// $struktura_id - je ID strukture na kateremse nahaja učitelj
// $key - je level na katerem je šifrant
// $row['id_sifranta'] - je ID sifranta kateri je na tem nivoju
$this->struktura_ucitelj[$struktura_id][$key]['sifrant'] = $row['id_sifranta'];
// Šifrant preverimo glede na vrstni red
$this->struktura_ucitelj[$struktura_id][$key]['stevilka'] = $this->pridobiStZaSpecificniSifrant($row['hierarhija_ravni_id'], $row['id_sifranta']);
}
// Filtriranje po učitelju
if (isset($this->struktura_ucitelj) && sizeof($this->struktura_ucitelj) > 0){
$this->sessionData['means']['strukturaUcitelj'] = $this->struktura_ucitelj;
$user = sisplet_query("SELECT user_id FROM srv_hierarhija_struktura_users WHERE hierarhija_struktura_id='".$struktura_id."'", "obj")->user_id;
$this->sessionData['means']['imeHierarhije'] = \Hierarhija\HierarhijaHelper::hierarhijaPrikazNaslovovpriUrlju($this->anketa, $struktura_id, $user);
}
// Shranimo spremenjene nastavitve v bazo
SurveyUserSession::saveData($this->sessionData);
echo $this->sessionData['means']['imeHierarhije'];
}
/**
* Posodobimo seznam filtrov za učitelja ali so samo učitelji ali so izlistani po predmetih:
*/
public function posodobiSeznamFiltrovUcitelja(){
$this->sessionData['means']['uciteljFilter'] = (!empty($_POST['vrsta']) ? $_POST['vrsta'] : 'agregirano');
unset($this->sessionData['means']['imeHierarhije']);
SurveyUserSession::saveData($this->sessionData);
}
/**
* Pobrišemo filter učitljev ali hierarhije, odvisno kaj je bilo izbrano
*
* @return bool
*/
public function pobrisiFilterUciteljevAliHierarhije()
{
if (empty($_POST['vrsta']))
return null;
$vrsta = $_POST['vrsta'];
if ($vrsta == 'ucitelji') {
$this->struktura = [];
$this->sessionData['means']['strukturaUcitelj'] = [];
unset($this->sessionData['means']['filterHierarhija']);
}
if ($vrsta == 'filtri') {
$this->struktura_ucitelj = null;
unset($this->sessionData['means']['strukturaUcitelj']);
}
SurveyUserSession::saveData($this->sessionData);
}
/**
* Pridobimo vrstni red šifranta iz tabele srv_hierarhija_sifranti
*
* @param int $sifrant_id
* @return int
*/
private function pridobiStZaSpecificniSifrant($ravni_id, $sifrant_id)
{
if (!is_numeric($sifrant_id) || !is_numeric($sifrant_id))
return null;
$sql = sisplet_query("SELECT id, ime FROM srv_hierarhija_sifranti WHERE hierarhija_ravni_id='" . $ravni_id . "' ORDER BY ime", "obj");
$st = 0;
foreach ($sql as $row) {
$st++;
if ($row->id == $sifrant_id)
break;
}
return $st;
}
static public $textAnswersMore = array('0' => '10', '10' => '30', '30' => '300', '300' => '600', '600' => '900', '900' => '100000');
static function getNumRecords()
{
if (isset($_POST['num_records']) && (int)$_POST['num_records'] > 0) {
$result = (int)self::$textAnswersMore[$_POST['num_records']];
} else {
$result = (int)SurveyDataSettingProfiles:: getSetting('numOpenAnswers');
}
return $result;
}
/**
* Izriši odprrte odgovore za specifičnega učitelja
*
* @param int $variable - ID vpršanja, ki se nahaja v $_HEADERS
* @param array $data
* @return html
*/
public function izrisiOdprteOdgovoreZaUcitelja($variable, $data)
{
global $site_path;
global $global_user_id;
if (!is_array($data))
return null;
$polje_v_datoteki = '$' . $data['sequences'];
// $filter_za_specificno_anketo = $this->filterHierarhijeZaSpecificnegaUciteljaIzDatoteke();
// V sejo shranimo vse strukture, ki ima dotični učitelj
$this->posodobiPodatkeZaUcitelja($global_user_id);
if (!empty($this->sessionData['means']['strukturaUcitelj'][$this->sessionData['means']['struktura']])) {
$ucitelj_filter = '&& (';
$ostali_fitri = false;
foreach ($this->sessionData['means']['strukturaUcitelj'][$this->sessionData['means']['struktura']] as $key => $struktura) {
$ucitelj_filter .= ($ostali_fitri ? ' && ' : null);
$ucitelj_filter .= '($1' . $key . ' == ' . $struktura['stevilka'] . ')';
$ostali_fitri = true;
}
$ucitelj_filter .= ')';
}
if (is_null($ucitelj_filter))
return null;
# začasna datoteka za hierarhijo odprti odgovori
$folder = $site_path . EXPORT_FOLDER . '/';
$tmp_file = $folder . 'tmp_hierarhija_' . $this->anketa . '.tmp';
// Na začetku datoteke dodamo dataFileName . ' >> ' . $tmp_file;
shell_exec($commandHierarhija);
// Na koncu datoteke dodamo zaključek php dokumenta
$file_handler = fopen($tmp_file, "a");
fwrite($file_handler, '?>');
fclose($file_handler);
include($tmp_file);
if (file_exists($tmp_file))
unlink($tmp_file);
return $this->izrisiHtmlTabeloZaOdprtOdgovor($odprtiOdgovori);
}
/**
* Izrišemo tabelo za odprt odgovor
*
* @param array $odprtiOdgovori
* @return html
*/
private function izrisiHtmlTabeloZaOdprtOdgovor($odprtiOdgovori)
{
foreach ($odprtiOdgovori as $keyVprasanja => $tabela) {
$vprasanje = $this->_HEADERS[$keyVprasanja . '_0'];
echo '
' . $vprasanje['variable'] . '
' . $vprasanje['naslov'] . '
Odgovori
Frekvenca
';
$st = 0;
foreach ($tabela as $keyOdgovor => $odgovori) {
if (!is_numeric($odgovori) && is_string($odgovori)) {
$st++;
echo '
' . $odgovori . '
1
';
}
}
echo '
Skupaj
' . $st . '
';
echo '
';
}
}
/** Izriše tekstovne odgovore v vertikalni obliki
*
* @param unknown_type $spid
*/
public function sumTextVertical($spid, $_from)
{
global $lang;
# dajemo v bufer, da da ne prikazujemo vprašanj brez veljavnih odgovorov če imamo tako nastavljeno
$spremenljivka = $this->_HEADERS[$spid];
$_FREQUENCYS = SurveyAnalysis::getFrequencys();
# preverimo ali prikazujemo spremenljivko, glede na veljavne odgovore in nastavitev
// Izrisujemo naše odgovore
$only_valid = 0;
if (count($spremenljivka['grids']) > 0) {
foreach ($spremenljivka['grids'] AS $gid => $grid) {
# dodamo dodatne vrstice z albelami grida
if (count($grid['variables']) > 0)
foreach ($grid['variables'] AS $vid => $variable) {
$_sequence = $variable['sequence']; # id kolone z podatki v text datoteki
$only_valid += (int)$_FREQUENCYS[$_sequence]['validCnt'];
}
}
}
// V kolikor ni odgovorov potem nič ne izrisujemo
if (SurveyDataSettingProfiles:: getSetting('hideEmpty') == 1 && $only_valid == 0) {
return;
}
# dodamo opcijo kje izrisujemo legendo
# če je besedilo * in je samo ena kategorija je inline legd('da');enda false
$inline_legenda = ($this->_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'], array(1, 8))) ? false : true;
# koliko zapisov prikažemo naenkrat
$num_show_records = self::getNumRecords();
$options = array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false, 'num_show_records' => $num_show_records);
// if (self :: $show_spid_div == true) {
// echo '
';
// self::displaySpremenljivkaIcons($spid);
// }
# tekst vprašanja
echo '
';
// end naslovne vrstice
// Prikažemo naše odgovore
$_answersOther = array();
$_grids_count = count($spremenljivka['grids']);
if ($_grids_count > 0)
foreach ($spremenljivka['grids'] AS $gid => $grid) {
$_variables_count = count($grid['variables']);
if ($_variables_count > 0)
foreach ($grid['variables'] AS $vid => $variable) {
$_sequence = $variable['sequence']; # id kolone z podatki
if ($variable['other'] != true) {
# dodamo dodatne vrstice z labelami grida
if ($_variables_count > 1) {
self::outputGridLabelVertical($gid, $grid, $vid, $variable, $spid, $options);
}
$counter = 0;
$_kumulativa = 0;
//self::$_FREQUENCYS[$_sequence]
if (count($_FREQUENCYS[$_sequence]['valid']) > 0) {
$_valid_answers = SurveyAnalysis::sortTextValidAnswers($spid, $variable, $_FREQUENCYS[$_sequence]['valid']);
foreach ($_valid_answers AS $vkey => $vAnswer) {
if ($counter < $num_show_records || self::$isArchive) {
if ($vAnswer['cnt'] > 0 || true) { # izpisujemo samo tiste ki nisno 0
$options['isTextAnswer'] = true;
$counter = SurveyAnalysis::outputValidAnswerVertical($counter, $vkey, $vAnswer, $_sequence, $spid, $_kumulativa, $options);
}
}
}
# izpišemo sumo veljavnih
$counter = SurveyAnalysis::outputSumaValidAnswerVertical($counter, $_sequence, $spid, $options);
}
if (count($_FREQUENCYS[$_sequence]['invalid']) > 0) {
foreach ($_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
if ($iAnswer['cnt'] > 0) { # izpisujemo samo tiste ki nisno 0
$counter = SurveyAnalysis::outputInvalidAnswerVertical($counter, $ikey, $iAnswer, $_sequence, $spid, $options);
}
}
# izpišemo sumo veljavnih
$counter = SurveyAnalysis::outputSumaInvalidAnswerVertical($counter, $_sequence, $spid, $options);
}
#izpišemo še skupno sumo
// $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
} else {
$_answersOther[] = array('spid' => $spid, 'gid' => $gid, 'vid' => $vid, 'sequence' => $_sequence);
}
}
}
echo '
';
# izpišemo še tekstovne odgovore za polja drugo
if (count($_answersOther) > 0 && self::$_FILTRED_OTHER) {
foreach ($_answersOther AS $oAnswers) {
echo '