summaryrefslogtreecommitdiffstats
path: root/admin/survey/modules/mod_hierarhija/class/Ajax/AjaxHierarhijaClass.php
diff options
context:
space:
mode:
Diffstat (limited to 'admin/survey/modules/mod_hierarhija/class/Ajax/AjaxHierarhijaClass.php')
-rw-r--r--admin/survey/modules/mod_hierarhija/class/Ajax/AjaxHierarhijaClass.php561
1 files changed, 561 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