linea21-core
[ class tree: linea21-core ] [ index: linea21-core ] [ all elements ]

Source for file class.config_file.php

Documentation is available at class.config_file.php

  1. <?php
  2. /**
  3.  * @package linea21.core
  4.  * @subpackage config_files
  5.  * @author linea21 <info@linea21.com>
  6.  * @version $id SVN
  7.  * @access public
  8.  * @license http://opensource.org/licenses/gpl-3.0.html
  9.  *  Configuration Management
  10.  */
  11.  
  12. include_once('system/afiles/class.afiles.php');
  13. include_once('../lib/lib_common.php');
  14.  
  15. class config_file {
  16.  
  17.   var $file_release = "define_release"// fichier define_release
  18.   var $file_db = "define_db";  // fichier define_db
  19.   var $section_theme = "theme";  // section theme dans le fichier de configuration define_release
  20.   var $config_path = '../config/';
  21.   var $ini_path = '../config/';
  22.   var $backup_config_path = '../tmp/backup/config/';
  23.   var $authorized_release_sections//sections authorisées dans le fichier release
  24.   var $authorized_db_sections//sections authorisées dans le fichier db
  25.   var $authorized_theme_sections//sections authorisées dans le fichier release
  26.   var $config_extension = ".ini";
  27.   var $php_extension = ".php";
  28.   var $db_params;
  29.   var $release_params;
  30.   var $a_file;
  31.   var $theme_settings='THEME_SETTINGS';
  32.   var $theme_public='THEME_PUBLIC';
  33.   var $theme_list_public='THEME_LIST_PUBLIC';
  34.   var $theme_admin='THEME_ADMIN';
  35.   var $theme_list_admin='THEME_LIST_ADMIN';
  36.  
  37.   /**
  38.    * config_file::__construct()
  39.    * constructeur de classe
  40.    * @access public
  41.    * @return void 
  42.    */
  43.   function __construct()
  44.   {
  45.     $this->a_file=new afiles;
  46.     $this->authorized_release_sections=$GLOBALS['authorized_release_sections'];
  47.     $this->authorized_db_sections=$GLOBALS['authorized_db_sections'];
  48.     $this->authorized_theme_sections=$GLOBALS['authorized_theme_sections'];
  49.  
  50.     //charge les paramètres et les place en constante globale par define
  51.     $this->loadReleaseParams();
  52.     $this->loadDbParams();
  53.   }
  54.  
  55.   /**
  56.    * config_file::setParams()
  57.    * modifie le tableau de cache interne avec le paramètre $content
  58.    * @access public
  59.    * @param string $file_name 
  60.    * @param array $content 
  61.    * @return void 
  62.    */
  63.   function setParams($file_name,$content)
  64.   {
  65.     if($file_name == $this->file_release)$this->setReleaseParams($content);
  66.     else if($file_name == $this->section_theme$this->setThemeParams($content);
  67.     else $this->setDbParams($content);
  68.   }
  69.  
  70.   /**
  71.    * config_file::loadReleaseParams()
  72.    * charge les paramètres dans le tableau $release_params
  73.    * @access public
  74.    * @return void 
  75.    */
  76.   function loadReleaseParams({
  77.     //charge les paramètres release dans un tableau $release_params
  78.     $this->release_params=$this->parseConfig($this->file_release);
  79.   }
  80.   /**
  81.    * config_file::loadDbParams()
  82.    * charge les paramètres dans le tableau $db_params
  83.    * @access public
  84.    * @return void 
  85.    */
  86.   function loadDbParams()
  87.   {
  88.     //charge les paramètres dans un tableau $db_params
  89.     $this->db_params=$this->parseConfig($this->file_db);
  90.   }
  91.  
  92.   /**
  93.    * config_file::setReleaseParams()
  94.    * modifie le tableau $release_params avec les entrées du tableau $content
  95.    * @access public
  96.    * @return void 
  97.    * @param array $content 
  98.    */
  99.   function setReleaseParams($content{
  100.  
  101.     //charge les paramètres release dans un tableau $release_params
  102.     $this->setPostParams($this->file_release,$content);
  103.   }
  104.   /**
  105.    * config_file::setThemeParams()
  106.    * modifie le tableau $release_params avec les entrées du tableau $content
  107.    * @access public
  108.    * @return void 
  109.    * @param array $content 
  110.    */
  111.   function setThemeParams($content{
  112.  
  113.     //charge les paramètres release dans un tableau $release_params
  114.     $this->setPostParams($this->section_theme,$content);
  115.   }
  116.   /**
  117.    * config_file::setDbParams()
  118.    * modifie le tableau $db_params avec les entrées du tableau $content
  119.    * @access public
  120.    * @return void 
  121.    * @param array $content 
  122.    */
  123.   function setDbParams($content)
  124.   {
  125.     //charge les paramètres dans un tableau $db_params
  126.     $this->setPostParams($this->file_db,$content);
  127.   }
  128.  
  129.   /**
  130.    * config_file::writeReleaseParams()
  131.    * écrit dans le fichier ini les paramètres du tableau $release_params
  132.    * @access public
  133.    * @return boolean 
  134.    */
  135.   function writeReleaseParams({
  136.     //écrit les paramètres $release_params vers les fichiers release  ini et php
  137.     if($this->backupParams($this->file_release)){
  138.       //on écrit les params après avoir fait le backup
  139.       if($this->a_file->mkini($this->release_params$this->ini_path.$this->file_release.$this->config_extension))
  140.       return true;
  141.     }
  142.     return false;
  143.   }
  144.   /**
  145.    * config_file::writedBParams()
  146.    * écrit dans le fichier ini les paramètres du tableau $db_params
  147.    * @access public
  148.    * @return boolean 
  149.    */
  150.   function writeDbParams({
  151.     //écrit les paramètres $db_params vers les fichier db ini et php
  152.     if($this->backupParams($this->file_db)){
  153.       //on écrit les params après avoir fait le backup
  154.       if($this->a_file->mkini($this->db_params$this->ini_path.$this->file_db.$this->config_extension))
  155.       return true;
  156.     }
  157.     return false;
  158.     //TODO : alert les paramètres db n'ont pas pu être écrit.
  159.   }
  160.  
  161.   /**
  162.    * config_file::backupParams()
  163.    * sauvegarde le fichier $file_name dans le répertoire de backup
  164.    * @access public
  165.    * @param string $file_name 
  166.    * @return boolean 
  167.    */
  168.   function backupParams($file_name)
  169.   {
  170.     SureCreateDir($this->backup_config_path.$this->config_extension0755);
  171.     if ($this->a_file->cp($this->ini_path.$file_name.$this->config_extension,$this->backup_config_path)) return true;
  172.     else return false;
  173.   }
  174.  
  175.   /**
  176.    * config_file::writePhpParams()
  177.    * écrit le fichier php $file_name dans le répertoire de config
  178.    * @access public
  179.    *  méthode dépréciée
  180.    * @param string $file_name 
  181.    * @return boolean 
  182.    */
  183.   function writePhpParams($file_name)
  184.   {
  185.     $content=$this->generateHeader($file_name);
  186.     $content.=$this->generateBody($file_name);
  187.     $content.=$this->generateFooter($file_name);
  188.     //on écrit le contenu dans le fichier php
  189.     if($this->a_file->mkfile($content,$this->config_path.$file_name.$this->php_extension)) return true;
  190.     else return false;
  191.   }
  192.   /**
  193.    * config_file::parseConfig()
  194.    * retourne un tableau contenant les paramètres du fichier ini $file_name
  195.    * @access public
  196.    * @param string $file_name 
  197.    * @return array 
  198.    */
  199.   function parseConfig($file_name$whithsection true)
  200.   {
  201.     //parse_ini_file
  202.     return $this->a_file->parse_ini($this->ini_path.$file_name.$this->config_extension$whithsection);
  203.  
  204.   }
  205.   /**
  206.    * config_file::setPostParams()
  207.    * insère les données différentes contenues dans $post_params dans le tableau correspondant au paramètre release ou db
  208.    * @access public
  209.    * @param string $file_name 
  210.    * @param array $post_params 
  211.    * @return void 
  212.    */
  213.   function setPostParams($file_name,$post_params)
  214.   {
  215.     //parse du tableau des paramètres
  216.     // ajoute les paramètres de post
  217.     if($file_name == $this->file_release || $file_name == $this->section_theme)
  218.     {
  219.       foreach ($post_params as $key => $value)
  220.       {
  221.         foreach ($this->release_params as $section => $existing_params)
  222.         {
  223.           foreach ($existing_params as $existing_param => $existing_value)
  224.           {
  225.             // la clé existe dans le tableau de cache release_params, on insère la valeur dans ce tableau
  226.             if($existing_param == $key$this->release_params[$section][$key]=$this->strip_ini_char($value);
  227.           }
  228.         }
  229.       }
  230.     }
  231.     if($file_name == $this->file_db)
  232.     {
  233.       foreach ($post_params as $key => $value)
  234.       {
  235.         foreach ($this->db_params as $section => $existing_params)
  236.         {
  237.           foreach ($existing_params as $existing_param => $existing_value)
  238.           {
  239.             // la clé existe dans le tableau de cache db_params, on insère la valeur dans ce tableau
  240.             if($existing_param == $key$this->db_params[$section][$key]=$this->strip_ini_char($value);
  241.           }
  242.         }
  243.       }
  244.     }
  245.   }
  246.   /**
  247.    * config_file::generateBody()
  248.    * génère le contenu d'un fichier php de configuration à parti du $file_name
  249.    * @access private
  250.    * @param string $file_name 
  251.    * @return string 
  252.    */
  253.   function generateBody($file_name)
  254.   {
  255.  
  256.     $out '';
  257.  
  258.     if($file_name == $this->file_release$content=$this->release_params;
  259.     else $content=$this->db_params;
  260.  
  261.     if (!is_array($content))
  262.     return false;
  263.  
  264.     foreach ($content as $key => $ini)
  265.     {
  266.       if (is_array($ini))
  267.       {
  268.         $out .= "\n\n//    ".$key." /////// \n\n";
  269.  
  270.         foreach ($ini as $var => $value)
  271.         {
  272.           $out .= "define('".$var."',\t\t".$this->a_file->quote_ini($value).");\n";
  273.         }
  274.       }
  275.       else
  276.       {
  277.         $out .= "define('".$key."',\t\t".$this->a_file->quote_ini($ini).");\n";
  278.       }
  279.     }
  280.  
  281.     return $out;
  282.   }
  283.   /**
  284.    * config_file::generateHeader()
  285.    * génère l'en tête d'un fichier php de configuration à parti du $file_name
  286.    * @access private
  287.    * @param string $file_name 
  288.    * @return string 
  289.    */
  290.   function generateHeader($file_name)
  291.   {
  292.     $ret.="<?php \n";
  293.     $ret.="// Linea 21 - PHP ".$file_name."\n";
  294.     $ret.="// last_modify    : ".date("d-m-Y")."\n";
  295.     $ret.="// GPL 3\n";
  296.     $ret.="// http://opensource.org/licenses/gpl-3.0.html\n\n";
  297.     $ret.="// BE CAREFULL THIS FILE IS SYSTEM FILE : use interface or ".$file_name.$this->config_extension." FOR CONFIGURATION";
  298.     return $ret;
  299.   }
  300.   /**
  301.    * config_file::generateFooter()
  302.    * génère le pied d'un fichier php de configuration à parti du $file_name
  303.    * @access private
  304.    * @param string $file_name 
  305.    * @return string 
  306.    */
  307.   function generateFooter($file_name)
  308.   {
  309.     return "?> \n";
  310.   }
  311.  
  312.   /**
  313.    * config_file::getReleaseParams()
  314.    * génère le corps html d'un fichier de configuration pour affichage
  315.    * @access public
  316.    * @param string $updatable : champ texte modifiable
  317.    * @param string $hidden : présence d'input type hidden
  318.    * @return string 
  319.    */
  320.   function getReleaseParams($updatable false$hidden false{
  321.  
  322.     return $this->getAllParams($this->file_release,$updatable$hidden);
  323.   }
  324.   /**
  325.    * config_file::getDbParams()
  326.    * génère le corps html d'un fichier de configuration pour affichage
  327.    * @access public
  328.    * @param string $updatable : champ texte modifiable
  329.    * @param string $hidden : présence d'input type hidden
  330.    * @return string 
  331.    */
  332.   function getDbParams($updatable false$hidden false{
  333.  
  334.     return $this->getAllParams($this->file_db,$updatable$hidden);
  335.   }
  336.   /**
  337.    * config_file::getAllParams()
  338.    * génère le corps html d'un fichier de configuration pour affichage
  339.    * @access private
  340.    * @param string $updatable : champ texte modifiable
  341.    * @param string $hidden : présence d'input type hidden
  342.    * @param string $file_name 
  343.    * @return string 
  344.    */
  345.   function getAllParams($file_name$updatable false$hidden false)
  346.   {
  347.     $out '';
  348.     $authorized_sections=array();
  349.  
  350.     include('../languages/' U_L '/lang_system.'CHARSET .'.php');
  351.  
  352.     if($file_name == $this->file_release{
  353.       // le tableau de cache à utiliser est celui de realease
  354.       $content=$this->release_params;
  355.       //initialisation des sections à afficher/mdofier
  356.       $authorized_sections=$this->authorized_release_sections;
  357.     }
  358.     else if($file_name == $this->section_theme)
  359.     {
  360.       // le tableau de cache à utiliser est celui de realease
  361.       $content=$this->release_params;
  362.       $authorized_sections=$this->authorized_theme_sections;
  363.     }
  364.     else
  365.     {
  366.       // le tableau de cache à utiliser est celui de db
  367.       $content=$this->db_params;
  368.       //initialisation des sections à afficher/mdofier
  369.       $authorized_sections=$this->authorized_db_sections;
  370.     }
  371.  
  372.     if (!is_array($content))
  373.     return false;
  374.  
  375.     foreach ($content as $key => $ini)
  376.     {
  377.  
  378.       if (is_array($ini))
  379.       {
  380.         if((in_array($key,$authorized_sections)))
  381.         {
  382.  
  383.           if(isset($GLOBALS['lang']['system'][$key])) $label='<abbr title="'.$GLOBALS['lang']['system'][$key].'">'.$key.'</abbr>';
  384.           else $label=$key;
  385.  
  386.           $out .= "\n<br style='clear:both' />\n";
  387.           $out .= "\n<h2>".$label."</h2>\n";
  388.           if(!$updatable$out .="<dl>\n";
  389.           //génération d'un bloc
  390.           foreach ($ini as $var => $value)
  391.           {
  392.             $label='';
  393.             if(isset($GLOBALS['lang']['system'][$var])) $label='<abbr title="'.$GLOBALS['lang']['system'][$var].'">'.$var.'</abbr>';
  394.             else $label=$var;
  395.             if(!$updatable)    {
  396.               $out .="<dt>".$label;
  397.               if($hidden$out .= "<input name=\"".$var."\" id=\"".$var."\" value=\"".$value."\" type=\"hidden\"  />\n";
  398.               if($var !='LANGUAGE'{
  399.                 $out .= "</dt><dd>".$value."</dd>\n";
  400.               else {
  401.                 $out .="</dt><dd>".culture::getInstance()->getCultureInfo($value'Language')."</dd>\n";
  402.               }
  403.  
  404.             }
  405.             else {
  406.               if($var !='LANGUAGE'{
  407.                 $out .= "<p><label for=\"".$var."\">".$label."</label><input name=\"".$var."\" id=\"".$var."\" value=\"".$value."\" type=\"text\" class=\"textfield\" /></p>\n";
  408.               else {
  409.                 $out .= "<p><label for=\"".$var."\">".$label."</label>".CultureSelectBox($var$value)."</p>\n";
  410.               }
  411.  
  412.             }
  413.           }
  414.           if(!$updatable$out .="</dl>";
  415.         }
  416.       }
  417.       else
  418.       {
  419.         if(!$updatable && $hidden$out .= "<input name=\"".$key."\" id=\"".$key."\" value=\"".$ini."\" type=\"hidden\"  />\n";
  420.         if(!$updatable)    $out .="<dt>".$key."</dt><dd>".$ini."</dd>\n";
  421.         else $out .= "<p><label for=\"".$key."\">".$key."</label><input name=\"".$key."\" id=\"".$key."\" value=\"".$ini."\" type=\"text\" class=\"textfield\" /></p>\n";
  422.       }
  423.     }
  424.     return $out;
  425.  
  426.   }
  427.   /**
  428.    * config_file::getThemeParams()
  429.    * génère le corps html d'un fichier de configuration pour affichage
  430.    * @access public
  431.    * @param string $updatable : champ texte modifiable
  432.    * @param string $hidden : présence d'input type hidden
  433.    * @return string 
  434.    */
  435.   function getThemeParams($updatable false$hidden false{
  436.  
  437.     $out '';
  438.     $authorized_sections=array();
  439.  
  440.     include('../languages/' U_L '/lang_system.'CHARSET .'.php');
  441.  
  442.     $content=$this->release_params;
  443.     $authorized_sections=$this->authorized_theme_sections;
  444.  
  445.     $theme_public=$content[$this->theme_settings][$this->theme_public];
  446.     $theme_admin=$content[$this->theme_settings][$this->theme_admin];
  447.  
  448.     if(isset($GLOBALS['lang']['system'][$this->theme_public])) $label='<abbr title="'.$GLOBALS['lang']['system'][$this->theme_public].'">'.$this->theme_public.'</abbr>';
  449.     else $label=$this->theme_public;
  450.  
  451.     $out .= "\n<h2 style=\"clear:both;\">".$label."</h2>\n";
  452.     $out .=$this->getOneThemeParams($updatable$hiddentrue,$theme_public,$this->theme_public,$this->theme_public"public");
  453.  
  454.     $public_themes getThemes('public');
  455.  
  456.     foreach ($public_themes as $key => $value)
  457.     {
  458.       if($value != $theme_public)
  459.       $out .=$this->getOneThemeParams($updatable$hiddenfalse,$value,$this->theme_list_public,$this->theme_public"public");
  460.     }
  461.  
  462.     if(isset($GLOBALS['lang']['system'][$this->theme_admin])) $label='<abbr title="'.$GLOBALS['lang']['system'][$this->theme_admin].'">'.$this->theme_admin.'</abbr>';
  463.     else $label=$this->theme_admin;
  464.  
  465.     $out .= "\n<h2 style=\"clear:both;\">".$label."</h2>\n";
  466.  
  467.     $out .=$this->getOneThemeParams($updatable$hiddentrue,$theme_admin,$this->theme_admin,$this->theme_admin"admin");
  468.  
  469.     $admin_themes getThemes('admin');
  470.  
  471.     foreach ($admin_themes as $key => $value)
  472.     {
  473.       if($value != $theme_admin)
  474.       $out .=$this->getOneThemeParams($updatable$hiddenfalse,$value,$this->theme_list_admin,$this->theme_admin"admin");
  475.     }
  476.  
  477.     $out .= "\n<br style=\"clear:both;\" />\n";
  478.     return $out;
  479.   }
  480.  
  481.  
  482.   /**
  483.    * config_file::getOneThemeParams()
  484.    * génère le corps html d'un fichier de configuration pour affichage
  485.    * @access private
  486.    * @param string $updatable 
  487.    * @param string $hidden 
  488.    * @param string $selected 
  489.    * @param string $value 
  490.    * @param string $field_name 
  491.    * @param string $radio_name 
  492.    * @return string 
  493.    */
  494.   function getOneThemeParams($updatable false$hidden false$selected=false,$value,$field_name,$radio_name$type{
  495.  
  496.     include('../languages/' U_L '/lang_system.'CHARSET .'.php');
  497.  
  498.     $selected_pattern='';
  499.     $checked_pattern='';
  500.     $hidden_pattern='';
  501.     $updatable_pattern='';
  502.     $info loadThemeInfo($type$value);
  503.  
  504.     if ($selected)
  505.     {
  506.       $selected_pattern='_selected';
  507.       $checked_pattern='checked="checked"';
  508.     }
  509.     if(!$updatable)$hidden_pattern='style="display:none;"';
  510.     else $updatable_pattern="onclick=\"javascript:document.getElementById('".$type.$value."').checked='checked';\"";
  511.     $out '';
  512.     $out .="<div class=\"config_theme" $selected_pattern"\">\n";
  513.     $out .="<img src=\"../templates/" .$type"/" .$value"/preview.png\" style=\"width:250px;height:160px;\" alt=\"" .$value"\" id=\"img_" .$type."-".$value"\" ".$updatable_pattern."/>\n";
  514.  
  515.     $out .= '<input type="radio" name="' .$radio_name'" id="' .$type.'-'.$value'" value="' .$value'" ' .$checked_pattern' ' .$hidden_pattern' />';
  516.     $out .=    '<label for="' .$type.'-'.$value'" class="autowidth">' $value '</label>';
  517.     $out .= '<div class="themeinfo"><em>'._t('theme','name').'</em> : '.$info['name'].'<br />'.END_LINE;
  518.     $out .= '<em>'._t('theme','author').'</em> : <a href="'.$info['homepage'].'">'.$info['author'].'</a><br />'.END_LINE;
  519.     $out .= '<em>'._t('theme','version').'</em> : '.$info['version'].' | ';
  520.     $out .= '<em>'._t('theme','compatibility').'</em> : '.$info['compatibility'].'<br />'.END_LINE;
  521.     $out .= '<em>'._t('theme','description').'</em> : '.$info['description'].'<br />'.END_LINE;
  522.     $out .= '</div>';
  523.     $out .="</div>";
  524.     return $out;
  525.   }
  526.  
  527.   /**
  528.    * config_file::strip_ini_char
  529.    * suppression des caractères interdits dans un fichier ini
  530.    * @access private
  531.    * @param string $content 
  532.    * @return string 
  533.    */
  534.   function strip_ini_char($content)
  535.   {
  536.     $ret='';
  537.     // on remplace les caractères "[]; par '(),
  538.     $ret=strtr($content"\"[];""'(),");
  539.     if (get_magic_quotes_gpc()) $ret=stripslashes($ret);
  540.     return $ret;
  541.   }
  542.  
  543.   /**
  544.    * config_file::initializeIniParams()
  545.    * charge les paramètres des fichiers ini et les place en constante globale par define
  546.    * @access public
  547.    * @param void 
  548.    * @return void 
  549.    */
  550.   function initializeIniParams()
  551.   {
  552.  
  553.     foreach ($this->release_params as $section => $existing_params)
  554.     {
  555.       foreach ($existing_params as $existing_param => $existing_value)
  556.       {
  557.         if(!defined($existing_param))
  558.         {
  559.           if(is_numeric($existing_value))
  560.           {
  561.             $existing_value=$this->convert_type($existing_value);
  562.           }
  563.           define($existing_param,$existing_value);
  564.         }
  565.       }
  566.     }
  567.     foreach ($this->db_params as $section => $existing_params)
  568.     {
  569.       foreach ($existing_params as $existing_param => $existing_value)
  570.       {
  571.         if(!defined($existing_param))
  572.         {
  573.           if(is_numeric($existing_value))
  574.           {
  575.             $existing_value=$this->convert_type($existing_value);
  576.           }
  577.           define($existing_param,$existing_value);
  578.         }
  579.       }
  580.     }
  581.   }
  582.  
  583.   /**
  584.    * config_file::convert_type()
  585.    * conversion d'une variable en entier ou en float selon son contenu
  586.    * @param unknown_type $var 
  587.    * @return int or float
  588.    */
  589.   function convert_type$var )
  590.   {
  591.     ifis_numeric$var ) )
  592.     {
  593.       if(float)$var != (int)$var )
  594.       {
  595.         return (float)$var;
  596.       }
  597.       else
  598.       {
  599.         return (int)$var;
  600.       }
  601.     }
  602.     if$var == "true" )    return true;
  603.     if$var == "false" )    return false;
  604.     return $var;
  605.   }
  606.   /**
  607.    * config_file::getPhpInfo()
  608.    * Retourne un string contenant les informations php en html
  609.    * @access public
  610.    * @return string 
  611.    */
  612.   function getPhpInfo({
  613.     ob_start();
  614.     phpinfo();
  615.     $info ob_get_contents();
  616.     ob_end_clean();
  617.     return preg_replace('%^.*<body>(.*)</body>.*$%ms''$1'$info);
  618.   }
  619. }
  620.  
  621. ?>

Documentation generated on Thu, 03 May 2012 15:02:22 +0200 by phpDocumentor 1.4.1