2020-08-14 13:36:36 +02:00
< ? 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
2021-03-15 12:34:26 +01:00
echo '<div id="vrednost_edit" class="divPopUp">' ;
2020-08-14 13:36:36 +02:00
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 : 8 px 10 px ;
border - color : #dddddd;
border - width : 1 px ;
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 . '&a=' . A_HIERARHIJA_SUPERADMIN . '&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 ;
}
}
2021-07-23 12:25:40 +02:00
$db_table = SurveyInfo :: getInstance () -> getSurveyArchiveDBString ();
2020-08-14 13:36:36 +02:00
// 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 . '&a=' . A_HIERARHIJA_SUPERADMIN . '&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 . '&a=' . A_HIERARHIJA_SUPERADMIN . '&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 . '&a=' . A_HIERARHIJA_SUPERADMIN . '&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 . '&a=' . A_HIERARHIJA_SUPERADMIN . '&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 . '&a=' . A_HIERARHIJA_SUPERADMIN . '&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 . '&a=' . A_HIERARHIJA_SUPERADMIN . '&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 . '&a=' . A_HIERARHIJA . '&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 . '&a=' . A_HIERARHIJA . '&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 . '&a=' . A_HIERARHIJA . '&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>' ;
}
}