summaryrefslogblamecommitdiffstats
path: root/frontend/payments/classes/class.UserAccess.php
blob: 070c72304c6e53074bc675ed1509ccb29237744b (plain) (tree)

















































































                                                                                                                               
                                                                







































                                                                                                                   

                                                       
                                                                                                 








                                                                                         




                                                                                                  




























                                                                                                             

      






































                                                                                                                                               
                                                                 



                               
                                                                               




















                                                                                            




                                                      
                                                                                                 








































                                                                                                                            


                                              
                                                                                                 






























































                                                                                                                    

                                                                     




                                                                                    
                                                
                                                  


                                                                                                                                          



                                                                        
                                               
                                                                                       












                                                                               
                                    


                                                                                                                                                                                                         

                       
                       








                                                                                                                    

                                                                     





                                                                                    




                                                                                                      





                                                                                       


                                                                                                                                
                                    

                                                                                                                                       












                                                                                                                    

                                                                     























































                                                                                                                            















                                                  













                                                                                            
<?php

/**
 *
 *  Class ki vsebuje skrbi za pregled in urejanje dostopa uporabnika glede na paket ki ga placuje
 *
 */

class UserAccess{


    private static $instance = false;

    private $usr_id;
    private $user_access;
    private $user_not_author = false;

    private $anketa_old = false;                // Pri starih anketah ne upostevamo paketov in so na voljo vse funkcionalnosti
    private $anketa_old_date = '2020-07-01';    // Anketa je stara, ce je bila ustvarjena pred tem datumom

    // Array z vsemi paketi
    private $packages = array();

    // Array z vsemi funkcionalnostmi, ki so placljive (in v katerem paketu so)
    private $functionality_package = array(

        /* Urejanje ankete */
        'question_type_multitable'  => 2,   // Tip vprasanja - kombinirana tabela - 24
        'question_type_ranking'     => 2,   // Tip vprasanja - razvrscanje - 17
        'question_type_sum'         => 2,   // Tip vprasanja - vsota - 18
        'question_type_location'    => 2,   // Tip vprasanja - lokacija - 26
        'question_type_heatmap'     => 2,   // Tip vprasanja - heatmap - 27
        'question_type_calculation' => 3,   // Tip vprasanja - kalkulacija - 22
        'question_type_quota'       => 3,   // Tip vprasanja - kvota - 25
        'question_type_signature'   => 3,   // Tip vprasanja - podpis - 21_6
        'loop'                      => 3,   // Zanke
        'if'                        => 2,   // If-i
        'block'                     => 2,   // Bloki
        'validation'                => 2,   // Validacija
        'theme-editor'              => 2,   // Urejanje teme ankete, upload logotipa...
        'theme-editor_css'          => 3,   // Urejanje lastnega css-ja !!!
        'theme-editor_upload'       => 3,   // Urejanje lastnega css-ja !!!

        /* Status */
        'para_graph'                => 2,   // Statistika naprav
        'geoip_location'            => 3,   // Statistika ip lokacije
        'nonresponse_graph'         => 3,   // Neodgovor spremenljivke
        'speeder_index'             => 3,   // Speeder index
        'usable_resp'               => 3,   // Uporabni respondenti
        'text_analysis'             => 3,   // Analiza besedil
        'edits_analysis'            => 3,   // Analiza urejanj

        /* Podatki */
        'data_export'               => 2,   // Izvoz podatkov - spss, xls, csv...
        'data_append'               => 3,   // Uvoz - dodaj podatke
        'data_merge'                => 3,   // Uvoz - zdruzi podatke
        'data_calculation'          => 3,   // Izracunane vrednosti
        'data_coding_auto'          => 3,   // Avtomatsko kodiranje
        'data_coding'               => 3,   // Kodiranje
        'data_recoding'             => 3,   // Rekodiranje
        
        /* Analiza */
        'analysis_export'           => 2,   // Izvoz analiz - pdf, rtf, xls
        'analysis_analysis_links'   => 2,   // Javne
        'analysis_charts'           => 2,   // Grafi
        'analysis_crosstabs'        => 2,   // Tabele
        'analysis_break'            => 2,   // Razbitje
        'analysis_ttest'            => 3,   // Ttest
        'analysis_means'            => 3,   // Povprecje
        'analysis_multicrosstabs'   => 3,   // Multitabele
        'analysis_analysis_creport' => 3,   // Porocilo po meri

        /* Napredni moduli */
        'uporabnost'                => 3,   // Evalvacija strani (split screen)
        //'vnos'                      => 2,   // Vnos vprasalnikov
        'kviz'                      => 2,   // Kviz
        'voting'                    => 3,   // Volitve
        'social_network'            => 3,   // Socialna omrezja
        'slideshow'                 => 3,   // Prezentacija
        'telephone'                 => 3,   // Telefonska anketa
        'chat'                      => 3,   // Chat
        'panel'                     => 3,   // Panel
        'email_access'              => 3,   // Dostop z emailom

        /* Ostale funkcionalnosti */
        'prevajanje'                => 2,   // Vecjezikovna anketa
        'export'                    => 2,   // Izvozi ankete
        'filters'                   => 2,   // Filtriranje podatkov in analiz
        'nice_url'                  => 2,   // Lepi linki
        'password'                  => 2,   // Dostop do ankete z geslom
        'gdpr_export'               => 2,   // Izvoz porocil evidenc za gdpr
        'skupine'                   => 2,   // Skupine
        'archive'                   => 2,   // Arhiviranje
        'arhivi'                    => 2,   // Arhiviranje - izvoz datoteke ankete, podatkov
        //'arhivi_export'             => 2,   // Arhiviranje - izvoz datoteke vprasalnika in vprasalnika s podatki
        'analysis_anal_arch'        => 2,   // Arhiviranje analiz
        'public_link'               => 3,   // Javne povezave

        //'ustvari_anketo_archive'    => 2,   // Ustvarjanje ankete iz datoteke
        'ustvari_anketo_from_text'  => 2,   // Ustvarjanje ankete iz besedila
        'ustvari_anketo_template'   => 2,   // Ustvarjanje ankete iz predloge

        'komentarji'                => 3,   // Komentarji na anketo
        'komentarji_anketa'         => 3,   // Komentarji na anketo
        'urejanje'                  => 3,   // Komentarji na anketo

        'alert'                     => 2,   // Obvescanje
        'invitations'               => 3,   // Email vabila
        
        /* Moje ankete */
        'my_survey_folders'         => 2,   // Mape v mojih anketah
    );

	
    public static function getInstance($usr_id){
        
        if (!self::$instance)
			self::$instance = new UserAccess($usr_id);
			
		return self::$instance;
	}

    private function __construct($usr_id){

        // Ce so paketi onemogoceni nič ne preverjamo
        if(AppSettings::getInstance()->getSetting('app_settings-commercial_packages') !== true){
            return;
        }

        // Ce nimamo usr_id-ja ga poskusimo pridobiti iz id-ja ankete
        if(!isset($usr_id) || $usr_id < 1 || $usr_id == ''){

            if(isset($_POST['anketa']) || isset($_GET['anketa'])){

                $ank_id = (isset($_GET['anketa'])) ? $_GET['anketa'] : $_POST['anketa'];
     
                // Pogledamo, ce smo v izpolnjevanju ankete - imamo hash in pridobimo id iz njega
                if($_SERVER["SCRIPT_NAME"] == '/main/survey/index.php')
                    $ank_id = getSurveyIdFromHash($ank_id);

                $sqlU = sisplet_query("SELECT insert_uid FROM srv_anketa WHERE id='".$ank_id."'");
                $rowU = mysqli_fetch_array($sqlU);
    
                $usr_id = $rowU['insert_uid'];
            }
            else{
                $usr_id = 0;
            }
        }

        if($usr_id > 0){
            $this->usr_id = $usr_id;

            // Preverimo, ce smo znotraj dolocene ankete in ce je usr_id enak id-ju avtorja ankete
            $this->checkSurveyAuthor();

            // Zakesiramo vse dostope userja
            $this->cacheUserAccess();
            
            // Zakesiramo vse pakete
            $this->cachePackages();

            // Pogledamo ce smo v anketi in ce gre za staro anketo - stare ankete nimajo vklopljenih paketov
            $this->checkAnketaOld();
        }
        else{
            echo 'Napaka! Manjka ID uporabnika.';
            die();
        }

     
    }



    // Dobimo podatke o dostopu za posameznega uporabnika
    private function cacheUserAccess(){

        $sqlUserAccess = sisplet_query("SELECT ua.*, up.name AS package_name, up.description AS package_description, up.price AS package_price
                                            FROM user_access ua, user_access_paket up 
                                            WHERE ua.usr_id='".$this->usr_id."' AND up.id=ua.package_id
                                        ");

        // Uporabnik se nima nobenega paketa
        if(mysqli_num_rows($sqlUserAccess) == 0)
            return;

        $rowUserAccess = mysqli_fetch_array($sqlUserAccess);

        // Dodatno preverimo, ce je paket ze potekel
        if(strtotime($rowUserAccess['time_expire']) < time())
            return;

        // Vse ok - uporabniku nastavimo trenuten paket
        $this->user_access = $rowUserAccess;
    }

    // Dobimo podatke o vseh paketih
    private function cachePackages(){

        $sqlPackages = sisplet_query("SELECT * FROM user_access_paket");
        while($row = mysqli_fetch_array($sqlPackages)){
            $this->packages[$row['id']] = $row;
        }
    }

    // Pogledamo ce smo v anketi in ce gre za staro anketo - stare ankete nimajo vklopljenih paketov
    private function checkAnketaOld(){
        
        // Ce nismo znotraj ankete ti ignoriramo
        if(!isset($_GET['anketa']) && !isset($_POST['anketa'])){
            return;
        }

        // Nastavimo id ankete
        $ank_id = isset($_GET['anketa']) ? $_GET['anketa'] : $_POST['anketa'];

        $sqlA = sisplet_query("SELECT insert_time FROM srv_anketa WHERE id='".$ank_id."'");
        $rowA = mysqli_fetch_array($sqlA);

        // Ce je datum kreiranja starejši je stara anketa
        if(strtotime($rowA['insert_time']) < strtotime($this->anketa_old_date)){
            $this->anketa_old = true;
        }
    }

    public function isAnketaOld(){
        return $this->anketa_old;
    }

    public function userNotAuthor(){
        return $this->user_not_author;
    }


    // Preverimo ce ima uporabnik dostop do neke funkcionalnosti
    public function checkUserAccess($what=''){
        global $admin_type;
        global $global_user_id;
        global $mysql_database_name;

        // Ce so paketi onemogoceni vrnemo vedno true
        if(AppSettings::getInstance()->getSetting('app_settings-commercial_packages') !== true){
            return true;
        }

        // Ce nimamo usr_id-ja zaenkrat pustimo vse
        if(!isset($this->usr_id) || $this->usr_id < 1 || $this->usr_id == ''){
            return true;
        }

        // Ce je metaadmin ali admin enklikanketa@gmail.com lahko tudi vedno vse uporablja
        if(Dostop::isMetaAdmin() || ($mysql_database_name == 'real1kasi' && $admin_type == 0 && $global_user_id == '440')){
            return true;
        }

        // Ce je anketa ustvarjena pred nekim datumom, ne preverjamo paketov
        if($this->anketa_old == true){
            return true;
        }
        

        // Ce ne nastavimo funkcionalnosti pogledamo url kje se nahajamo
        if($what == ''){
            $what = $this->getFunctionalityFromUrl();
        }

        // Preverimo, ce funkcionalnost ni v paketu, ki ga ima uporabnik
        $package_id = $this->getPackage();
        if(isset($this->functionality_package[$what]) && $this->functionality_package[$what] > $package_id){
            return false;
        }
        
        return true;
    }

    // Vrnemo vse podatke o dostopu uporabnika
    public function getAccess(){
        
        return $this->user_access;
    }

    // Vrnemo paket uporabnika
    public function getPackage(){
        global $admin_type;
    
        // Ce so paketi onemogoceni vrnemo -1
        if(AppSettings::getInstance()->getSetting('app_settings-commercial_packages') !== true){
            return -1;
        }

        // Ce je admin ali manager lahko tudi vedno vse uporablja
        /*if($admin_type == 0 || $admin_type == 1){
            return 3;
        }*/
        
        // Ce nima nastavljeno nic je brez paketa
        if(!isset($this->user_access['package_id']))
            return 1;

        return $this->user_access['package_id'];
    }

    // Vrnemo aray vseh paketov
    public function getPackages(){
        return $this->packages;
    }

    // Preverimo, ce smo znotraj dolocene ankete in ce je usr_id enak id-ju avtorja ankete
    private function checkSurveyAuthor(){

        // Nastavimo id ankete
        if(isset($_GET['anketa'])){
            $ank_id = $_GET['anketa'];
        }
        elseif(isset($_POST['anketa']) && $_POST['anketa'] != 'undefined'){
            $ank_id = $_POST['anketa'];
        }
        // Ce nismo znotraj ankete je vse ok
        else{
            return;
        }

        // Ce smo znotraj ankete, preverimo, ce je usr_id enak avtorju ankete
        $sqlA = sisplet_query("SELECT insert_uid FROM srv_anketa WHERE id='".$ank_id."'");
        if(mysqli_num_rows($sqlA) > 0){
            $rowA = mysqli_fetch_array($sqlA);

            // Ce user ni avtor, preverjamo za avtorja
            if($this->usr_id != $rowA['insert_uid']){
                $this->usr_id = $rowA['insert_uid'];
                $this->user_not_author = true;
            }
        }

        return;
    }


    // Izpisemo obvestilo, da je funkcionalnost onemogocena in naj kupi paket
    public function displayNoAccess($what=''){
        global $lang;
        global $site_url;

        // Ce ne nastavimo funkcionalnosti pogledamo url kje se nahajamo
        if($what == ''){
            $what = $this->getFunctionalityFromUrl();
        }

        // Kateri paket je potreben za to funkcionalnost
        $package_required = (isset($this->functionality_package[$what])) ? $this->functionality_package[$what] : 3;
        $package_temp = $this->packages[$package_required]['name'];
        $package_required_name = $lang['paket_opis_'.$package_temp];

        if($lang['id'] == '2') 
            $drupal_url = $site_url.'d/en/purchase/'.$package_required.'/package';
        else
            $drupal_url = $site_url.'d/izvedi-nakup/'.$package_required.'/podatki';
        echo '<div class="layout_right_item">';
        echo '<div class="user_access_warning">';
        
        echo '<div class="no_access_title"> <span class="faicon lock_close yellow"></span>'.$lang['srv_access_no_access_title'].'</div>';
        
        // Ce user ni avtor ankete
        if($this->user_not_author){
            echo '<p>'.$lang['srv_access_no_access_not_author'].'</p>';
        }
        echo '<div class="no_access_stavki">';
        echo '<p>'.$lang['srv_access_no_access'].' "'.$package_required_name.'".</p>';

        echo '<p>'.$lang['srv_access_no_access_funkcionalnosti_intro'].'</p>';

        echo '<ul class="no_access_list">';
        echo '<li>'.$lang['srv_access_no_access_funkcionalnost_1'].'</li>';
        echo '<li>'.$lang['srv_access_no_access_funkcionalnost_2'].'</li>';
        echo '<li>'.$lang['srv_access_no_access_funkcionalnost_3'].'</li>';
        echo '<li>'.$lang['srv_access_no_access_funkcionalnost_4'].'</li>';
        echo '</ul>';


        echo '</div>';

        if(!$this->user_not_author)
            echo '<div class="button_holder top16 upgrade_packet">';
            echo '<button class="medium yellow upgrade_packet" onClick="window.location.href=\''.$drupal_url.'\'" target="_blank">'.$lang['srv_narocila_buy'].'</button>';				
            echo '</div>';

        echo '</div>';
        echo '</div>';
    }

    // Izpisemo popup obvestilo, da je funkcionalnost onemogocena in naj kupi paket
    public function displayNoAccessPopup($what){
        global $lang;
        global $site_url;

        // Kateri paket je potreben za to funkcionalnost
        $package_required = (isset($this->functionality_package[$what])) ? $this->functionality_package[$what] : 3;
        $package_temp = $this->packages[$package_required]['name'];
        $package_required_name = $lang['paket_opis_'.$package_temp];

        if($lang['id'] == '2') 
            $drupal_url = $site_url.'d/en/purchase/'.$package_required.'/package';
        else
            $drupal_url = $site_url.'d/izvedi-nakup/'.$package_required.'/podatki';


        echo '<h2>'.$lang['srv_access_upgrade'].'</h2>';

        echo '<div class="popup_close"><a href="#" onclick="popupUserAccess_close();">✕</a></div>';

        // Ce user ni avtor ankete
        if($this->user_not_author){
            echo '<p>'.$lang['srv_access_no_access_not_author'].'</p>';
        }

        echo '<p>'.$lang['srv_access_no_access'].' "'.$package_required_name.'".</p>';

        echo '<div class="button_holder">';
        echo '  <button class="medium white-blue" href="#" onClick="popupUserAccess_close();">'.$lang['srv_zapri'].'</button>';
        if(!$this->user_not_author)
            echo '  <a href="'.$drupal_url.'" target="_blank"><button class="medium blue">'.$lang['srv_narocila_buy'].'</button></a>';
        echo '</div>';
    }

    // Izpisemo obvestilo, da je funkcionalnost onemogocena in naj kupi paket
    public function displayNoAccessText($what=''){
        global $lang;

        // Ce ne nastavimo funkcionalnosti pogledamo url kje se nahajamo
        if($what == ''){
            $what = $this->getFunctionalityFromUrl();
        }

        // Kateri paket je potreben za to funkcionalnost
        $package_required = (isset($this->functionality_package[$what])) ? $this->functionality_package[$what] : 3;
        $package_temp = $this->packages[$package_required]['name'];
        $package_required_name = $lang['paket_opis_'.$package_temp];

        echo '<p class="user_access_warning_text">';

        // Ce user ni avtor ankete
        if($this->user_not_author){
            echo $lang['srv_access_no_access_not_author'].'<br /><br />';
        }

        echo $lang['srv_access_no_access'].' "'.$package_required_name.'"';

        echo '</p>';
    }


    // Vrnemo funkcionalnost glede na urle kjer se nahajamo
    private function getFunctionalityFromUrl(){

        $what = '';

        // Ce ne nastavimo funkcionalnosti pogledamo url kje se nahajamo
        if(isset($_GET['a'])){

            $what = $_GET['a'];

            if($_GET['a'] == 'analysis' || $_GET['a'] == 'data'){

                if(isset($_GET['m'])){
                    $what .= '_'.$_GET['m'];
                }
            }
            elseif($_GET['a'] == 'ustvari_anketo'){
                
                if(isset($_GET['b'])){
                    $what .= '_'.$_GET['b'];
                }
            } 
            elseif($_GET['a'] == 'theme-editor'){
                
                if(isset($_GET['t'])){
                    $what .= '_'.$_GET['t'];
                }
            } 
            elseif($_GET['a'] == 'langStatistic'){
                $what = 'prevajanje';
            }
            elseif($_GET['a'] == 'skupine'){
                $what = '';
            }
            elseif($_GET['a'] == 'arhivi' && isset($_GET['m']) && ($_GET['m'] == 'survey_data' || $_GET['m'] == 'survey')){
                $what .= '_export';
            }
        }

        return $what;
    }

    public function getPackageName($package_id) {
        global $lang;

        $string = '';
        
        if ($package_id == 1) {
            $string = $lang['paket_opis_1ka'];
        } else if($package_id == 2) {
            $string = $lang['paket_opis_2ka'];
        } else if($package_id == 3) {
            $string = $lang['paket_opis_3ka'];
        }

        return $string;
    }


    // Ajax klici
    public function ajax(){

        if (isset($_POST['what']))
			$what = $_POST['what'];


        // Prikazemo popup z obvestilom, da je funkcionalnost onemogocena in naj kupi paket
        if($_GET['a'] == 'displayNoAccessPopup') {
            $this->displayNoAccessPopup($what);
        }
    }
}