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 '
' . $this->lang['srv_hierarchy_element_missing'] . '
'; } if ($aktivna && (is_null($this->hierarhija_type) || $this->hierarhija_type < 4)) { echo '
'; // meni na levi strani echo '
'; echo '
' . $this->lang['srv_hierarchy_save_list'] . '
'; echo '
'; echo ''; echo ''; echo ''; echo ''; echo '
{{ shranjena.ime }} ({{ shranjena.stEvalvirancev }})
'; echo '
{{ shranjena.ime }} ({{ shranjena.stEvalvirancev }})
'; echo '
'; echo '
'; echo '
Urejanje
'; echo '
Uvoz/Izvoz
'; echo '
'; // Uvodno besedilo, ko se aktivira modul hierarhija$anketa echo '
'; echo '

' . $this->lang['srv_hierarchy_wellcome_title'] . '

'; echo $this->lang['srv_hierarchy_wellcome_text'] . '

'; echo ''; echo '
'; // Omogočimo predogled hierarhije echo ''; // naslov hierarhije echo '
'; echo '
'; echo '

Hierarhija {{ (imeHierarhije.shrani.length > 30 ? (imeHierarhije.shrani.substring(0,30)+\' ...\') }} {{ (imeHierarhije.aktivna.length > 30 ? (imeHierarhije.aktivna.substring(0,30)+\' ...\') : imeHierarhije.aktivna) }}

'; echo '
'; echo ''; echo ''; // V kolikor imamo že strukturo prikažemo tudi številke echo '
Hierarhija ima {{ shranjenaHierarhija[imeHierarhije.index].stEvalvirancev }} evalvacij in {{ shranjenaHierarhija[imeHierarhije.index].stUporabnikov }} uporabnikov.
'; // Dodajanje nivojev in njihovih nazivov echo '
'; echo '

' . $this->lang['srv_hierarchy_create_code'] . '

'; echo '
Ustvari novo hierarhijo
'; echo '
'; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; // Vuejs dinamično kreiranje novih nivojev echo ''; echo ''; echo ''; echo ''; echo '
' . $this->lang['srv_hierarchy_table_header_nivo_1'] . '' . $this->lang['srv_hierarchy_table_header_nivo_2'] . '
'; echo '{{ novaHierarhijaSt }}.'; echo ''; echo ''; echo '
' . $this->lang['srv_hierarchy_input_name_nivo'] . '
'; echo '
'; echo '
'; echo '
'; echo '
'; // Selectbox s šifranti za posamezen nivo, vpis šifrantov dovolimo šele ko imamo vpisano prvo raven echo '
'; echo '
'; echo '
'; echo '

' . $this->lang['srv_hierarchy_code_lists'] . '

'; echo '
'; echo ' ' . Help::display('srv_hierarchy_edit_elements') . ''; echo '
'; echo '
'; // izris primera šifrantov echo '
'; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; // Vuejs dinamično kreiranje novih nivojev echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo '
' . $this->lang['srv_hierarchy_table_header_1'] . '' . $this->lang['srv_hierarchy_table_header_2'] . '' . $this->lang['srv_hierarchy_table_header_3'] . '' . $this->lang['srv_hierarchy_table_header_4'] . '
'; echo ''; echo ''; ## Vstavimo checkboc od kje naprej se lahko šifranti ponavljajo echo ''; echo ''; echo ''; echo '
' . $this->lang['srv_hierarchy_input_name_sifrant'] . '
'; echo '
'; echo '
'; // Naprej na naslednji korak echo '
'; // Shranjevanje hierarhije echo '
'; echo 'Shrani trenutno hierarhijo pod imenom: '; echo ''; echo '
'; echo '
Hierarhijo želim shraniti pod novim imenom.
'; echo '
'; echo ''; echo ''; echo '
'; echo '
'; echo '
'; echo ''; echo '
'; echo '
'; // popup za urejanje vrednosti echo '
'; echo '
'; // fade pri fullscreen urejanje spremenljivke echo '
'; echo '
'; } else { echo '
'; // Naslov echo '
'; echo '

Hierarhija: {{ imeHierarhije.aktivna }}

'; echo ''; echo ''; echo '
'; echo '
'; // 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 '
'; echo '

Čas aktivacije: ' . $cas_aktivacije . '

'; echo '

Hierarhijo je aktiviral uporabnik: ' . $uporabnik->name . ' ' . $uporabnik->surname . ' (' . $uporabnik->email . ') Podrobnosti

'; echo '
'; echo '
'; // Tabela nivojev in šifrantov echo '
'; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; // Vuejs dinamično kreiranje novih nivojev echo ''; echo ''; echo ''; echo ''; echo '
' . $this->lang['srv_hierarchy_table_header_1'] . '' . $this->lang['srv_hierarchy_table_header_2'] . '
'; echo '
'; echo '
'; echo 'Izvoz šifrantov'; echo '
'; echo '
'; } } /** * 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 = ' '; $email .= $lang['srv_hierarchy_teacher_email_1']; $email .= '

' . $lang['srv_hierarchy_teacher_email_2'] . '»' . SurveyInfo::getSurveyTitle() . '«' . $lang['srv_hierarchy_teacher_email_3'] . '' . $site_url . 'sa

'; $email .= '
'; $email .= ''; $email .= ''; if (SurveyInfo::getSurveyModules('hierarhija') == 2 || in_array($koda_za_resevanje_ankete, ['vsem', 'ucitelju'])) { $email .= ''; } // V kolikor nimamo nikakršne izbere potem posredujemo kodo tudi za učence if (in_array($koda_za_resevanje_ankete, ['vsem', 'ucencem'])) { $email .= ''; } $email .= ''; $email .= ''; $email .= ''; // generiranje kode while ($koda = mysqli_fetch_object($kode)) { $email .= ''; $email .= ''; if (SurveyInfo::getSurveyModules('hierarhija') == 2 || in_array($koda_za_resevanje_ankete, ['vsem', 'ucitelju'])) { $email .= ''; } // 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 .= ''; } $email .= ''; } $email .= ''; $email .= '
HierarhijaKoda za učiteljaKoda za učence
' . HierarhijaHelper::hierarhijaPrikazNaslovovpriUrlju($anketa, $koda->hierarhija_struktura_id, TRUE) . '' . strtoupper($koda->koda) . '' . strtoupper($koda_ucenci->koda) . '
'; $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 .= '

' . $lang['srv_hierarchy_teacher_email_4'] . '' . $site_url . '' . $lang['srv_hierarchy_teacher_email_5']; $email .= '»' . $user->email . '«' . $lang['srv_hierarchy_teacher_email_6'] . '

'; } // Podpis $signature = Common::getEmailSignature(); $email .= $signature; // Zaključek emaila $email .= ''; // 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 .= '
'; $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 .= ''; foreach ($sifrant as $key => $sifra) { $izpis .= ($key > 1 ? ' - ' : NULL) . $sifra; } $izpis .= ''; if (!$only_hierarhija) { $izpis .= '
'; } 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 '
'; echo '

' . $this->lang['srv_hierarchy_activation_link']; echo ' '; echo '

'; echo $this->lang['srv_hierarhy_activation_text']; if ($st_uporabnikov_upravicenih_do_evalvacije) { echo '
'; echo 'Ob aktiviciji ankete bodo upoštevane naslednje nastavitve:
'; echo ''; echo ''; $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 ''; echo ''; echo ''; echo ''; } echo ''; echo '
' . $this->lang[$prevod] . 'anketa, $nastavitev)) ? 'checked="checked"' : NULL) . '> '; echo 'anketa, $nastavitev) == 1 ? 'checked="checked"' : NULL) . '>
'; echo '
'; echo $this->lang['srv_hierarchy_code_text_bottom']; echo '
'; echo ''; } else { echo '
V bazi ni dodanega nobenega učitelja, zato aktivacija ni mogoča!
'; } echo '
'; // izklop ankete echo '
'; echo '

' . $this->lang['srv_hierarchy_turnoff'] . '

'; echo $this->lang['srv_hierarhy_turnoff_text']; echo '
'; echo ''; echo $this->lang['srv_hierarchy_turnoff'] . ''; echo '
'; echo '
'; } else { // Aktivirana anketa in hierarhija echo '
'; echo '

' . $this->lang['srv_hierarchy_active_hierarchy_and_survey'] . '

'; echo $this->lang['srv_hierarchy_active_hierarchy_and_survey_text']; $row = SurveyInfo::getInstance()->getSurveyRow(); echo ''; echo '
'; // 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 '
'; echo '

' . $this->lang['srv_hierarchy_active_information_user'] . '

'; echo '

Čas aktivacije: ' . $cas_aktivacije . '

'; echo '

Aktivnost evalvacije: od ' . date('d.m.Y', strtotime($row['starts'])) . ' do ' . date('d.m.Y', strtotime($row['expire'])) . '

'; echo '

Hierarhijo je aktiviral uporabnik: ' . $uporabnik->name . ' ' . $uporabnik->surname . ' (' . $uporabnik->email . ')

'; if (HierarhijaQuery::getOptions($this->anketa, 'onemogoci_dostop_uciteljem') == 1) { echo '

' . $this->lang['srv_hierarchy_teacher_can_not_access'] . '

'; } echo '

' . HierarhijaHelper::textGledeNaOpcije($this->anketa, 'srv_hierarchy_email_code') . '

'; $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 ''; // 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 '
'; } echo '
'; // 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 '
'; echo '

' . $this->lang['srv_hierarchy_active_information_about_manager'] . '

'; echo '

' . $this->lang['srv_hierarchy_active_information_about_manager_text'] . '

'; echo '
'; echo ''; echo ''; echo '
    '; while ($manager = $managerji_ankete->fetch_object()) { echo '
  • '; } echo '
'; echo ''; echo '
'; echo '
'; } } } /** * Uporabniko prikažemo opcijo za kopiranje ankete s šifranti in strukturo */ public function kopiranjeHierarhijeInAnkete() { echo '
'; echo '

' . $this->lang['srv_hierarchy_copy_link'] . '

'; echo $this->lang['srv_hierarhy_copy_text']; echo ''; echo '

'; echo $this->lang['srv_hierarhy_copy_text_2']; echo ''; echo '
'; } /** * 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 '

Izgradnja hierarhije ' . (!empty($aktivna_hierarhija_ime) ? $aktivna_hierarhija_ime : '') . ' za anketo: ' . $row['naslov'] . '

'; echo 'Ob aktiviranju bodo uporabniki na najnižjem nivoju prejeli kodo/šifro'; //vnosni obrazec za izgradnjo hierarhije echo '
'; //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 '
'; //prikaži JS Tree s trenutno hierarhijo $this->jsTreePrikazHierarhije(); } elseif (!empty($max_st_nivojev) && SurveyInfo::getSurveyModules('hierarhija') == 2) { echo '

' . $this->lang['srv_hierarchy_active_text'] . '

'; $this->jsTreePrikazHierarhije(); } else { echo '

' . $this->lang['srv_hierarchy_nothing'] . '

'; } } /** * 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 '
'; if (!is_null($hierarhija->ravni_ime)) { echo '

Hierarhija

'; echo '' . $hierarhija->ravni_ime; if ($this->hierarhija_type > 4) { echo ' - ' . $hierarhija->sifrant_ime; } echo ': '; } echo '
'; // LOAD jsTree na ta element echo '
'; echo ''; echo ''; } /** * 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 '

Izgradnja hierarhije ' . (!empty($aktivna_hierarhija_ime) ? $aktivna_hierarhija_ime : '') . ' za anketo: ' . $row['naslov'] . '

'; echo '
'; echo '
'; echo $this->lang['srv_hierarchy_user_help_top_1']; echo ' Vse uporabnike lahko uvozite tukaj '; echo '

' . $this->lang['srv_hierarchy_user_help_top_2']; echo '
'; echo ''; echo '
'; //vnosni obrazec za izgradnjo hierarhije echo '
'; $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 '
'; } //prikaži JS Tree s trenutno hierarhijo $this->jsTreePrikazHierarhije(); } elseif (!empty($max_st_nivojev) && $hierarchy_status == 2) { echo '

' . $this->lang['srv_hierarchy_active_text'] . '

'; if ($this->hierarhija_type < 5) { $results = (new HierarhijaQuery())->getSifrantAdmin($this->anketa); // Prikažemo samo datatables echo '
'; echo '
'; echo '

Prikaz zgrajene hierarhije:

'; echo ''; // echo ''; // echo ''; echo ''; echo ''; echo ' '; foreach ($results['nivoji'] as $key => $nivo) { echo ''; } echo ''; echo ''; echo ''; echo ''; echo '
' . $nivo['level'] . '.nivo: ' . $nivo['ime'] . '
'; echo '
'; echo '
'; } $this->jsTreePrikazHierarhije(); } else { echo '

' . $this->lang['srv_hierarchy_nothing'] . '

'; } } /** * Izris forme za gradnjo hierarhije uporabnik na določenem nivoju * * @param array $results * * @return echo html */ private function vpisHierarhijeUporabnikTabela($results) { echo '
'; // Kadar nimamo vpisanih šifrantov echo '
'; echo $this->lang['srv_hierarchy_empty_drop_downs']; echo '
'; echo '
'; echo ''; echo ''; echo ''; foreach ($results['nivoji'] as $key => $nivo) { $array_key = array_keys($results['nivoji']); if ($key == end($array_key)) { echo ''; } else { echo ''; } } echo ''; echo ''; echo ''; echo ''; echo ''; // Če je uporabnik izbran na določen nivo, potem pred tem naredimo fiksna polja z input disabled echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo '
' . $nivo['level'] . '. nivo - ' . $nivo['ime'] . '' . $nivo['level'] . '. nivo - ' . $nivo['ime'] . 'Evalviranec
'; echo '
{{ struktura.ime }}
'; echo '
'; // 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 '
'; echo '
'; echo '
'; echo '
'; // Prikažemo že dodane uporabnike in tudi uporabnike samo dodane v virtual dom echo '
'; echo 'Uporabnik/i:'; echo '
    '; // Seznam uporabnikov, ki so že v bazi in jih samo prikličemo echo '
  • {{ uporabnik.email }} ({{ uporabnik.ime }} {{ uporabnik.priimek }})
  • '; // Seznam uporabnikov, ki jih še ni v bazi in so bili na novo dodani echo '
  • {{ oseba[0] }} ({{ oseba[1] }} {{ oseba[2] }})
  • '; echo '
'; echo '
'; echo '
'; // Seznam uporabnikov, ki so že v bazi in jih samo prikličemo echo '
{{ uporabnik.email }} ({{ uporabnik.ime }} {{ uporabnik.priimek }})
'; // Seznam uporabnikov, ki jih še ni v bazi in so bili na novo dodani echo '
{{ oseba[0] }} ({{ oseba[1] }} {{ oseba[2] }})
'; echo '
'; echo '
'; // možnost vpisa osebe za določen nivo echo '
'; echo '
'; echo '

Vnos oseb za {{ osebe.nivo }}. nivo:

'; echo '
'; echo $this->lang['srv_hierarchy_add_users'] . '
*Polje email je obvezno polje za zadnji nivo.
  • Elektronski naslov {{ email.naslov }} v vrstici {{ email.vrstica }} ni pravilen.
'; echo '
'; echo ''; echo '
'; echo '
'; // Prikažemo Datatables rezultate samo za zdanji nivo; echo '
'; echo '

Prikaz zgrajene hierarhije:

'; echo ''; echo ''; echo ' '; foreach ($results['nivoji'] as $key => $nivo) { echo ''; } echo ''; echo ''; echo ''; echo ''; echo ''; echo '
' . $nivo['level'] . '.nivo: ' . $nivo['ime'] . '
'; echo '
'; echo '
'; } /** * Izris forme za gradnjo hierarhije Superadmin * * @param array $results * * @return echo html */ private function vpisHierarhijeAdminTabela($results) { global $site_url; echo '
'; // Kadar nimamo vpisanih šifrantov echo '
'; echo $this->lang['srv_hierarchy_empty_drop_downs']; echo '
'; echo '
'; echo ''; echo ''; foreach ($results['nivoji'] as $key => $nivo) { $polje_kljuci = array_keys($results['nivoji']); if ($key == end($polje_kljuci)) { echo ''; } else { echo ''; } } echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo '
' . $nivo['level'] . '. nivo - ' . $nivo['ime'] . '' . $nivo['level'] . '. nivo - ' . $nivo['ime'] . 'Evalviranec
'; // 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 '
'; echo '
'; echo '
'; echo '
'; echo '
'; // Prikažemo že dodane uporabnike in tudi uporabnike samo dodane v virtual dom echo '
'; echo 'Uporabnik/i:'; echo '
    '; // Seznam uporabnikov, ki so že v bazi in jih samo prikličemo echo '
  • {{ uporabnik.email }} ({{ uporabnik.ime }} {{ uporabnik.priimek }})
  • '; // Seznam uporabnikov, ki jih še ni v bazi in so bili na novo dodani echo '
  • {{ oseba[0] }} ({{ oseba[1] }} {{ oseba[2] }})
  • '; echo '
'; echo '
'; echo '
'; echo '
'; // Seznam uporabnikov, ki so že v bazi in jih samo prikličemo echo '
{{ uporabnik.email }} ({{ uporabnik.ime }} {{ uporabnik.priimek }})
'; // Seznam uporabnikov, ki jih še ni v bazi in so bili na novo dodani echo '
{{ oseba[0] }} ({{ oseba[1] }} {{ oseba[2] }})
'; echo '
'; echo '
'; echo ''; echo '
'; // možnost vpisa osebe za določen nivo echo '
'; echo '
'; echo '

Vnos oseb za {{ osebe.nivo }}. nivo ​– managerji z vpogledom v rezultate (?)

'; echo '

​Vnos osebe na zadnjem nivoju - učitelj, ki bo evalviran (?)

'; echo '
'; echo '

' . $this->lang['srv_hierarchy_add_users'] . '

'; echo '

' . $this->lang['srv_hierarchy_add_users_last'] . '

'; echo '
'; echo '
*Polje email je obvezno polje za zadnji nivo.
  • Elektronski naslov {{ email.naslov }} v vrstici {{ email.vrstica }} ni pravilen.
'; echo '
'; echo ''; echo '
'; echo '
'; // Prikažemo Datatables rezultate samo za zdanji nivo; echo '
'; echo '

Prikaz zgrajene hierarhije:

'; // Vklopimo prikaz pomoči in števila vnoso uporabnikov echo '
'; $this->prikaziStUporabnikovNaZadnjemNivojuHelp(); echo '
'; echo '
' . $this->lang['srv_hierarchy_btn_find_and_replace'] . '
'; echo ''; echo ''; echo ''; echo ' '; foreach ($results['nivoji'] as $key => $nivo) { echo ''; } echo ''; echo ''; echo ''; echo ''; echo ''; echo '
' . $nivo['level'] . '.nivo: ' . $nivo['ime'] . '
'; echo '
'; echo ''; echo '
'; echo '
'; echo '
'; } /** * 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 '

Izgradnja hierarhije ' . (!empty($aktivna_hierarhija_ime) ? $aktivna_hierarhija_ime : '') . ' za anketo: ' . $row['naslov'] . '

'; //vnosni obrazec za izgradnjo hierarhije echo '
'; //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 '
'; // echo ''; // // if (isset($level)) { // $this->vpisHierarhijeTabela($results, $level, $struktura_sifrant_id); // } else { // $this->vpisHierarhijeTabela($results, null, null, $max_st_nivojev); // } // echo ''; // echo ''; // // if (isset($level)) { // $this->vpisHierarhijeAdmin($results, $level, $struktura_sifrant_id); // } else { // $this->vpisHierarhijeAdmin($results); // } // // // echo '
// //
// //
//
'; // // echo '
// //
// //
//
*Polje email je obvezno polje za zadnji nivo.
//
'; // // echo '
// //
'; // echo '
'; } echo '
'; //prikaži JS Tree s trenutno hierarhijo $this->jsTreePrikazHierarhije(); } elseif (!empty($max_st_nivojev) && SurveyInfo::getSurveyModules('hierarhija') == 2) { echo '

' . $this->lang['srv_hierarchy_active_text'] . '

'; $this->jsTreePrikazHierarhije(); } else { echo '

' . $this->lang['srv_hierarchy_nothing'] . '

'; } } 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 '
'; if (SurveyInfo::getSurveyModules('hierarhija') == 2) { echo '
'; echo ''; echo '
'; } echo '
'; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; $body = HierarhijaIzvoz::getInstance($this->anketa)->getStatus(TRUE); if (is_null($body)) { return ''; } foreach ($body as $id_koda => $row) { echo ''; echo ''; // Izrišemo vse stolpce v omenjeni vrstici foreach ($row as $key => $podatek) { if ($key == 0 || $key == 1) { echo ''; } elseif ($key == 2 || $key == 8) { echo ''; } else { echo ''; } } echo ''; } echo ''; echo '
Izberi učitelja za generiranje super šifre Hierarhija Email učitelja Koda za učence Status učencev Časovni potek učencevKoda za učiteljaVnos učitelja (datum)
' . $this->lang['srv_userstatus_5ll'] . ' ' . $this->lang['srv_userstatus_5'] . ' ' . $this->lang['srv_userstatus_6'] . ' Prvi vnos Zadnji vnos
' . $podatek . '' . $podatek . '' . $podatek . '
'; echo '
'; echo ''; echo '
'; // košarica s kodami echo '
'; echo ''; echo ''; echo '
'; } /** * 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 ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; //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 ''; echo ''; echo ''; // V kolikor je hierarhija aktivna potem prikažemo možnost pregleda analiz if ($this->modul['hierarhija'] > 1) { echo ''; } echo ''; } echo ''; echo '
HierarhijaKoda za učenceKoda za učitelja Status učencev Časovni potek učencev Vnos učitelja (datum)
' . $this->lang['srv_userstatus_5ll'] . ' ' . $this->lang['srv_userstatus_5'] . ' ' . $this->lang['srv_userstatus_6'] . ' Prvi vnos Zadnji vnos
' . HierarhijaHelper::hierarhijaPrikazNaslovovpriUrlju($this->anketa, $struktura_id) . '' . strtoupper(HierarhijaOnlyQuery::getKodaRow($this->anketa, $struktura_id)->koda) . '' . strtoupper(HierarhijaOnlyQuery::getKodaRow($this->anketa, $struktura_id, 'ucitelj')->koda) . ' ' . (!empty($zacel_izpolnjevati) ? $zacel_izpolnjevati : '/') . ' ' . (!empty($delno_izpolnjena) ? $delno_izpolnjena : '/') . ' ' . (!empty($koncal_anketo) ? $koncal_anketo : '/') . ' ' . (!is_null($first_insert) ? date('d.m.Y, H:i', $first_insert) : '/') . ' ' . (!is_null($last_insert) ? date('d.m.Y, H:i', $last_insert) : '/') . ' ' . ((!is_null($cas_ucitelj['cas']) && $cas_ucitelj['status'] == 6 && $cas_ucitelj['lurker'] == 0) ? date('d.m.Y, H:i', $cas_ucitelj['cas']) : '/') . 'Poglej analizo
'; } /** * Preverimo, če je uporabnik upravičen do samoevalvacije - je na zadnjem * nivoju hierarhije * * @return boolean */ public function upravicenDoSamoevalvacije() { $max_level = (new HierarhijaOnlyQuery())->getSifrantiRavni($this->anketa, ', MAX(level) AS max', NULL); $user_level = HierarhijaOnlyQuery::queryStrukturaUsersLevel($this->anketa, $this->user, 'DESC'); if (!empty($user_level) && !empty($user_level) && $user_level->fetch_object()->level == $max_level->fetch_object()->max) { return TRUE; } return FALSE; } /********** Prikaz in urejanje hierarhije END **********/ private function pridobiStatisticnePodatke($struktura_id, $vloga) { $url = sisplet_query("SELECT url FROM srv_hierarhija_koda WHERE anketa_id='" . $this->anketa . "' AND hierarhija_struktura_id='" . $struktura_id . "' AND vloga='" . $vloga . "'", "obj")->url; // V kolikor anketa še ni bila aktivirana potem vrnemo null, ker nimamo še podatkov o izpolnjevanju if (is_null($url)) { return NULL; } parse_str($url, $nivoji); $polje_iskanja = NULL; foreach ($nivoji as $key => $nivo) { if ($key == 'vloga') { $polje_iskanja = $nivo; } else { $polje_iskanja .= ', ' . $nivo; } } $db_table = SurveyInfo::getInstance()->getSurveyArchiveDBString(); // tukaj pridobimo podatke o anketi za določeno strukturo // preverimov prvi in zadnji nivo $sql_user = sisplet_query("SELECT time_insert, last_status, lurker FROM srv_data_vrednost" . $db_table . " as sa LEFT JOIN srv_user as us ON (sa.usr_id=us.id) WHERE vre_id IN (" . $polje_iskanja . ") GROUP BY usr_id HAVING COUNT(usr_id)=" . sizeof($nivoji)); $cas = []; // V kolikor ni zapisov vrnemo prazno if ($sql_user->num_rows == 0) { return NULL; } while ($row = mysqli_fetch_object($sql_user)) { $cas[] = [ 'cas' => strtotime($row->time_insert), 'status' => $row->last_status, 'lurker' => $row->lurker, ]; } if ($vloga == 'ucitelj') { return $cas[0]; } return (sizeof($cas) > 0 ? $cas : NULL); } /********** Prikaz in urejanje hierarhije END **********/ /** * Prikaže glavni meni za super admina - userja, ki je aktiviral hierarhijo * * @return html */ public function displayHierarhijaNavigationSuperAdmin() { if (is_null($this->hierarhija_type)) { $this->hierarhija_type = HierarhijaHelper::preveriTipHierarhije($this->anketa); } // V kolikor nima pravic običjanega uporabnika potem ne prikažemo nič if ($this->admin_type > 0 && (is_null($this->hierarhija_type) || $this->hierarhija_type > 4)) { die(); } $url = NULL; if (!empty($_GET['m'])) { $url = $_GET['m']; } // preverimo status hierarhije $hierarchy_status = SurveyInfo::getSurveyModules('hierarhija'); echo '
'; echo ''; echo '
'; } /** * 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 '
'; echo ''; echo '
'; } }