<?php 


    define('system',1);
    //print_r($_SERVER);
    if($_SERVER['REQUEST_URI']=='/favicon.ico') {
        Header('Content-Type: image/x-icon');
        echo base64_decode('AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAAAAAAAAAAAAHd3dwB3d3cEd3d3Jnd3d1h3d3d1d3d3I3d3dyt3d3did3d3SHd3dyB3d3cDd3d3AAAAAAAAAAAAd3d3AHd3dwB3d3cNd3d3TXd3d313d3eId3d3hXd3dyR3d3ctd3d3b3d3d213d3dmd3d3P3d3dwt3d3cAd3d3AHd3dwB3d3cOd3d3Xnd3d4d3d3eId3d3gHd3d2J3d3cXd3d3G3d3d1F3d3dnd3d3bnd3d213d3dNd3d3DHd3dwB3d3cAd3d3KXd3d3x3d3eId3d3aHd3dyN3d3cDd3d3AHd3dwB3d3cEd3d3Hnd3d1N3d3dtd3d3X3d3dx13d3cAd3d3Fnd3dxV3d3cfd3d3SHd3dx13d3ctd3d3NHd3dxl3d3cAd3d3AHd3dwB3d3cQd3d3NHd3dxN3d3cJd3d3C3d3d2x3d3eId3d3Ond3dwJ3d3cXd3d3yXd3d/V3d3eNd3d3AHd3dwB3d3cAd3d3AHd3dwF3d3ccd3d3Qnd3dzV3d3eVd3d3q3d3d3p3d3cGd3d3A3d3d6h3d3f/d3d3yXd3dxF3d3cAd3d3AHd3dwB3d3cDd3d3PHd3d1N3d3dJd3d3o3d3d6l3d3dld3d3AHd3dwB3d3dtd3d3/3d3d+53d3c1d3d3AAAAAAB3d3cAd3d3AHd3dzF3d3dSd3d3UHd3d6N3d3epd3d3ZXd3dwB3d3cAd3d3OXd3d/B3d3f/d3d3fnd3dwZ3d3cFd3d3AHd3dwB3d3cxd3d3Und3d1B3d3eVd3d3q3d3d3t3d3cHd3d3AHd3dxN3d3fNd3d3/3d3d+93d3e7d3d3m3d3dxJ3d3cCd3d3PHd3d1N3d3dJd3d3bXd3d4x3d3c/d3d3A3d3dwB3d3cCd3d3Und3d3p3d3dyd3d3cHd3d293d3cTd3d3AHd3dx53d3dFd3d3NXd3dxl3d3cYd3d3Knd3d2p3d3cgd3d3AHd3dwAAAAAAAAAAAHd3dwB3d3cAd3d3JHd3d3J3d3cld3d3C3d3dwx3d3cAd3d3Ond3d7p3d3fRd3d3oHd3dzp3d3cJd3d3AHd3dwB3d3cKd3d3Rnd3d8N3d3f/d3d32Hd3dz13d3cAd3d3AHd3dxZ3d3eRd3d30Hd3d9F3d3fEd3d3lnd3dyJ3d3dBd3d3vXd3d/F3d3f/d3d3/3d3d7V3d3ccd3d3AHd3dwB3d3cAd3d3FHd3d3d3d3fBd3d30Xd3d813d3c3d3d3and3d/93d3f/d3d373d3d5R3d3cad3d3AHd3dwAAAAAAAAAAAHd3dwB3d3cGd3d3O3d3d4h3d3ezd3d3NHd3d2Z3d3fld3d3qHd3d0p3d3cId3d3AAAAAAAAAAAA4AcAAMADAACAAQAAgYEAAADgAAAAUAAAAFAAABh4AAAYCAAACAAAAAgAAAAH4AAAgIEAAIABAADAAwAA4AcAAA==');
        exit;      
    }
    
    session_start();
    
    function sanitate($db, $array) {
       foreach($array as $key=>$value) {
          if(is_array($value)) { sanitate($db, $value); }
          else { $array[$key] = mysqli_real_escape_string($db, $value); }
       }
       return $array;
    }
    
    require_once('_config/config.php');
    require_once('_frontend/modificators.php');        

    define('LPS_NONE', 0);
    define('LPS_LEFT', 1);
    define('LPS_RIGHT', 2);
    define('LPS_BOTH', 3);
    //gen_multi_or($_POST['test'], 'tst#field', 'LIKE', LPS_NONE);
    function gen_multi_or($variable, $field, $operator='=', $lps=0) {
        $gen=' AND ';

        foreach($variable as $key=>$item) {
            $lt='';  $rt='';
            if($lps==1 || $lps==3) $lt='%';
            if($lps==2 || $lps==3) $rt='%';
            $gen.='`'.$field."` ".$operator." '".$lt.$item.$rt."' OR ";

        }
        //echo substr($gen,0,-3);
        return substr($gen,0,-3);
    }
    
    function gen_semicolon_value($variable) {
        if($variable) {
            return ';'.implode(';;', $variable).';';
        } else {
            return null;
        }
    }
    
    //echo gen_semicolon_value($_POST['languages']);


    function mail_send($from, $to, $subject, $message, $cc=null) {
        $headers = "From: " . strip_tags($from) . "\r\n";
        $headers .= "Reply-To: ". strip_tags($from) . "\r\n";
        $headers .= "MIME-Version: 1.0\r\n";
        if($cc) {
            $headers .= "CC: ".$cc."\r\n";    
        }
        $headers .= "Content-Type: text/html; charset=utf-8\r\n";   
        
        mail($to, $subject, $message, $headers); 
    }
    
    function semicolon_values($inp) {
        return explode(';;', substr($inp,1,-1));
    }
    
    function validator($input, $modes) {
        $ret=null;
        foreach($modes as $key=>$item) {
            if(!$input[$key] && $item['required']) {
                $ret[$key]['error']='required';
            } else {
                switch($item['mode']) {
                    case 'email':
                        if (!filter_var($input[$key], FILTER_VALIDATE_EMAIL)) { $ret[$key]['error']='wrong'; }
                    break;
                    case 'url':
                        if (!filter_var($input[$key], FILTER_VALIDATE_URL)) { $ret[$key]['error']='wrong'; }
                    break;  
                    case 'int':
                        if (!filter_var($input[$key], FILTER_VALIDATE_INT)) { $ret[$key]['error']='wrong'; }                    
                    break;   
                    case 'float':
                        if (!filter_var($input[$key], FILTER_VALIDATE_FLOAT)) { $ret[$key]['error']='wrong'; }                    
                    break;                                      
                }
                if($item['max'] && strlen($input[$key])>$item['max'] && ($item['required'] || strlen($input[$key]>0))) {
                    $ret[$key]['error']='max';
                    $ret[$key]['min']=$item['min'];
                    $ret[$key]['max']=$item['max'];
                }
                if($item['min'] && strlen($input[$key])<$item['min'] && ($item['required'] || strlen($input[$key]>0))) {
                    $ret[$key]['error']='min';
                    $ret[$key]['min']=$item['min'];
                    $ret[$key]['max']=$item['max'];
                }                
            }

        }
        return $ret;
    }
    
    /*
    print_r(validator(
        array('pole1'=>'fdg@fg.pl', 'pole2'=>'47.5', 'pole3'=>'56x'),
        array('pole1'=>array(
            'mode'=>'email', 'required'=>true),
             'pole3'=>array(
            'mode'=>'int'),
             'pole2'=>array(
            'mode'=>'float')            
            
        )));
        */

    mb_internal_encoding("UTF-8");
    //ultra fancy variables {} parser 
    function parse_variables($input) {
        global $_;
        // first pass dots . do #0
        $opn=false;
        for($i=0; $i<strlen($input); $i++) {
            if($input[$i]=='{' && !$opn) {
                $opn=true;
            }
            if($input[$i]=='}' && $opn) {
                $opn=false;
            }
            if($input[$i]=='.' && $opn) $input[$i]=chr(1);            
        }
        



        $input=str_replace(array(chr(1), '}'), array("']['", "'].\""), $input);
        // server variables
        $input=str_replace(array("{session']", "{get']", "{post']", "{server']"), array('".$_SESSION', '".$_GET', '".$_POST', '".$_SERVER'), $input);
        // $_ variables
        $input=str_replace(array("{queries']", "{category']", "{modules']"), array('".$_[\'queries\']', '".$_[\'category\']', '".$_[\'modules\']'), $input);        
        // echo $input;
       //  exit;
        //$input=str_replace('"', '\"', $input);
        //echo "SELECT * FROM table_users WHERE 1=1".($_GET['login']?" AND usr#login LIKE '%".$_GET['login']."%'":"");
        eval("\$input = \"$input\";"); 
        //        echo $input;    
        return $input;  
    }

    
    /************** URL PARSER ************/
    // parse for pseudo $_GET
    $qsplit=explode('?', $_SERVER['REQUEST_URI']);
    $_SERVER['ORIGINAL_REQUEST_URI'] =$_SERVER['REQUEST_URI'];
    $_GET=null;
    if(count($qsplit)>1) {
        $params=explode('&', $qsplit[1]);
        foreach($params as $key=>$item) {
            $spl=explode('=', $item);
            $_GET[$spl[0]]=$spl[1];
        }
        $_SERVER['REQUEST_URI']=$qsplit[0];
    }    
    
    $_url=null;
    foreach(explode('/',$_SERVER['REQUEST_URI']) as $url) {
        if($url) $_url[]=$url;                                    
    }               
    
    if($cfg['languages'][$_url[0]]) {
        $_SESSION['language']=$_url[0];
        unset($_url[0]);
        $_url=array_values($_url);
    }      
    
    $_pageId=null;
    
    if( substr($_url[@count($_url)-1],strlen($cfg['urls']['pagePostfix'])*-1) == $cfg['urls']['pagePostfix']) {
        $_pageId=substr($_url[count($_url)-1],0,strlen($cfg['urls']['pagePostfix'])*-1);  
        unset($_url[@count($_url)-1]);
        $_url=array_values($_url);                
    }
    

    function mb_unserialize($string) {
        $string = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $string);
        return unserialize($string);
    }    

    function langText($input, $lang) {
        $tmp=mb_unserialize($input);
        return $tmp[$lang];
    }


    function createTree(&$list, $parent=null, $path=''){
        $tree = array();        
        foreach ((array)$parent as $k=>$l){
            if(isset($list[$l['catId']])){
                $l['path']=$path.'/'.$l['catSlug'];
                $l['@subcategories'] = createTree($list, $list[$l['catId']], $l['path']);
            }
            $tree[$l['catSlug']] = $l;
        } 
        return $tree;
    }    
    
    function olLiTree($tree) {
        $out = '<ul>';
    
        foreach($tree as $key => $value) {
            $out.= '<li>';
    
            if (is_array($value)) {
                $out.= 'x'.$value['catTitle@pl'] . olLiTree($value);
            } else {
                $out.= $value;
            }
    
            $out.= '</li>';
        }
    
        $out.= '</ul>';
    
        return $out;
    }    
    
    
    
    /************** CHECK ADMIN PANEL REQUEST ************/
    if($cfg['admin']['slug']==$_url[0]) {
        require_once('_backend/core.php');
        exit;          
    }
  
    
        
    
    $cache_start=false;
    if(!$_POST && $cfg['cache']['enabled']) {
        $_cache_file=str_replace('/', '^^', $_SERVER['REQUEST_URI']);            
        if(!file_exists($cfg['cache']['directory'].'/'.$_cache_file)) {
            $cache_start=true; 
            ob_start();
        } else {
            echo file_get_contents($cfg['cache']['directory'].'/'.$_cache_file);
            exit;
        }              
    }



    function get_relation_data($table, $ids, $idfield) {
        global $db;
        
        $tab_info=mysqli_fetch_assoc(mysqli_query($db,"SELECT * FROM tables WHERE tabName='$table'"));
        $sql="SELECT * FROM $table WHERE ";

        if($ids) {
            foreach((array)$ids as $key=>$item) {
                $sql.=$tab_info['tabPrefix'].'Id="'.$item[$idfield].'" OR ';
            } 
            $ret=null;
            $res=mysqli_query($db,substr($sql,0,-4));
            while($rek=mysqli_fetch_assoc($res)) {
                $ret[]=$rek;            
            }
        }
        return $ret;
    }

    
    function microtime_float()
    {
        list($usec, $sec) = explode(" ", microtime());
        return ((float)$usec + (float)$sec);
    }    
    
    $_times['mysql']=0;    
    $_times_tmp['mysql']=0;
   
    $_times['global']=0;    
    $_times_tmp['global']=0;    
    

    function time_start($key) {
        global $_times, $cfg, $_times_tmp; 

        if($cfg['debug']) $_times_tmp[$key]=microtime_float(); 
                             
    }
    
    function time_stop($key) {
        global $_times, $cfg, $_times_tmp;               
        if($cfg['debug']) $_times[$key]+=microtime_float()-$_times_tmp[$key];     
    } 
    

    function is_json($str){ 
        return json_decode($str) != null;
    }


    function sql_parser($sql) {
        global $_category;
        return str_replace(array(
                '{*}', '{language.symbol}', '{category.id}', '{offset.current}', '{category.limit}'
            ),
            array(
                '*', $_SESSION['language'], $_category, $_GET['p']?(($_GET['p']-1)*15):'0', '15'
            ), $sql);
    }
    
    /*
    function sql($sql, $idField=null) {
        global $db, $_cfi, $_formatFields;
        $sql=sql_parser($sql);
        echo $sql;
        //exit;
        $res=mysqli_query($db, $sql);
        $expl=mysqli_query($db, 'EXPLAIN '.$sql);
        $fields=null;
       // print_r($_cfi);
        while($table=mysqli_fetch_assoc($expl)) {
           // print_r($table);
           echo $table['table'].'<br/>';
            $fields=$_cfi[$table['table']];
        }
        echo '<pre>';
        print_r($fields);
        exit;
        //exit;
    }
    */

    // universal data and model getter based on parser
          
    function sql($sql, $table, $idField=null) {
        global $db, $_cfi, $_formatFields;
        
        //print_r($_cfi);

        $cfi=$_cfi[$table];
        //echo '<pre>';
        
       // print_r($cfi);
        //exit;
        $res=mysqli_query($db, sql_parser($sql));
        
        $fields=null; 
        
        //language detect
        foreach( mysqli_fetch_fields($res) as $key=>$item) {
            $tst=explode('@',$item->name);
            //echo 'x';
            if(count($tst)>1) {
                if($tst[1]==$_SESSION['language']) $fields[$item->name]['key']=$tst[0];            
                //echo $item->name.'<br/>';
            } else {
                $fields[$item->name]['key']=$tst[0];            
            }            
        }
        



        $out=[];        
        while($rek=mysqli_fetch_assoc($res)) {
            $tmp=null;
            foreach($fields as $key=>$item) {
                // formatowanie / parsowanie
                switch($cfi[$item['key']]['cfiType']) {
                    case 'checkboxes':  $rek[$key]=explode(';;', substr($rek[$key],1,-1));  break;                    
                }     
                switch($_formatFields[$table][$item['key']]['type']) {
                    case 'array_fields':  $rek[$key]=json_decode($rek[$key], true);  break;                    
                }         
                $tmp[$item['key']]=$rek[$key];
            }
            if($idField) {
                $out[$rek[$idField]]=$tmp;
            } else {
                $out[]=$tmp;
            }
        }
    
        
        return $out;
    }
         
    
    time_start('global');    
    
    if(!$_SESSION['language']) {
        foreach($cfg['languages'] as $key=>$item) {
            if($item['default']) $_SESSION['language']=$key;
        }
    }

    time_start('mysql');
    $db=mysqli_connect($cfg['mysql']['host'], $cfg['mysql']['user'], $cfg['mysql']['password']);
    mysqli_select_db($db,$cfg['mysql']['base']);
    mysqli_query($db, "SET CHARSET 'utf8'");
    time_stop('mysql');
    
    if($_POST) {
      $_POST = sanitate($db, $_POST);
    }    
    if($_GET) {
      $_GET = sanitate($db, $_GET);
    }    

         
    $_language=$_SESSION['language'];
    
    $settings=null;
    $res=mysqli_query($db, "SELECT * FROM settings");
    while($rek=mysqli_fetch_assoc($res)) {
        $settings[$rek['setProperty']]=$rek['setValue'];    
    }

    
    //****************************************************** TABLES *********************************************/
    $res=mysqli_query($db, "SELECT * FROM tables");
    $_tables;
    while($rek=mysqli_fetch_assoc($res)) {
        $_tables[$rek['tabName']]=$rek;
    }
    
    
    
    //****************************************************** CUSTOM FIELDS - STRUKTURA / PREFIXY ****************************//
    $res=mysqli_query($db,"SELECT customFields.*, tables.tabPrefix FROM customFields LEFT JOIN tables ON tables.tabName=customFields.cfiTable");
    $_cfi=null;
    $_cfi_flat=null;
    while($rek=mysqli_fetch_assoc($res)) {
        $rek['cfiParameters']=json_decode($rek['cfiParameters'], true);
        $_cfi[$rek['cfiTable']][$rek['tabPrefix'].'#'.$rek['cfiName']]=$rek;
        $_cfi_flat[$rek['tabPrefix'].'#'.$rek['cfiName']]=$rek;             
    }
  
    //echo '<pre>';
   // print_r($_cfi);
   // print_r($_cfi_flat);
   // exit;
    
          //sql("SELECT s.cfiTable");
    //exit;
    
    
    
    $_=null;
    //******************************************************************************************************** CATEGORIES *******************************************************/
    time_start('mysql');
    $_categories=sql($settings['sqlCategories'], 'categories', 'catId');
    if(!$_url[0]) {
        $root_cat=mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM categories WHERE catRoot='1'"));
        
        $_url[0]=$root_cat['catSlug@'.$_SESSION['language']];
    }
    
    time_stop('mysql');
    foreach($_categories as $key=>$category) {
        $pid=$category['catParent_catId'];
        $url_path='/'.$category['catSlug'];         
        while($pid!=0) {
            $url_path='/'.$_categories[$pid]['catSlug'].$url_path;        
            $pid=$_categories[$pid]['catParent_catId'];
        }     
        $_categories[$key]['url_path']=$url_path;  
    }



    
    $new = array();
    foreach ($_categories as $a){
        $new[$a['catParent_catId']][] = $a;
    }


    $_cat_tree = createTree($new, $new[0]); // changed
    //echo '<pre>';
    //print_r($_cat_tree);
    //exit;

    //print_r($_cat_tree);

    //   print_r($_cat_tree);
    //exit;
    $ctab=$_cat_tree;
   // print_r($ctab);
    for($i=0; $i<count($_url); $i++) {
     
        if($ctab[$_url[$i]]) {
            
            $_category=$ctab[$_url[$i]]['catId'];                       
            $ctab=$ctab[$_url[$i]]['@subcategories'];
        } else {
            echo '404';
            exit;
        }        
    }
   // echo '<pre>';
    //print_r($_cat_tree);
         //      exit;
    if($_pageId) {
        time_start('mysql');
        switch($cfg['urls']['pageId']) {
            case PAGE_ID_SLUG: $res=mysqli_query($db, "SELECT *, pagId, `pagTitle@$_language` AS pagTitle, `pagContent@$_language` AS pagContent, `pagSlug@$_language` AS pagSlug, pagCategories FROM pages WHERE `pagSlug@$_language`='$_pageId' AND (pagCategories LIKE '%;$_category;%' OR pagCategories='')");  break;
            case PAGE_SLUG: $res=mysqli_query($db, "SELECT *, pagId, `pagTitle@$_language` AS pagTitle, `pagContent@$_language` AS pagContent, `pagSlug@$_language` AS pagSlug, pagCategories FROM pages WHERE `pagSlug@$_language`='$_pageId' AND (pagCategories LIKE '%;$_category;%' OR pagCategories='')"); break;
            
                            
        }
        $_page=mysqli_fetch_assoc($res);
        if(!$_page) {
            echo '404a';
            exit;
        }
        else {
            $_['page']=$_page;
        } 
        time_stop('mysql');              
    }
    
    
   
    
   
    
    //******************************************************************************************************** PAGES *******************************************************/
     $ret=sql($settings['sqlPages'], 'pagId');
    if($ret)
    $pages['list']=$ret;
    //print_r($settings);
    $no_limit=explode('LIMIT', $settings['sqlPages']);


    //echo sql_parser($settings['sqlPages']);
    $pages['total']=mysqli_num_rows(mysqli_query($db, sql_parser($no_limit[0])));
    if(!$_GET['p']) $pag=1; else $pag=$_GET['p'];
    $pages['pages_total']=ceil($pages['total']/15);
    if($pag > $pages['pages_total']) $pag = 1;
    $pages['pages_current'] = $pag;
    $pages['pages_variable'] = 'p';



    //echo $settings['sqlPages'];




    $_['url']=$_url;
    $_['http']='http://'.$_SERVER['HTTP_HOST'];
    $_['category']=$_category;
    $_['categories']['list']=$_categories;
    $_['language']=$_SESSION['language'];
    $_['theme']=array(
                'url_path'=>$_['http'].'/themes/'.$cfg['theme'],
                'name'=>$cfg['theme'],
            );
    $_['pages']=$pages;


    
    //******************************************************************************************************** TEXTS *******************************************************/
    $texts=null;
    $res=mysqli_query($db, "SELECT * FROM texts WHERE txtStatus='1' AND (txtCategories LIKE '%;".$_category.";%' OR txtCategories='')");
    while($txt=mysqli_fetch_assoc($res)) {      
        $texts[$txt['txtName']]=$txt['txtContent@'.$_language];        
    }

    
    
    


  


    $_['url']=$_url;    
    $_['http']='http://'.$_SERVER['HTTP_HOST'];
    $_['category']=$_category;
    $_['categories']['list']=$_categories;
    $_['language']=$_SESSION['language'];
    $_['theme']=array(
                'url_path'=>$_['http'].'/themes/'.$cfg['theme'],
                'name'=>$cfg['theme'],
            );
    $_['pages']=$pages;
    $_['texts']=$texts;


    //******************************************************************************************************** MODULES *******************************************************/
    
    $modules=sql("SELECT * FROM modules WHERE modStatus='1' AND (modCategories LIKE '%;".$_category.";%' OR modCategories='')", 'modules', 'modId');

    $loaded=null; 
    if($modules) {   
    foreach($modules as $mid=>$module) {
        if(!$loaded[$module['modModule']]) {
            require_once('_modules/'.$module['modModule'].'/frontend.php');            
            $loaded[$module['modModule']]=$_tables['module_'.$module['modModule']];
        }   
        
        // wyciaganie modulu
        $function_run="run_module_".$module['modModule'];  
        $module_item=sql("SELECT * FROM module_".$module['modModule']." WHERE ".$loaded[$module['modModule']]['tabPrefix']."Id='".$module['modId']."'", "module_".$module['modModule']);
        $module_item=array_merge($module_item[0], $module);

        $_['modules'][$module['modName']]=$function_run($module_item);
        $_['modules'][$module['modName']]['settings']=$module_item;   
         
    }
    }
   // print_r($loaded);
   // exit;
    //$res=mysqli_query($db, "SELECT * FROM modules WHERE modStatus='1' AND (modCategories LIKE '%;".$_category.";%' OR modCategories='')");
    //echo "SELECT * FROM modules WHERE modStatus='1' AND (modCategories LIKE '%;.$_category.';%' OR modCategories='')";
   // $loaded=null;
   // while($rek=mysqli_fetch_assoc($res)) {
      //  if(!$loaded[$rek['modModule']]) {
      //      require_once('_modules/'.$rek['modModule'].'/frontend.php');            
      //      $loaded[$rek['modModule']]=mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM tables WHERE tabName='module_".$rek['modModule']."'"));
      //  }

        //require_once('_modules/'.)
        /*
        $r=mysqli_query($db, "SELECT * FROM module_".$rek['modModule']." WHERE ".$loaded[$rek['modModule']]['tabPrefix']."Id='".$rek['modId']."'");
        while($module_item = mysqli_fetch_assoc($r)) {
            $function_run="run_module_".$rek['modModule'];   
            
            $row=$module_item;
            foreach($row as $rkey=>$ritem) {
                if(is_json($ritem)) $row[$rkey]=json_decode($row[$rkey], true);
                
                if(count(explode('@',$rkey))>1) {
                    $exp=explode('@', $rkey);
                    if($exp[1]==$_SESSION['language']) {
                        $row[$exp[0]]=$ritem;
                        unset($row[$rkey]);
                    } else {
                        unset($row[$rkey]);
                    }                 
                }                                 
            }
            $module_item=$row;                 
                     
            $_['modules'][$rek['modName']]=$function_run($module_item);
            $_['modules'][$rek['modName']]['settings']=$module_item;                 
        }
        */

        
    //}
    /*
    echo '<pre>';
    $modules=sql( "SELECT * FROM module_".$rek['modModule']." WHERE ".$loaded[$rek['modModule']]['tabPrefix']."Id='".$rek['modId']."'", 'modules', $loaded[$rek['modModule']]['tabPrefix'].'Name');
    print_R($modules);
    exit;
    */    
    
    // ****************************************** WSTAWKA do punktow
    if($_['modules']['users']['user_data']['usr#obszar']) {

        $plist=null;        
        $ob=json_decode($_['modules']['users']['user_data']['usr#obszar'], true);
        foreach($ob as $key=>$item) {
            $plist[]=$item['usr#obszar_punkt'];            
        }
        $plist[]=$ob[0]['usr#obszar_punkt'];
        $_['modules']['users']['user_data']['usr#obszar_flat']=implode(',',$plist);
        //print_r($ob);
    }    
    
    //******************************************************************************************************** QUERIES *******************************************************/
    // inserty
    $res=mysqli_query($db, "SELECT * FROM queries WHERE (queCategories LIKE '%;".$_category.";%' OR queCategories='') AND queSQLType='insert' OR queSQLType='delete'");
    while($query=mysqli_fetch_assoc($res)) { 
        if((!$query['queRunIfGET'] && $query['queRunNoPOST']) || ($_GET[$query['queRunIfGET']] || in_array($query['queName'], (array)$_POST['query'])) ) {        
            //$query=parse_variables($query['queSQL']);
            //@$qr=mysqli_query($db, $query);
            //$_['queries'][$query['queName']]['query']=$query;

            $valtab=null;
            foreach((array)json_decode($query['queValidators'],true) as $key=>$item) {

                $valtab[$item['queValidKey']]['mode']=$item['queValidMode'];
                if(strpos($item['queValidAttributes'], ';required;')!==false) {
                    $valtab[$item['queValidKey']]['required']=true;
                }    
                $valtab[$item['queValidKey']]['min']=$item['queValidMin'];   
                $valtab[$item['queValidKey']]['max']=$item['queValidMax'];                                                      
            }
     
            $validation=validator((array)$_POST, (array)$valtab);
            if(!$validation) {             
                $sql=parse_variables($query['queSQL']);
                @$qr=mysqli_query($db, $sql);
                if(!$qr) $_['queries'][$query['queName']]['error']=mysqli_error($db); else $_['queries'][$query['queName']]['success']=1;
            } else {
                $_['queries'][$query['queName']]['error']='validation';
                $_['queries'][$query['queName']]['validation']=$validation;
            }
            $_['queries'][$query['queName']]['query']=$sql;
            
            //if(!$qr) $_['queries'][$model['queName']]['error']=mysqli_error($db);
        }
        
        /*
        if($qr) {
            while($row=mysqli_fetch_assoc($qr)) {
                $_['models'][$model['modName']]['list'][]=$row;
            }   
        } else {
            $_['models'][$model['modName']]['error']=mysqli_error($db);
        } 
        */
    }    

    // update    
    $res=mysqli_query($db, "SELECT * FROM queries WHERE (queCategories LIKE '%;".$_category.";%' OR queCategories='') AND queSQLType='update'");
    while($query=mysqli_fetch_assoc($res)) { 
        //print_r($_POST['query']);

        if(in_array($query['queName'], (array)$_POST['query']) || $query['queRunNoPOST'] ) {    
            $valtab=null;
            foreach((array)json_decode($query['queValidators'],true) as $key=>$item) {

                $valtab[$item['queValidKey']]['mode']=$item['queValidMode'];
                if(strpos($item['queValidAttributes'], ';required;')!==false) {
                    $valtab[$item['queValidKey']]['required']=true;
                }    
                $valtab[$item['queValidKey']]['min']=$item['queValidMin'];   
                $valtab[$item['queValidKey']]['max']=$item['queValidMax'];                                                      
            }
     
            $validation=validator((array)$_POST, (array)$valtab);
            if(!$validation) {             
                $sql=parse_variables($query['queSQL']);
                $qr=mysqli_query($db, $sql);
                if(!$qr) $_['queries'][$query['queName']]['error']=mysqli_error($db); else $_['queries'][$query['queName']]['success']=1;
            } else {
                $_['queries'][$query['queName']]['error']='validation';
                $_['queries'][$query['queName']]['validation']=$validation;
            }
        }

    }      
    
    
    // selecty
    $res=mysqli_query($db, "SELECT * FROM queries WHERE (queCategories LIKE '%;".$_category.";%' OR queCategories='') AND queSQLType='select'");
    //echo "SELECT * FROM queries WHERE (queCategories LIKE '%;".$_category.";%' OR queCategories='') AND queSQLType='select'";
    //echo "SELECT * FROM queries WHERE queCategories LIKE ('%;".$_category.";%' OR queCategories='') AND queSQLType='select'";
    while($model=mysqli_fetch_assoc($res)) {
        if(!$model['queRunIfGET'] || $_GET[$model['queRunIfGET']]) { 
            $parsed=parse_variables($model['queSQL']); 
            $total=mysqli_num_rows(mysqli_query($db,$parsed));
            if($model['quePageLimit']) {
                $cpage=$_GET[$model['quePageLimitVariable']];
                if(!$cpage) $cpage=1;
                $total_pages=ceil($total/$model['quePageLimit']);
                $parsed.=' LIMIT '.($cpage-1)*$model['quePageLimit'].','.$model['quePageLimit'];
    
            }
            $query=$parsed;
            //echo $query;
            $qr=mysqli_query($db, $query);
            $_['queries'][$model['queName']]['query']=$query;
            if($qr) {        
                while($row=mysqli_fetch_assoc($qr)) {
                    foreach($row as $rkey=>$ritem) {
                        if(is_json($ritem)) $row[$rkey]=json_decode($row[$rkey], true);
                        
                        if(count(explode('@',$rkey))>1) {
                            $exp=explode('@', $rkey);
                            if($exp[1]==$_SESSION['language']) {
                                $row[$exp[0]]=$ritem;
                                unset($row[$rkey]);
                            } else {
                                unset($row[$rkey]);
                            }                 
                        }                 
                        
                    }              
                    $_['queries'][$model['queName']]['list'][]=$row;
    
                } 
                if($model['quePageLimitVariable']) { 
                  $_['queries'][$model['queName']]['total_rows']=$total;
                  $_['queries'][$model['queName']]['pages_current']=$cpage;
                  $_['queries'][$model['queName']]['pages_variable']=$model['quePageLimitVariable'];
                  $_['queries'][$model['queName']]['pages_total']=$total_pages;
                } 
            } else {
                $_['queries'][$model['queName']]['error']=mysqli_error($db);
            } 
        }
    }
    
    
    





    // tylko zmienne
    //***********************************************************************************************************************
    function array2ul($array) {
        $out="<ul>";
        foreach($array as $key => $elem){
            if(!is_array($elem)){
                    $out=$out.'<li><a style="font-weight: bold;" href="#" key="'.$key.'">'.$key.' <span class="glyphicon glyphicon-chevron-right" style="font-size: 10px; color: #909090;"></span> <i style="font-weight: normal;">'.(strlen($elem)>30?mb_substr($elem,0,30).'...':$elem).'</i></a></li>';
            }
            else $out=$out.'<li><a style="font-weight: bold;" href="#" key="'.$key.'">'.$key."</a>".array2ul($elem)."</li>";
        }
        $out=$out."</ul>";
        return $out; 
    }



    
    
    if($_GET['__only_variables'] && $_SESSION['admin']) {
        echo array2ul($_);
       // echo json_encode($_);
        exit;
    }

    /*
    echo '<pre>';
    print_r($_);
    exit;
    */

    $cwd=getcwd();
    chdir('themes/'.$cfg['theme']);
    require_once('templates/'.$_categories[$_category]['catTemplate']);
    chdir($cwd);
    
    time_stop('global');
    
    if($cache_start) {
        $cache_content = ob_get_contents();
        ob_end_clean();
        file_put_contents($cfg['cache']['directory'].'/'.$_cache_file, $cache_content);
        echo $cache_content;
        //echo $cache_start;
    }    

    if($cfg['debug']) {

        $_times['others']=$_times['global']-$_times['mysql'];
        require_once('_frontend/debug.php');
    }


 

//fb($var, 'Label');
//fb($var, FirePHP::*);
//fb($var, 'Label', FirePHP::*);

    
    

?>