summaryrefslogtreecommitdiffstats
path: root/admin/survey/modules/mod_hierarhija/class/HierarhijaHelper.php
diff options
context:
space:
mode:
Diffstat (limited to 'admin/survey/modules/mod_hierarhija/class/HierarhijaHelper.php')
-rw-r--r--admin/survey/modules/mod_hierarhija/class/HierarhijaHelper.php340
1 files changed, 340 insertions, 0 deletions
diff --git a/admin/survey/modules/mod_hierarhija/class/HierarhijaHelper.php b/admin/survey/modules/mod_hierarhija/class/HierarhijaHelper.php
new file mode 100644
index 0000000..3f283f6
--- /dev/null
+++ b/admin/survey/modules/mod_hierarhija/class/HierarhijaHelper.php
@@ -0,0 +1,340 @@
+<?php
+/***************************************
+ * Description: Funkcije za pomoč pri hierarhiji
+ * Autor: Robert Šmalc
+ * Created date: 11.04.2017
+ *****************************************/
+
+namespace Hierarhija;
+
+use Hierarhija\Model\HierarhijaOnlyQuery;
+use Hierarhija\Model\HierarhijaQuery;
+use SurveyInfo;
+use Common;
+
+class HierarhijaHelper
+{
+ /**
+ * Iz teksa zamenjamo besede, ki so med lojtrami (#nivo1#, #nivo2#, #ime
+ * ucitelja#, #email ucitelja#)
+ *
+ * @param text $text
+ * @param int $ank_id
+ *
+ * @return text
+ */
+ public static function dataPiping($text, $ank_id = null)
+ {
+
+ if (is_null($ank_id)) {
+ $ank_id = (! empty(get('anketa')) ? get('anketa') : $_GET['anketa']);
+ }
+
+ // Preverimo, če tekst vsebuje kaj
+ if (! preg_match_all('/#([\w\s]+)#/', $text, $matches) || is_null($ank_id)) {
+ return $text;
+ }
+
+ // Pridobimo ID vrednosti spremenljivk, za katere moramo dobiti naslove, da jih lahko prikažemo
+ $get = get('get');
+
+ // V kolikor smo na katerikoli strani, potem gledamo po piškotkih
+ if (isset($get->{'survey-'.$ank_id})) {
+
+ $active = '';
+ if (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1) {
+ $active = '_active';
+ }
+
+ // ID uporabnika, glede na njegov piškot
+ $srv_user = sisplet_query("SELECT id FROM srv_user WHERE cookie='".$get->{'survey-'.$ank_id}."'", "obj")->id;
+
+ // Pridobimo vse odgovore - strukturo hierarhije
+ $vrednosti = sisplet_query("SELECT
+ v.naslov AS naslov,
+ ss.variable AS variable,
+ v.id AS spr_id
+ FROM
+ srv_data_vrednost".$active." AS sd
+ LEFT JOIN
+ srv_vrednost AS v
+ ON
+ sd.vre_id=v.id
+ LEFT JOIN
+ srv_spremenljivka AS ss
+ ON
+ v.spr_id=ss.id
+ WHERE sd.usr_id='".$srv_user."' ORDER BY ss.variable DESC", "obj");
+ }
+
+ // Zanka po vseh besedah v texstu, k so med lojtrama (
+ foreach ($matches[0] as $key => $match) {
+ $iskanje = strtolower($matches[1][$key]);
+
+ // Zamenjava nivojev (primer: nivo1, nivo2, ...) in vloge (učenec, učitelj)
+ if (! empty($get->{$iskanje})) {
+ $variabla = sisplet_query("SELECT naslov FROM srv_vrednost WHERE id='".$get->{$matches[1][$key]}."'", "obj");
+ $text = str_ireplace($match, $variabla->naslov, $text);
+ } elseif ($iskanje === 'hierarhija') {
+ $hierarhija_pot = Hierarhija::displayPodatkeOhierarhijiZaRespondente($get, true);
+ $text = str_ireplace($match, $hierarhija_pot, $text);
+ }
+
+ // Kadar nivoje menjamo na ostalih vprašanjih in nimamo več Get parametrov, potem pridobimo iz že shranjenih sistemskih odgovorov
+ if (! empty($vrednosti)) {
+ $url_variables = '';
+
+ foreach ($vrednosti as $vrednost) {
+ if ($vrednost->variable == $matches[1][$key]) {
+ $text = str_ireplace($match, $vrednost->naslov, $text);
+ }
+
+ if (! empty($vrednost->variable)) {
+ $url_variables .= $vrednost->variable.'='.$vrednost->spr_id.'&';
+ }
+ }
+ }
+
+ // Ostranimo lojtro iz zadnjega nivoja, da lahko nato preverimo pa url naslovu v bazi
+ $url_variables = substr($url_variables, 0, strlen($url_variables) - 1);
+
+ // zamenjava podatkov o učitelju/uporabniku - ime, priimek, email
+ if (in_array($iskanje, ['ime ucitelja', 'email ucitelja'])) {
+ // Pridobimo podatke u uporabniku za sledečo anketo
+ if (! empty($get->enc)) {
+ $url_variables = base64_decode($get->enc);
+ }
+
+ $user = sisplet_query("SELECT u.email AS email, u.name AS name, u.surname AS surname FROM srv_hierarhija_koda AS h LEFT JOIN users AS u ON u.id=h.user_id WHERE h.anketa_id='".$ank_id."' AND h.url='".$url_variables."'", "obj");
+
+ $zamenjaj = $match;
+
+ // email ne sme biti enak imenu ali priimku
+ if ($iskanje == 'ime ucitelja' && ! in_array($user->email, [$user->name, $user->surname])) {
+ $zamenjaj = $user->name." ".$user->surname;
+ } elseif ($iskanje == 'ime ucitelja') {
+ preg_match('/(\w+)((?:\.)(\w+))?/', $user->email, $ucitelj);
+
+ $zamenjaj = self::velikaZacetnica($ucitelj[1]);
+
+ if (! empty($ucitelj[3])) {
+ $zamenjaj .= " ".self::velikaZacetnica($ucitelj[3]);
+ }
+ }
+
+ if ($iskanje == 'email ucitelja') {
+ $zamenjaj = $user->email;
+ }
+
+ $text = str_ireplace($match, $zamenjaj, $text);
+ }
+ }
+
+ return $text;
+ }
+
+ /**
+ * Iz besedila najprej pretvorimo v male črke in nato veliko začetnico
+ *
+ * @param string $string
+ *
+ * @return string
+ */
+ private static function velikaZacetnica($string)
+ {
+ return ucfirst(mb_strtolower($string, 'UTF-8'));
+ }
+
+ /**
+ * Preverimo dostop določenega uporabnika do modula SA
+ *
+ * @param (int) $anketa
+ */
+ public static function preveriDostop($anketa_id = 0)
+ {
+ global $admin_type;
+
+ // Če ima dostop in je modul vključen
+ if (Common::checkModule('hierarhija') == '1') {
+
+ //anketa še ni ustvarjena, potem mu je dostop omogočen
+ if ($anketa_id == 0 && self::aliImaDostopDoIzdelovanjaHierarhije()) {
+ return true;
+ }
+
+ // Imamo anketa ID in smo znotraj ankete
+ if ($anketa_id > 0) {
+
+ // Če je modul vključen potem lahko do hierarhije dostopajo samo (admini, oseba, ki je mod vključila in osebe, katerim je bil dodan dostop do urejanja hierarhije)
+ if (SurveyInfo::checkSurveyModule('hierarhija', $anketa_id) && ($admin_type == 1 || self::preveriTipHierarhije($anketa_id) < 5)) {
+
+ return true;
+
+ // Če modul še ni bil vključen imajo dostop samo uporabniki s predhodnimi pravicami
+ } elseif (! SurveyInfo::checkSurveyModule('hierarhija', $anketa_id) && self::aliImaDostopDoIzdelovanjaHierarhije()) {
+
+ return true;
+
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Preverimo, če ima dostop do grajenja hierarhije, dostop omogočimo:
+ * AAI uporabnikom
+ * 1ka administrator
+ * Uporabniku, kateremu je bil dodeljen dostop do ankete
+ */
+ public static function aliImaDostopDoIzdelovanjaHierarhije()
+ {
+
+ global $site_url;
+
+ $strani = [
+ 'https://www.1ka.si/',
+ 'http://test.1ka.si/',
+ 'http://1ka.test/',
+ 'https://1ka.arnes.si/'
+ ];
+
+ // Če je domena prava in če je modul vključen na inštalaciji
+ $modul = Common::checkModule('hierarhija');
+ if ($modul == '0' || $modul == '1' && ! in_array($site_url, $strani)) {
+ return false;
+ }
+
+ // Ali je administrator
+ global $admin_type;
+ if ($admin_type == 0) {
+ return true;
+ }
+
+ //AAI uporabnik
+ if (! empty($_COOKIE['aai']) && $_COOKIE['aai'] == 1) {
+ return true;
+ }
+
+ // Ima dostop, ker je bil dodan v bazo uporabnikov za dostop do hierarhije
+ if (sizeof(sisplet_query("SHOW TABLES LIKE 'srv_hierarhija_dostop'", "array")) == 1) {
+
+ global $global_user_id;
+ $dostop = sisplet_query("SELECT dostop FROM srv_hierarhija_dostop WHERE user_id='".$global_user_id."'", "obj");
+
+ if (! empty($dostop) && $dostop->dostop == 1) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public static function preveriTipHierarhije($anketa)
+ {
+ global $global_user_id;
+ $type = null;
+
+ if (is_null($anketa)) {
+ return null;
+ }
+
+ if (! SurveyInfo::checkSurveyModule('hierarhija', $anketa)) {
+ return null;
+ }
+
+ // V kolikor je tip hierarhije že v seji
+ if (! empty($_SESSION['hierarhija'][$anketa]['type']) && $_SESSION['hierarhija'][$anketa]['type'] > 5) {
+ return $_SESSION['hierarhija'][$anketa]['type'];
+ }
+
+ $sql = sisplet_query("SELECT type FROM srv_hierarhija_users WHERE user_id='".$global_user_id."' AND anketa_id='".$anketa."'");
+
+ if (! empty($sql) && mysqli_num_rows($sql) > 0) {
+ $row = mysqli_fetch_object($sql);
+ $type = $row->type;
+ }
+
+ $_SESSION['hierarhija'][$anketa]['type'] = $type;
+
+ return $type;
+ }
+
+ /**
+ * Preverimo, komu so bile poslane kode in vrnemo ustrezno besedilo
+ *
+ * @param int $anketa
+ * @param string $string
+ *
+ * @return text
+ */
+ public static function textGledeNaOpcije($anketa, $string = null)
+ {
+ global $lang;
+
+ if (is_null($string)) {
+ return null;
+ }
+
+ $poslji_kode = HierarhijaQuery::getOptionsPosljiKode($anketa);
+
+ return $lang[$string.'_'.$poslji_kode];
+ }
+
+ /**
+ * Izpišemo nivoje hierarhije za našega uporabnika za prikaz linkov
+ */
+ public static function hierarhijaPrikazNaslovovpriUrlju(
+ $anketa,
+ $struktura_id,
+ $email = null
+ ) {
+ global $global_user_id;
+
+ $predmet = (new HierarhijaOnlyQuery())->queryStruktura($anketa, null, ' AND str.id='.$struktura_id)->fetch_object();
+
+ // V kolikor pošiljamo email vabilo admin in je aktiviral ali je $email že user_id
+ if ($email && is_numeric($email)) {
+ $user_id = $email;
+ } elseif ($email) {
+ $user_id = sisplet_query("SELECT user_id FROM srv_hierarhija_struktura_users WHERE hierarhija_struktura_id='".$predmet->id."'")->fetch_object()->user_id;
+ } else {
+ $user_id = $global_user_id;
+ }
+ $veja_hierarhije = (new HierarhijaQuery())->pridobiHierarhijoNavzgor($anketa, null, $user_id);
+
+ $ime_strukture = [];
+ foreach ($veja_hierarhije as $key_struktura => $value_sifranta) {
+
+ ### Če ključ trenutnega predmeta ustreza ključi polja za to hierarhijo, potem izpišemo pot za ta predmet (ime, razred, itd...)
+ if ($key_struktura == $predmet->id) {
+ #### Sortiramo polje od nivoja 1 do 6, ker drugače imamo obratno
+ krsort($value_sifranta);
+ $st_vnosov = sizeof($value_sifranta);
+
+ $nivo_ime = null;
+ foreach ($value_sifranta as $key => $element) {
+
+ // Tukaj prikaže tudi najvišji nivo, če je potrebno, če želimo najviši nivo izpustu
+ if ($key < $st_vnosov) {
+ $zacas_ime = (new HierarhijaOnlyQuery())->getSamoSifrant($element['id'], true)->fetch_object();
+ $nivo_ime .= $zacas_ime->ime;
+ if ($key != 0) {
+ $nivo_ime .= ' - ';
+ }
+ }
+ }
+
+ // V kolikor nas zanima naslov samo za eno strukturo
+ if (! is_null($struktura_id)) {
+ return $nivo_ime;
+ }
+
+ $ime_strukture[$key_struktura] = $nivo_ime;
+ }
+ }
+
+ return $ime_strukture;
+ }
+} \ No newline at end of file