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 = '
'; $izrisi .= '

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

'; $izrisi .= '
'; $izrisi .= '
' . $this->lang['srv_hierarchy_import_example'] . '
'; $izrisi .= '
'; $izrisi .= '
'; $izrisi .= '
'; // Gumb za zapret popup $izrisi .= '
'; $izrisi .= '' . $this->lang['srv_close_profile'] . '' . "\n\r"; $izrisi .= '
'; 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 '
'; echo '

Komentar k hierarhiji

'; echo '
'; echo '
'; echo ''; echo '
'; echo '
'; echo '
'; // Gumb za zapret popup in potrdit echo '
'; echo '' . $this->lang['srv_potrdi'] . '' . "\n\r"; echo '
'; echo '
'; echo '' . $this->lang['srv_close_profile'] . '' . "\n\r"; echo '
'; } /** * 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 '
'; echo '

Logotip

'; echo '
'; if (!empty($logo)) echo ''; echo '
'; echo '
'; echo '
'; echo '
'; echo '
'; } /** * 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; } }