summaryrefslogtreecommitdiffstats
path: root/admin/survey/modules/mod_hierarhija/class/Ajax
diff options
context:
space:
mode:
Diffstat (limited to 'admin/survey/modules/mod_hierarhija/class/Ajax')
-rw-r--r--admin/survey/modules/mod_hierarhija/class/Ajax/AjaxHierarhijaClass.php561
-rw-r--r--admin/survey/modules/mod_hierarhija/class/Ajax/AjaxHierarhijaDostopUporabnikovClass.php243
-rw-r--r--admin/survey/modules/mod_hierarhija/class/Ajax/AjaxSuperSifraClass.php69
-rw-r--r--admin/survey/modules/mod_hierarhija/class/Ajax/AjaxUporabnikiClass.php834
4 files changed, 1707 insertions, 0 deletions
diff --git a/admin/survey/modules/mod_hierarhija/class/Ajax/AjaxHierarhijaClass.php b/admin/survey/modules/mod_hierarhija/class/Ajax/AjaxHierarhijaClass.php
new file mode 100644
index 0000000..5bc9a66
--- /dev/null
+++ b/admin/survey/modules/mod_hierarhija/class/Ajax/AjaxHierarhijaClass.php
@@ -0,0 +1,561 @@
+<?php
+/***************************************
+ * Description: Ajax requesti, ki se uporabljajo za kreiranje hierarhije, šifrantov in nivojev
+ * Autor: Robert Šmalc
+ * Created date: 03.02.2017
+ *****************************************/
+
+namespace Hierarhija\Ajax;
+
+
+use Hierarhija\HierarhijaKopiranjeClass;
+use Hierarhija\Model\HierarhijaQuery;
+use JsonSerializable;
+use TrackingClass;
+
+class AjaxHierarhija implements JsonSerializable
+{
+ private $anketa;
+ private $json;
+ private $lang;
+ private $user_id;
+
+ public function __construct($anketa)
+ {
+ $this->anketa = $anketa;
+
+ //global
+ global $lang;
+ global $global_user_id;
+ $this->lang = $lang;
+ $this->user_id = $global_user_id;
+
+ return $this;
+ }
+
+ private static $_instance;
+
+ public static function init($anketa)
+ {
+ if (!static::$_instance)
+ return (new AjaxHierarhija($anketa));
+
+ return static::$_instance;
+ }
+
+ /**
+ * Shranjuje št. in ime nivoja
+ *
+ * @return html -> select -> option
+ */
+ public function postNivoji()
+ {
+ $nivo = $_POST['nivo'];
+ $ime = $_POST['ime'];
+
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ sisplet_query("INSERT INTO srv_hierarhija_ravni (anketa_id, user_id, level, ime) VALUES ('" . $this->anketa . "', '" . $this->user_id . "', '" . $nivo . "', '" . $ime . "')");
+ $nivo_id = mysqli_insert_id($GLOBALS['connect_db']);
+
+ return $nivo_id;
+ }
+
+
+ /**
+ * Shranjuje id nivoja, in šifrant za sledeči nivo
+ *
+ * @return JSON
+ */
+ public function postSifranti()
+ {
+ $idNivoja = $_POST['idNivoja'];
+ $imeSifranta = $_POST['imeSifranta'];
+
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ // V podatke shranimo samo kadar pošljemo vrednost polja
+ if (!empty($imeSifranta)) {
+ $sql_hs = sisplet_query("INSERT INTO srv_hierarhija_sifranti (hierarhija_ravni_id, ime) VALUES ('" . $idNivoja . "', '" . $imeSifranta . "')");
+ $this->sqlError($sql_hs);
+ }
+
+ //izbrišemo šifrante
+ $sql_vsi_sifranti = sisplet_query("SELECT ime FROM srv_hierarhija_sifranti WHERE hierarhija_ravni_id='" . $idNivoja . "' ORDER BY ime");
+ $sifranti = array();
+ while ($row = mysqli_fetch_row($sql_vsi_sifranti)) {
+ $sifranti[] = $row[0];
+ }
+
+ // vrnemo json seznam vseh šifrantov za sledeči nivo
+ return json_encode($sifranti);
+ }
+
+ /**
+ * Select box spremeni v ul in ponudi možnost brisanje šifrantov
+ *
+ * @return JSON
+ */
+ public function brisiSifrante()
+ {
+ $idNivoja = $_POST['idNivoja'];
+
+ //izbrišemo šifrante
+ $sql_vsi_sifranti = sisplet_query("SELECT * FROM srv_hierarhija_sifranti WHERE hierarhija_ravni_id='" . $idNivoja . "' ORDER BY ime");
+ $sifranti = array();
+ while ($row = mysqli_fetch_assoc($sql_vsi_sifranti)) {
+ $sifranti[] = [
+ 'id' => $row['id'],
+ 'ime' => $row['ime']
+ ];
+ }
+
+ // vrnemo json seznam vseh šifrantov za sledeči nivo
+ return json_encode($sifranti);
+ }
+
+ /**
+ * Delete šifrant
+ */
+ public function izbrisiSifrant()
+ {
+ $idSifranta = $_POST['idSifranta'];
+
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ // Najprej preveri, če je v strukturi že uporabljen omenjen šifrant v kolikor je potem ga ne sme dovoliti izbrisati
+ $sql_result = sisplet_query("SELECT ID FROM srv_hierarhija_struktura WHERE hierarhija_sifranti_id='" . $idSifranta . "'");
+
+ // V kolkor je kak vpis potem šifrant obstaja, drugače pa ga lahko izbrišemo
+ if (mysqli_num_rows($sql_result) > 0) {
+ echo 1;
+ } else {
+ //izbriši šifrant
+ sisplet_query("DELETE FROM srv_hierarhija_sifranti WHERE id='" . $idSifranta . "'");
+ }
+ }
+
+ /**
+ * Pridobi število že vpisanih nivojev
+ */
+ public function stNnivojev()
+ {
+ $sql = sisplet_query("SELECT COUNT(id) FROM `srv_hierarhija_ravni` WHERE anketa_id='" . $this->anketa . "'");
+ echo $sql->fetch_row()[0];
+ }
+
+ public function obnoviHierarhijo()
+ {
+ $hierarhija = (isset($_POST['hierarhija']) ? $_POST['hierarhija'] : null);
+ $uporabniki = (isset($_POST['uporabniki']) ? $_POST['uporabniki'] : null);
+ $id_shranjene_strukture = (isset($_POST['id']) ? $_POST['id'] : null);
+
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ // Pobrišemo dosedanjo hierarhijo
+ $this->izbrisiVseRavni();
+
+ // preverimo, če je json
+ if ($this->isJson($hierarhija))
+ $hierarhija = $this->isJson($hierarhija, 1);
+
+ $kopiranje = HierarhijaKopiranjeClass::getInstance($this->anketa)->ustvariRavniInSifranteLahkoTudiStrukturo($hierarhija, $id_shranjene_strukture, $uporabniki);
+
+ if ($kopiranje) {
+ // Vkolikor je bilo kopiranje uspešno shranimo še podatke srv_hierarhija_shrani
+
+ // Pridobimo vse ravni in šifrante, ki smo jih vpisali skupaj z ID-ji;
+ return json_encode($this->pridobiVseRavniSifrante());
+ }
+
+ return 'Napaka pri kopiranju hierarhije';
+ }
+
+ // izbriše shranjeno hierarhijo
+ public function izbrisiHierarhijo()
+ {
+ $hierarhija_id = $_POST['id'];
+
+ if (empty($hierarhija_id)) {
+ echo 'Ni mogoče izbrisati error';
+ return false;
+ }
+
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ // Preverimo, če je omenjena hierarhija že kje uporabljena
+ $uporabljena_hierarhija = sisplet_query("SELECT id FROM srv_hierarhija_options WHERE option_name='srv_hierarhija_shrani_id' AND option_value='" . $hierarhija_id . "'", "obj");
+
+ if (empty($uporabljena_hierarhija) || sizeof($uporabljena_hierarhija) == 0) {
+ $sql = sisplet_query("DELETE FROM srv_hierarhija_shrani WHERE id='" . $hierarhija_id . "'");
+ $this->sqlError($sql);
+
+ echo 'success';
+ }else{
+ echo 'nothing';
+ }
+
+ }
+
+ // Uvozi hierarhijo
+ public function uvoziHierarhijo()
+ {
+ $izrisi = '<div>';
+ $izrisi .= '<h2>' . $this->lang['srv_hierarchy_import_code'] . '</h2>';
+ $izrisi .= '<div>';
+ $izrisi .= '<a href="/uploadi/dokumenti/primer_csv_sifrantov_in_nivojev.csv" download><h5>' . $this->lang['srv_hierarchy_import_example'] . '</h5></a>';
+ $izrisi .= '
+ <form action="index.php?anketa=' . $this->anketa . '&a=hierarhija_superadmin&m=uvoz-sifrantov&t=hierarhija-uvoz" method="POST" enctype="multipart/form-data">
+ <div style="display:block !important;width:52%;float:left; clear:both;">
+ <input type="file" name="uvozi-hierarhijo" class="upload-file" required="required"/>
+ </div>
+ <div style="display:block;float:left; padding-left: 20px;">
+ <button type="submit" class="btn btn-moder">Uvozi hierarhijo</button>
+ </div>
+ </form>
+ ';
+
+ $izrisi .= '</div>';
+ $izrisi .= '</div>';
+
+ // Gumb za zapret popup
+ $izrisi .= '<div class="buttonwrapper spaceRight floatLeft" style="clear: both;padding-top: 20px;">';
+ $izrisi .= '<a class="ovalbutton ovalbutton_gray" href="#" onclick="vrednost_cancel(); return false;"><span>' . $this->lang['srv_close_profile'] . '</span></a>' . "\n\r";
+ $izrisi .= '</div>';
+
+ return $izrisi;
+ }
+
+ /**
+ * Pridobimo vse shranjene hierarhije
+ *
+ * @return $array
+ */
+ public function seznamVsehShranjenihHierarhij()
+ {
+ $sql = sisplet_query("SELECT * FROM srv_hierarhija_shrani WHERE user_id='" . $this->user_id . "'");
+ $this->sqlError($sql);
+
+ $data = array();
+ if ($sql->num_rows > 0) {
+ while ($row = $sql->fetch_object()) {
+ $data[] = [
+ 'id' => $row->id,
+ 'ime' => $row->ime,
+ 'anketa' => $row->anketa_id,
+ 'hierarhija' => $row->hierarhija,
+ 'struktura' => (!is_null($row->struktura) ? 1 : 0),
+ 'stEvalvirancev' => (!is_null($row->st_uciteljev) ? $row->st_uciteljev : 0),
+ 'stUporabnikov' => (!is_null($row->st_vseh_uporabnikov) ? $row->st_vseh_uporabnikov : 0)
+ ];
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * Aktivno/trenutno hierarhijo shrani v srv_hierarhija_shrani v stringu
+ */
+ public function updateAktivnoHierarhijo()
+ {
+ $id = $_POST['id'];
+ $hierarhija = $_POST['hierarhija'];
+
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ $sql_insert = sisplet_query("UPDATE srv_hierarhija_shrani SET hierarhija='" . $hierarhija . "' WHERE id='" . $id . "' AND anketa_id='" . $this->anketa . "'");
+ $this->sqlError($sql_insert);
+ }
+
+ private function trackingChanges()
+ {
+ TrackingClass::update($this->anketa, '21');
+ }
+
+ /**
+ * Pobrišemo vse ravni in nastavitve v podatkovni bazi
+ */
+ public function izbrisiVseRavni()
+ {
+ //Pobrišemo vse nastavitve za omenjeno anketo
+ sisplet_query("DELETE FROM srv_hierarhija_options WHERE anketa_id='" . $this->anketa . "'");
+
+ sisplet_query("DELETE FROM srv_hierarhija_ravni WHERE anketa_id='" . $this->anketa . "'");
+ }
+
+ /**
+ * Pridobimo seznam vseh ravni skupaj s šifrani in vrnemo v obliki polja
+ *
+ * @param $anketa_id ;
+ * @return array();
+ */
+ public function pridobiVseRavniSifrante()
+ {
+
+ $sql = sisplet_query("SELECT id, level, ime, unikaten FROM `srv_hierarhija_ravni` WHERE anketa_id='" . $this->anketa . "'");
+
+ $polje = array();
+ if ($sql->num_rows > 0) {
+ while ($row = $sql->fetch_object()) {
+
+ //Poiščemo še šifrante za omenjen nivo
+ $sql_sifranti = sisplet_query("SELECT id, ime FROM `srv_hierarhija_sifranti` WHERE hierarhija_ravni_id='" . $row->id . "' ORDER BY ime");
+ $sifranti = array();
+ if ($sql_sifranti->num_rows > 0) {
+ while ($sifrant = $sql_sifranti->fetch_object()) {
+ $sifranti[] = [
+ 'id' => $sifrant->id,
+ 'ime' => $sifrant->ime
+ ];
+ }
+ }
+
+
+ $polje[] = [
+ 'st' => $row->level,
+ 'ime' => $row->ime,
+ 'id' => $row->id,
+ 'unikaten' => $row->unikaten,
+ 'sifranti' => $sifranti
+ ];
+ }
+ }
+
+ return $polje;
+ }
+
+ /**
+ * Preimenuje ime hierarhije iz seznama hierarhij
+ */
+ public function preimenujHierarhijo()
+ {
+ $hierarhija_id = $_POST['id'];
+ $ime = strip_tags($_POST['ime']);
+
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ if (!empty($ime)) {
+ $sql = sisplet_query("UPDATE srv_hierarhija_shrani SET ime='" . $ime . "' WHERE id='" . $hierarhija_id . "' AND anketa_id='" . $this->anketa . "'");
+ $this->sqlError($sql);
+ }
+ }
+
+ /**
+ * Popravi ime nivoja ali, da je unikaten in se ga lahko uporabi samo 1x , ko je enkrat že vnešeno v bazo
+ */
+ public function postPopraviNivoSsifranti()
+ {
+ $id_nivoja = $_POST['id_nivoja'];
+ $vsebina = $_POST['besedilo'];
+ $unikaten = $_POST['unikaten'];
+
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ if (!empty($vsebina)) {
+ sisplet_query("UPDATE srv_hierarhija_ravni SET ime='$vsebina' WHERE id='$id_nivoja' AND anketa_id='" . $this->anketa . "'");
+ }
+
+ if (!is_null($unikaten)) {
+ sisplet_query("UPDATE srv_hierarhija_ravni SET unikaten='$unikaten' WHERE id='$id_nivoja' AND anketa_id='" . $this->anketa . "'");
+ }
+ }
+
+ /**
+ * Briši cel nivo skupaj s šifranti
+ *
+ * @return integer
+ */
+ public function brisiCelNivoSkupajSsifranti()
+ {
+ $id_nivoja = $_POST['id_nivoja'];
+
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ # Najprej preverimo, če je za ta nivo že zgrajena hierarhija
+ $hierarhija = sisplet_query("SELECT * FROM srv_hierarhija_struktura WHERE hierarhija_ravni_id='$id_nivoja'");
+ $this->sqlError($hierarhija);
+ if ($hierarhija->num_rows == 0) {
+ // sql level
+ $sql_level = sisplet_query("SELECT level FROM srv_hierarhija_ravni WHERE id='" . $id_nivoja . "'");
+ $this->sqlError($sql_level);
+
+ $nivo_brisi = sisplet_query("DELETE FROM srv_hierarhija_ravni WHERE id='" . $id_nivoja . "'");
+ $this->sqlError($nivo_brisi);
+
+ //Vse ostale preštevilčimo
+ $sql_prestevilci = sisplet_query("SELECT id, level FROM `srv_hierarhija_ravni` WHERE anketa_id='" . $this->anketa . "' AND level>'" . $sql_level->fetch_row()[0] . "'");
+ if ($sql_prestevilci->num_rows > 0) {
+ while ($row = $sql_prestevilci->fetch_object()) {
+ sisplet_query("UPDATE `srv_hierarhija_ravni` SET level='" . ($row->level - 1) . "' WHERE anketa_id='" . $this->anketa . "' AND id='" . $row->id . "'");
+ }
+ }
+
+
+ $sql = sisplet_query("SELECT COUNT(id) FROM `srv_hierarhija_ravni` WHERE anketa_id='" . $this->anketa . "'");
+ echo $sql->fetch_row()[0];
+ } else {
+ echo 0;
+ }
+ }
+
+ /**
+ * Možnost dodajanja komentarja k hierarhiji
+ *
+ * @return html
+ */
+ public function htmlPopUpKomentarKhierarhiji()
+ {
+ $shrani_id = (new HierarhijaQuery)->getRowOptions($this->anketa, 'srv_hierarhija_shrani_id');
+ if (!is_null($shrani_id))
+ $shrani_id = $shrani_id->option_value;
+
+ // Če komenatar že obstaja
+ $sql_shrani = sisplet_query("SELECT komentar FROM srv_hierarhija_shrani WHERE id='" . $shrani_id . "'");
+ $komentar = $sql_shrani->fetch_object()->komentar;
+
+ echo '<div>';
+ echo '<h2> Komentar k hierarhiji </h2>';
+ echo '<div>';
+
+ echo '<div style="padding:15px 0;">';
+ echo '<textarea data-id="' . $shrani_id . '" id="hierarhija-komentar" name="komentar" style="height:100px; width:100%;">' . $komentar . '</textarea>';
+ echo '</div>';
+
+ echo '</div>';
+ echo '</div>';
+
+ // Gumb za zapret popup in potrdit
+ echo '<div class="buttonwrapper spaceRight floatLeft">';
+ echo '<a class="ovalbutton ovalbutton_orange" href="#" onclick="shraniKomentar()"; return false;"><span>' . $this->lang['srv_potrdi'] . '</span></a>' . "\n\r";
+ echo '</div>';
+
+ echo '<div class="buttonwrapper spaceRight floatLeft">';
+ echo '<a class="ovalbutton ovalbutton_gray" href="#" onclick="vrednost_cancel(); return false;"><span>' . $this->lang['srv_close_profile'] . '</span></a>' . "\n\r";
+ echo '</div>';
+ }
+
+ /**
+ * Post komentar k hierarhiji
+ *
+ * @return integer
+ */
+ public function postKomentarKhierarhiji()
+ {
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ $komentar = (!empty($_POST['komentar']) ? $_POST['komentar'] : null);
+ $shrani_id = (!empty($_POST['id']) ? $_POST['id'] : null);
+
+ if (is_null($shrani_id))
+ return 'Ni ID-ja.';
+
+ sisplet_query("UPDATE srv_hierarhija_shrani SET komentar='" . $komentar . "' WHERE id='" . $shrani_id . "' AND anketa_id='" . $this->anketa . "'");
+
+ echo 1;
+ }
+
+ /**
+ * Prikaži popup za nalaganje logotipa
+ *
+ * @return render HTML
+ */
+ public function htmlPopUpUploadLogo()
+ {
+ global $site_url;
+
+ $shrani_id = (new HierarhijaQuery)->getRowOptions($this->anketa, 'srv_hierarhija_shrani_id');
+
+ if (!is_null($shrani_id))
+ $shrani_id = $shrani_id->option_value;
+
+ // Če komenatar že obstaja
+ $logo = sisplet_query("SELECT logo FROM srv_hierarhija_shrani WHERE id='" . $shrani_id . "'", "obj")->logo;
+
+ echo '<div style="clear: both;" id="hierarhija-container">';
+ echo '<h2> Logotip </h2>';
+ echo '<div>';
+ if (!empty($logo))
+ echo '<div id="hierarhija-logo" style="padding-bottom: 15px; display: block; float: left;">
+ <img src="' . $site_url . 'admin/survey/modules/mod_hierarhija/porocila/logo/' . $logo . '" style="max-height: 100px; max-width: 500px;display: block;float: left;">
+ <span style="display: block;float: left; color:#ffa608;cursor: pointer;padding: 10px;" onclick="izbrisiLogo(\'' . $shrani_id . '\')"><i class="fa fa-trash" aria-hidden="true"></i> Izbriši</span>
+ </div>';
+
+ echo '<div style="padding:15px 0;">';
+ echo '
+ <form action="index.php?anketa=' . $this->anketa . '&a=hierarhija_superadmin&m=upload-logo" method="POST" enctype="multipart/form-data">
+ <input type="hidden" name="id" value="' . $shrani_id . '">
+ <div style="display:block !important;width:52%;float:left; clear:both;">
+ <input type="file" name="logo" class="upload-file" required="required"/>
+ </div>
+
+ <div style="clear: both; padding-top: 20px;">
+ <div class="buttonwrapper spaceRight floatLeft">
+ <button type="submit" class="btn btn-moder">Naloži</button>
+ </div>
+
+ <div class="buttonwrapper spaceRight floatLeft">
+ <button class="btn btn-moder" href="#" onclick="vrednost_cancel(); return false;"><span>' . $this->lang['srv_close_profile'] . '</span></button>
+ </div>
+ </div>
+
+ </form>
+ ';
+ echo '</div>';
+ echo '</div>';
+ echo '</div>';
+ }
+
+
+ /**
+ * Preverimo, če je JSON
+ *
+ * @param (string) $string
+ * @return return true ali error
+ */
+ private function isJson($string, $polje = 0)
+ {
+ if (is_string($string)) {
+ $array = json_decode(stripslashes($string));
+
+ if (json_last_error() == JSON_ERROR_NONE) {
+ if ($polje)
+ return $array;
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private function sqlError($sql)
+ {
+ if (!$sql) {
+ echo mysqli_error($GLOBALS['connect_db']);
+ die();
+ }
+
+ }
+
+ /**
+ * Naredi JSON format
+ *
+ * @return json response
+ */
+ public function jsonSerialize()
+ {
+ return $this->json;
+ }
+
+} \ No newline at end of file
diff --git a/admin/survey/modules/mod_hierarhija/class/Ajax/AjaxHierarhijaDostopUporabnikovClass.php b/admin/survey/modules/mod_hierarhija/class/Ajax/AjaxHierarhijaDostopUporabnikovClass.php
new file mode 100644
index 0000000..652cfa9
--- /dev/null
+++ b/admin/survey/modules/mod_hierarhija/class/Ajax/AjaxHierarhijaDostopUporabnikovClass.php
@@ -0,0 +1,243 @@
+<?php
+/***************************************
+ * Description: Omogočanje dostopa za SA modul
+ * Autor: Robert Šmalc
+ * Created date: 28.09.2017
+ *****************************************/
+
+namespace Hierarhija\Ajax;
+
+
+class AjaxHierarhijaDostopUporabnikovClass {
+
+ public function __construct()
+ {
+ global $admin_type;
+
+ if($admin_type != 0)
+ return false;
+
+ if (!$this->isAjax())
+ return redirect('/admin/survey/');
+ }
+
+ public function popupNew($id = null){
+ $user = null;
+
+ if(!empty($id)) {
+ $user = sisplet_query("SELECT id, u.name, u.surname, u.email, d.ustanova, d.aai_email FROM srv_hierarhija_dostop AS d LEFT JOIN users AS u ON u.id=d.user_id WHERE id='".$id."'", "obj");
+
+ if(empty($user->email))
+ $user = null;
+ }
+
+ global $lang;
+ echo '<div class="sa-modul">';
+
+ echo '<div>';
+ if(!empty($user)){
+ echo '<h2> Urejanje uporabnika <span class="red">'.$user->name.' ' .$user->surname.'</span> za dostop do SA modula</h2>';
+ }else {
+ echo '<h2> Vpiši uporabnika za dostop do SA modula</h2>';
+ }
+ echo '<div>';
+
+ // EMAIL
+ echo '<div style="width: 100%;">';
+ echo '<label>Elektronski naslov</label><br/>';
+ if(!empty($user)){
+ echo '<input type="email" value="'.$user->email .'" disabled="disabled" style="width: 80%; padding: 4px; margin: 2px 0;"/>';
+ }else{
+ echo '<input type="email"
+ value=""
+ placeholder="janez.novak@sola.si"
+ id="sa-email"
+ onblur="preveriVpisanEmailZaSAdostop()"
+ required="required"
+ style="width: 80%; padding: 4px; margin: 2px 0;"/>';
+ echo '<input type="hidden" value="" id="sa-id" "/>';
+ echo '<span id="sa-email-sporocilo"></span>';
+ }
+ echo '</div>';
+
+ // Organizzacija
+ echo '<div style="padding:15px 0;width: 100%;">';
+ echo '<label>Šola oz. javni zavod</label><br/>';
+ echo '<input type="text" value="'.(!empty($user) ? $user->ustanova : NULL).'" placeholder="Srednja šola" id="sa-ustanova" required="required" style="width: 80%; padding: 4px; margin: 2px 0;"/>';
+ echo '</div>';
+
+ // Email za AAI dostop
+ echo '<div style="padding-bottom:15px; width: 100%;">';
+ echo '<label>Elektronski naaslov za AAI dostop (v kolikor je primarni email drugačen od AAI dostopa)</label><br/>';
+ echo '<input type="email" value="'.(!empty($user) ? $user->aai_email : NULL).'" placeholder="janez.novak@guest.arnes.si" id="sa-aai" style="width: 80%; padding: 4px; margin: 2px 0;"/>';
+ echo '</div>';
+
+ echo '</div>';
+ echo '</div>';
+
+ // Gumb za zapret popup in potrdit
+ echo '<div class="sa-modul">';
+ echo '<div class="buttonwrapper spaceRight floatLeft">';
+ if(!empty($user)) {
+ echo '<a class="ovalbutton ovalbutton_orange sa-potrdi" href="#" onclick="posodobiSAuporabnika(\'' . $user->id . '\')"; return false;"><span>' . $lang['srv_potrdi'] . '</span></a>' . "\n\r";
+ }else {
+ echo '<a class="ovalbutton ovalbutton_orange sa-potrdi" href="#" onclick="shraniSAuporabnika()"; return false;"><span>' . $lang['srv_potrdi'] . '</span></a>' . "\n\r";
+ }
+ echo '</div>';
+
+ echo '<div class="buttonwrapper spaceRight floatLeft">';
+ echo '<a class="ovalbutton ovalbutton_gray" href="#" onclick="vrednost_cancel(); return false;"><span>' . $lang['srv_close_profile'] . '</span></a>' . "\n\r";
+ echo '</div>';
+ echo '</div>';
+
+ echo '</div>';
+
+ }
+
+ public function save(){
+ $email = (!empty($_POST['email']) ? $_POST['email'] : null);
+ $user_id = (!empty($_POST['id']) ? $_POST['id'] : null);
+ $ustanova = (!empty($_POST['ustanova']) ? $_POST['ustanova'] : null);
+ $aai_email = (!empty($_POST['aai']) ? $_POST['aai'] : null);
+
+ $uporabnik = sisplet_query("SELECT id, email FROM users WHERE email='".$email."'", "obj");
+ if($uporabnik->id != $user_id)
+ return false;
+
+ sisplet_query("INSERT INTO srv_hierarhija_dostop (user_id, dostop, ustanova, aai_email) VALUES ('".$uporabnik->id."', '1', '".$ustanova."', '".$aai_email."')");
+
+ echo 'success';
+ }
+
+ public function update(){
+ $user_id = (!empty($_POST['id']) ? $_POST['id'] : null);
+ $ustanova = (!empty($_POST['ustanova']) ? $_POST['ustanova'] : null);
+ $aai_email = (!empty($_POST['aai']) ? $_POST['aai'] : null);
+
+ sisplet_query("UPDATE srv_hierarhija_dostop SET ustanova='".$ustanova."' , aai_email='".$aai_email."' WHERE user_id='".$user_id."'");
+
+ echo 'success';
+ }
+
+ public function delete(){
+ $user_id = (!empty($_POST['id']) ? $_POST['id'] : null);
+
+ sisplet_query("DELETE FROM srv_hierarhija_dostop WHERE user_id='".$user_id."'");
+ }
+
+ public function checkUserEmail(){
+ $email = (!empty($_POST['email']) ? $_POST['email'] : null);
+
+ if(!validEmail($email)) {
+ echo json_encode([
+ 'tip' => 'error',
+ 'sporocilo' => 'Napačen email.'
+ ]);
+
+ return FALSE;
+ }
+
+ $uporabnik = sisplet_query("SELECT id, email FROM users WHERE email='".$email."'", "obj");
+
+ if(empty($uporabnik)) {
+ echo json_encode([
+ 'tip' => 'error',
+ 'sporocilo' => 'Uporabnika z omenjenim emailom ni v bazi.'
+ ]);
+
+ return FALSE;
+ }
+
+ echo json_encode([
+ 'tip' => 'success',
+ 'sporocilo' => 'Email pravilen, ker uporabnik obstaja v bazi.',
+ 'id' => $uporabnik->id
+ ]);
+ }
+
+ public function show(){
+ global $lang;
+ global $global_user_id;
+ global $admin_type;
+
+ $user_id = (!empty($_POST['id']) ? $_POST['id'] : null);
+
+ if(is_null($user_id))
+ return false;
+
+
+ echo '<div style="float: right; width: 250px; max-height: 345px; overflow-y: auto">';
+ echo '<h3><strong>'.$lang['srv_ankete'].'</strong></h3>';
+
+ echo '<ul>';
+ $sql = sisplet_query("SELECT srv_anketa.id, srv_anketa.naslov FROM srv_dostop, srv_anketa WHERE srv_dostop.uid='$user_id' AND srv_dostop.ank_id=srv_anketa.id ORDER BY srv_anketa.edit_time DESC");
+ while ($row = mysqli_fetch_array($sql)) {
+ echo '<li><a href="#" onclick="anketa_user_dostop(\''.$uid.'\', \''.$row['id'].'\'); return false;">'.$row['naslov'].'</a></li>';
+ }
+
+ echo '</ul>';
+ echo '</div>';
+
+ $user = sisplet_query("SELECT id, u.name, u.surname, u.email, d.ustanova, d.aai_email, u.type, u.status, DATE_FORMAT(d.created_at, '%d.%m.%Y - %H:%i') AS created, DATE_FORMAT(d.updated_at, '%d.%m.%Y - %H:%i') AS updated FROM srv_hierarhija_dostop AS d LEFT JOIN users AS u ON u.id=d.user_id WHERE user_id='".$user_id."'", "obj");
+
+ echo '<div class="sa-modul">';
+ echo '<h3><strong>'.$lang['user2'].'</strong></h3>';
+ echo '<p><label for="type">'.$lang['admin_type'].':</label>';
+ switch ($user->type){
+ case 0:
+ echo $lang['admin_manager'];
+ break;
+ case 1:
+ echo $lang['admin_manager'];
+ break;
+ case 2:
+ echo $lang['admin_clan'];
+ break;
+ default:
+ echo $lang['admin_narocnik'];
+ }
+ echo '</p>';
+ echo '<p><label for="status">'.$lang['status'].':</label>';
+ switch ($user->status){
+ case 0:
+ echo $lang['srv_user_banned'];
+ break;
+ case 1:
+ echo $lang['srv_user_notbanned'];
+ break;
+ }
+ echo '</p>';
+ echo '<p><label for="email">'.$lang['email'].':</label>'.$user->email.'</p>';
+ echo '<p><label for="name">'.$lang['name'].':</label>'.$user->name.'</p>';
+ echo '<p><label for="surname">'.$lang['surname'].':</label>'.$user->surname.'</p>';
+ echo '<p><label for="ustanova">'.$lang['srv_hierarchy_users_organization'].':</label>'.$user->ustanova.'</p>';
+ echo '<p><label for="aai_uporabnik">'.$lang['srv_hierarchy_users_aai'].':</label>'.$user->aai_email.'</p>';
+ echo '<p><label for="created">'.$lang['srv_hierarchy_users_created'].':</label>'.$user->created.'</p>';
+ echo '<p><label for="updatetd">'.$lang['srv_hierarchy_users_updated'].':</label>'.$user->updated.'</p>';
+
+ // Gumb za zapret popup in potrdit
+ echo '<div style=" display: block;">';
+ echo '<div class="buttonwrapper spaceRight floatLeft">';
+ echo '<a class="ovalbutton ovalbutton_gray" href="#" onclick="vrednost_cancel(); return false;"><span>' . $lang['srv_close_profile'] . '</span></a>' . "\n\r";
+ echo '</div>';
+ echo '</div>';
+ echo '</div>';
+
+
+ }
+
+
+ /**
+ * Preverimo, če je ajax request
+ *
+ * @return boolean
+ */
+ private function isAjax()
+ {
+ if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
+ return true;
+
+ return false;
+ }
+
+} \ No newline at end of file
diff --git a/admin/survey/modules/mod_hierarhija/class/Ajax/AjaxSuperSifraClass.php b/admin/survey/modules/mod_hierarhija/class/Ajax/AjaxSuperSifraClass.php
new file mode 100644
index 0000000..478094d
--- /dev/null
+++ b/admin/survey/modules/mod_hierarhija/class/Ajax/AjaxSuperSifraClass.php
@@ -0,0 +1,69 @@
+<?php
+/***************************************
+ * Description:
+ * Autor: Robert Šmalc
+ * Created date: 06.07.2017
+ *****************************************/
+
+namespace Hierarhija\Ajax;
+
+use Hierarhija\Model\HierarhijaQuery;
+use TrackingClass;
+
+class AjaxSuperSifra
+{
+
+ private $anketa;
+ private $lang;
+ private $user_id;
+
+ public function __construct($anketa)
+ {
+ $this->anketa = $anketa;
+
+ //global
+ global $lang;
+ global $global_user_id;
+ $this->lang = $lang;
+ $this->user_id = $global_user_id;
+
+ // tracking - beleženje sprememb
+ TrackingClass::update($this->anketa, '22');
+
+ return $this;
+ }
+
+ private static $_instance;
+
+ public static function init($anketa)
+ {
+ if (!static::$_instance)
+ return (new AjaxSuperSifra($anketa));
+
+ return static::$_instance;
+ }
+
+
+ /**
+ * Shrani superšifro in prikaži v tabeli
+ *
+ * @return
+ */
+ public function shrani()
+ {
+ $kode = ((!empty($_POST['kode']) && is_array($_POST['kode'])) ? $_POST['kode'] : null);
+
+ if(is_null($kode))
+ return '';
+
+ $ss = HierarhijaQuery::saveSuperSifra($this->anketa, $kode);
+
+ echo json_encode($ss);
+ }
+
+ public function getAll()
+ {
+ echo json_encode(HierarhijaQuery::vseSuperkodeSpripadajocimiHierarhijami($this->anketa));
+ }
+
+} \ No newline at end of file
diff --git a/admin/survey/modules/mod_hierarhija/class/Ajax/AjaxUporabnikiClass.php b/admin/survey/modules/mod_hierarhija/class/Ajax/AjaxUporabnikiClass.php
new file mode 100644
index 0000000..628977f
--- /dev/null
+++ b/admin/survey/modules/mod_hierarhija/class/Ajax/AjaxUporabnikiClass.php
@@ -0,0 +1,834 @@
+<?php
+/***************************************
+ * Description:
+ * Autor: Robert Šmalc
+ * Created date: 03.02.2017
+ *****************************************/
+
+namespace Hierarhija\Ajax;
+
+
+use Hierarhija\HierarhijaAjax;
+use Hierarhija\HierarhijaHelper;
+use Hierarhija\Model\HierarhijaOnlyQuery;
+use Hierarhija\Model\HierarhijaQuery;
+use SurveyInfo;
+use TrackingClass;
+
+class AjaxUporabniki
+{
+ private $anketa;
+ private $lang;
+ private $hierarhija_type;
+
+ public function __construct($anketa)
+ {
+ if (empty($anketa))
+ return null;
+
+ $this->anketa = $anketa;
+
+ // global variable
+ global $lang;
+ global $global_user_id;
+ $this->lang = $lang;
+ $this->user_id = $global_user_id;
+ $this->hierarhija_type = HierarhijaHelper::preveriTipHierarhije($this->anketa);
+
+ return $this;
+ }
+
+ private static $_instance;
+
+ public static function init($anketa)
+ {
+ if (!static::$_instance)
+ return (new AjaxUporabniki($anketa));
+
+ return static::$_instance;
+ }
+
+ /**
+ * Pridobimo vse celotno strukturo za prikaz v dataTables
+ *
+ * @return $array - večdimenzionalni
+ */
+ public function getDataTablesPodatkeZaPrikazTabele()
+ {
+ // če je admin
+ if ($this->hierarhija_type < 5) {
+ $podatki = (new HierarhijaQuery())->hierarhijaArrayDataTables($this->anketa);
+ } else {
+ $hierarhija = (new HierarhijaQuery());
+ $uporabnik = $hierarhija->preveriPravicoUporabnika($this->anketa);
+ $struktura = $hierarhija->poisciHierarhijoNavzgor($uporabnik->struktura_id);
+
+ $podatki = (new HierarhijaQuery())->hierarhijaArrayDataTables($this->anketa, $struktura);
+ }
+
+ return $podatki;
+ }
+
+ /**
+ * Preverimo, če je omenjen šifrant že napisan za ustrezen nivo
+ *
+ * @return $array or null
+ */
+ public function preveriVpisSifrantaZaSledeciNivo()
+ {
+ $level = $_POST['level'];
+ $hierarhija_sifranti_id = $_POST['hierarhija_sifranti_id'];
+
+ // Če je parent_id = potem moramo pogledati na prvi nivo IS NULL
+ if (empty($_POST['parent_id'])) {
+ $parent = "parent_id IS NULL";
+ } else {
+ $parent = "parent_id='" . $_POST['parent_id'] . "'";
+ }
+
+ $sql = sisplet_query("SELECT * FROM srv_hierarhija_struktura WHERE hierarhija_sifranti_id='" . $hierarhija_sifranti_id . "' AND level='" . $level . "' AND " . $parent);
+
+ // imamo zapis v bazi, potem pogledamo še če obstajajo uporabniki
+ if ($sql->num_rows > 0) {
+
+ $podatki = [];
+ while ($row = $sql->fetch_object()) {
+
+ $podatki = [
+ 'id' => $row->id,
+ 'level' => $row->level,
+ 'parent_id' => $row->parent_id,
+ 'hierarhija_sifranti_id' => $row->hierarhija_sifranti_id
+
+ ];
+
+ $sql_user = sisplet_query("
+ SELECT
+ users.id as id,
+ users.email as email,
+ users.name as name,
+ users.surname as surname
+ FROM
+ srv_hierarhija_struktura_users as u
+ LEFT JOIN
+ users ON users.id = u.user_id
+ WHERE
+ u.hierarhija_struktura_id = '" . $row->id . "'
+ ");
+
+ // V kolikor so v bazi uporabniki potem pridobimo vse in zapišemo v polje
+ if ($sql_user->num_rows > 0) {
+ while ($user = $sql_user->fetch_object()) {
+ $podatki['uporabniki'][] = [
+ 'id' => $user->id,
+ 'email' => $user->email,
+ 'ime' => $user->name,
+ 'priimek' => $user->surname
+ ];
+ }
+ }
+
+ }
+
+ return ($podatki);
+ }
+
+ return 0;
+ }
+
+ /**
+ * Posodobimo sifrante za JS tree, če brišemo element iz drevesne strukture
+ *
+ * @return array
+ */
+ public function getPosodobiSifranteZaJsTree()
+ {
+ $id = $_POST['id'];
+
+ # Pridobimo strukturo navzgor od trenutnega ID-ja za vse šifrante
+ $nivoji = HierarhijaQuery::posodobiSifranteVrednostiGledeNaTrenutenIdStrukture($id);
+
+ # Pridobimo max st nivojev
+ $max_st = sisplet_query("SELECT MAX(level) AS max FROM srv_hierarhija_ravni WHERE anketa_id='$this->anketa'")->fetch_object()->max;
+
+ # Preverimo na katerem ID-ju (nivoju) se nahaja uporabnik, ki je kliknil na strukturo
+ $user_db = HierarhijaOnlyQuery::queryStrukturaUsersLevel($this->anketa, $this->user_id);
+ if ($user_db->num_rows == 0 && $this->hierarhija_type < 5) {
+ $nivoji['user'] = [
+ 'id_strukture' => 'admin',
+ 'max_level' => $max_st
+ ];
+ }
+
+ if ($user_db->num_rows > 0) {
+ $user_db = $user_db->fetch_object();
+ $nivoji['user'] = [
+ 'id_strukture' => $user_db->struktura_id,
+ 'level' => $user_db->level,
+ 'max_level' => $max_st
+ ];
+ }
+
+ return $nivoji;
+ }
+
+ /**
+ * Shrani strukturo v bazo (novi šifranti in uporabniki za sledeči nivo
+ *
+ * @return string or intiger
+ */
+ public function shraniStrukturoSifrantovInUporabnikov()
+ {
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ $vnos = $_POST['vnos'];
+ $osebe = $_POST['osebe'];
+ $hierarhija_id = null;
+
+ if (empty($vnos))
+ return 0;
+
+ // Najprev shranimo strukturo, da pridobimo id za vpis oseb
+ foreach ($vnos as $nivo => $vpis) {
+ // Vpišemo samo nivoje večje od 0, ker post request vsebuje tudi polje 0, ki za naš ni relavanto
+
+ if ($nivo > 0 && is_array($vpis) && empty($vpis['id'])) {
+ $ravni_id = $vpis['hierarhija_ravni_id'];
+ $sifrant_id = $vpis['hierarhija_sifranti_id'];
+ $level = $vpis['level'];
+
+ // Če je prvi nivo potem je parent_id NULL, za vse ostale primere pa moramo met parenta, če naprej v hierarhiji ni parenta potem uporabimo $hierarhija_id - predhodni element vpisa
+ if ($level == 1)
+ $parent_id = null;
+ elseif ($level > 1 && empty($vpis['parent_id']))
+ $parent_id = $hierarhija_id;
+ else
+ $parent_id = $vpis['parent_id'];
+
+ // Vpis nove strukture, kjer dobimo ID in uporabimo potem za parent id
+ $hierarhija_id = sisplet_query("INSERT INTO
+ srv_hierarhija_struktura (anketa_id, hierarhija_ravni_id, parent_id, hierarhija_sifranti_id, level)
+ VALUES
+ ('" . $this->anketa . "', '" . $ravni_id . "', " . var_export($parent_id, true) . ",'" . $sifrant_id . "', ' " . $level . "')", "id");
+
+ // Vpišemo še uporabnike, če obstaja
+ if (!empty($osebe[$vpis['level']]) && is_array($osebe[$vpis['level']])) {
+ // Osebe so nanizane v poljih, vsaka oseba je podana preko polja, kjer [ 0 => email, 1=>ime, 2=>priimek], obvezen je samo prvi element
+ foreach ($osebe[$vpis['level']] as $oseba) {
+ $this->dodajUporabnikaVbazo($oseba, $hierarhija_id);
+ }
+ }
+
+ } elseif ($nivo > 0 && is_array($vpis) && !empty($vpis['id'])) {
+ // Vpišemo samo uporabnika
+ if (!empty($osebe[$vpis['level']]) && is_array($osebe[$vpis['level']])) {
+ // Osebe so nanizane v poljih, vsaka oseba je podana preko polja, kjer [ 0 => email, 1=>ime, 2=>priimek], obvezen je samo prvi element
+ foreach ($osebe[$vpis['level']] as $oseba) {
+ $this->dodajUporabnikaVbazo($oseba, $vpis['id']);
+ }
+ }
+ }
+ }
+
+ // Podatke shranimo še v srv_hierarhija_shrani
+ (new HierarhijaAjax($this->anketa))->shraniStrukturoHierarhijeVString();
+
+ return 'success';
+ }
+
+ /**
+ * pridobimo pravice trenutnega uporabnika
+ *
+ * level 1 - super admin ima vse pravice, ponavadi je lastnik ankete oz. jo je ustvaril in vključil hierarhijo
+ * levle 10 - običajni uporabnik, ki je dodan na določen nivo hierarhije
+ *
+ * @return array
+ */
+ public function getUserLevelPermission()
+ {
+ // vrne polje leve, struktura_id in parent_id
+ $hierarhija = (new HierarhijaQuery());
+ $uporabnik = $hierarhija->preveriPravicoUporabnika($this->anketa);
+
+ if (is_array($uporabnik) && $uporabnik['uporabnik'] == 1) {
+ echo json_encode($uporabnik);
+ die();
+ }
+
+ $struktura = $hierarhija->poisciHierarhijoNavzgor($uporabnik->struktura_id);
+
+ return [
+ 'uporabnik' => $uporabnik,
+ 'struktura' => $struktura
+ ];
+ }
+
+ /**
+ * Pridobimo nivoje in šifrane za sledečo raven pri tem če ni super admin ga omejimo
+ *
+ * @return array - ['nivoji', 'sifranti', 'maxLevel]
+ */
+ public function getSifrantiZaHierarhijaUserType()
+ {
+ if ($this->hierarhija_type < 5) {
+ // Pridobimo vse ravni in šifrante
+ $podatki = (new HierarhijaQuery())->getSifrantAdmin($this->anketa);
+ } else {
+ // Pridobimo nivo uporabnika, ki se nahaja najvišje v strukturi
+ $uporabnik = (new HierarhijaQuery())->preveriPravicoUporabnika($this->anketa);
+
+ // Pridobimo vse ravni in šifrante samo od uporabnikovega nivoja/level navzdol
+ $podatki = (new HierarhijaQuery())->getSifrantAdmin($this->anketa, 999, $uporabnik->level);
+ }
+
+ // Pridobimo max število nivojev, ki jih lahko vnesemo
+ $podatki['maxLevel'] = sisplet_query("SELECT MAX(level) as level FROM srv_hierarhija_ravni WHERE anketa_id='" . $this->anketa . "'")->fetch_object()->level;
+
+ return $podatki;
+ }
+
+ /**
+ * Dodamo uporabnika v bazo za sledečo strukturo
+ */
+ private function dodajUporabnikaVbazo($oseba, $struktura_id, $last = false)
+ {
+ global $pass_salt;
+
+ // Podatki o uporabniku
+ $email = (is_array($oseba) ? trim($oseba[0]) : $oseba);
+ $update = false;
+
+ //Iz emaila pridobimo podatke
+ preg_match('/(\w+)((?:\.)(\w+))?/', $email, $matches);
+
+ $name = !empty($oseba[1]) ? trim($oseba[1]) : ucfirst(mb_strtolower($matches[1]));
+
+ // V kolikor je primek ga
+ if(!empty($oseba[2])) {
+ $surname = trim($oseba[2]);
+ $update = true;
+ }elseif(!empty($matches[3])){
+ $surname = ucfirst(mb_strtolower($matches[3]));
+ }else{
+ $surname = '';
+ }
+
+
+ if ($email != '' && validEmail($email)) {
+ $sql_user = sisplet_query("SELECT id FROM users WHERE email='$email'");
+
+ if (mysqli_num_rows($sql_user) == 0) {
+ sisplet_query("INSERT INTO users (name, surname, email, pass, type, when_reg, came_from) VALUES ('$name', '$surname', '$email', '" . base64_encode((hash(SHA256, '' . $pass_salt))) . "', '3', DATE_FORMAT(NOW(), '%Y-%m-%d'), '1')");
+ $user_id = mysqli_insert_id($GLOBALS['connect_db']);
+ } else {
+ $row = mysqli_fetch_array($sql_user);
+ $user_id = $row['id'];
+
+ // V kolikor smo mi vnesli ime in prrimek potem popravimo tudi v bazi
+ if($update)
+ sisplet_query("UPDATE users SET name='".$name."', surname='".$surname."' WHERE id='".$user_id."'");
+ }
+
+ // V kolikor smo dodali nov email na zadnji nivo potem samo zamenjamo z obstoječim
+ if ($last) {
+ $query = sisplet_query("UPDATE srv_hierarhija_struktura_users SET user_id='" . $user_id . "' WHERE hierarhija_struktura_id='" . $struktura_id . "'");
+ } else {
+ $query = sisplet_query("INSERT INTO srv_hierarhija_struktura_users (hierarhija_struktura_id, user_id) VALUES ('" . $struktura_id . "', '" . $user_id . "')");
+ }
+ if (!$query) echo mysqli_error($GLOBALS['connect_db']);
+
+ // Preverimo, če je uporabnik že dodan in če ni ga nato šele dodamo
+ $user_search = sisplet_query("SELECT * FROM srv_hierarhija_users WHERE user_id='" . $user_id . "' AND anketa_id='$this->anketa'");
+ if ($user_search->num_rows == 0) {
+ $user_query = sisplet_query("INSERT INTO srv_hierarhija_users (user_id, anketa_id, type) VALUES ('" . $user_id . "', '" . $this->anketa . "', 10)");
+ if (!$user_query) echo mysqli_error($GLOBALS['connect_db']);
+ }
+
+ // Preverimo, če ima uporabnik za omenjeno anketo že pravice in mu nato dodamo pravice
+ HierarhijaQuery::dostopZaUporabnika($this->anketa, $user_id, 'insert');
+ }
+
+ }
+
+ /**
+ * Pridobi vse uporabnike za določen nivo
+ * uporablja se prid DataTables edit mode, da izpiše uporabnike pod vsak nivo
+ *
+ * @var $id - struktura id
+ * @return $array
+ */
+ public function pridobiUporabnikeZaDolocenNivoId()
+ {
+ // id strukture, da preverimo kateri uporabnikise nahajajo na omenjeni strukturi
+ $id = $_POST['id'];
+
+ $uporabniki = (new HierarhijaQuery())->pridobiVseUporabnikeZaSpecificnoStrukturo($id);
+
+ if (!is_array($uporabniki) || sizeof($uporabniki) == 0)
+ return 0;
+
+ //Preverimo max število nivojev/ravni za omenjeno anketo
+ $max_level = sisplet_query("SELECT MAX(level) AS level FROM srv_hierarhija_ravni WHERE anketa_id='" . $this->anketa . "'")->fetch_object()->level;
+
+ return [
+ 'uporabniki' => $uporabniki,
+ 'maxLevel' => $max_level
+ ];
+ }
+
+ /**
+ * Shrani uporabnike na določen nivo strukture - pri DataTables edit mode
+ */
+ public function postUporabnikeZaDolocenNivoId()
+ {
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ $uporabniki = json_decode(stripslashes($_POST['uporabniki']));
+ $struktura_id = $_POST['struktura'];
+
+ if (sizeof($uporabniki) == 0)
+ return 'uporabnik';
+
+ // pobrišemo vse že dodane uporabnike
+ sisplet_query("DELETE FROM srv_hierarhija_struktura_users WHERE hierarhija_struktura_id='" . $struktura_id . "'");
+
+ // vpišemo nove uporabnike
+ foreach ($uporabniki as $uporabnik) {
+ sisplet_query("INSERT INTO srv_hierarhija_struktura_users (hierarhija_struktura_id, user_id) VALUES ('" . $struktura_id . "', '" . $uporabnik . "')");
+ }
+ }
+
+ /**
+ * Prikaži popup za vnos uporabnikov
+ *
+ * @return html
+ */
+ public function getUsersImportPopup(){
+
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ echo '<div>';
+ echo '<h2>' . $this->lang['srv_hierarchy_import_user_title'] . '</h2>';
+ echo '<div>';
+ echo $this->lang['srv_hierarchy_import_user_text'];
+
+ echo '<div style="padding:15px 0;">';
+ echo '<textarea id="users-email-import" name="emails" style="height:300px; width:45%;float: left;" placeholder="jan.nov@sola.si, Janez, Novak"></textarea>';
+ echo '<div style="width:50%;display: block;float: left;height: 320px;clear: right;overflow: auto;padding-left: 18px;">';
+ echo '<b>Seznam učiteljev:</b>';
+
+ $vsi_ucitelji = $this->getAllUserInJson(true);
+
+ if(!empty($vsi_ucitelji)) {
+ echo '<div style="height: 269px;overflow: auto;"><ul>';
+ foreach($vsi_ucitelji as $ucitelj) {
+ echo '<li>'.$ucitelj['label'].'</li>';
+ }
+ echo '</ul></div>';
+ }
+ echo '</div>';
+ echo '</div>';
+
+ echo '</div>';
+ echo '</div>';
+
+ // Gumb za zapret popup in potrdit
+ echo '<div class="buttonwrapper spaceRight floatLeft">';
+ echo '<a class="ovalbutton ovalbutton_orange" href="#" onclick="shraniVseVpisaneUporabnike(); return false;"><span>' . $this->lang['srv_potrdi'] . '</span></a>' . "\n\r";
+ echo '</div>';
+
+ echo '<div class="buttonwrapper spaceRight floatLeft">';
+ echo '<a class="ovalbutton ovalbutton_gray" href="#" onclick="vrednost_cancel(); return false;"><span>' . $this->lang['srv_close_profile'] . '</span></a>' . "\n\r";
+ echo '</div>';
+ }
+
+ /**
+ * POST: vnos podatkov za vpis uporabnikov*
+ */
+ public function postImportUsers(){
+ $users = (!empty($_POST['users']) ? json_decode(stripslashes($_POST['users'])) : null);
+
+ if(is_null($users))
+ return 'null';
+
+ // Vsakega uporabnika pridobimo v svoj array
+ $users = explode(PHP_EOL, $users);
+
+ // Pridobimo ID za izbrano shranjeno hierarhijo
+ $id = HierarhijaQuery::getOptions($this->anketa, 'srv_hierarhija_shrani_id');
+
+ // Pridobimo podatke od prej, če niso NULL
+ $ze_vpisani_uporabniki = HierarhijaQuery::getHierarhijaShraniRow($id, 'uporabniki_list');
+
+ // Če imamo obstoječe upoabnik, jih sedajali nove
+ $polje = [];
+ if(!empty($ze_vpisani_uporabniki))
+ $polje = unserialize($ze_vpisani_uporabniki);
+
+ foreach($users as $user){
+ $user = trim($user);
+
+ $uporabnik = explode(',', $user);
+
+ if(validEmail($uporabnik[0])) {
+ preg_match('/(\w+)((?:\.)(\w+))?/', $uporabnik[0], $matches);
+
+ $name = ( !empty($uporabnik[1]) ? trim($uporabnik[1]) : ucfirst(mb_strtolower($matches[1])) );
+ $surname = ( !empty($uporabnik[2]) ? trim($uporabnik[2]) : ucfirst(mb_strtolower($matches[2])) );
+
+ $polje[] = [
+ 'id' => $user,
+ 'label' => $name. ' '.$surname.' - ('.$uporabnik[0].')'
+ ];
+ }
+ }
+
+ sisplet_query("UPDATE srv_hierarhija_shrani SET uporabniki_list='".serialize($polje)."' WHERE id='" . $id . "' AND anketa_id='" . $this->anketa . "'");
+
+ echo json_encode($polje);
+ }
+
+ /**
+ * Pridobimo vse uporabnike
+ *
+ * @return json
+ */
+ public function getAllUserInJson($return = false)
+ {
+ $id = HierarhijaQuery::getOptions($this->anketa, 'srv_hierarhija_shrani_id');
+ $uporabniki = HierarhijaQuery::getHierarhijaShraniRow($id, 'uporabniki_list');
+
+ if($return)
+ return unserialize($uporabniki);
+
+ echo json_encode(unserialize($uporabniki));
+ }
+
+
+ /**
+ * Pop up obrazec za dodajanje uporabnikov na določen nivo
+ *
+ * @return html
+ */
+ public function htmlPopUpDodajUporabnikeZaDolocenNivoId()
+ {
+
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ $struktura_id = $_POST['struktura'];
+ $last = $_POST['last'];
+
+ echo '<div>';
+ echo '<h2>' . ($last ? $this->lang['srv_hierarchy_add_new_user_popup_last'] : $this->lang['srv_hierarchy_add_new_user_popup']) . '</h2>';
+ echo '<div>';
+ echo($last ? $this->lang['srv_hierarchy_edit_users_last'] : $this->lang['srv_hierarchy_edit_users']);
+ echo '<div style="padding:15px 0;">';
+ if ($last) {
+ echo '<input type="text" id="vpis-email-popup" name="emails" style="height: 16px; width:100%;" />';
+ } else {
+ echo '<textarea id="vpis-email-popup" name="emails" style="height:100px; width:100%;"></textarea>';
+ }
+ echo '</div>';
+
+ echo '</div>';
+ echo '</div>';
+
+ // Gumb za zapret popup in potrdit
+ echo '<div class="buttonwrapper spaceRight floatLeft">';
+ echo '<a class="ovalbutton ovalbutton_orange" href="#" onclick="shrani_email(' . $struktura_id . ', ' . $last . '); return false;"><span>' . $this->lang['srv_potrdi'] . '</span></a>' . "\n\r";
+ echo '</div>';
+
+ echo '<div class="buttonwrapper spaceRight floatLeft">';
+ echo '<a class="ovalbutton ovalbutton_gray" href="#" onclick="vrednost_cancel(); return false;"><span>' . $this->lang['srv_close_profile'] . '</span></a>' . "\n\r";
+ echo '</div>';
+ }
+
+ /**
+ * Pošlji ID uporabnikov za vpis na strukturo
+ *
+ * @return boolean
+ */
+ public function postDodatneUporabnikeNaNivoId()
+ {
+ $struktura = $_POST['struktura'];
+ $uporabniki = $_POST['uporabniki'];
+ $last = $_POST['last'];
+
+ if (empty($struktura) || empty($uporabniki))
+ return false;
+
+ $this->trackingChanges();
+
+ $uporabniki = json_decode(stripslashes($uporabniki));
+
+ foreach ($uporabniki as $uporabnik) {
+ $this->dodajUporabnikaVbazo($uporabnik, $struktura, $last);
+ }
+
+ return true;
+ }
+
+ /**
+ * Kopiraj vrstico iz DataTables v urejanje
+ *
+ * @return array $struktura
+ */
+ public function kopirajVrsticoStruktureIzDataTablesVFormo()
+ {
+ $idLastStrukture = $_POST['id'];
+ if (empty($idLastStrukture))
+ return false;
+
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ return (new HierarhijaQuery())->poisciHierarhijoNavzgor($idLastStrukture);
+ }
+
+ /**
+ * Pop up zamenjaj uporabnika v strukturi
+ *
+ * @return html
+ */
+ public function htmlPopUpZamenjajUporabnikaVstrukturi()
+ {
+ echo '<div class="zamenjava-uporabnika-v-strukturi">';
+ echo '<div>';
+ echo '<h2>' . $this->lang['srv_hierarchy_title_find_and_replace_user'] . '</h2>';
+
+ echo '<div>';
+ echo $this->lang['srv_hierarchy_text_find_and_replace_user'];
+
+ echo '<div style="padding:15px 0;">';
+ echo '<label style="font-weight: bold;padding-right: 10px;">' . $this->lang['srv_hierarchy_label_find_email'] . '</label>';
+ echo '<input type="text" id="find-email" name="emails" style="height: 16px; width:60%;float: right;margin-right: 10px;" />';
+ echo '<span class="error-label">' . $this->lang['srv_hierarchy_error_wrong_email_format'] . '</span>';
+ echo '</div>';
+
+ echo '<div style="padding:15px 0;">';
+ echo '<label style="font-weight: bold;padding-right: 10px;">' . $this->lang['srv_hierarchy_label_replace_email'] . '</label>';
+ echo '<input type="text" id="replace-email" name="emails" style="height: 16px; width:60%;float: right;margin-right: 10px;" />';
+ echo '<span class="error-label">' . $this->lang['srv_hierarchy_error_wrong_email_format'] . '</span>';
+ echo '</div>';
+
+ echo '</div>';
+
+ echo '</div>';
+
+ echo '<div id="st_zamenjav_uporabnikov"></div>';
+
+ // Gumb za zapret popup in potrdit
+ echo '<div class="buttonwrapper spaceRight floatLeft">';
+ echo '<a class="ovalbutton ovalbutton_orange" href="#" onclick="potriZamenjavoUporabnika(); return false;"><span>' . $this->lang['srv_potrdi'] . '</span></a>' . "\n\r";
+ echo '</div>';
+
+ echo '<div class="buttonwrapper spaceRight floatLeft">';
+ echo '<a class="ovalbutton ovalbutton_gray" href="#" onclick="testnoPreveriKolikoUporabnikovBoZamnjenihVStrukturi(); return false;"><span>' . $this->lang['srv_hierarchy_button_count_user_emails'] . '</span></a>' . "\n\r";
+ echo '</div>';
+
+ echo '<div class="buttonwrapper spaceRight floatLeft">';
+ echo '<a class="ovalbutton ovalbutton_gray" href="#" onclick="vrednost_cancel(); return false;"><span>' . $this->lang['srv_close_profile'] . '</span></a>' . "\n\r";
+ echo '</div>';
+ echo '</div>';
+ }
+
+ /**
+ * testno preveri, kolikokrat bi bil email zamenjan
+ *
+ * @return integer
+ */
+ public function getTestnoPreveriStZamenjavEmailVstrukturi()
+ {
+ $email_za_zamenjavo = $_POST['find_email'];
+
+ $user = sisplet_query("SELECT id, email FROM users WHERE email='" . $email_za_zamenjavo . "'", "obj");
+
+ if (sizeof($user) == 0)
+ return 'Ni v baz';
+
+ // Pridobimo uporabnika samo na zadnjem nivoju
+ $users_upravicen_do_evalvacije = (new HierarhijaOnlyQuery())->queryStrukturaUsers($this->anketa, ' AND users.id="' . $user->id . '" AND hs.level=(SELECT MAX(level) FROM srv_hierarhija_struktura WHERE anketa_id=' . $this->anketa . ')');
+
+ if (mysqli_num_rows($users_upravicen_do_evalvacije) > 0) {
+ echo mysqli_num_rows($users_upravicen_do_evalvacije);
+ } else {
+ echo 0;
+ }
+ }
+
+ /**
+ * Briši uporabnika iz strukture pri DataTables pogledu oz. če je že vpisan v bazo
+ */
+ public function brisiUporabnikaIzStrukture()
+ {
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ if (empty($_POST['uporabnik_id']) || !is_numeric($_POST['uporabnik_id']) || empty($_POST['struktura_id'])) {
+ echo 'Ni mogoče';
+ return false;
+ }
+
+ $uporabnik_id = $_POST['uporabnik_id'];
+ $struktura_id = $_POST['struktura_id'];
+
+ // Uporabnika najprej izbrišemo iz strukture hierarhije
+ $sql_user = sisplet_query("DELETE FROM srv_hierarhija_struktura_users WHERE hierarhija_struktura_id='" . $struktura_id . "' AND user_id='" . $uporabnik_id . "'");
+ $this->sqlError($sql_user);
+
+ // Preverimo, če je uporabnik še kje drugje dodan v hierarhiji, drugače ga moramo odstraniti še iz srv_hierarhija_users, da nima dostopa do ankete ob aktivaciji in tudi da ne prejme emaila za dostop
+ $this->preveriCeJeUporabnikPrisotenSeKjeVStrukturi($uporabnik_id);
+ }
+
+ /**
+ * Zamenjaj email uporabnika v strukturi z novim emailom
+ *
+ * @param
+ * @return
+ */
+ public function postZamenjajEmailVstrukturi()
+ {
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ $find_email = $_POST['find_email'];
+ $replace_email = $_POST['replace_email'];
+
+ // Validacija, če email obstaja
+ if (empty($find_email) && !validEmail($find_email) || empty($replace_email) && !validEmail($replace_email))
+ return 'Manjka email';
+
+ // Poiščemo ID uporabnika
+ $user = sisplet_query("SELECT id, email FROM users WHERE email='" . $find_email . "'", "obj");
+
+ // Pridobimo uporabnika samo na zadnjem nivoju
+ $users_upravicen_do_evalvacije = (new HierarhijaOnlyQuery())->queryStrukturaUsers($this->anketa, ' AND users.id="' . $user->id . '" AND hs.level=(SELECT MAX(level) FROM srv_hierarhija_struktura WHERE anketa_id=' . $this->anketa . ')');
+
+ // Dodamo novega uporabnika v
+ if (mysqli_num_rows($users_upravicen_do_evalvacije) > 0) {
+ while ($evalviranec = $users_upravicen_do_evalvacije->fetch_object()) {
+ $this->dodajUporabnikaVbazo($replace_email, $evalviranec->id, true);
+ }
+ }
+
+ // Preverimo, če je uporabnik, ki smo ga želeli zamenjati prisoten še kje
+ $this->preveriCeJeUporabnikPrisotenSeKjeVStrukturi($user->id);
+
+ return 1;
+ }
+
+ /**
+ * Briši element vhiertarhiji, ki se prikaže v data tables ali jstree
+ *
+ * @param
+ * @return
+ */
+ public function brisiZadnjiElementVstrukturiHierarhije()
+ {
+ $id = $_POST['id'];
+
+ #V kolikor je anketa aktivna potem brisanje ni več možno
+ if (SurveyInfo::getSurveyModules('hierarhija') == 2)
+ return 2;
+
+
+ // tracking - beleženje sprememb
+ $this->trackingChanges();
+
+ # Omenjen Id je tudi parent id, zato brisanje ni mogoče
+ $parent_obstaja = sisplet_query("SELECT id, parent_id FROM srv_hierarhija_struktura WHERE parent_id='$id'");
+ if ($parent_obstaja->num_rows > 0) {
+ echo 'obstaja';
+ die();
+ }
+
+// # Pridobimo vse ID strukture hierarhije, ki so pod to drevesno strukturo, da lahko potem izbrišemo vse te elemente
+// $el = (new HierarhijaQuery())->pridobiIdStruktureDoKonca($id, $this->anketa);
+// # Dodamo naš $id in sortiramo po zadnjih elementih, ter brišemo hierarhijo od spodaj navzgor. Do našega ID-ja
+// array_push($el, $id);
+// rsort($el);
+
+
+ # Preverimo, če je bil dodan uporabnik na to strukturo
+ $user_id = sisplet_query("SELECT user_id FROM srv_hierarhija_struktura_users WHERE hierarhija_struktura_id='" . $id . "'", "obj");
+
+ # Izbrišemo uporabnika, ki je bil pri določeni strukturi v hierarhiji
+ $sql_us = sisplet_query("DELETE FROM srv_hierarhija_struktura_users WHERE hierarhija_struktura_id='" . $id . "'");
+ $this->sqlError($sql_us);
+
+ // V kolikor je bil dodan uporabnik na strukturo potem tudi odstranimo vse pravice tega uporabnika, če ga ni več v strukturi
+ if (!is_null($user_id))
+ $this->preveriCeJeUporabnikPrisotenSeKjeVStrukturi($user_id->user_id);
+
+ # Izbrišemo strukturo
+ $sql_hi = sisplet_query("DELETE FROM srv_hierarhija_struktura WHERE id='" . $id . "' AND anketa_id='" . $this->anketa . "'");
+ $this->sqlError($sql_hi);
+
+ # Pobriši opcijo, če ni več strukture
+ $st_vpisov = sisplet_query("SELECT COUNT(ID) as vsota FROM srv_hierarhija_struktura WHERE anketa_id='" . $this->anketa . "'", "obj");
+ if ($st_vpisov->vsota == 0)
+ (new HierarhijaQuery())->getDeleteHierarhijaOptions($this->anketa, 'vpisana_struktura', null, true);
+ }
+
+ /**
+ * Shrani hierarhijo in prido ID polja v bazi
+ *
+ * @return integer
+ */
+ public function shraniHierarhijo()
+ {
+ $ime = $_POST['ime'];
+
+ // Za decoding je potrebno json_decode(stripslashes($_POST['hierarhija'])), za shranjevanje v bazo pustomo kar json format
+ $hierarhija = $_POST['hierarhija'];
+
+ echo sisplet_query("INSERT INTO srv_hierarhija_shrani (anketa_id, user_id, ime, hierarhija) VALUES ('$this->anketa', '$this->user_id','$ime', '$hierarhija')", "id");
+ }
+
+ /**
+ * Preverimo, če je user id prisoten še kje v strukturi, v kolikor ga ni potem odstranimo pravice dostopa do ankete in strukture
+ *
+ * @param $user_id
+ * @return boolean
+ */
+ private function preveriCeJeUporabnikPrisotenSeKjeVStrukturi($user_id)
+ {
+ $uporabnik_db = (new HierarhijaOnlyQuery())->queryStrukturaUsers($this->anketa, ' AND users.id="' . $user_id . '"');
+
+ // Uporabnik je še prisoten
+ if (mysqli_num_rows($uporabnik_db) > 0)
+ return true;
+
+ // Uporabnik ni prisoten in odstranimo vse pravice za dostop do ankete in hierarhije
+ // Preverimo, če je uporabnik med privilegiji za dostop do hierarhije
+ $user_search = sisplet_query("SELECT id FROM srv_hierarhija_users WHERE user_id='" . $user_id . "' AND anketa_id='" . $this->anketa . "' AND type='10'", 'obj');
+ if (sizeof($user_search) > 0)
+ sisplet_query("DELETE FROM srv_hierarhija_users WHERE id='" . $user_search->id . "'");
+
+
+ // Preverimo, če ima uporabnik ima pravice za dostop do ankete in potem tudi to odstranimo
+ HierarhijaQuery::dostopZaUporabnika($this->anketa, $user_id, 'delete');
+
+ return false;
+ }
+
+ private function trackingChanges()
+ {
+ TrackingClass::update($this->anketa, '22');
+ }
+
+ private function sqlError($sql)
+ {
+ if (!$sql) {
+ echo mysqli_error($GLOBALS['connect_db']);
+ die();
+ }
+
+ }
+
+
+} \ No newline at end of file