2260 lines
99 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/** *
* Ime: Samoocena hierarhija
* Opis: Class skrbi za izdelavo hierarhije za administratorja/osebo s
* pravicami za gradnjo hierarhije na nivoju posamezne ankete Avtor: Robert
* Šmalc
*/
namespace Hierarhija;
use Cache;
use Common;
use Export;
use finfo;
use Help;
use Hierarhija\Model\HierarhijaOnlyQuery;
use Hierarhija\Model\HierarhijaQuery;
use MailAdapter;
use SurveyInfo;
use SurveySetting;
use TrackingClass;
use function is_null;
class Hierarhija {
#v konstruktor poberemo vse globalne spremenljivke, ki jih omenjen razrred uporablja
protected $anketa;
/**
* Funkcija poišče ustrezne srv_vrednost-i za določeno spremenljivko, kjer
* moramo izbrati "variablo" te spremenljivke
*
* @param (string) $var
*
* @return (array) or null
*/
protected $var;
public function __construct($anketa)
{
global $lang, $global_user_id, $site_url, $admin_type;
$this->anketa = $anketa;
$this->lang = $lang;
$this->hierarhija_type = HierarhijaHelper::preveriTipHierarhije($this->anketa);
$this->user = $global_user_id;
$this->admin_type = $admin_type;
$this->url = $site_url;
$this->modul = \SurveyInfo::getSurveyModules();
}
/**
* Inicializacija hierarhije
*
* @param
*
* @return
*/
public static function hierarhijaInit($anketa)
{
$new = new Hierarhija($anketa);
$new->DolociPraviceUporabniku();
$new->izrisisSistemskoVprsanjeVloga();
$new->hierarhijaSuperadminSifranti();
}
/**
* Uporabniku določimo pravice, če vključi anketo dobi type 1 - admin
* hierarhije
*/
public function dolociPraviceUporabniku()
{
if (is_null($this->hierarhija_type)) {
// Preverimo, kdo je anketo ustvaril
$sql_dostop = sisplet_query("SELECT type FROM srv_hierarhija_users WHERE anketa_d='".$this->anketa."' AND user_id='".$this->user."'", "obj");
if(empty($sql_dostop))
$user_query = sisplet_query("INSERT INTO srv_hierarhija_users (user_id, anketa_id, type) VALUES ('".$this->user."', '$this->anketa', 1)");
if (!$user_query && $this->admin_type == 0) {
echo mysqli_error($GLOBALS['connect_db']);
}
}
}
/**
* Ko se kativira anketa se določi prvo sistemsko vprašanje VLOGA (učenece,
* učitelj) to vprašanje samo 1 izrišemo in potem nikoli več
*/
public function izrisisSistemskoVprsanjeVloga()
{
//Preverimo, če je sistemsko vprašanje vloga že ustvarjeno
$grup_id = sisplet_query("SELECT id, vrstni_red FROM srv_grupa WHERE ank_id='" . $this->anketa . "' ORDER BY vrstni_red LIMIT 0,1", "obj");
$sql_vpisane_spr = sisplet_query("SELECT id, gru_id, variable, vrstni_red FROM srv_spremenljivka WHERE gru_id='" . $grup_id->id . "' AND variable='vloga'");
//V kolikor je vloga že vnešena in ni postavljena na prvo mesto, potem jo moramo premakniti na prvo mesto
if (mysqli_num_rows($sql_vpisane_spr) == 0) {
//preštevilčimo ostala vprašanja za 1
(new HierarhijaAjax($this->anketa))->prestevilciBranching(0, TRUE);
//vedno ustavimo vlogo (učenec - učitelj)
$vloga = [$grup_id->id, 'vloga', 'vloga', '2', '1'];
(new HierarhijaQuery())->insertSpremenljivkaBranching($vloga, NULL, $this->anketa, 1);
}
}
/**
* Prikaže nastavitve za dodajanje nivojev in šifrantov - SUPERADMIN
* HIERARHIJA
*
* @return html page
*/
public function hierarhijaSuperadminSifranti()
{
$aktivna = $this->preveriCeJeAktivirana();
$this->preverimoCeJeVnesenaStruktura();
if ($_GET['e'] == 'null') {
echo '<div style="color: #ffa608; font-style: italic;">' . $this->lang['srv_hierarchy_element_missing'] . '</div>';
}
if ($aktivna && (is_null($this->hierarhija_type) || $this->hierarhija_type < 4)) {
echo '<div id="hierarhija-app">';
// meni na levi strani
echo '<div class="hierarhija-levi-meni">';
echo '<div>' . $this->lang['srv_hierarchy_save_list'] . '</div>';
echo '<div class="h-tabela">';
echo '<table><tbody>';
echo '<tr v-for="shranjena in shranjenaHierarhija">';
echo '<td class="h-ime-shranjeno"
v-show="!imeHierarhije.urejanje"
v-on:click="pregledShranjeneHierarhije($index, shranjena.id, shranjena.struktura)"';
// v-on:click="uporabiShranjenoHierarhijo($index, shranjena.id, shranjena.struktura)"
echo 'v-bind:class="[{ \'active\': $index == imeHierarhije.index }]"
>
<div class="h-ime-prikaz">
{{ shranjena.ime }}
<span class="stevilo-evalvirancev" title="Število uporabnikov, ki so že dodani k strukturi" v-if="shranjena.stUporabnikov > 0">({{ shranjena.stEvalvirancev }})</span>
</div>
<td>';
echo '<td class="h-brisi-shranjeno" v-show="imeHierarhije.urejanje" v-on:click="izbrisiShranjenoHierarhijo($index, shranjena.id)"><span class="faicon delete_circle icon-orange_link" title="' . $this->lang['srv_hierarchy_help_1'] . '"></span></td>';
echo '<td class="h-ime-shranjeno"
v-show="imeHierarhije.urejanje"
v-on:click="imeHierarhije.index = $index"
v-bind:class="[{ \'editable-hierarhija\': $index == imeHierarhije.index && imeHierarhije.urejanje}]"
v-bind="{ contenteditable: $index == imeHierarhije.index && imeHierarhije.urejanje }"
v-on:blur="preimenujHierarhijo($index, shranjena.id)">
<div class="h-ime-prikaz h-urejanje">
{{ shranjena.ime }}
<span class="stevilo-evalvirancev" title="Število uporabnikov, ki so že dodani k strukturi" v-if="shranjena.stUporabnikov > 0 && imeHierarhije.index != $index"">({{ shranjena.stEvalvirancev }})</span>
</div>
<td>';
echo '</tr>';
echo '</tbody></table>';
echo '</div>';
echo '<div>
<span style="float: left; padding: 6px 15px 5px 0;">Urejanje</span>
<div class="onoffswitch" style="float: left; margin: 6px;">
<input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" v-model="imeHierarhije.urejanje" id="urejanje-imen" v-on:click="posodobiOpcijeHierarhije()">
<label class="onoffswitch-label" for="urejanje-imen">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</div>';
echo '<div style="float: left;">
<span style="margin: 10px 15px 0 0;display: inline-block;float: left;">Uvoz/Izvoz</span>
<span class="faicon import hierarhija-ikona"
title="Uvoz hierarhije"
style="margin: 8px 15px 0 0"
@click="uvozHierarhije"
></span>
<a href="index.php?anketa=' . $this->anketa . '&a=hierarhija_superadmin&m=' . M_ADMIN_IZVOZ_SIFRANTOV . '">
<span class="faicon export hierarhija-ikona"
title="Izvoz hierarhije"
style="margin: 8px 10px 0 0"
></span>
</a>
</div>';
echo '</div>';
// Uvodno besedilo, ko se aktivira modul hierarhija$anketa
echo '<div v-if="imeHierarhije.aktivna.length == 0 &&
imeHierarhije.shrani.length == 0 &&
previewHierarhije.ime.length == 0"
style="width: 650px;"
>';
echo '<h1>' . $this->lang['srv_hierarchy_wellcome_title'] . '</h1>';
echo $this->lang['srv_hierarchy_wellcome_text'] . '<br /><br />';
echo '<button class="btn btn-moder"
v-on:click="izbrisiCelotnoHierarhijo()"
style="float:right; margin: 20px 60px;"
>
Ustvari novo hierarhijo
</button>';
echo '</div>';
// Omogočimo predogled hierarhije
echo '<div class="hierarhija_fieldset" v-show="previewHierarhije.vklop && previewHierarhije.ime.length > 0" style="display:none;">';
echo '<h1>Predogled hierarhije: <span class="oranzna">{{ previewHierarhije.ime }}</span></h1>';
echo '<div v-if="shranjenaHierarhija[previewHierarhije.index] && shranjenaHierarhija[previewHierarhije.index].stUporabnikov > 0">Hierarhija ima {{ shranjenaHierarhija[previewHierarhije.index].stEvalvirancev }} evalvacij in {{ shranjenaHierarhija[previewHierarhije.index].stUporabnikov }} uporabnikov.</div>';
// Tabela nivojev in šifrantov
echo '<div id="primer-sifrantov" v-show="previewHierarhije.input.length > 0">';
echo '<table>';
echo '<thead style="text-align: left;">';
echo '<tr>';
echo '<th>' . $this->lang['srv_hierarchy_table_header_1'] . '</th>';
echo '<th>' . $this->lang['srv_hierarchy_table_header_2'] . '</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
// Vuejs dinamično kreiranje novih nivojev
echo '<tr id="nivo-{{ nivo.id }}" v-for="nivo in previewHierarhije.input" track-by="$index">';
echo '<td><label> {{ nivo.st}}. {{ nivo.ime }}</label></td>';
echo '<td><select name="nivo" data-opcije="{{ nivo.id }}">';
echo '<option value = "#" v-for="sifrant in nivo.sifranti">{{ sifrant.ime }}</option >';
echo '</select></td>';
echo '</tr>';
echo '</tbody></table></div>';
echo '<div v-else>Hierarhija je prazna in ima določen samo naslov.</div>';
// Gumbi
echo '<div style="padding:20px 10px; float: right;">';
echo '<button class="btn btn-moder" @click="izklopiPredogled()" style="margin: 0 10px;">' . $this->lang['back'] . '</button>';
echo '<button class="btn btn-moder"
@click="aktivirajIzbranoHierarhijo()"
v-if="previewHierarhije.input.length > 0"
>
Uporabi omenjeno hierarhijo
</button>';
echo '</div>';
echo '</div>';
// naslov hierarhije
echo '<div class="hierarhija_fieldset" v-if="(imeHierarhije.aktivna > 0 || imeHierarhije.shrani.length > 0) && !previewHierarhije.vklop">';
echo '<div class="left-float">';
echo '<h1>Hierarhija
<span class="oranzna">
<span v-if="imeHierarhije.shrani != imeHierarhije.aktivna">{{ (imeHierarhije.shrani.length > 30 ? (imeHierarhije.shrani.substring(0,30)+\' ...\') }}</span>
<span v-else>{{ (imeHierarhije.aktivna.length > 30 ? (imeHierarhije.aktivna.substring(0,30)+\' ...\') : imeHierarhije.aktivna) }}</span>
</span>
</h1>';
echo '</div>';
echo '<div class="left-float" style="padding: 20px 10px;">
<a href="#"
class="surveycomment"
v-on:click="dodajKomentar()"
title="Dodaj komentar k hierarhiji"
>
<span class="faicon inline_comment"></span> Dodaj komentar
</a>
</div>';
echo '<div class="left-float" style="padding: 20px 0px;">
<a href="#" class="logo-upload" v-on:click="logoUpload()" title="Naloži logotip za izpis pri poročilih">
<i class="fa fa-lg fa-file-image-o" aria-hidden="true"></i> Naloži logo
</a>
</div>';
// V kolikor imamo že strukturo prikažemo tudi številke
echo '<div style="clear:both;" v-if="shranjenaHierarhija[imeHierarhije.index] && shranjenaHierarhija[imeHierarhije.index].stUporabnikov > 0">Hierarhija ima {{ shranjenaHierarhija[imeHierarhije.index].stEvalvirancev }} evalvacij in {{ shranjenaHierarhija[imeHierarhije.index].stUporabnikov }} uporabnikov.</div>';
// Dodajanje nivojev in njihovih nazivov
echo '<div v-if="!vpisanaStruktura" style="clear: both;">';
echo '<h2 v-if="!vpisanaStruktura">' . $this->lang['srv_hierarchy_create_code'] . '</h2>';
echo '<div class="hierarhija-nov-nivo"
v-on:click="izbrisiCelotnoHierarhijo()"
v-if="!vpisanaStruktura"
style="float: right;display: block;margin:-30px -35px 0 0;">
Ustvari novo hierarhijo<span class="faicon edit small icon-as_link pointer h-edit-nivo hierarhija-inline"></span>
</div>';
echo '<div>';
echo '<table v-if="!vpisanaStruktura">';
echo '<thead style="text-align: left;">';
echo '<tr>';
echo '<th>' . $this->lang['srv_hierarchy_table_header_nivo_1'] . '</th>';
echo '<th style="padding-left: 15px;">' . $this->lang['srv_hierarchy_table_header_nivo_2'] . '</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
// Vuejs dinamično kreiranje novih nivojev
echo '<tr>';
echo '<td>';
echo '<span class="hierarhija-elementi">{{ novaHierarhijaSt }}.</span>';
echo '</td>';
echo '<td>';
echo '<input type="text" size="50" class="hierarhija-elementi" v-model="imeNivoja" v-on:keyup.enter="dodajNivoHierarhije()">';
echo '<div class="hierarhija-nov-nivo" v-on:click="dodajNivoHierarhije()">' . $this->lang['srv_hierarchy_input_name_nivo'] . '<span class="hierarhija-plus"></span></div>';
echo '</td>';
echo '</tr>';
echo '</tbody></table>';
echo '</div>';
echo '</div>';
echo '<div class="clear"></div>';
// Selectbox s šifranti za posamezen nivo, vpis šifrantov dovolimo šele ko imamo vpisano prvo raven
echo '<div v-show="inputNivo[0]">';
echo '<div class="h-sa-list">';
echo '<div style="margin-top: 16px;">';
echo '<h2 style="float: left; display: inline-block; margin-top: 0;">' . $this->lang['srv_hierarchy_code_lists'] . '</h2>';
echo '<div class="hierarhija-urejanje">
<div class="onoffswitch">
<input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" v-model="vklopiUrejanje" id="vklopi-urejanje-hierarhije" checked v-on:click="getSaveOptions(\'admin_skrij_urejanje_nivojev\', !vklopiUrejanje)">
<label class="onoffswitch-label" for="vklopi-urejanje-hierarhije">
<span class="onoffswitch-inner"></span>
<span class="onoffswitch-switch"></span>
</label>
</div>
</div>';
echo '<span class="toolbox_add_title"> ' . Help::display('srv_hierarchy_edit_elements') . '</span>';
echo '</div>';
echo '<div class="clear"></div>';
// izris primera šifrantov
echo '<div id="primer-sifrantov">';
echo '<table>';
echo '<thead style="text-align: left;">';
echo '<tr>';
echo '<th>' . $this->lang['srv_hierarchy_table_header_1'] . '</th>';
echo '<th>' . $this->lang['srv_hierarchy_table_header_2'] . '</th>';
echo '<th>' . $this->lang['srv_hierarchy_table_header_3'] . '</th>';
echo '<th v-show="vklopiUrejanje">' . $this->lang['srv_hierarchy_table_header_4'] . '</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
// Vuejs dinamično kreiranje novih nivojev
echo '<tr id="nivo-{{ nivo.id }}" v-for="nivo in inputNivo">';
echo '<td><label> {{ nivo.st}}. <span contenteditable="true" class="h-edit-nivo editable" data-labela="{{ nivo.id }}" v-on:blur="preimenujLabeloNivoja(nivo.id)">{{ nivo.ime }}</span></label></td>';
echo '<td><select name="nivo" data-opcije="{{ nivo.id }}">';
echo '<option value = "#" v-for="sifrant in nivo.sifranti">{{ sifrant.ime }}</option >';
echo '</select></td>';
echo '<td>';
echo '<span class="faicon delete_circle icon-orange_link spaceLeft hierarhija-inline" v-on:click="odstraniNivoHierarhije($index, nivo.id)" v-show="vklopiUrejanje && vpisanaStruktura == 0" title="' . $this->lang['srv_hierarchy_help_1'] . '"></span>';
echo '<span class="faicon edit small icon-as_link pointer h-edit-nivo hierarhija-inline" v-on:click="brisiSifrant(nivo.id)" v-show="vklopiUrejanje" title="' . $this->lang['srv_hierarchy_help_2'] . '"></span>';
## Vstavimo checkboc od kje naprej se lahko šifranti ponavljajo
echo '<input type="checkbox" name="unikatni-sifranti" class="hierarhija-inline" style="cursor: pointer;" value="1" :checked="nivo.unikaten == 1" v-on:click="posodobiUnikatnega(nivo.id, nivo)" title="' . $this->lang['srv_hierarchy_help_3'] . '">';
echo '</td>';
echo '<td>';
echo '<input type="text" class="hierarhija-inline" size="40" data-nivo="{{ nivo.id }}" v-show="vklopiUrejanje" v-on:keyup.enter="dodajSifrant( $index, nivo.id )" placeholder="' . $this->lang['srv_hierarchy_input_name_sifrant'] . '"/>';
echo '<div class="hierarhija-nov-nivo" v-show="vklopiUrejanje" v-on:click="dodajSifrant( $index, nivo.id )">' . $this->lang['srv_hierarchy_input_name_sifrant'] . '<span class="hierarhija-plus"></span></div>';
echo '</td>';
echo '</tr>';
echo '</tbody></table>';
echo '</div>';
// Naprej na naslednji korak
echo '<div>';
// Shranjevanje hierarhije
echo '<div style="padding: 20px 0 10px;" v-show="prikaziImeZaShranjevanje">';
echo '<b>Shrani trenutno hierarhijo pod imenom: </b>';
echo '<input size="50" type="text" v-model="imeHierarhije.shrani">';
echo '</div>';
echo '<div style="float: right; width: 100%; text-align: right; padding: 7px 0;">
<input type="checkbox" v-model="prikaziImeZaShranjevanje" value="1"> Hierarhijo želim shraniti pod novim imenom.
</div>';
echo '<div style="padding:20px;float:right;">';
echo '<button v-on:click="shraniTrenutnoHierarhijo()" v-show="prikaziImeZaShranjevanje" class="btn btn-moder" style="margin-right: 15px;">' . $this->lang['save'] . '</button>';
echo '<button v-on:click="premikNaprej(\'' . M_UREDI_UPORABNIKE . '\')" class="btn btn-moder" style="margin-right: 15px;">' . $this->lang['next1'] . '</button>';
echo '</div>';
echo '</div>';
echo '</div>';
echo '</fieldset>';
echo '</div>';
echo '</div>';
// popup za urejanje vrednosti
echo '<div id="vrednost_edit" class="divPopUp">';
echo '</div>';
// fade pri fullscreen urejanje spremenljivke
echo '<div id="fade">';
echo '</div>';
} else {
echo '<div id="hierarhija-app">';
// Naslov
echo '<div class="hierarhija_fieldset">';
echo '<div class="left-float"><h1 v-show="imeHierarhije.aktivna">Hierarhija: <span style="color: #fa4913">{{ imeHierarhije.aktivna }}</span></h1></div>';
echo '<div class="left-float" style="padding: 20px;"><a href="#" class="surveycomment" title="Dodaj komentar o vprašanju"> <span class="faicon inline_comment"></span> Dodaj komentar</a></div>';
echo '<div class="left-float" style="padding: 20px 0px;">
<a href="#" class="logo-upload" v-on:click="logoUpload()" title="Naloži logotip za izpis pri poročilih">
<i class="fa fa-lg fa-file-image-o" aria-hidden="true"></i> Naloži logo
</a>
</div>';
echo '</div>';
echo '<div class="clear"></div>';
// Podatki o aktivaciji hierarhije
$hierarhija_options = new HierarhijaQuery();
$cas_aktivacije = $hierarhija_options->getDeleteHierarhijaOptions($this->anketa, 'cas_aktivacije_hierarhije', NULL, NULL, FALSE);
$uporabnik_aktivacije = $hierarhija_options->getDeleteHierarhijaOptions($this->anketa, 'uporabnik_aktiviral_hierarhijo', NULL, NULL, FALSE);
$uporabnik = HierarhijaQuery::getUserSurvey($uporabnik_aktivacije);
echo '<div class="okvircek" style="padding-bottom: 3px;">';
echo '<h3>Čas aktivacije: <b>' . $cas_aktivacije . '</b></h3>';
echo '<h3>Hierarhijo je aktiviral uporabnik: <b>' . $uporabnik->name . ' ' . $uporabnik->surname . '</b> (' . $uporabnik->email . ') <a class="btn" href="index.php?anketa=' . $this->anketa . '&a=hierarhija_superadmin&m=aktivacija-strukture-ankete">Podrobnosti</a></h3>';
echo '</div>';
echo '<div class="clear"></div>';
// Tabela nivojev in šifrantov
echo '<div id="primer-sifrantov" class="pregled">';
echo '<table>';
echo '<thead style="text-align: left;">';
echo '<tr>';
echo '<th>' . $this->lang['srv_hierarchy_table_header_1'] . '</th>';
echo '<th>' . $this->lang['srv_hierarchy_table_header_2'] . '</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
// Vuejs dinamično kreiranje novih nivojev
echo '<tr id="nivo-{{ nivo.id }}" v-for="nivo in inputNivo">';
echo '<td><label> {{ nivo.st}}. {{ nivo.ime }}</label></td>';
echo '<td><select name="nivo" data-opcije="{{ nivo.id }}">';
echo '<option value = "#" v-for="sifrant in nivo.sifranti">{{ sifrant.ime }}</option >';
echo '</select></td>';
echo '</tr>';
echo '</tbody></table>';
echo '</div>';
echo '<div style="width:35%;text-align: right;">';
echo '<a class="btn btn-moder" href="index.php?anketa=' . $this->anketa . '&a=hierarhija_superadmin&m=' . M_ADMIN_IZVOZ_SIFRANTOV . '">Izvoz šifrantov</a>';
echo '</div>';
echo '</div>';
}
}
/**
* V kolikor je hierarhija aktivirana potem jo ni mogoče več urejati
*
* @return boolean
*/
private function preveriCeJeAktivirana()
{
if ($this->modul['hierarhija'] == 2 && $this->hierarhija_type < 4) {
echo $this->lang['srv_hierarchy_active_text'];
return FALSE;
}
return TRUE;
}
/**
* Preverimo, če je bila struktura vnešena
*
* @return boolean
*/
private function preverimoCeJeVnesenaStruktura()
{
$hierarhija_opcije = (new HierarhijaQuery())->getDeleteHierarhijaOptions($this->anketa, 'vpisana_struktura', NULL, NULL, FALSE);
if (sizeof($hierarhija_opcije) > 0 && isset($hierarhija_opcije['vpisana_struktura']) && $hierarhija_opcije['vpisana_struktura'] == 1) {
$sql_str = sisplet_query("SELECT id FROM srv_hierarhija_struktura WHERE anketa_id='" . $this->anketa . "'");
if ($sql_str->num_rows == 0) {
(new HierarhijaQuery())->getDeleteHierarhijaOptions($this->anketa, 'vpisana_struktura', $id = NULL, 1);
}
}
}
/**
* Ko se aktivira anketa se posreduje email učiteljem za reševanje ankete
*/
public static function aktivacijaAnketePosljiEmail($anketa)
{
# Dobimo samo uporabnike na zadnjem nivoju
$users_upravicen_do_evalvacije = (new HierarhijaOnlyQuery())->queryStrukturaUsers($anketa, ' AND hs.level=(SELECT MAX(level) FROM srv_hierarhija_struktura WHERE anketa_id=' . $anketa . ') GROUP BY users.id');
if ($users_upravicen_do_evalvacije->num_rows == 0) {
return FALSE;
}
# Če imamo uporabnike potem gremo za vsak id uporabnika preverit kakšno ima strukturo
while ($uporabnik = $users_upravicen_do_evalvacije->fetch_object()) {
$vloga_poizvedba = self::spremenljivkaVloga('vloga', $anketa);
$url_hierarhija = self::hierarhijaUrl($anketa, $uporabnik->user_id);
// generiramo kode za vse
foreach ($url_hierarhija as $struktura_id => $url) {
// generiranje kode
foreach ($vloga_poizvedba as $v) {
if ($v->variable == 1) {
$vloga = 'ucenec';
}
if ($v->variable == 2) {
$vloga = 'ucitelj';
}
// Url parametri hierarhije (nivoji in vloga)
$url_baza = 'vloga=' . $v->id . $url;
// Url parametre vstavimo v tabelo in generiramo kodo, Pri kodi trenutno uporabimo brez šumnikov, kar zadošča za 60.466.176 različnih kod (36 unikatnih znakov), če bi primanjkovalo se doda šumnik in je nato 90.224.199 kod.
$vpis_kode_loop = FALSE;
while (!$vpis_kode_loop) {
$vpis_kode_loop = sisplet_query("INSERT INTO
srv_hierarhija_koda
(koda, anketa_id, url, vloga, user_id, hierarhija_struktura_id, datetime)
VALUES
(CONCAT(SUBSTRING('abcdefghijklmnoprstuvzwxq0123456789', RAND()*34+1, 1),
SUBSTRING('abcdefghijklmnoprstuvzwxq0123456789', RAND()*34+1, 1),
SUBSTRING('abcdefghijklmnoprstuvzwxq0123456789', RAND()*34+1, 1),
SUBSTRING('abcdefghijklmnoprstuvzwxq0123456789', RAND()*34+1, 1),
SUBSTRING('abcdefghijklmnoprstuvzwxq0123456789', RAND()*34+1, 1)
), '" . $anketa . "', '" . $url_baza . "', '" . $vloga . "', '" . $uporabnik->user_id . "', '" . $struktura_id . "', NOW())");
}
}
}
}
if (HierarhijaQuery::getOptionsPosljiKode($anketa) == 'nikomur') {
HierarhijaQuery::saveOptions($anketa, 'obvesti_samo_ucitelje', 0);
} else {
self::posljiEmailSkodamiUcencemAliSamoUciteljem($anketa);
}
return TRUE;
}
private static function spremenljivkaVloga($var, $anketa)
{
$spremenljivke = Cache::cache_all_srv_spremenljivka($anketa, TRUE);
$spremenljivka_id = NULL;
foreach ($spremenljivke as $spr) {
if ($spr['variable'] == $var) {
$spremenljivka_id = $spr['id'];
}
}
if (!is_null($spremenljivka_id)) {
return Cache::cache_all_srv_vrednost($spremenljivka_id);
}
return NULL;
}
private static function hierarhijaUrl($anketa, $user = NULL)
{
$hierarhija = (new HierarhijaQuery())->pridobiHierarhijoNavzgor($anketa, NULL, $user);
// če hierarhija še ni narejena
if (is_null($hierarhija)) {
return [];
}
$max_level = sisplet_query("SELECT MAX(level) AS level FROM srv_hierarhija_ravni WHERE anketa_id='" . $anketa . "'", "obj");
//najprej moramo priti do polja z ustreznimi nivjo
foreach ($hierarhija as $key => $array) {
// če smo res na zadnjem nivoju
if ($max_level->level == sizeof($array)) {
//gremo po nivojih ter sestavimo URL naslov
$url_zacasni = NULL;
foreach ($array as $nivoji) {
$id = (new HierarhijaQuery())->getVrednostIdFromPivot($nivoji['id']);
$url_zacasni .= '&' . $nivoji['nivo'] . '=' . $id;
}
//sestavljen url dodamo v polje, kot ključ uporabimo ID strukture hierarhije
$url[$key] = $url_zacasni;
}
}
return $url;
}
/**
* Funkcija za pošiljanja kode učiteljem pri hierarhiji
*
* @param (int) $anketa
*
* @return send email | error
*/
public static function posljiEmailSkodamiUcencemAliSamoUciteljem($anketa)
{
global $site_url;
global $lang;
$ucitelji = sisplet_query("SELECT user_id FROM srv_hierarhija_koda WHERE anketa_id='" . $anketa . "' AND vloga='ucitelj' GROUP BY user_id");
$koda_za_resevanje_ankete = HierarhijaQuery::getOptionsPosljiKode($anketa);
if (mysqli_num_rows($ucitelji) == 0) {
return 'Ni podatka o učiteljih';
}
while ($ucitelj = $ucitelji->fetch_object()) {
$kode = sisplet_query("SELECT koda, hierarhija_struktura_id FROM srv_hierarhija_koda WHERE anketa_id='" . $anketa . "' AND vloga='ucitelj' AND user_id='" . $ucitelj->user_id . "'");
// Email naslov
$subject = 'Povezava do samooevalvacije za anketo: ' . SurveyInfo::getSurveyTitle();
// Email besedilo
$email = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
body {
width: 100% !important;
min-width: 100%;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
margin: 0;
Margin: 0;
padding: 0;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
table {
border-spacing: 0;
border-collapse: collapse;
}
td {
word-wrap: break-word;
-webkit-hyphens: auto;
-moz-hyphens: auto;
hyphens: auto;
border-collapse: collapse !important;
}
tr, td, th {
text-align: left;
padding: 8px 10px;
border-color: #dddddd;
border-width: 1px;
border-style: solid;
}
th {
background-color: #EFF2F7;
}
.center{
text-align: center !important;
}
</style>
</head><body>';
$email .= $lang['srv_hierarchy_teacher_email_1'];
$email .= '<p>' . $lang['srv_hierarchy_teacher_email_2'] . '»<b>' . SurveyInfo::getSurveyTitle() . '</b>«' . $lang['srv_hierarchy_teacher_email_3'] . '<a href="' . $site_url . 'sa" target="_blank">' . $site_url . 'sa</a></p>';
$email .= '<br /><table cellspacing="0" style="border-collapse: collapse;">';
$email .= '<thead>';
$email .= '<tr>
<th border="1" cellpadding="0">Hierarhija</th>';
if (SurveyInfo::getSurveyModules('hierarhija') == 2 || in_array($koda_za_resevanje_ankete, ['vsem', 'ucitelju'])) {
$email .= '<th border="1" cellspacing="0" class="center">Koda za učitelja</th>';
}
// V kolikor nimamo nikakršne izbere potem posredujemo kodo tudi za učence
if (in_array($koda_za_resevanje_ankete, ['vsem', 'ucencem'])) {
$email .= '<th border="1" cellspacing="0" class="center">Koda za učence</th>';
}
$email .= '<tr>';
$email .= '</thead>';
$email .= '<tbody>';
// generiranje kode
while ($koda = mysqli_fetch_object($kode)) {
$email .= '<tr>';
$email .= '<td border="1" cellspacing="0">' . HierarhijaHelper::hierarhijaPrikazNaslovovpriUrlju($anketa, $koda->hierarhija_struktura_id, TRUE) . '</td>';
if (SurveyInfo::getSurveyModules('hierarhija') == 2 || in_array($koda_za_resevanje_ankete, ['vsem', 'ucitelju'])) {
$email .= '<td border="1" cellspacing="0" class="center"><span style="letter-spacing: 1px; font-size:16px; font-weight: bold;">' . strtoupper($koda->koda) . '</span></td>';
}
// V kolikor prejme učitelj email tudi s kodami za učence
if (in_array($koda_za_resevanje_ankete, ['vsem', 'ucencem'])) {
$koda_ucenci = sisplet_query("SELECT koda FROM srv_hierarhija_koda WHERE anketa_id='" . $anketa . "' AND vloga='ucenec' AND user_id='" . $ucitelj->user_id . "' AND hierarhija_struktura_id='" . $koda->hierarhija_struktura_id . "'", "obj");
$email .= '<td border="1" cellspacing="0" class="center"><span style="letter-spacing: 1px; font-size:16px; font-weight: bold; color:#ffa608;">' . strtoupper($koda_ucenci->koda) . '</span></td>';
}
$email .= '</tr>';
}
$email .= '</tbody>';
$email .= '</table>';
$user = sisplet_query("SELECT email FROM users WHERE id='" . $ucitelj->user_id . "'", "obj");
//Zaključek emaila
// V kolikor se emailpošlje samo učiteljem potem se skrije možnost za dostop učiteljem
$onemogocenDostopUcitelju = (new HierarhijaQuery())->getDeleteHierarhijaOptions($anketa, 'onemogoci_dostop_uciteljem', NULL, NULL, FALSE);
if (is_null($onemogocenDostopUcitelju) && is_null($koda_za_resevanje_ankete)) {
$email .= '<p>' . $lang['srv_hierarchy_teacher_email_4'] . '<a href="' . $site_url . '" target="_blank">' . $site_url . '</a>' . $lang['srv_hierarchy_teacher_email_5'];
$email .= '»' . $user->email . '«' . $lang['srv_hierarchy_teacher_email_6'] . '</p>';
}
// Podpis
$signature = Common::getEmailSignature();
$email .= $signature;
// Zaključek emaila
$email .= '</body></html>';
// Pošljemo email
try {
$MA = new MailAdapter($anketa, $type='invitation');
$MA->addRecipients($user->email);
$MA->sendMail(stripslashes($email), $subject);
} catch (Exception $e) {
echo "Email za hierarhijo ni bil poslan: " . $e;
error_log("Email za hierarhijo ni bil poslan: " . $e);
}
}
}
/**
* Prikažemo podatke o hierarhiji pri izpolnjevanju
*
* @param array $get - pridobimo vse get parametre od respondenta
*
* @return eho html
*/
public static function displayPodatkeOhierarhijiZaRespondente($get = [], $only_hierarhija = FALSE)
{
global $lang;
$izpis = '';
if (!$only_hierarhija) {
$izpis .= '<div class="hierarhija-naslov-uvod">';
$izpis .= $lang['srv_hierarchy_main'];
}
if (empty($get) || sizeof($get) == 0) {
return NULL;
}
// Pridobimo ime glede na izbiro
$sifrant = [];
foreach ($get as $key => $param) {
if (preg_match('/nivo(\d+)/', $key, $match)) {
$sql = sisplet_query("SELECT naslov FROM srv_vrednost WHERE id='" . $param . "'", 'obj');
$sifrant[$match[1]] = $sql->naslov;
}
}
// Sortiramo po nivojih, da je vedno prvi najprej
ksort($sifrant);
$izpis .= '<b>';
foreach ($sifrant as $key => $sifra) {
$izpis .= ($key > 1 ? ' - ' : NULL) . $sifra;
}
$izpis .= '</b>';
if (!$only_hierarhija) {
$izpis .= '</div>';
}
return $izpis;
}
/**
* Iščemo v vrednost v 2 dimenzionalnem polju
* return $row/null
*/
public static function iskanjeArray($id, $array, $keyValue = 'id')
{
foreach ($array as $key => $value) {
if ($value[$keyValue] == $id) {
return $value;
}
}
return NULL;
}
/********** SUPERADMIN HIERARHIJA END ***********/
/**
* Izvoz šifrantov iz trenutno aktivne hierahije
*/
public function izvozSifrantov()
{
$ravni = (new HierarhijaOnlyQuery())->getSifrantiRavni($this->anketa);
// V kolikor nimamo šifrantov potem ne moremo nič izvažati
if (is_null($ravni)) {
return redirect('index.php?anketa=' . $this->anketa . '&a=hierarhija_superadmin&m=uredi-sifrante');
}
$csv_polje = NULL;
while ($row = $ravni->fetch_object()) {
$csv_polje[] = [$row->level, $row->raven, $row->sifranti];
}
return Export::init()->csv('Hierarhija_izvoz', $csv_polje);
}
/**
* Možnost uvoza hierarhije šifrantov
*
* @return html page
*/
public function hierarhijaSuperadminUvoz()
{
$aktivna = $this->preveriCeJeAktivirana();
#Shranimo CSV datoteko in naredimo strukturo hierarhije
if ($_GET['t'] == 'hierarhija-uvoz' && $aktivna) {
//preverimo, če je CSV format
if (FALSE === array_search($_FILES['uvozi-hierarhijo']['type'], [
'csv' => 'text/csv',
], TRUE)) {
// V kolikor datoteka za uvoz ni v pravem formatu samo vrnemo na prvotno stran
return redirect('index.php?anketa=' . $this->anketa . '&a=hierarhija_superadmin&m=uredi-sifrante');
}
if (($datoteka = fopen($_FILES['uvozi-hierarhijo']['tmp_name'], "r")) !== FALSE) {
//CSV preberemo in zapišemo v polje
while (($data = fgetcsv($datoteka, 10000, ",")) !== FALSE) {
$uvozi_hierarhijo[] = $data;
}
$ravni = [];
$sifrant = [];
foreach ($uvozi_hierarhijo as $uvoz) {
//pridobimo samo unikatne nivoje in imena nivojev
if (!$this->in_mul_array($uvoz[1], $ravni)) {
$ravni[] = $uvoz;
}
//Pridobimo vse šifrante samo vranostno preverimo, če bi se slučajno kak šifrant dvakrat ponovil
if (!$this->in_mul_array($uvoz[2], $sifrant)) {
$sifrant[] = $uvoz;
}
}
// preden vnesemo novo hierarhijo izbrišemo že obstoječo
sisplet_query("DELETE FROM srv_hierarhija_ravni WHERE anketa_id='" . $this->anketa . "'");
//vpisemo vse ravni
foreach ($ravni as $raven) {
// Vpišem, samo če je prvi element polja številka, ker gre za številko ravni
if (!empty($raven[0]) && is_numeric($raven[0])) {
sisplet_query("INSERT INTO srv_hierarhija_ravni (anketa_id, user_id, level, ime) VALUES ('$this->anketa', '$this->user', '$raven[0]', '$raven[1]')");
$raven_id = mysqli_insert_id($GLOBALS['connect_db']);
//vpišemo vse šifre za sledečo raven
foreach ($sifrant as $sifra) {
if ($raven[0] == $sifra[0]) {
sisplet_query("INSERT INTO srv_hierarhija_sifranti (hierarhija_ravni_id, ime) VALUES ('" . $raven_id . "', '" . $sifra[2] . "')");
}
}
}
}
fclose($datoteka);
}
return redirect('index.php?anketa=' . $this->anketa . '&a=hierarhija_superadmin&m=uredi-sifrante');
}
}
/**
* Preveri, če se spremenljivka nahaja v večdimenzionalnem polju
*
* @param string $value
* @param array $array
*
* @return boolean
*/
public function in_mul_array($value, $array)
{
foreach ($array as $row) {
if (in_array($value, $row)) {
return TRUE;
}
}
return FALSE;
}
/**
* Možnost nalaganja datoteke, tudi ko je hierarhija aktivna
*/
public function hierarhijaSuperadminUploadLogo()
{
global $site_path;
// tracking - beleženje sprememb
TrackingClass::update($this->anketa, '20');
$finfo = new finfo(FILEINFO_MIME_TYPE);
if (FALSE === $ext = array_search($finfo->file($_FILES['logo']['tmp_name']), [
'jpg' => 'image/jpeg',
'png' => 'image/png',
'gif' => 'image/gif',
], TRUE)) {
throw new RuntimeException('Datoteka ni v pravem formatu.');
}
$shrani_id = (!empty($_POST['id']) ? $_POST['id'] : NULL);
$path = $site_path . 'admin/survey/modules/mod_hierarhija/porocila/logo/';
// Predhodno datoteko pobrišemo
self::brisiLogo($this->anketa, $shrani_id);
$logo_ime = time() . '_' . slug($_FILES['logo']['name'], '_');
if (!move_uploaded_file($_FILES['logo']['tmp_name'], sprintf($path . $logo_ime, sha1_file($_FILES['logo']['tmp_name']), $ext))) {
throw new RuntimeException('Ne morem premakniti datoteke.');
}
$shrani_id = (!empty($_POST['id']) ? $_POST['id'] : NULL);
sisplet_query("UPDATE srv_hierarhija_shrani SET logo='" . $logo_ime . "' WHERE id='" . $shrani_id . "' AND anketa_id='" . $this->anketa . "'");
return redirect('index.php?anketa=' . $this->anketa . '&a=hierarhija_superadmin&m=uredi-sifrante');
}
public static function brisiLogo($anketa, $id = NULL)
{
global $site_path;
if (is_null($id)) {
$id = (!empty($_POST['id']) ? $_POST['id'] : NULL);
}
$old_logo_name = sisplet_query("SELECT logo FROM srv_hierarhija_shrani WHERE id='" . $id . "' AND anketa_id='" . $anketa . "'", "obj")->logo;
$datoteka_za_izbris = NULL;
if (!empty($old_logo_name)) {
$datoteka_za_izbris = $site_path . 'admin/survey/modules/mod_hierarhija/porocila/logo/' . $old_logo_name;
}
if (file_exists($datoteka_za_izbris)) {
unlink($datoteka_za_izbris);
}
sisplet_query("UPDATE srv_hierarhija_shrani SET logo='' WHERE id='" . $id . "' AND anketa_id='" . $anketa . "'");
}
/**
* Uporabniko prikažemo opcijo za aktiviranje ankete in hierarhije
*
* V kolikor anketa še ni bila aktivirana potem ima uporabnik tudi možnost
* izklopiti hierarhijo
*
* @return
*/
public function aktivacijaHierarhijeInAnkete()
{
// Preveri če je kak uporabnik upravičen do evalvacije
$st_uporabnikov_upravicenih_do_evalvacije = (new HierarhijaOnlyQuery())->queryStrukturaUsers($this->anketa, ' AND hs.level=(SELECT MAX(level) FROM srv_hierarhija_struktura WHERE anketa_id=' . $this->anketa . ') GROUP BY users.id');
$st_uporabnikov_upravicenih_do_evalvacije = mysqli_num_rows($st_uporabnikov_upravicenih_do_evalvacije);
if (SurveyInfo::getSurveyModules('hierarhija') == 1) {
// Aktivacija ankete, ki tudi aktivira hierarhij
echo '<div class="okvircek">';
echo '<h2>' . $this->lang['srv_hierarchy_activation_link'];
echo ' <a href="#" class="surveycomment" title="Dodaj komentar k hierarhiji" style="float:right; margin-top: -5px; margin-left: 10px;">
<span class="faicon inline_comment"></span>
</a>';
echo '<span onclick="previewMail(\'1\')"><i class="fa fa-envelope-o block right link" aria-hidden="true"></i></span></h2>';
echo $this->lang['srv_hierarhy_activation_text'];
if ($st_uporabnikov_upravicenih_do_evalvacije) {
echo '<div style="padding: 15px 0 20px;">';
echo '<b>Ob aktiviciji ankete bodo upoštevane naslednje nastavitve:</b><br />';
echo '<table>';
echo '<tbody>';
$nastavitve = [
'srv_hierarchy_code_for_teacher' => 'ne_poslji_kodo_ucitelju',
'srv_hierarchy_code_for_students' => 'ne_poslji_kode_ucencem',
'srv_hierarchy_code_teacher_has_access' => 'onemogoci_dostop_uciteljem',
];
foreach ($nastavitve as $prevod => $nastavitev) {
echo '<tr>';
echo '<td style="width: 180px;">' . $this->lang[$prevod] . '</td>';
echo '<td><input type="radio" name="' . $nastavitev . '" id="' . $nastavitev . '-0" value="0" onclick="posodobiPosiljanjeKod(\'' . $nastavitev . '\', 0);" ' . (is_null(HierarhijaQuery::getOptions($this->anketa, $nastavitev)) ? 'checked="checked"' : NULL) . '>
<label for="' . $nastavitev . '-0">' . $this->lang['srv_hierarchy_yes'] . '</label>';
echo '<input type="radio" name="' . $nastavitev . '" id="' . $nastavitev . '-1" value="1" onclick="posodobiPosiljanjeKod(\'' . $nastavitev . '\', 1);" ' . (HierarhijaQuery::getOptions($this->anketa, $nastavitev) == 1 ? 'checked="checked"' : NULL) . '>
<label for="' . $nastavitev . '-1">' . $this->lang['srv_hierarchy_no'] . '</label></td>';
echo '</tr>';
}
echo '</tbody>';
echo '</table>';
echo '<br />';
echo $this->lang['srv_hierarchy_code_text_bottom'];
echo '</div>';
echo '<button type="button" class="btn btn-moder" onclick="anketa_active(\'' . $this->anketa . '\',\'0\', \'\', \'1\'); return false;">Aktiviraj hierarhijo in anketo</button>';
} else {
echo '<div class="error-email"><span class="faicon warning icon-orange"></span> V bazi ni dodanega nobenega učitelja, zato aktivacija ni mogoča!</div>';
}
echo '</div>';
// izklop ankete
echo '<div class="okvircek" style="margin-top: 30px;">';
echo '<h2>' . $this->lang['srv_hierarchy_turnoff'] . '</h2>';
echo $this->lang['srv_hierarhy_turnoff_text'];
echo '<div>';
echo '<a id="h-navbar-link"
class="no-img side-right btn btn-moder
ref="#"
title="' . $this->lang['srv_hierarchy_turnoff'] . '"
onclick="toggleAdvancedModule(\'hierarhija\', 1);">';
echo $this->lang['srv_hierarchy_turnoff'] . '</a>';
echo '</div>';
echo '</div>';
} else {
// Aktivirana anketa in hierarhija
echo '<div class="okvircek">';
echo '<h2>' . $this->lang['srv_hierarchy_active_hierarchy_and_survey'] . '</h2>';
echo $this->lang['srv_hierarchy_active_hierarchy_and_survey_text'];
$row = SurveyInfo::getInstance()->getSurveyRow();
echo '<button type="button" class="btn btn-moder" onclick="anketa_active(\'' . $this->anketa . '\',\'' . $row['active'] . '\'); return false;">' . ($row['active'] ? $this->lang['srv_hierarchy_deactivate_survey'] : $this->lang['srv_hierarchy_activate_survey']) . '</button>';
echo '</div>';
// Podatki o aktivaciji hierarhije
$hierarhija_options = new HierarhijaQuery();
$cas_aktivacije = $hierarhija_options->getDeleteHierarhijaOptions($this->anketa, 'cas_aktivacije_hierarhije', NULL, NULL, FALSE);
$uporabnik_aktivacije = $hierarhija_options->getDeleteHierarhijaOptions($this->anketa, 'uporabnik_aktiviral_hierarhijo', NULL, NULL, FALSE);
$uporabnik = HierarhijaQuery::getUserSurvey($uporabnik_aktivacije);
echo '<div class="okvircek" style="margin-top: 30px;">';
echo '<h2>' . $this->lang['srv_hierarchy_active_information_user'] . ' <span onclick="previewMail(\'1\')"><i class="fa fa-envelope-o block right link" aria-hidden="true"></i></span></h2>';
echo '<h3>Čas aktivacije: <b>' . $cas_aktivacije . '</b></h3>';
echo '<h3>Aktivnost evalvacije: <b> od ' . date('d.m.Y', strtotime($row['starts'])) . ' do ' . date('d.m.Y', strtotime($row['expire'])) . '</b><a href="index.php?anketa=' . $row['id'] . '&a=trajanje"><span class="faicon edit"></span></a></h3>';
echo '<h3>Hierarhijo je aktiviral uporabnik: <b>' . $uporabnik->name . ' ' . $uporabnik->surname . '</b> (' . $uporabnik->email . ')</h3>';
if (HierarhijaQuery::getOptions($this->anketa, 'onemogoci_dostop_uciteljem') == 1) {
echo '<h3>' . $this->lang['srv_hierarchy_teacher_can_not_access'] . '</h3>';
}
echo '<h3>' . HierarhijaHelper::textGledeNaOpcije($this->anketa, 'srv_hierarchy_email_code') . '</h3>';
$users_upravicen_do_evalvacije = (new HierarhijaOnlyQuery())->queryStrukturaUsers($this->anketa, ' AND hs.level=(SELECT MAX(level) FROM srv_hierarhija_struktura WHERE anketa_id=' . $this->anketa . ') GROUP BY users.id');
echo '<ul style="list-style: initial;max-height: 500px; overflow: auto;">';
while ($uporabnik = $users_upravicen_do_evalvacije->fetch_object()) {
echo '<li>' . $uporabnik->email . '</li>';
}
echo '</ul>';
// Obvesti učitelje, če niso bili obveščeni
$obvesti_Samo_ucitelje = HierarhijaQuery::getOptions($this->anketa, 'obvesti_samo_ucitelje');
if (!is_null($obvesti_Samo_ucitelje) && $obvesti_Samo_ucitelje == 0) {
echo '<div id="obvesti-samo-ucitelje" style="padding-top: 15px;"><button class="btn btn-moder" onclick="obvestiUciteljeZaResevanjeAnkete()">Pošlji obvestilo učiteljem s kodo za reševanje</button></div>';
}
echo '</div>';
// Obveščanje managerjev
$managerji_ankete = (new HierarhijaOnlyQuery())->queryStrukturaUsers($this->anketa, ' AND hs.level<(SELECT MAX(level) FROM srv_hierarhija_struktura WHERE anketa_id=' . $this->anketa . ')');
if (mysqli_num_rows($managerji_ankete) > 0) {
echo '<div class="okvircek" style="margin-top: 30px;" id="vue-custom">';
echo '<h2>' . $this->lang['srv_hierarchy_active_information_about_manager'] . ' <span onclick="previewMail(\'2\')"><i class="fa fa-envelope-o block right link" aria-hidden="true"></i></span></h2>';
echo '<p>' . $this->lang['srv_hierarchy_active_information_about_manager_text'] . '</p>';
echo '<form action="#" method="post">';
echo '<div v-if="managerOznaciVse" v-on:click="managerZamenjajOznaci" class="link oznaci"><i class="fa fa-check-square-o" aria-hidden="true"></i> - označi vse</div>';
echo '<div v-else v-on:click="managerZamenjajOznaci" class="link oznaci"><i class="fa fa-square-o" aria-hidden="true"></i> - označi nobenega</div>';
echo '<ul style="padding: 4px;">';
while ($manager = $managerji_ankete->fetch_object()) {
echo '<li style="padding: 2px 0;"><input type="checkbox" v-model="!managerOznaciVse" name="manager" value="' . $manager->user_id . '" id="manager-' . $manager->id . $manager->user_id . '"/><label for="manager-' . $manager->id . $manager->user_id . '">' . $manager->level . '.nivo: ' . $manager->email . '</label></li>';
}
echo '</ul>';
echo '<button type="submit" class="btn btn-moder" v-on:click="emailObvestiloZaManagerje()"; return false;">' . $this->lang['srv_hierarchy_submit'] . '</button>';
echo '</form>';
echo '</div>';
}
}
}
/**
* Uporabniko prikažemo opcijo za kopiranje ankete s šifranti in strukturo
*/
public function kopiranjeHierarhijeInAnkete()
{
echo '<div class="okvircek">';
echo '<h2>' . $this->lang['srv_hierarchy_copy_link'] . '</h2>';
echo $this->lang['srv_hierarhy_copy_text'];
echo '<button type="button" class="btn btn-moder" onclick="anketa_copy_top(\'' . $this->anketa . '\', \'1\'); return false;">Kopiraj anketo skupaj s strukturo uporabnikov</button>';
echo '<br /><br />';
echo $this->lang['srv_hierarhy_copy_text_2'];
echo '<button type="button" class="btn btn-moder" onclick="anketa_copy_top(\'' . $this->anketa . '\'); return false;">Kopiraj anketo</button>';
echo '</div>';
}
/**
* Prikaz in urejanje hierarhije
*
* @return html page
*/
public function displayHierarhijaUporabniki()
{
SurveySetting::getInstance()->Init($this->anketa);
$row = SurveyInfo::getInstance()
->getSurveyRow(); //("SELECT * FROM srv_anketa WHERE id='$this->anketa'")
$max_st_nivojev = (new HierarhijaOnlyQuery())->getSifrantiRavni($this->anketa, ', MAX(level) AS max', NULL);
//preverimo število nivojev v kolikor jih ni potem nimamo še podatka o vnesenih šifrantih
if (!empty($max_st_nivojev) && !is_null($max_st_nivojev = $max_st_nivojev->fetch_object()->max) && SurveyInfo::getSurveyModules('hierarhija') == 1) {
// Pridobimo ime hierarhije
$aktivna_hierarhija_ime = (new HierarhijaQuery())->getDeleteHierarhijaOptions($this->anketa, 'aktivna_hierarhija_ime', NULL, NULL, FALSE);
echo '<h2>Izgradnja hierarhije <span class="oranzna">' . (!empty($aktivna_hierarhija_ime) ? $aktivna_hierarhija_ime : '') . '</span> za anketo: ' . $row['naslov'] . '</h2>';
echo '<span>Ob aktiviranju bodo uporabniki na najnižjem nivoju prejeli kodo/šifro</span>';
//vnosni obrazec za izgradnjo hierarhije
echo '<div class="izgradnja_hierarhije">';
//pravice za gradnjo hierarhije v kolikor uporabnik ni super admin (type 5 ali več) ima tyle manjši kot 5
if ($this->hierarhija_type > 4) {
$sql = HierarhijaOnlyQuery::queryStrukturaUsersLevel($this->anketa, $this->user, 'ASC');
//pridobimo največji nivo uporabnika ter id-je strukture
while ($struktura = $sql->fetch_object()) {
## pridobimo največji nivo uporabnika ter id-je strukture za posamezen vpis
if (!isset($level) || $struktura->level < $level) {
$level = $struktura->level;
}
$struktura_nivo[] = $struktura->parent_id;
$struktura_nivo[] = $struktura->struktura_id;
}
$struktura_parent = (new HierarhijaOnlyQuery())->queryStruktura($this->anketa, NULL, NULL, 'id DESC');
while ($obj = $struktura_parent->fetch_object()) {
//v polje vnesemo samo id strukture, ki je višja od trenutnega nivoja uporabnika
if (isset($obj) && in_array($obj->id, $struktura_nivo)) {
$struktura_nivo[] = $obj->parent_id; //tu povnimo parent_id, da lahko potem poiščemo celotno strukturo
$struktura_sifrant_id[] = $obj->sifrant_id; // narredimo polje z vsemi ID, sifrantov, ki so že vpisani za hierarhijo
}
}
}
$results = (new HierarhijaQuery())->getSifrantAdmin($this->anketa);
if (!is_null($results)) {
if (isset($level)) {
$this->vpisHierarhijeAdmin($results, $level, $struktura_sifrant_id);
} else {
$this->vpisHierarhijeAdmin($results);
}
}
echo '</div>';
//prikaži JS Tree s trenutno hierarhijo
$this->jsTreePrikazHierarhije();
} elseif (!empty($max_st_nivojev) && SurveyInfo::getSurveyModules('hierarhija') == 2) {
echo '<h3>' . $this->lang['srv_hierarchy_active_text'] . '</h3>';
$this->jsTreePrikazHierarhije();
} else {
echo '<h3>' . $this->lang['srv_hierarchy_nothing'] . '</h3>';
}
}
/**
* Nariše drevesno strukturo hierarhi
*
* @return HTML view
*/
public function jsTreePrikazHierarhije()
{
$hierarhija = (new HierarhijaOnlyQuery())->queryStruktura($this->anketa, NULL, ' AND parent_id IS NULL')
->fetch_object();
echo '<div id="hierarhija-jstree-ime">';
if (!is_null($hierarhija->ravni_ime)) {
echo '<h2>Hierarhija</h2>';
echo '<b>' . $hierarhija->ravni_ime;
if ($this->hierarhija_type > 4) {
echo ' - ' . $hierarhija->sifrant_ime;
}
echo ': </b>';
}
echo '</div>';
// LOAD jsTree na ta element
echo '<div id="admin_hierarhija_jstree"></div>';
echo '<script type="text/javascript" src="modules/mod_hierarhija/js/vendor/jstree.min.js"></script>';
echo '<script>jstree_json_data(' . $this->anketa . ');</script>';
}
/**
* Gradnja uporabnikov/hierarhije, kjer lahko uporabnik izbira kako želi
* imeti prikazana podatke
*/
public function izberiDodajanjeUporabnikovNaHierarhijo()
{
global $site_url;
// za vse ostalo je ure uredi uporabnike - M_UREDI_UPORABNIKE
SurveySetting::getInstance()->Init($this->anketa);
$row = SurveyInfo::getInstance()->getSurveyRow();
$hierarchy_status = SurveyInfo::getSurveyModules('hierarhija');
$max_st_nivojev = (new HierarhijaOnlyQuery())->getSifrantiRavni($this->anketa, ', MAX(level) AS max', NULL);
//preverimo število nivojev v kolikor jih ni potem nimamo še podatka o vnesenih šifrantih
if (!empty($max_st_nivojev) && !is_null($max_st_nivojev = $max_st_nivojev->fetch_object()->max) && $hierarchy_status == 1) {
// Preverimo, če so vpisani šifranti, drugače preusmerimo na vpis šifrantov
$sql = (new HierarhijaOnlyQuery())->getSifrantiRavni($this->anketa); // pridobimo vse nivoje in šifre za vpis uporabnikov
if ($sql->num_rows > 0) {
while ($obj = $sql->fetch_object()) {
if (empty($obj->sifranti)) {
return redirect($site_url . 'admin/survey/index.php?anketa=' . $this->anketa . '&a=' . A_HIERARHIJA_SUPERADMIN . '&m=' . M_ADMIN_UREDI_SIFRANTE . '&e=null');
}
}
}
// Preverimo na katerem nivoju se nahaja uporabnik
$uporabnik_level = HierarhijaOnlyQuery::queryStrukturaUsersLevel($this->anketa, $this->user, 'ASC')
->fetch_object()->level;
if ($this->hierarhija_type < 4 || $uporabnik_level != $max_st_nivojev) {
// Pridobimo ime hierarhije
$aktivna_hierarhija_ime = (new HierarhijaQuery())->getDeleteHierarhijaOptions($this->anketa, 'aktivna_hierarhija_ime', NULL, NULL, FALSE);
echo '<h2>Izgradnja hierarhije <span class="oranzna">' . (!empty($aktivna_hierarhija_ime) ? $aktivna_hierarhija_ime : '') . '</span> za anketo: ' . $row['naslov'] . '</h2>';
echo '<div class="help-text">';
echo '<div class="srv_hierarchy_user_help">';
echo $this->lang['srv_hierarchy_user_help_top_1'];
echo ' Vse uporabnike lahko uvozite tukaj <i class="fa fa-lg modra click fa-user-plus" onclick="uvoziUporabnike()" aria-hidden="true"></i>';
echo '<br/><br/>' . $this->lang['srv_hierarchy_user_help_top_2'];
echo '</div>';
echo '<div class="srv_hierarchy_user_help_sifrant_vnesen" style="display: none;">' . $this->lang['srv_hierarchy_user_help_sifrant_vnesen_1'] . ' Vse uporabnike lahko uvozite tukaj <i class="fa fa-lg modra click fa-user-plus" onclick="uvoziUporabnike()" aria-hidden="true"></i><br /><br />' . $this->lang['srv_hierarchy_user_help_sifrant_vnesen_2'] . '</div>';
echo '</div>';
//vnosni obrazec za izgradnjo hierarhije
echo '<div class="izgradnja_hierarhije">';
$results = (new HierarhijaQuery())->getSifrantAdmin($this->anketa);
if (!is_null($results)) {
// V kolikor je postavvljena spremenljivka $level, potem ni superadmin, ampak uporabnik na določenem nivoju
if ($this->hierarhija_type > 4) {
$this->vpisHierarhijeUporabnikTabela($results);
} else {
$this->vpisHierarhijeAdminTabela($results);
}
}
echo '</div>';
}
//prikaži JS Tree s trenutno hierarhijo
$this->jsTreePrikazHierarhije();
} elseif (!empty($max_st_nivojev) && $hierarchy_status == 2) {
echo '<h3>' . $this->lang['srv_hierarchy_active_text'] . '</h3>';
if ($this->hierarhija_type < 5) {
$results = (new HierarhijaQuery())->getSifrantAdmin($this->anketa);
// Prikažemo samo datatables
echo '<div id="vue-gradnja-hierarhije">';
echo '<div style="padding-top:26px;clear: both;display: block;">';
echo '<h2>Prikaz zgrajene hierarhije:</h2>';
echo '<div id="secondNavigation_links">
<a href="#" class="srv_ico" id="hover_export_icon" title="Izvoz v"><span class="faicon export" deluminate_imagetype="png"></span> Izvozi strukturo uporabnikov</a>
<div id="hover_export" style="display: none;">
<a href="index.php?anketa=' . $this->anketa . '&a=' . ($this->hierarhija_type < 5 ? A_HIERARHIJA_SUPERADMIN : A_HIERARHIJA) . '&m=uredi-uporabnike&izvoz=1" class="srv_ico" title="CSV izvoz uporabnikov za analizo">
Iz tabele
</a>
<a href="index.php?anketa=' . $this->anketa . '&a=' . ($this->hierarhija_type < 5 ? A_HIERARHIJA_SUPERADMIN : A_HIERARHIJA) . '&m=uredi-uporabnike&izvoz=struktura-analiz&n=1" class="srv_ico" title="Izvozi v excel">
Za združevanje s podatki ankete
</a>
<a href="index.php?anketa=' . $this->anketa . '&a=' . ($this->hierarhija_type < 5 ? A_HIERARHIJA_SUPERADMIN : A_HIERARHIJA) . '&m=uredi-uporabnike&izvoz=struktura-analiz" class="srv_ico" title="Izvozi v excel">
Za združevanje z imenskimi vnosi šifrantov
</a>
</div>
</div>';
// echo '<div class="uporabniki-ikona-tabela"
// title="CSV izvoz uporabnikov"
// >
// <a href="index.php?anketa=' . $this->anketa . '&a=' . ($this->hierarhija_type < 5 ? A_HIERARHIJA_SUPERADMIN : A_HIERARHIJA) . '&m=uredi-uporabnike&izvoz=1" class="btn btn-moder">Izvoz uporabnikov</a>
// </div>';
// echo '<div class="uporabniki-ikona-tabela"
// title="CSV izvoz uporabnikov za analizo"
// style="padding-right: 20px;"
// >
// <a href="index.php?anketa=' . $this->anketa . '&a=' . ($this->hierarhija_type < 5 ? A_HIERARHIJA_SUPERADMIN : A_HIERARHIJA) . '&m=uredi-uporabnike&izvoz=struktura-analiz" class="btn btn-moder">Struktura uporabnikov za analizo</a>
// </div>';
echo '<table id="vpis-sifrantov-admin-tabela" class="tabela-obroba custom-datatables">';
echo '<thead>';
echo ' <tr>';
foreach ($results['nivoji'] as $key => $nivo) {
echo '<th style="text-align: left;">' . $nivo['level'] . '.nivo: ' . $nivo['ime'] . '</th>';
}
echo '</tr>';
echo '</thead>';
echo '<tbody>';
echo '<tbody>';
echo '</table>';
echo '</div>';
echo '</div>';
}
$this->jsTreePrikazHierarhije();
} else {
echo '<h3>' . $this->lang['srv_hierarchy_nothing'] . '</h3>';
}
}
/**
* Izris forme za gradnjo hierarhije uporabnik na določenem nivoju
*
* @param array $results
*
* @return echo html
*/
private function vpisHierarhijeUporabnikTabela($results)
{
echo '<div id="vue-gradnja-hierarhije">';
// Kadar nimamo vpisanih šifrantov
echo '<div v-if="podatki[0].sifranti[0].sifrant == null" style="padding:10px 0">';
echo $this->lang['srv_hierarchy_empty_drop_downs'];
echo '</div>';
echo '<div class="vpis-sifrantov" v-else>';
echo '<table class="tabela-obroba tabela-vpis-sifrantov">';
echo '<thead>';
echo '<tr>';
foreach ($results['nivoji'] as $key => $nivo) {
$array_key = array_keys($results['nivoji']);
if ($key == end($array_key)) {
echo '<th style="border-right: none;">' . $nivo['level'] . '. nivo - ' . $nivo['ime'] . '</th>';
} else {
echo '<th>' . $nivo['level'] . '. nivo - ' . $nivo['ime'] . '</th>';
}
}
echo '<th style="border-left: none;">Evalviranec</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
echo '<tr>';
// Če je uporabnik izbran na določen nivo, potem pred tem naredimo fiksna polja z input disabled
echo '<td style="width: auto;vertical-align: top;" v-for="struktura in user.struktura">';
echo '<div style="font-weight: bold;margin: 5px 0;text-align: center;">{{ struktura.ime }}</div>';
echo '</td>';
echo '<td v-for="nivo in podatki" v-if="nivo.level > user.uporabnik.level" style="width: auto;vertical-align: top;">';
// Prikažemo Select2, samo če je 1 nivo in celotne js oz. spletna stran naložena - v kolikor je počasna povezava potem nekaj časa potrebuje, da naloži tudi select2
echo '<div v-show="pageLoadComplete && (izbran.strukturaId[nivo.level -1] > 0 || izbran.sifrant[nivo.level-1] > 0)">';
echo '<div class="h-select2">
<select class="select2" v-select="izbran.sifrant[nivo.level]" data-level="{{ nivo.level }}">
<option value="0"> --- </option>
<option v-for="s in nivo.sifranti" :value="s.id" >{{ s.sifrant }}</option>
</select>
</div>';
echo '<div class="h-uporabnik" v-show="izbran.sifrant[nivo.level] > 0" v-on:click="prikaziVnosOseb(nivo.level)">
<span v-if="nivo.level == podatki.maxLevel" class="icon user-red"></span>
<span v-else class="faicon users icon-as_link"></span>
</div>';
echo '</div>';
// Prikažemo že dodane uporabnike in tudi uporabnike samo dodane v virtual dom
echo '<div class="h-uporabnik-prikazi" v-if="osebe.show[nivo.level] && (nivo.level < podatki.maxLevel)">';
echo 'Uporabnik/i:';
echo '<ul>';
// Seznam uporabnikov, ki so že v bazi in jih samo prikličemo
echo '<li v-for="uporabnik in izbran.sifrantPodatki[nivo.level].uporabniki">{{ uporabnik.email }}
<span v-if="uporabnik.ime != uporabnik.email">({{ uporabnik.ime }} {{ uporabnik.priimek }})</span>
<span class="icon brisi-x"
v-on:click="izbrisiUporabnikaIzBaze(uporabnik.id, $index, nivo.level)"
v-if="osebe.nivo < podatki.maxLevel"
></span>
</li>';
// Seznam uporabnikov, ki jih še ni v bazi in so bili na novo dodani
echo '<li v-for="oseba in osebe.nove[nivo.level]">{{ oseba[0] }} <span v-if="oseba[1]">({{ oseba[1] }} {{ oseba[2] }})</span> <span class="icon brisi-x" v-on:click="izbrisiUporabnika(nivo.level)" ></span></li>';
echo '</ul>';
echo '</div>';
echo '</td>';
echo '<td style="vertical-align: top;padding: 13px;color:#ffa608;border-left: none;">';
// Seznam uporabnikov, ki so že v bazi in jih samo prikličemo
echo '<div v-for="uporabnik in izbran.sifrantPodatki[podatki.maxLevel].uporabniki">{{ uporabnik.email }}
<span v-if="uporabnik.ime != uporabnik.email">({{ uporabnik.ime }} {{ uporabnik.priimek }})</span>
</div>';
// Seznam uporabnikov, ki jih še ni v bazi in so bili na novo dodani
echo '<div v-for="oseba in osebe.nove[podatki.maxLevel]">{{ oseba[0] }} <span v-if="oseba[1]">({{ oseba[1] }} {{ oseba[2] }})</span> <span class="icon brisi-x" v-on:click="izbrisiUporabnika(podatki.maxLevel)" style="margin-left: 10px;"></span></div>';
echo '</td>';
echo '</tr>';
echo '<tr id="gumb">
<td colspan="' . (sizeof($results['nivoji']) + 1) . '">
<button type="button" class="btn btn-moder" v-on:click="submitSifrante()">Potrdi in prenesi</button>
</td>
</tr>';
echo '</tbody>';
echo '</table>';
echo '</div>';
// možnost vpisa osebe za določen nivo
echo '<div style="padding-top:26px;clear: both;display: block;" v-if="osebe.prikazi">';
echo '<div class="okvircek">';
echo '<h2>Vnos oseb za {{ osebe.nivo }}. nivo:</h2>';
echo '<div>';
echo $this->lang['srv_hierarchy_add_users'] . '
<div style="padding:15px 0;">
<textarea name="emails" style="height:100px; width:100%;"
v-if="osebe.nivo < podatki.maxLevel"
v-model="osebe.textarea"
v-on:keyup.enter="preveriPravilnostEmaila()"
></textarea>
<input type="text"
name="emails"
style="height: 16px; width:100%;"
v-else
v-model="osebe.textarea"
v-on:keyup.enter="preveriPravilnostEmaila()"
/>
</div>
<div class="h-opozorilo">*Polje email je obvezno polje za zadnji nivo.</div>
<div v-if="email.opozorilo" style="color:red;font-style:italic;padding: 0 0 10px;"><ul><li v-for="email in email.napake">Elektronski naslov <b>{{ email.naslov }}</b> v vrstici <b>{{ email.vrstica }}</b> ni pravilen.</li></ul></div>
';
echo '</div>';
echo '<button type="button" class="btn btn-moder" v-on:click="vpisOsebNaNivoTextarea()">Vnesi osebe</button>';
echo '</div>';
echo '</div>';
// Prikažemo Datatables rezultate samo za zdanji nivo;
echo '<div style="padding-top:26px;clear: both;display: block;">';
echo '<h2>Prikaz zgrajene hierarhije:</h2>';
echo '<table id="vpis-sifrantov-admin-tabela" class="tabela-obroba">';
echo '<thead>';
echo ' <tr>';
foreach ($results['nivoji'] as $key => $nivo) {
echo '<th style="text-align: left;">' . $nivo['level'] . '.nivo: ' . $nivo['ime'] . '</th>';
}
echo '<th style="width: 120px;"> </th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
echo '<tbody>';
echo '</table>';
echo '</div>';
echo '</div>';
}
/**
* Izris forme za gradnjo hierarhije Superadmin
*
* @param array $results
*
* @return echo html
*/
private function vpisHierarhijeAdminTabela($results)
{
global $site_url;
echo '<div id="vue-gradnja-hierarhije">';
// Kadar nimamo vpisanih šifrantov
echo '<div v-if="podatki[0].sifranti[0].sifrant == null" style="padding:10px 0">';
echo $this->lang['srv_hierarchy_empty_drop_downs'];
echo '</div>';
echo '<div class="vpis-sifrantov" v-else><table class="tabela-obroba tabela-vpis-sifrantov">';
echo '<thead>';
echo '<tr>';
foreach ($results['nivoji'] as $key => $nivo) {
$polje_kljuci = array_keys($results['nivoji']);
if ($key == end($polje_kljuci)) {
echo '<th style="border-right: none;">' . $nivo['level'] . '. nivo - ' . $nivo['ime'] . '</th>';
} else {
echo '<th>' . $nivo['level'] . '. nivo - ' . $nivo['ime'] . '</th>';
}
}
echo '<th style="border-left: none;">Evalviranec</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
echo '<tr>';
echo '<td v-for="nivo in podatki" style="width: auto;vertical-align: top; border-right:none;">';
// Prikažemo Select2, samo če je 1 nivo in celotne js oz. spletna stran naložena - v kolikor je počasna povezava potem nekaj časa potrebuje, da naloži tudi select2
echo '<div v-show="prikaziJsKoSeJeCelaSpletnaStranZeNalozila(nivo.level)">';
echo '<div class="h-select2">
<select class="select2" v-select="izbran.sifrant[nivo.level]" data-level="{{ nivo.level }}">
<option value="0"> --- </option>
<option v-for="s in nivo.sifranti" :value="s.id">{{ s.sifrant }}</option>
</select>
</div>';
echo '<div class="h-uporabnik" v-show="aliPrikazemIkonoZaDodajanjeUporabnikov(nivo.level)" v-on:click="prikaziVnosOseb(nivo.level)">
<span v-if="nivo.level == podatki.maxLevel" class="icon user-red"></span>
<span v-else class="faicon users icon-as_link"></span>
</div>';
echo '<div class="h-select2 izberi-uporabnika" v-if="prikaziSelectZaZadnjiNivo(nivo.level)">
<select class="select2" id="izbira-uciteljev" v-select="user.selected" v-on:change="vpisemoUporabnikaIzDropDownMenija()">
<option value="0"> --- </option>
<option v-for="user in user.dropdown" :value="user.id">{{ user.label }}</option>
</select>
</div>';
echo '</div>';
// Prikažemo že dodane uporabnike in tudi uporabnike samo dodane v virtual dom
echo '<div class="h-uporabnik-prikazi" v-if="osebe.show[nivo.level] && (nivo.level < podatki.maxLevel)">';
echo 'Uporabnik/i:';
echo '<ul>';
// Seznam uporabnikov, ki so že v bazi in jih samo prikličemo
echo '<li v-for="uporabnik in izbran.sifrantPodatki[nivo.level].uporabniki">{{ uporabnik.email }}
<span v-if="uporabnik.ime != uporabnik.email">({{ uporabnik.ime }} {{ uporabnik.priimek }})</span>
<span class="icon brisi-x"
v-on:click="izbrisiUporabnikaIzBaze(uporabnik.id, $index, nivo.level)"
v-if="nivo.level < podatki.maxLevel"
></span>
</li>';
// Seznam uporabnikov, ki jih še ni v bazi in so bili na novo dodani
echo '<li v-for="oseba in osebe.nove[nivo.level]">{{ oseba[0] }} <span v-if="oseba[1]">({{ oseba[1] }} {{ oseba[2] }})</span> <span class="icon brisi-x" v-on:click="izbrisiUporabnika(nivo.level)" ></span></li>';
echo '</ul>';
echo '</div>';
echo '</td>';
echo '<td style="vertical-align: top;padding: 13px;color:#ffa608; border-left: none;">';
echo '<div v-if="izbran.sifrantPodatki[podatki.maxLevel]">';
// Seznam uporabnikov, ki so že v bazi in jih samo prikličemo
echo '<div v-for="uporabnik in izbran.sifrantPodatki[podatki.maxLevel].uporabniki">{{ uporabnik.email }}
<span v-if="uporabnik.ime != uporabnik.email">({{ uporabnik.ime }} {{ uporabnik.priimek }})</span>
</div>';
// Seznam uporabnikov, ki jih še ni v bazi in so bili na novo dodani
echo '<div v-for="oseba in osebe.nove[podatki.maxLevel]">{{ oseba[0] }} <span v-if="oseba[1]">({{ oseba[1] }} {{ oseba[2] }})</span> <span class="icon brisi-x" v-on:click="izbrisiUporabnika(podatki.maxLevel)" style="margin-left: 10px;"></span></div>';
echo '</div>';
echo '</td>';
echo '</tr>';
echo '<tr id="gumb">
<td colspan="' . (sizeof($results['nivoji']) + 1) . '">
<button type="button" class="btn btn-moder" v-on:click="submitSifrante()">Potrdi in prenesi</button>
</td>
</tr>';
echo '</tbody>';
echo '</table>';
echo '<div class="error-email" style="display: none;" v-if="preveriCejeEmailZeVnesenVbazoZaUcitelja(podatki.maxLevel)"><span class="faicon warning icon-orange"></span> Elektronski naslov za zadnji nivo je že vnešen v bazo.</div>';
echo '</div>';
// možnost vpisa osebe za določen nivo
echo '<div style="padding-top:26px;clear: both;display: block;" v-if="osebe.prikazi">';
echo '<div class="okvircek">';
echo '<h2 v-if="osebe.nivo < podatki.maxLevel">Vnos oseb za {{ osebe.nivo }}. nivo managerji z vpogledom v rezultate (?)</h2>';
echo '<h2 v-else class="oranzna">Vnos osebe na zadnjem nivoju - učitelj, ki bo evalviran (?)</h2>';
echo '<div>';
echo '<p v-if="osebe.nivo < podatki.maxLevel">' . $this->lang['srv_hierarchy_add_users'] . '</p>';
echo '<p v-else>' . $this->lang['srv_hierarchy_add_users_last'] . '</p>';
echo '<div style="padding:15px 0;">';
echo '<textarea name="emails" style="height:100px; width:100%;"
v-if="osebe.nivo < podatki.maxLevel"
v-model="osebe.textarea"
v-on:keyup.enter="preveriPravilnostEmaila()"
></textarea>
<input type="text"
name="emails"
style="height: 16px; width:100%;"
v-if="osebe.nivo == podatki.maxLevel"
v-model="osebe.textarea"
v-on:keyup.enter="preveriPravilnostEmaila()"
/>
</div>
<div class="h-opozorilo">*Polje email je obvezno polje za zadnji nivo.</div>
<div v-if="email.opozorilo" style="color:red;font-style:italic;padding: 0 0 10px;"><ul><li v-for="email in email.napake">Elektronski naslov <b>{{ email.naslov }}</b> v vrstici <b>{{ email.vrstica }}</b> ni pravilen.</li></ul></div>';
echo '</div>';
echo '<button type="button" class="btn btn-moder" v-on:click="vpisOsebNaNivoTextarea()">
<span v-if="osebe.nivo < podatki.maxLevel">Vnos oseb</span>
<span v-else>Vnos osebe</span>
</button>';
echo '</div>';
echo '</div>';
// Prikažemo Datatables rezultate samo za zdanji nivo;
echo '<div id="div-datatables" style="padding-top:26px;clear: both;display: block;">';
echo '<h2>Prikaz zgrajene hierarhije:</h2>';
// Vklopimo prikaz pomoči in števila vnoso uporabnikov
echo '<div class="help-text" style="width: 100%">';
$this->prikaziStUporabnikovNaZadnjemNivojuHelp();
echo '</div>';
echo '<div class="uporabniki-ikona-tabela"
title="Zamenjaj uporabnika na zadnjem nivoju"
onclick="zamenjajUporabnikaZNovim()"
>
<div class="btn btn-moder">' . $this->lang['srv_hierarchy_btn_find_and_replace'] . '</div>
</div>';
echo '<div class="uporabniki-ikona-tabela"
title="CSV izvoz uporabnikov"
style="padding: 0 10px;"
>
<a href="index.php?anketa=' . $this->anketa . '&a=' . ($this->hierarhija_type < 5 ? A_HIERARHIJA_SUPERADMIN : A_HIERARHIJA) . '&m=uredi-uporabnike&izvoz=1" class="btn btn-moder">Izvoz uporabnikov</a>
</div>';
echo '<table id="vpis-sifrantov-admin-tabela" class="tabela-obroba">';
echo '<thead>';
echo ' <tr>';
foreach ($results['nivoji'] as $key => $nivo) {
echo '<th style="text-align: left;">' . $nivo['level'] . '.nivo: ' . $nivo['ime'] . '</th>';
}
echo '<th style="width: 70px;"> </th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
echo '<tbody>';
echo '</table>';
echo '<div style="display:block; margin:25px -20px; padding-bottom:25px; width: 100%;">';
echo '<button class="btn btn-moder"
style="float: right;"
onclick="opozoriUporabnikaKerNiPotrdilPodatkov(\'index.php?anketa=' . $this->anketa . '&amp;a=' . A_HIERARHIJA_SUPERADMIN . '&amp;m=' . M_ADMIN_AKTIVACIJA . '\')"
title="' . $this->lang['srv_hierarchy_status'] . '">';
echo $this->lang['next1'] . '</button>';
echo '</div>';
echo '</div>';
echo '</div>';
}
/**
* Prikažemo število vseh uporabnikov na zadnjem nivoju, število unikatnih
* učiteljev in število predmetov
*
* @return html
*/
private function prikaziStUporabnikovNaZadnjemNivojuHelp()
{
$id = (new HierarhijaQuery())->getDeleteHierarhijaOptions($this->anketa, 'srv_hierarhija_shrani_id', NULL, NULL, FALSE);
// Če ne dobimo ID-ja
if (empty($id)) {
return NULL;
}
$sql_st_uciteljev = sisplet_query("SELECT st_uciteljev FROM srv_hierarhija_shrani WHERE id='" . $id . "' AND anketa_id='" . $this->anketa . "'", "obj");
// Prešteje število unikatnih učiteljev
$unikatni_uporabniki = (new HierarhijaOnlyQuery())->queryStrukturaUsers($this->anketa, ' AND hs.level=(SELECT MAX(level) FROM srv_hierarhija_struktura WHERE anketa_id=' . $this->anketa . ') GROUP BY users.id');
$st_unikatnih_uporabnikov = mysqli_num_rows($unikatni_uporabniki);
// Prešteje število unikatnih predmetov
$unikatni_predmeti = (new HierarhijaOnlyQuery())->queryStrukturaUsers($this->anketa, ' AND hs.level=(SELECT MAX(level) FROM srv_hierarhija_struktura WHERE anketa_id=' . $this->anketa . ') GROUP BY hs.hierarhija_sifranti_id');
$st_unikatnih_predmetov = mysqli_num_rows($unikatni_predmeti);
echo $this->lang['srv_hierarchy_user_help_1_1'];
echo ' ' . $sql_st_uciteljev->st_uciteljev . ' ';
echo $this->lang['srv_hierarchy_user_help_1_2'];
echo ' ' . $st_unikatnih_uporabnikov . ' ' . $this->lang['srv_hierarchy_user_help_1_3'] . ' ' . $st_unikatnih_predmetov . ' ' . $this->lang['srv_hierarchy_user_help_1_4'];
}
/**
* Prikaže tabelo za gradnjo hierarhije uporabnikov
*/
public function displayHierarhijaUporabnikiTabela()
{
SurveySetting::getInstance()->Init($this->anketa);
$row = SurveyInfo::getInstance()
->getSurveyRow(); //("SELECT * FROM srv_anketa WHERE id='$this->anketa'")
$max_st_nivojev = (new HierarhijaOnlyQuery())->getSifrantiRavni($this->anketa, ', MAX(level) AS max', NULL);
//preverimo število nivojev v kolikor jih ni potem nimamo še podatka o vnesenih šifrantih
if (!empty($max_st_nivojev) && !is_null($max_st_nivojev = $max_st_nivojev->fetch_object()->max) && SurveyInfo::getSurveyModules('hierarhija') == 1) {
// Pridobimo ime hierarhije
$aktivna_hierarhija_ime = (new HierarhijaQuery())->getDeleteHierarhijaOptions($this->anketa, 'aktivna_hierarhija_ime', NULL, NULL, FALSE);
echo '<h2>Izgradnja hierarhije <span class="oranzan">' . (!empty($aktivna_hierarhija_ime) ? $aktivna_hierarhija_ime : '') . '</span> za anketo: ' . $row['naslov'] . '</h2>';
//vnosni obrazec za izgradnjo hierarhije
echo '<div class="izgradnja_hierarhije">';
//pravice za gradnjo hierarhije v kolikor uporabnik ni super admin (type večji kot 5)
if ($this->hierarhija_type > 4) {
$sql = HierarhijaOnlyQuery::queryStrukturaUsersLevel($this->anketa, $this->user, 'ASC');
//pridobimo največji nivo uporabnika ter id-je strukture
while ($struktura = $sql->fetch_object()) {
## pridobimo največji nivo uporabnika ter id-je strukture za posamezen vpis
if (!isset($level) || $struktura->level < $level) {
$level = $struktura->level;
}
$struktura_nivo[] = $struktura->parent_id;
$struktura_nivo[] = $struktura->struktura_id;
}
$struktura_parent = (new HierarhijaOnlyQuery())->queryStruktura($this->anketa, NULL, NULL, 'id DESC');
while ($obj = $struktura_parent->fetch_object()) {
//v polje vnesemo samo id strukture, ki je višja od trenutnega nivoja uporabnika
if (isset($obj) && in_array($obj->id, $struktura_nivo)) {
$struktura_nivo[] = $obj->parent_id; //tu povnimo parent_id, da lahko potem poiščemo celotno strukturo
$struktura_sifrant_id[] = $obj->sifrant_id; // narredimo polje z vsemi ID, sifrantov, ki so že vpisani za hierarhijo
}
}
}
$results = (new HierarhijaQuery())->getSifrantAdmin($this->anketa);
if (!is_null($results)) {
// echo '<form id="h-submit">';
// echo '<input type="hidden" value="' . $this->anketa . '" id="anketa_id" name="anketa_id">';
//
// if (isset($level)) {
// $this->vpisHierarhijeTabela($results, $level, $struktura_sifrant_id);
// } else {
// $this->vpisHierarhijeTabela($results, null, null, $max_st_nivojev);
// }
// echo '<form id="h-submit">';
// echo '<input type="hidden" value="' . $this->anketa . '" id="anketa_id" name="anketa_id">';
//
// if (isset($level)) {
// $this->vpisHierarhijeAdmin($results, $level, $struktura_sifrant_id);
// } else {
// $this->vpisHierarhijeAdmin($results);
// }
//
//
// echo '<div class="h-form-field">
// <label id="check-uporabnik">Dodaj uporabnika na izbran nivo:</label>
// <div class="h-form-options">
// <input type="checkbox" name="email-check" value="1" id="dovoli-vpis-emaila"/>
// </div>
// </div>';
//
// echo '<div class="h-form-field" id="vpis-emaila">
// <label>' . $this->lang['srv_hierarchy_add_users'] . '</label>
// <div class="h-form-options h-email-user">
// <textarea name="emails"></textarea>
// </div>
// <div class="h-opozorilo">*Polje email je obvezno polje za zadnji nivo.</div>
// </div>';
//
// echo '<div class="h-form-field" style="padding-left: 35em; clear: both;">
// <input type="submit" value="Vnesi">
// </div>';
// echo '</form>';
}
echo '</div>';
//prikaži JS Tree s trenutno hierarhijo
$this->jsTreePrikazHierarhije();
} elseif (!empty($max_st_nivojev) && SurveyInfo::getSurveyModules('hierarhija') == 2) {
echo '<h3>' . $this->lang['srv_hierarchy_active_text'] . '</h3>';
$this->jsTreePrikazHierarhije();
} else {
echo '<h3>' . $this->lang['srv_hierarchy_nothing'] . '</h3>';
}
}
public function statistikaHierjearhije()
{
if ($this->hierarhija_type < 5) {
return $this->statistikaAdminHierarhije();
}
if ($this->hierarhija_type == 10) {
return $this->statistikaUcitelj();
}
echo $this->lang['srv_hierarchy_only_teachers'];
}
/**
* Prikaz statisti za vse ankete brez kod, ker administrator nima pravice do
* vpolgeda teh kod
*/
public function statistikaAdminHierarhije()
{
echo '<div id="hierarhija-status">';
if (SurveyInfo::getSurveyModules('hierarhija') == 2) {
echo '<div class="status-gumbi">';
echo '<button class="btn btn-moder" onclick="prikaziUrejanjeSuperkode()">Vključi izdelavo superšifre</button>';
echo '</div>';
}
echo '<div class="tabela-status">';
echo '<table class="hierarhija-status-admin custom-datatables printElement printTable" id="hierarhija-status-admin">';
echo '<thead>';
echo '<tr>
<th rowspan="2" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb auto-width" style="width:90px;">Izberi učitelja za generiranje super šifre</th>
<th rowspan="2" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb auto-width">Hierarhija</th>
<th rowspan="2" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Email učitelja</th>
<th rowspan="2" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Koda za učence</th>
<th colspan="3" style="text-align: center;" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Status učencev</th>
<th colspan="2" style="text-align: center;" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Časovni potek učencev</th>';
echo '<th rowspan="2" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb" style="border-left:2px solid #fa4913 !important;">Koda za učitelja</th>';
echo '<th rowspan="2" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Vnos učitelja (datum)</th>
</tr>';
echo '<tr>
<th class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">' . $this->lang['srv_userstatus_5ll'] . '</th>
<th class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">' . $this->lang['srv_userstatus_5'] . '</th>
<th class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">' . $this->lang['srv_userstatus_6'] . '</th>
<th class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Prvi vnos</th>
<th class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Zadnji vnos</th>
</tr>';
echo '</thead>';
echo '<tbody>';
$body = HierarhijaIzvoz::getInstance($this->anketa)->getStatus(TRUE);
if (is_null($body)) {
return '';
}
foreach ($body as $id_koda => $row) {
echo '<tr>';
echo '<td style="text-align: center;">
<input type="checkbox" value="' . $id_koda . '" class="koda-za-kosarico" onclick="dodajKodoVKosarico(\'' . $id_koda . '\')"/>
</td>';
// Izrišemo vse stolpce v omenjeni vrstici
foreach ($row as $key => $podatek) {
if ($key == 0 || $key == 1) {
echo '<td ' . ($key == 0 ? 'data-hierarhija' : 'data-email') . '="' . $id_koda . '">' . $podatek . '</td>';
} elseif ($key == 2 || $key == 8) {
echo '<td style="text-align:center; letter-spacing:1px; ' . ($key == 2 ? 'color:#1e88e5;' : NULL) . ($key == 8 ? 'border-left:2px solid #fa4913 !important;' : NULL) . '">' . $podatek . '</td>';
} else {
echo '<td style="text-align:center;">' . $podatek . '</td>';
}
}
echo '</tr>';
}
echo '</tbody>';
echo '</table>';
echo '</div>';
echo '<div class="analysis_bottom_settings">
<a href="#" onclick="printElement(\'Status\'); return false;" title="Natisni" class="srv_ico">
<span class="faicon print icon-grey_dark_link"></span>
</a>
<a href="index.php/?anketa=' . $this->anketa . '&a=' . A_HIERARHIJA_SUPERADMIN . '&m=' . M_HIERARHIJA_STATUS . '&izvoz=status" title="CSV izvoz" class="srv_ico">
<span class="sprites xls_large"></span>
</a>
</div>';
echo '</div>';
// košarica s kodami
echo '<div class="superkode">';
echo '<div class="kosarica" style="display: none;">';
echo '<h2>Tranutno izbrane kode:</h2>';
echo '<ul id="seznamKod"></ul>';
echo '<button class="btn btn-moder" id="ustvari-superkodo">Ustvari novo super kodo</button>';
echo '</div>';
echo '<div class="prikaz-superkod" style="display: none;">
<h2>Superkode</h2>
<table class="hierarhija-tabela">
<thead>
<tr>
<th class="anl_br anl_ac anl_bck anl_variabla_line anl_bb auto-width">Superkoda</th>
<th class="anl_br anl_ac anl_bck anl_variabla_line anl_bb auto-width">Seznam hierarhije, ki jih pokriva</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>';
echo '</div>';
}
/**
* Prikaže tabelo s kodami za učitelja in učence skupaj s s statističnimi
* podatki
*/
protected function statistikaUcitelj()
{
if (!$this->upravicenDoSamoevalvacije()) {
die();
}
echo '<table class="hierarhija-status-ucitelji printElement">';
echo '<thead>';
echo '<tr>
<th rowspan="2" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Hierarhija</th>';
echo '<th rowspan="2" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Koda za učence</th>';
echo '<th rowspan="2" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Koda za učitelja</th>
<th colspan="3" style="text-align: center;" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Status učencev</th>
<th colspan="2" style="text-align: center;" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Časovni potek učencev</th>
<th rowspan="2" class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Vnos učitelja (datum)</th>
</tr>';
echo '<tr>
<th class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">' . $this->lang['srv_userstatus_5ll'] . '</th>
<th class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">' . $this->lang['srv_userstatus_5'] . '</th>
<th class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">' . $this->lang['srv_userstatus_6'] . '</th>
<th class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Prvi vnos</th>
<th class="anl_br anl_ac anl_bck anl_variabla_line anl_bb">Zadnji vnos</th>
</tr>';
echo '</thead>';
echo '<tbody>';
//v kolikor imamo več URL-jev se pravi za več predmetov potem moramo izpisati sklope za vse predmete
$url_hierarhija = self::hierarhijaUrl($this->anketa);
// pridobimo podatke
foreach ($url_hierarhija as $struktura_id => $url) {
// pridobimo podatke o rešenih anketah samo za to strukturo
$cas = $this->pridobiStatisticnePodatke($struktura_id, 'ucenec');
$cas_ucitelj = $this->pridobiStatisticnePodatke($struktura_id, 'ucitelj');
$first_insert = NULL;
$last_insert = NULL;
$zacel_izpolnjevati = 0;
$delno_izpolnjena = 0;
$koncal_anketo = 0;
if (!is_null($cas)) {
foreach ($cas as $key => $row) {
if ($row['cas'] < $first_insert || $key == 0) {
$first_insert = $row['cas'];
}
if ($row['cas'] > $last_insert) {
$last_insert = $row['cas'];
}
// Končal anketo
if ($row['status'] == 6 && $row['lurker'] == 0) {
$koncal_anketo++;
}
// Delno izpolnjena
if ($row['status'] == 5 && $row['lurker'] == 0) {
$delno_izpolnjena++;
}
if ($row['lurker'] == 1) {
$zacel_izpolnjevati++;
}
}
}
echo '<tr>
<td>' . HierarhijaHelper::hierarhijaPrikazNaslovovpriUrlju($this->anketa, $struktura_id) . '</td>';
echo '<td style="text-align:center;color:#ffa608;">' . strtoupper(HierarhijaOnlyQuery::getKodaRow($this->anketa, $struktura_id)->koda) . '</td>';
echo '<td style="text-align:center;">' . strtoupper(HierarhijaOnlyQuery::getKodaRow($this->anketa, $struktura_id, 'ucitelj')->koda) . '</td>
<td style="text-align:center;">' . (!empty($zacel_izpolnjevati) ? $zacel_izpolnjevati : '/') . '</td>
<td style="text-align:center;">' . (!empty($delno_izpolnjena) ? $delno_izpolnjena : '/') . '</td>
<td style="text-align:center;">' . (!empty($koncal_anketo) ? $koncal_anketo : '/') . '</td>
<td style="text-align:center;">' . (!is_null($first_insert) ? date('d.m.Y, H:i', $first_insert) : '/') . '</td>
<td style="text-align:center;">' . (!is_null($last_insert) ? date('d.m.Y, H:i', $last_insert) : '/') . '</td>
<td style="text-align:center;">' . ((!is_null($cas_ucitelj['cas']) && $cas_ucitelj['status'] == 6 && $cas_ucitelj['lurker'] == 0) ? date('d.m.Y, H:i', $cas_ucitelj['cas']) : '/') . '</td>';
// V kolikor je hierarhija aktivna potem prikažemo možnost pregleda analiz
if ($this->modul['hierarhija'] > 1) {
echo '<td><a href="index.php?anketa=' . $this->anketa . '&a=' . A_HIERARHIJA . '&m=' . M_ANALIZE . '&s=' . $struktura_id . '" class="btn btn-moder">Poglej analizo</button></td>';
}
echo '</tr>';
}
echo '</tbody>';
echo '</table>';
}
/**
* Preverimo, če je uporabnik upravičen do samoevalvacije - je na zadnjem
* nivoju hierarhije
*
* @return boolean
*/
public function upravicenDoSamoevalvacije()
{
$max_level = (new HierarhijaOnlyQuery())->getSifrantiRavni($this->anketa, ', MAX(level) AS max', NULL);
$user_level = HierarhijaOnlyQuery::queryStrukturaUsersLevel($this->anketa, $this->user, 'DESC');
if (!empty($user_level) && !empty($user_level) && $user_level->fetch_object()->level == $max_level->fetch_object()->max) {
return TRUE;
}
return FALSE;
}
/********** Prikaz in urejanje hierarhije END **********/
private function pridobiStatisticnePodatke($struktura_id, $vloga)
{
$url = sisplet_query("SELECT url FROM srv_hierarhija_koda WHERE anketa_id='" . $this->anketa . "' AND hierarhija_struktura_id='" . $struktura_id . "' AND vloga='" . $vloga . "'", "obj")->url;
// V kolikor anketa še ni bila aktivirana potem vrnemo null, ker nimamo še podatkov o izpolnjevanju
if (is_null($url)) {
return NULL;
}
parse_str($url, $nivoji);
$polje_iskanja = NULL;
foreach ($nivoji as $key => $nivo) {
if ($key == 'vloga') {
$polje_iskanja = $nivo;
} else {
$polje_iskanja .= ', ' . $nivo;
}
}
$db_table = SurveyInfo::getInstance()->getSurveyArchiveDBString();
// tukaj pridobimo podatke o anketi za določeno strukturo
// preverimov prvi in zadnji nivo
$sql_user = sisplet_query("SELECT time_insert, last_status, lurker FROM srv_data_vrednost" . $db_table . " as sa LEFT JOIN srv_user as us ON (sa.usr_id=us.id) WHERE vre_id IN (" . $polje_iskanja . ") GROUP BY usr_id HAVING COUNT(usr_id)=" . sizeof($nivoji));
$cas = [];
// V kolikor ni zapisov vrnemo prazno
if ($sql_user->num_rows == 0) {
return NULL;
}
while ($row = mysqli_fetch_object($sql_user)) {
$cas[] = [
'cas' => strtotime($row->time_insert),
'status' => $row->last_status,
'lurker' => $row->lurker,
];
}
if ($vloga == 'ucitelj') {
return $cas[0];
}
return (sizeof($cas) > 0 ? $cas : NULL);
}
/********** Prikaz in urejanje hierarhije END **********/
/**
* Prikaže glavni meni za super admina - userja, ki je aktiviral hierarhijo
*
* @return html
*/
public function displayHierarhijaNavigationSuperAdmin()
{
if (is_null($this->hierarhija_type)) {
$this->hierarhija_type = HierarhijaHelper::preveriTipHierarhije($this->anketa);
}
// V kolikor nima pravic običjanega uporabnika potem ne prikažemo nič
if ($this->admin_type > 0 && (is_null($this->hierarhija_type) || $this->hierarhija_type > 4)) {
die();
}
$url = NULL;
if (!empty($_GET['m'])) {
$url = $_GET['m'];
}
// preverimo status hierarhije
$hierarchy_status = SurveyInfo::getSurveyModules('hierarhija');
echo '<div class="hierarhija-navigacija">';
echo '<ul>';
# zavihek urejanje hierarhije
echo '<li>';
echo '<a id="h-navbar-link" class="no-img side-right' . ($url == M_ADMIN_UREDI_SIFRANTE ? ' active' : '') . '"' . ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_HIERARHIJA_SUPERADMIN . '&amp;m=' . M_ADMIN_UREDI_SIFRANTE . '"
title="' . ($hierarchy_status == 2 ? $this->lang['srv_hierarchy_code_active'] : $this->lang['srv_hierarchy_code']) . '">';
echo ($hierarchy_status == 2 ? $this->lang['srv_hierarchy_code_active'] : $this->lang['srv_hierarchy_code']) . '</a>';
echo '</li>';
echo '<li class="space"></li>';
# zavihek uredi uporabnike
echo '<li>';
echo '<a id="h-navbar-link"
class="no-img side-right' . ($url == M_UREDI_UPORABNIKE ? ' active' : '') . '"' . ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_HIERARHIJA_SUPERADMIN . '&amp;m=' . M_UREDI_UPORABNIKE . '"
title="' . ($hierarchy_status == 2 ? $this->lang['srv_hierarchy_add_users_link_active'] : $this->lang['srv_hierarchy_add_users_link']) . '">';
echo ($hierarchy_status == 2 ? $this->lang['srv_hierarchy_add_users_link_active'] : $this->lang['srv_hierarchy_add_users_link']) . '</a>';
echo '</li>';
echo '<li class="space"></li>';
# zavihek AKTIVIRANJE ANEKTE v kolikor je bila že aktivirana potem izklop ni več mogoč
echo '<li>';
echo '<a id="h-navbar-link" class="no-img side-right' . ($url == M_ADMIN_AKTIVACIJA ? ' active' : '') . '"' . ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_HIERARHIJA_SUPERADMIN . '&amp;m=' . M_ADMIN_AKTIVACIJA . '" title="' . $this->lang['srv_hierarchy_activation_link'] . '">';
echo $this->lang['srv_hierarchy_activation_link'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
# zavihek status
echo '<li>';
echo '<a id="h-navbar-link" class="no-img side-right' . ($url == M_HIERARHIJA_STATUS ? ' active' : '') . '"' . ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_HIERARHIJA_SUPERADMIN . '&amp;m=' . M_HIERARHIJA_STATUS . '" title="' . $this->lang['srv_hierarchy_status'] . '">';
echo $this->lang['srv_hierarchy_status'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
# zavihek analize
if (HierarhijaHelper::preveriDostop($this->anketa) ) {
echo '<li>';
echo '<a id="h-navbar-link" class="no-img side-right' . ($url == M_ANALIZE ? ' active' : '') . '"' . ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_HIERARHIJA_SUPERADMIN . '&amp;m=' . M_ANALIZE . '" title="' . $this->lang['srv_hierarchy_analysis_link'] . '">';
echo $this->lang['srv_hierarchy_analysis_link'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
}
# zavihek KOPIRANJE ankete
echo '<li>';
echo '<a id="h-navbar-link" class="no-img side-right' . ($url == M_ADMIN_KOPIRANJE ? ' active' : '') . '"' . ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_HIERARHIJA_SUPERADMIN . '&amp;m=' . M_ADMIN_KOPIRANJE . '" title="' . $this->lang['srv_hierarchy_copy_link'] . '">';
echo $this->lang['srv_hierarchy_copy_link'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
echo '</ul>';
echo '</div>';
}
/**
* Prikaže glavni meni vse uporabnike, ki imajo pravico za dostop do
* hierarhije
*
* @return html
*/
public function displayHierarhijaNavigation()
{
global $site_url;
// V kolikor nima pravic običjanega uporabnika potem ne prikažemo nič
if (is_null($this->hierarhija_type) || $this->hierarhija_type < 5) {
die();
}
$url = NULL;
if (!empty($_GET['m'])) {
$url = $_GET['m'];
}
$hierarchy_status = SurveyInfo::getSurveyModules('hierarhija');
echo '<div class="hierarhija-navigacija ucitelji">';
echo '<ul>';
# zavihek uredi uporabnike
echo '<li>';
echo '<a id="h-navbar-link" class="no-img side-right' . ($url == M_UREDI_UPORABNIKE ? ' active' : '') . '"' . ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_HIERARHIJA . '&amp;m=' . M_UREDI_UPORABNIKE . '"
title="' . ($hierarchy_status == 2 ? $this->lang['srv_hierarchy_add_users_link_active'] : $this->lang['srv_hierarchy_add_users_link']) . '">';
echo ($hierarchy_status == 2 ? $this->lang['srv_hierarchy_add_users_link_active'] : $this->lang['srv_hierarchy_add_users_link']) . '</a>';
echo '</li>';
echo '<li class="space"></li>';
# zavihek status
echo '<li>';
echo '<a id="h-navbar-link" class="no-img side-right' . ($url == M_HIERARHIJA_STATUS ? ' active' : '') . '"' . ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_HIERARHIJA . '&amp;m=' . M_HIERARHIJA_STATUS . '" title="' . $this->lang['srv_hierarchy_status'] . '">';
echo $this->lang['srv_hierarchy_status'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
# zavihek analize
echo '<li>';
echo '<a id="h-navbar-link" class="no-img side-right' . ($url == M_ANALIZE ? ' active' : '') . '"' . ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_HIERARHIJA . '&amp;m=' . M_ANALIZE . '" title="' . $this->lang['srv_hierarchy_analysis_link'] . '">';
echo $this->lang['srv_hierarchy_analysis_link'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
# url naslov
echo '<li class="hierarhija-desni-link">';
echo '<span>' . $this->lang['srv_hierarchy_link_name'] . '</span>';
echo '<a id="h-navbar-link" class="no-img side-right" href="' . $site_url . 'sa" target="_blank">';
echo $site_url . 'sa</a>';
echo '</li>';
echo '</ul>';
echo '</div>';
}
}