phpDocumentor VFront
VFront_XML
[ class tree: VFront ] [ index: VFront ] [ all elements ]

Source for file xml.php

Documentation is available at xml.php

  1. <?php
  2. /**
  3.  * File che getisce la creazione dinamica e lo stream dell'XML di VFront
  4.  * Viene utilizzato anche per generare report HTML e PDF, se associato a fogli di stile
  5.  * Il file non è richiamato direttamente ma mediante riscrittura degli URL
  6.  * da parte del file .htaccess presente nella stessa cartella
  7.  * 
  8.  * @desc Output XML
  9.  * @package VFront
  10.  * @subpackage VFront_XML
  11.  * @author M.Marcello Verona
  12.  * @copyright 2007 M.Marcello Verona
  13.  * @version 0.90
  14.  * @license http://www.gnu.org/licenses/gpl.html GNU Public License
  15.  */
  16.  
  17.  
  18. require("../inc/conn.php");
  19. require("../inc/layouts.php");
  20. require("../inc/func.comuni.php");
  21. require("../inc/func.frontend.php");
  22. require("../inc/func.xmlize.php");
  23.  
  24.  
  25. /**
  26.  * Funzione per recuperare le impostazioni del gruppo attuale per la tabella in oggetto
  27.  * Restituisce SQL con eventuali subquery
  28.  *
  29.  * @param string $nome_tabella 
  30.  * @param bool $only_visibile 
  31.  * @return string (sql)
  32.  */
  33. function campi_elaborati($nome_tabella,$only_visibile=true){
  34.     
  35.     global $link,$db1;
  36.  
  37.     $oid=name2oid($nome_tabella,intval($_SESSION['gid']));
  38.     
  39.     $clausola_visibile ($only_visibile"AND c.in_visibile=1" "";
  40.     
  41.     // PRENDI INFO Colonne della TABELLA
  42.     $query2 vmsql_query("SELECT c.column_name , c.data_type , c.character_maximum_length as maxsizec.is_nullable
  43.                             c.in_tipoc.in_defaultt.orderbyt.orderby_sort
  44.                             FROM {$db1['frontend']}.registro_col c, {$db1['frontend']}.registro_tab t
  45.                             WHERE c.id_table=$oid 
  46.                             AND c.id_table=t.id_table
  47.                             $clausola_visibile
  48.                             ORDER BY c.ordinal_position",$link);
  49.     
  50.     $matrice_info vmsql_fetch_assoc_all($query2);
  51.     
  52.     foreach($matrice_info as $k=>$info){
  53.         
  54.         if($k==0){
  55.             $ORDERBY ($info['orderby']!=''"ORDER BY ".$info['orderby']." ".$info['orderby_sort'"";
  56.         }
  57.         
  58.         if($info['in_tipo']=="select_from"){    
  59.             
  60.             $test preg_match("'SELECT ([\w]+) ?, ?([\w]+) +FROM +([\w]+).*?'i",$info['in_default'],$campo_k);
  61.         
  62.             $campi.=" (SELECT t$k.{$campo_k[2]} FROM {$campo_k[3]} t$k WHERE t$k.{$campo_k[1]}=t.{$info['column_name']}as ".$info['column_name'].",";
  63.         }
  64.         else{
  65.             
  66.             $campi.=" t.".$info['column_name'].",";
  67.         }
  68.     }
  69.     
  70.     $campi=substr($campi,0,-1);
  71.         
  72.     return $campi;
  73. }
  74.  
  75.  
  76.  
  77.  
  78.  
  79.     // query based?
  80.     $QB (isset($_GET['querybased']&& $_GET['querybased']=='@'1:0;
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.     if($QB){
  88.         
  89.         $nome_report preg_replace("'[^a-z0-9_-]'i","",$_GET['action']);
  90.     }
  91.     else{
  92.         $tabella preg_replace("'[^a-z0-9_]'i","",$_GET['action']);
  93.     }
  94.         
  95.     
  96.     
  97.     ########################################
  98.     #
  99.     #    DIRITTI XML
  100.     #
  101.     ########################################
  102.     
  103.     
  104.     if($QB){
  105.         
  106.         // cerca i diritti come report tabella
  107.         $q=vmsql_query("SELECT * FROM {$db1['frontend']}.xml_rules WHERE nome_report='$nome_reportORDER BY lastData DESC LIMIT 1",$link);
  108.     }
  109.     else{
  110.         // cerca i diritti come report tabella
  111.         $q=vmsql_query("SELECT * FROM {$db1['frontend']}.xml_rules WHERE tabella='$tabellaORDER BY lastData DESC LIMIT 1",$link);
  112.         
  113.     }
  114.         
  115.     if(vmsql_num_rows($q)==0){
  116.         echo "<h1>Accesso vietato</h1>\n"exit;
  117.     }
  118.     else $RS_rules=vmsql_fetch_assoc($q);
  119.     
  120.     if($RS_rules['accesso']=='PUBLIC'){
  121.         
  122.         // non fa niente e continua con lo script
  123.     }
  124.     elseif($RS_rules['accesso']=='FRONTEND'){
  125.         proteggi(1);
  126.     }
  127.     elseif($RS_rules['accesso']=='GROUP'){
  128.         
  129.         $gruppi=explode(",",$RS_rules['accesso_gruppo']);
  130.         
  131.         if(is_array($gruppi&& in_array($_SESSION['gid'],$gruppi)){
  132.             
  133.             // va avanti
  134.         }
  135.         else{
  136.             echo "<h1>Accesso vietato</h1>\n"exit;
  137.         }
  138.     }
  139.     else// RESTRICT o altro...
  140.         
  141.         echo "<h1>Accesso vietato</h1>\n"exit;
  142.     }
  143.     
  144.     
  145.     
  146.     
  147.     
  148.     
  149.     
  150.     if($QB){
  151.         
  152.         
  153.         
  154.     }
  155.     else{
  156.     
  157.         $PK prendi_PK($tabella,intval($_SESSION['gid']));
  158.         
  159.         
  160.         $orderby prendi_orderby($tabella,intval($_SESSION['gid']));
  161.         
  162.         if(trim($orderby)=='ASC'$orderby 1;
  163.         
  164.         //aggiungi l'ID all'order by 
  165.         $orderby_doppio=$orderby."$PK ";
  166.         
  167.         $campo_orderby str_replace(array(" ASC"," DESC"),"",$orderby);
  168.         $operatore_orderby ereg(' DESC',$orderby" > " " < ";
  169.         
  170.     
  171.     
  172.         // CASO RISULTATO DI RICERCA-------------------------------------------------------
  173.         // SE c'è l'id in GET prendi calcola a che punto dell'elenco si è arrivati
  174.         if(isset($_GET['id']&& intval($_GET['id'])>0){
  175.     
  176.     
  177.     
  178.             // Prendi il moe del campo orderby ed il vaolre relativo all'id
  179.     
  180.             $sql_calcola_sub "SELECT s.$campo_orderby 
  181.                                     FROM $tabella s WHERE s.".$PK."='".$_GET['id']."'";
  182.     
  183.             $sql_calcola "SELECT count(*) FROM ".$_GET['action']." t
  184.                                     WHERE t.$campo_orderby $operatore_orderby ($sql_calcola_subOR t.$campo_orderby IS NULL";
  185.     
  186.             rpc_debug($sql_calcola);
  187.     
  188.             $query_calcola vmsql_query($sql_calcola,$link);
  189.     
  190.             list($offset)=vmsql_fetch_row($query_calcola);
  191.     
  192.         }
  193.         else{
  194.             $offset= (int) $_GET['c'];
  195.         }
  196.     
  197.     
  198.         list($tot_recordsvmsql_fetch_row(vmsql_query("SELECT count(*) FROM $tabella",$link));
  199.     
  200.         // OPZIONE PER AVERE I CAMPI ROW
  201.         // i campi row sono quelli non elaborati, in caso contrario mostra i campi richiesti in tabella con le subquery
  202.         if($RAW){
  203.             
  204.             $campi_tabella="*";
  205.             
  206.         }
  207.         else{
  208.             
  209.             $campi_tabella campi_elaborati($tabella,true);
  210.             $tabella $tabella " t ";
  211.         }
  212.         
  213.     // report basato su tabella
  214.     
  215.     
  216.     
  217.     
  218.     
  219.     
  220.     
  221.     
  222.     
  223.     
  224.     // foglio di stile personalizzato
  225.     if($RS_rules['xsl']!='' && is_file(_PATH_XSL."/".$RS_rules['xsl'])){
  226.         
  227.         $xsl=  (isset($_GET['type']&& $_GET['type']=='XML'"" _PATH_WEB_XSL."/".$RS_rules['xsl'];
  228.     }
  229.     // default
  230.     else{
  231.         
  232.         // caso querybased
  233.         $chiocciola ($QB"@":"";
  234.         
  235.         $xsl (isset($_GET['type']&& $_GET['type']=='XML'"" FRONT_DOCROOT."/xml/".$chiocciola.$_GET['action']."/stile.xml";
  236.     }
  237.     
  238.     
  239.     
  240.     // DTD
  241.     $dtd FRONT_DOCROOT."/xml/dtd/1/".$_GET['action'].".dtd";
  242.     
  243.     
  244.     
  245.     
  246.     
  247.     
  248.     
  249.     
  250.     
  251.     
  252.     
  253.     
  254.     
  255.     
  256.     
  257.     
  258.     
  259.     ########################################################################################
  260.     
  261.     
  262.     if(isset($_GET['riepilogo'])){
  263.         
  264.         
  265.         if($QB){
  266.             
  267.             $q_conta=vmsql_query(stripslashes($RS_rules['def_query']),$link);
  268.             $titolo_pag "Report";
  269.         }
  270.         else{
  271.             
  272.             $q_conta=vmsql_query("SELECT count(*) FROM $tabella ",$link);
  273.             $titolo_pag"Tabella";
  274.         }
  275.         
  276.         
  277.         
  278.         list($n_record)=vmsql_fetch_row($q_conta);
  279.         
  280.         
  281.         $tabpreg_replace("'[^a-z0-9_]'i","",$_GET['action']);
  282.         
  283.         
  284.         
  285.         echo openLayout1($titolo_pag." ".$tab);
  286.         
  287.         echo "<h1>$titolo_pag ".$tab."</h1>\n";
  288.         
  289.         echo "<p><b>Tutti i record:</b></p>\n";
  290.         
  291.         // se è query based metti una @ davanti al nome
  292.         if($QB$tab="@".$tab;
  293.         
  294.         echo "<a href=\"".FRONT_DOCROOT."/xml/$tab/all/XML\">XML ($n_record records)</a>\n";
  295.         echo " | <a href=\"".FRONT_DOCROOT."/xml/$tab/all/\">HTML ($n_record records)</a>\n";
  296.         
  297.         
  298.         $q_fo=vmsql_query("SELECT xslfo FROM {$db1['frontend']}.xml_rules WHERE tabella='$tabORDER BY lastData DESC",$link);
  299.         
  300.         list($xslfo)=vmsql_fetch_row($q_fo);
  301.         
  302.         if($xslfo!='-1' || !_FOP_ENABLED){
  303.             
  304.             echo " | <a href=\"".FRONT_DOCROOT."/xml/$tab/PDF\">PDF ($n_record records)</a>\n";
  305.         }
  306.         else{
  307.             
  308.             // non fa nulla
  309.         }
  310.         
  311.         
  312.         
  313.         echo "<p><b>Viste con paginazione:</b></p>\n";
  314.         
  315.         $n_pag=50;
  316.         
  317.         
  318.         echo "<p>Versione XML: ";
  319.         $XML_PAG='';
  320.         for($i=0;$i<ceil($n_record/50);$i++){
  321.             $of=$i*$n_pag;
  322.             $XML_PAG.= " <a href=\"".FRONT_DOCROOT."/xml/$tab/$of,$n_pag/XML\">"($i+1."</a> |";
  323.         }
  324.         echo substr($XML_PAG,0,-2)."</p>\n";
  325.         
  326.         echo "<p>Versione HTML: ";
  327.         $XML_PAG='';
  328.         for($i=0;$i<ceil($n_record/50);$i++){
  329.             $of=$i*$n_pag;
  330.             $XML_PAG.= " <a href=\"".FRONT_DOCROOT."/xml/$tab/$of,$n_pag/\">"($i+1."</a> |";
  331.         }
  332.         echo substr($XML_PAG,0,-2)."</p>\n";
  333.         
  334.         
  335.         /*if($xslfo!='-1' && _FOP_ENABLED){
  336.             echo "<p>Versione PDF: ";
  337.             $XML_PAG='';
  338.             for($i=0;$i<ceil($n_record/50);$i++){
  339.                 $of=$i*$n_pag;
  340.                 $XML_PAG.= " <a href=\"".FRONT_DOCROOT."/xml/$tab/$of,$n_pag/PDF\">". ($i+1) ."</a> |";
  341.             }
  342.             echo substr($XML_PAG,0,-2)."</p>\n";
  343.         }*/
  344.         
  345.         echo closeLayout1();
  346.         
  347.         exit;
  348.         
  349.     }
  350.     
  351.     
  352.     
  353.     
  354.     
  355.     
  356.     
  357.     
  358.     // GENERA L'XML...
  359.     
  360.     //generazione da query
  361.     if($QB){
  362.         
  363.         $query_test=vmsql_try(stripslashes($RS_rules['def_query']),$link);
  364.         
  365.         if($query_test){
  366.             
  367.             if(preg_match("'([0-9]+),([0-9]+)'",$_GET['c'],$match)>&& !eregi(" LIMIT",$RS_rules['def_query'])){
  368.                 
  369.                 $offset=intval($match[1]);
  370.                 $limit=intval($match[2]);
  371.                 
  372.                 $XML xmlize(stripslashes($RS_rules['def_query'])." ".limit_sintax($limit,$offset),null,true,$offset,0,$xsl);
  373.             }
  374.             else if(is_numeric($_GET['c']&& !eregi(" LIMIT",$RS_rules['def_query'])){
  375.                 
  376.                 $offset= (int) $_GET['c'];
  377.                 
  378.                 $XML xmlize(stripslashes($RS_rules['def_query'])." ".limit_sintax(1,$offset),null,true,$offset,0,$xsl);
  379.             }
  380.             else{
  381.                 
  382.                 $XML xmlize(stripslashes($RS_rules['def_query']),null,true,0,0,$xsl);
  383.             }
  384.         }
  385.     }
  386.     
  387.     // SINGOLO RECORD BASATO SULLA SERIE ORDINATA
  388.     else if(is_numeric($_GET['c'])){
  389.         $XML xmlize("SELECT ".$campi_tabella." FROM $tabella  ORDER BY $orderby_doppio ".limit_sintax(1,$offset),null,true,$offset,$tot_records,$xsl,$dtd);
  390.         
  391.     }
  392.     
  393.     
  394.     // INTERVALLO DI RECORD BASATO SULLA SERIE ORDINATA
  395.     elseif(preg_match("'([0-9]+),([0-9]+)'",$_GET['c'],$match)>0){
  396.         
  397.         $offset=intval($match[1]);
  398.         $limit=intval($match[2]);
  399.         
  400.         $XML xmlize("SELECT ".$campi_tabella." FROM $tabella ORDER BY $orderby_doppio ".limit_sintax($limit,$offset),null,true,false,$tot_records,$xsl,$dtd);
  401.     }
  402.     
  403.     
  404.     // TUTTI I RECORD 
  405.     elseif($_GET['c']=='all'){
  406.         $XML xmlize("SELECT ".$campi_tabella." FROM $tabella ORDER BY $orderby_doppio ",null,true,false,$tot_records,$xsl);
  407.     }
  408.     
  409.     
  410.     // RECORD PER SINGOLO ID (DA CAMPO PK)        
  411.     elseif($_GET['id']>0){
  412.         $XML xmlize("SELECT ".$campi_tabella." FROM $tabella WHERE $PK=".intval($_GET['id'])." ORDER BY $orderby_doppio ",null,true,false,$tot_records,$xsl,$dtd);
  413.     }
  414.  
  415.     
  416.     // TRASFORMAZIONE XSLT - Lato client o lato server?
  417.     
  418.     
  419.     
  420.     if($_GET['type']=='XML'){
  421.         header("Content-Type: text/xml");
  422.         echo $XML;
  423.     }
  424.     else{
  425.         
  426.         // verifica se la trasformazione debba essere ottenuta lato client o lato server
  427.         if(!isset($GLOBALS['_VARIABILI'])){
  428.             require_once("../inc/func.var_frontend.php");
  429.             var_frontend();
  430.         }
  431.         
  432.         if($GLOBALS['_VARIABILI']['server_xslt']=='1'){
  433.             
  434.             require_once("./xslparser.php");
  435.             
  436.             $file_xml=_PATH_TMP."/".md5(serialize($_SESSION)).".xml";
  437.             $file_xsl=_PATH_TMP."/".md5(serialize($_SESSION)).".xsl";
  438.             
  439.             $fp=fopen($file_xml,"w");
  440.             fwrite($fp,$XML);
  441.             fclose($fp);
  442.             
  443.             copy($xsl,$file_xsl);
  444.             
  445.             print xslparser($file_xml,$file_xsl);
  446.             
  447.             unlink($file_xml);
  448.             unlink($file_xsl);
  449.         }
  450.         else {
  451.             header("Content-Type: text/xml");
  452.             echo $XML;
  453.         }
  454.     }
  455.     
  456.         
  457.  
  458.  
  459. ?>

Documentation generated on Sat, 22 Sep 2007 11:51:50 +0200 by phpDocumentor 1.4.0a2