phpDocumentor VFront
Function-Libraries
[ class tree: VFront ] [ index: VFront ] [ all elements ]

Source for file func.hash_iframe.php

Documentation is available at func.hash_iframe.php

  1. <?php
  2. /**
  3.  * Classe per la gestione degli iframe mediante hash md5.
  4.  * Gli iframe sono utilizzati per gestire le tendine che contengo i valori di un'altra tabella,
  5.  * nelle relazioni 1 a molti
  6.  * @package VFront
  7.  * @subpackage Function-Libraries
  8.  *
  9.  */
  10. class hash_iframe{
  11.  
  12.     
  13.     /**
  14.      * HTML generato come output dalla classe
  15.      *
  16.      * @var string HTML
  17.      */
  18.     var    $HTML_IFRAME="";
  19.     
  20.     /**
  21.      * Hash md5 che riassume il contenuto di HTML_IFRAME, identificandolo univocamente
  22.      *
  23.      * @var string md5
  24.      */
  25.     var    $hash_html;
  26.     
  27.     /**
  28.      * Path della cartella dove salvare e leggere i file per gli iframe
  29.      *
  30.      * @var string Path per gli iframe
  31.      */
  32.     var    $path_html;
  33.     
  34.     /**
  35.      * Variabile presa dal DB che identifica se la tabella padre  scrivibile (INSERT)
  36.      *
  37.      * @var bool 
  38.      */
  39.     var $in_insert_tab;
  40.     
  41.     /**
  42.      * Variabile presa dal DB che identifica se la tabella padre  visibile (SELECT)
  43.      *
  44.      * @var bool 
  45.      */
  46.     var $in_visibile;
  47.     
  48.     /**
  49.      * ID (oid) della tabella nella tabella di regole registro_tab
  50.      *
  51.      * @var int 
  52.      */
  53.     var $id_table_ref;
  54.     
  55.     /**
  56.      * Variabile che identifica se la tabella considerata  persa da VFront come sottomaschera o maschera
  57.      *
  58.      * @var bool 
  59.      */
  60.     var $is_submask;
  61.     
  62.     /**
  63.      * Numero di record presenti attualmente nella tabella considerata
  64.      *
  65.      * @var int 
  66.      */
  67.     var $n=0;
  68.     
  69.     
  70.     /**
  71.      * Funzione che scive sul filesystem il nuovo iframe
  72.      * nominandolo con un hash md5 corrispondente al suo contenuto con il suffisso .html
  73.      * Gli iframe sono contenuti nella directory /html
  74.      *
  75.      * @param string $nome_campo Nome del campo per cui generare la tendina
  76.      * @param string $sql_tendina Codice SQL che recupera i dati sotto forma di chiave, valore
  77.      * @param bool $is_submask Identifica se si tratta di una sottomaschera
  78.      * @param int $n Numero di record attualemnte presenti nella tabella
  79.      * @return void 
  80.      */
  81.     function hash_iframe($nome_campo,$sql_tendina,$is_submask=false,$n=0){
  82.  
  83.         global $db1,$link;
  84.         
  85.         $this->is_submask=$is_submask;
  86.         $this->n=$n;
  87.         
  88.         
  89.  
  90.         // CASO SPECIALE SELECT FROM
  91.  
  92.  
  93.         $campi analisi_select_from($sql_tendina);
  94.  
  95.         
  96.         if(is_array($campi)){
  97.  
  98.             if(count($campi)==1){
  99.                 $sql $sql_tendina" ORDER BY 1";
  100.             }
  101.             else{
  102.                 $sql $sql_tendina" ORDER BY 2";
  103.             }
  104.  
  105.         }
  106.         else{
  107.             $sql ="";
  108.         }
  109.  
  110.         
  111.         $test_tabella preg_match("'FROM ([a-zA-Z_0-9]+)'i",$sql_tendina,$arr_tabella);
  112.  
  113.         if(is_array($arr_tabella&& count($arr_tabella)==2){
  114.             $tabella=$arr_tabella[1];
  115.         }
  116.         else $tabella null;
  117.  
  118.         // $tabella  scrivibile da questo utente?
  119.         $sql_tab_scrivi "SELECT in_insert , visibileid_table
  120.                                 FROM {$db1['frontend']}.registro_tab
  121.                                 WHERE table_name='$tabella'
  122.                                 AND gid=".$_SESSION['gid'];
  123.  
  124.         $q_tab_scrivi=vmsql_query($sql_tab_scrivi,$link);
  125.  
  126.         list($this->in_insert_tab$this->in_visibile$this->id_table_refvmsql_fetch_row($q_tab_scrivi);
  127.  
  128.  
  129.  
  130.  
  131.  
  132.         $q_selectfrom vmsql_query($sql,$link);
  133.  
  134.  
  135.         while ($RS=vmsql_fetch_row($q_selectfrom)) {
  136.             if(count($campi)==1){
  137.                 $valori[$RS[0]]=$RS[0];
  138.             }
  139.             elseif(count($campi)==2){
  140.                 $valori[$RS[0]]=htmlentities($RS[1],ENT_QUOTES);
  141.             }
  142.         }
  143.  
  144.  
  145.  
  146.         $this->HTML_IFRAME = $this->hash_iframe_cont($valori,$nome_campo);
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.         // Imposto il nome del file html per l'iframe
  156.         $this->hash_html = md5($this->HTML_IFRAME);
  157.         $this->path_html = FRONT_REALPATH."/html/{$this->hash_html}.html";
  158.  
  159.         // Se non esiste l'HTML per l'IFRAME lo scrivo in un file
  160.         if(!is_file($this->path_html)){
  161.  
  162.             if($fp = fopen($this->path_html,"w")){
  163.                 fwrite($fp,$this->HTML_IFRAME);
  164.                 fclose($fp);
  165.             }
  166.             else{
  167.                 openErrorGenerico("Errore di scrittura nel filesystem per gli Iframe",true);
  168.             }
  169.  
  170.         }
  171.     }
  172.  
  173.     /**
  174.      * Funzione che genera il contenuto HTML dell'iframe 
  175.      * e lo restituisce come html valido
  176.      *
  177.      * @param array $valori I valori da inserire nella tendina
  178.      * @param string $campo Nome del campo
  179.      * @todo Trovare un modo di non far andare in errore il parser W3C con le opzioni vuote
  180.      * @return string HTML
  181.      */
  182.     function hash_iframe_cont($valori,$campo){
  183.  
  184.         // Se  sottomaschera 
  185.         if($this->is_submask){
  186.             
  187.             $id_campo = "dati__{$this->n}__{$campo}";
  188.             $nome_campo = "dati[$this->n][$campo]";
  189.             
  190.         }
  191.         else{
  192.             
  193.             $id_campo = "dati_".$campo;
  194.             $nome_campo = "dati[".$campo."]";
  195.         }
  196.         
  197.         $HTML_IFRAME="
  198.                 <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
  199.                 <html>
  200.                     <head>
  201.                         <title>Scheda ente</title>
  202.                         <meta http-equiv=\"Content-Type\" content=\"text/htmlcharset=iso-8859-1\" />
  203.                     </head>
  204.                 <body>
  205.                     <div id=\"i_target\">
  206.                     <select onchange=\"mod(this.id);\" class=\"off\" name=\"$nome_campo\" ".
  207.                     "id=\"$id_campo\" disabled=\"disabled\" >";
  208.  
  209.                     // Aggiungo una riga vuota
  210.                     $HTML_IFRAME .= "<option value=\"\"></option>";
  211.  
  212.                     if(count($valori)>0){
  213.                         foreach($valori as $k=>$val){
  214.                             $val_parsed = str_replace(array("\n","\r")," ",addslashes($val));
  215.                             
  216.                             $HTML_IFRAME .= "<option value=\"$k\">".utf8_encode($val_parsed)."</option>";
  217.                         }
  218.                     }
  219.  
  220.  
  221.  
  222.  
  223.  
  224.                     $HTML_IFRAME.="</select></div>
  225.             
  226.         <script type=\"text/javascript\">
  227.         
  228.             function carica(){
  229.                 //T1 = new Date().getTime();
  230.                 
  231.             ";
  232.                         
  233.             if(!$this->is_submask){
  234.                 
  235.                     $HTML_IFRAME.="
  236.                 top.document.getElementById('target_".$campo."').innerHTML=document.getElementById('i_target').innerHTML;
  237.                 top.document.getElementById('feed_".$campo."').innerHTML='';
  238.                 
  239.                 ";
  240.             }    
  241.             else{    
  242.             
  243.                     $HTML_IFRAME.="
  244.                 top.document.getElementById('target_{$this->n}_".$campo."').innerHTML=document.getElementById('i_target').innerHTML;
  245.                 
  246.                 ";    
  247.             }
  248.             
  249.                 if($this->is_submask){    
  250.                     $HTML_IFRAME.="    
  251.                     
  252.                 top.trigger_assegnazione();
  253.                 
  254.                 ";
  255.                 }
  256.                 else{$HTML_IFRAME.="    
  257.                 
  258.                 top.triggerLoadTendina();
  259.                 ";
  260.                     
  261.                 }
  262.             
  263.                 
  264.                 
  265.                 $HTML_IFRAME.="
  266.                 
  267.                 //T2 = new Date().getTime(); alert((T2-T1)/1000);
  268.             }
  269.             
  270.             setTimeout(\"carica()\",120);
  271.             
  272.             ";
  273.                     
  274.             
  275.                 
  276.                 
  277.             $HTML_IFRAME.="
  278.         </script>
  279.         
  280.         </body></html>";
  281.  
  282.                     return $HTML_IFRAME;
  283.  
  284.     }
  285.  
  286.  
  287. }

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