summaryrefslogtreecommitdiffstats
path: root/admin/survey/modules/mod_hierarhija/class/HierarhijaClass.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--admin/survey/modules/mod_hierarhija/class/HierarhijaClass.php2261
1 files changed, 2261 insertions, 0 deletions
diff --git a/admin/survey/modules/mod_hierarhija/class/HierarhijaClass.php b/admin/survey/modules/mod_hierarhija/class/HierarhijaClass.php
new file mode 100644
index 0000000..37bf787
--- /dev/null
+++ b/admin/survey/modules/mod_hierarhija/class/HierarhijaClass.php
@@ -0,0 +1,2261 @@
+<?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()
+ ->getSurveyColumn('db_table') == 1) ? '_active' : '';
+
+ // 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>';
+
+ }
+
+} \ No newline at end of file