Source for file databaseconnect.class.php

Documentation is available at databaseconnect.class.php

  1. <?php   /*
  2.    *@=@=@=@ START LICENSE @=@=@=@*
  3.    Copyright or © or Copr. Stéphane TRICHET and Nicolas SOTRON
  4.    
  5.    stephane.t@simpliciweb.net and nicolas.s@simpliciweb.net
  6.    
  7.    This software is a computer program whose purpose is to make a
  8.    web hosting platform
  9.    
  10.    This software is governed by the CeCILL  license under French law and
  11.    abiding by the rules of distribution of free software.  You can  use, 
  12.    modify and/ or redistribute the software under the terms of the CeCILL
  13.    license as circulated by CEA, CNRS and INRIA at the following URL
  14.    "http://www.cecill.info". 
  15.    
  16.    As a counterpart to the access to the source code and  rights to copy,
  17.    modify and redistribute granted by the license, users are provided only
  18.    with a limited warranty  and the software's author,  the holder of the
  19.    economic rights,  and the successive licensors  have only  limited
  20.    liability. 
  21.    
  22.    In this respect, the user's attention is drawn to the risks associated
  23.    with loading,  using,  modifying and/or developing or reproducing the
  24.    software by the user in light of its specific status of free software,
  25.    that may mean  that it is complicated to manipulate,  and  that  also
  26.    therefore means  that it is reserved for developers  and  experienced
  27.    professionals having in-depth computer knowledge. Users are therefore
  28.    encouraged to load and test the software's suitability as regards their
  29.    requirements in conditions enabling the security of their systems and/or 
  30.    data to be ensured and,  more generally, to use and operate it in the 
  31.    same conditions as regards security. 
  32.    
  33.    The fact that you are presently reading this means that you have had
  34.    knowledge of the CeCILL license and that you accept its terms.
  35.    *@=@=@=@ END   LICENSE @=@=@=@*
  36.  
  37. */?><?php  
  38.  
  39. /**
  40.  * Databaseconnect Class
  41.  * 
  42.  * 
  43.  * @author SimpliciWeb
  44.  * @version $Id: databaseconnect.class.php 781 2007-12-27 13:07:16Z stephanet $
  45.  * @package Common
  46.  * @subpackage FrameWork
  47.  */    
  48. /**
  49.  * Require object cached
  50.  */
  51. require_once('internal_components/common/cache_class/object_cached.class.php');
  52.     
  53. /**
  54.  * Manage the website onto a PLICI plateform
  55.  *
  56.  * @author SimpliciWeb
  57.  * @version $Id: databaseconnect.class.php 781 2007-12-27 13:07:16Z stephanet $
  58.  * @package Common
  59.  * @subpackage FrameWork
  60.  */
  61.  
  62. class Databaseconnect extends ObjectCached {
  63.  
  64.     //  BACK OFFICE CLASS
  65.  
  66.  
  67.     //    Table Name : databaseconnect
  68.     //
  69.     //    dbc_sitename (string,255)    
  70.     //    dbc_dbname (string,64)    
  71.     //    dbc_dblogin (string,40)    
  72.     //    dbc_dbpass (string,10)    
  73.     //    dbc_inherited_sitename (string,255)    
  74.     //    dbc_ecommerce (string,1)    
  75.     //    dbc_dbhost (string,125)    
  76.     //  dbc_group (string, 64)
  77.     
  78.     
  79.     // member object
  80.     /**
  81.      * Format Object
  82.      *
  83.      * @var Format 
  84.      */
  85.     var $m_object_format             = NULL;
  86.     /**
  87.      * Database Connexion object
  88.      *
  89.      * @var DbConnexion 
  90.      */
  91.     var $m_object_dbconnexion         = NULL;
  92.  
  93.     // member request
  94.     /**
  95.      * SQL Request : Select by primary key
  96.      *
  97.      * @var string 
  98.      */
  99.     var $req_select_by_primary_key    = "";
  100.     /**
  101.      * SQL Request : Select
  102.      *
  103.      * @var string 
  104.      */
  105.     var $req_select                 = "";
  106.     /**
  107.      * SQL Request : Select database
  108.      *
  109.      * @var string 
  110.      */
  111.     var $req_select_databasename     = "";
  112.     /**
  113.      * SQL Request : Select sitename
  114.      *
  115.      * @var string 
  116.      */
  117.     var $req_select_sitename        = "";
  118.     /**
  119.      * SQL Request : get by database name
  120.      *
  121.      * @var string 
  122.      */
  123.     var $req_get_by_dbc_dbname        = "";
  124.     /**
  125.      * SQL Request : Count
  126.      *
  127.      * @var string 
  128.      */
  129.     var $req_count                     = "";
  130.     /**
  131.      * SQL Request : Insert
  132.      *
  133.      * @var string 
  134.      */
  135.     var $req_insert                    = "";  
  136.     /**
  137.      * SQL Request : Delete
  138.      *
  139.      * @var string 
  140.      */
  141.     var $req_delete                    = "";  
  142.     /**
  143.      * SQL Request : Update
  144.      *
  145.      * @var string 
  146.      */
  147.     var $req_update                    = "";  
  148.     /**
  149.      * SQL Request : Update ecommerce
  150.      *
  151.      * @var string 
  152.      */
  153.     var $req_update_ecommerce        = "";
  154.  
  155.     /**
  156.      * SQL Request : Get groups
  157.      *
  158.      * @var string 
  159.      */
  160.     var $req_get_groups    = "";
  161.  
  162.     /**
  163.      * SQL Request :Update group
  164.      *
  165.      * @var string 
  166.      */
  167.     var $req_update_group            = "";
  168.     /**
  169.      * Prefix for local sitename
  170.      *
  171.      * @var string 
  172.      */    
  173.     var $m_dbc_sitename_prefix_for_local = "local-";
  174.     /**
  175.      * String to know if a website is an alis
  176.      *
  177.      * @var string 
  178.      */
  179.     var $m_dbc_dblogin_value_for_alias = "ALIAS";
  180.     /**
  181.      * Website group slave menu to hide
  182.      *
  183.      * @var array 
  184.      */
  185.     var $m_website_group_slave_menu_to_hide     =  array();
  186.     
  187.     /**
  188.      * Constructor, init the requests and objects
  189.      *
  190.      * @param bool $use_for_script 
  191.      * @return Databaseconnect 
  192.      */
  193.     function Databaseconnect($use_for_script false{
  194.         
  195.         global $_PLICI_CFG;
  196.  
  197.         global $g_object_loader;
  198.         $this->m_object_format =$g_object_loader->getFormat();
  199.         
  200.         $this->m_object_dbconnexion =$g_object_loader->getDbConnexion();
  201.  
  202.         $this->req_select_by_primary_key    = "select dbc_sitename, dbc_dbname, dbc_dblogin, dbc_dbpass, 
  203.                                                     dbc_inherited_sitename, dbc_ecommerce, dbc_dbhost, dbc_available, dbc_group                         
  204.                                                 from databaseconnect 
  205.                                                 where dbc_sitename = '%s';";
  206.         $this->req_select_databasename = "SELECT DISTINCT (dbc_dbname) FROM databaseconnect WHERE dbc_dblogin <> '".$this->m_dbc_dblogin_value_for_alias."' AND dbc_dbname <> '%s' ORDER BY dbc_dblogin;";
  207.  
  208.         
  209.         $this->req_select_by_dbc_dbname        "select dbc_sitename from databaseconnect where dbc_dbname = '%s' order by dbc_sitename;";
  210.         $this->req_select_sitename            = 
  211. "SELECT dbc_sitename
  212. FROM databaseconnect 
  213. WHERE dbc_dblogin <> '".$this->m_dbc_dblogin_value_for_alias."'
  214.     AND dbc_dbname='%s';";
  215.  
  216.         $this->req_get_by_dbc_dbname        = "SELECT dbc_dbname, dbc_dblogin, dbc_dbpass, dbc_dbhost, dbc_group
  217.                                                 FROM databaseconnect
  218.                                                 WHERE dbc_dbname IN @@@to_replace@@@
  219.                                                     AND dbc_dblogin <> 'ALIAS'
  220.                                                 ORDER BY dbc_dblogin;";
  221.                                                 
  222.         $this->req_select                     =  "select dbc_sitename, dbc_dbname, dbc_dblogin, dbc_dbpass, 
  223.                                                     dbc_inherited_sitename, dbc_ecommerce, dbc_dbhost, dbc_available, dbc_group
  224.                                                 from databaseconnect %s;";
  225.         $this->req_select_by_dbc_name        =  "select dbc_sitename, dbc_dbname, dbc_dblogin, dbc_dbpass, 
  226.                                                     dbc_inherited_sitename, dbc_ecommerce, dbc_dbhost, dbc_available, dbc_group
  227.                                                 from databaseconnect where dbc_dbname = '%s' %s;";
  228.         $this->req_count                     = "select count(*) 
  229.                                                 from databaseconnect;";
  230.         $this->req_insert                    = "insert into databaseconnect(dbc_sitename, dbc_dbname, dbc_dblogin, dbc_dbpass, dbc_inherited_sitename
  231.                                                     , dbc_ecommerce, dbc_dbhost) 
  232.                                                 values('%s', '%s', '%s', '%s', '%s'
  233.                                                     , '%s', '%s');";  
  234.         $this->req_delete                    = "delete  
  235.                                                 from databaseconnect 
  236.                                                 where dbc_sitename = '%s';";  
  237.         $this->req_update                    = "update databaseconnect 
  238.                                                 set dbc_dbname='%s', dbc_dblogin='%s', dbc_dbpass='%s', dbc_inherited_sitename='%s'
  239.                                                     , dbc_ecommerce='%s', dbc_dbhost='%s' 
  240.                                                 where dbc_sitename = '%s';";  
  241.  
  242.         $this->req_update_ecommerce            = "update databaseconnect 
  243.                                                 set dbc_ecommerce='%s' 
  244.                                                 where dbc_dbname = '%s' and dbc_dblogin <> '".$this->m_dbc_dblogin_value_for_alias."';";
  245.         $this->req_set_available             "update databaseconnect set dbc_available='%s' where dbc_dbname = '%s' and dbc_dblogin <> '".$this->m_dbc_dblogin_value_for_alias."';";
  246.         
  247.  
  248.         $this->req_update_all_update_ecommerce        "update databaseconnect 
  249.                                                 set dbc_ecommerce='%s' 
  250.                                                 where dbc_dblogin <> '".$this->m_dbc_dblogin_value_for_alias."'" .
  251.                                             " and dbc_dbname <> '".addslashes($_PLICI_CFG['superadmin_databasename'])."';";
  252.         $this->req_set_all_available         "update databaseconnect set dbc_available='%s' " .
  253.                                             "where dbc_dblogin <> '".$this->m_dbc_dblogin_value_for_alias."'" .
  254.                                             " and dbc_dbname <> '".addslashes($_PLICI_CFG['superadmin_databasename'])."';";
  255.         $this->req_select_theme_used        "SELECT DISTINCT(dbc_inherited_sitename) FROM  databaseconnect WHERE dbc_dbname = '%s' AND dbc_dbname <> '".addslashes($_PLICI_CFG['superadmin_databasename'])."' AND dbc_dblogin <> '".$this->m_dbc_dblogin_value_for_alias."';";
  256.         
  257.         $this->req_set_inherited_sitename     "update databaseconnect set dbc_inherited_sitename='%s' where dbc_dbname = '%s' and dbc_dblogin <> '".$this->m_dbc_dblogin_value_for_alias."';";
  258.  
  259.         $this->req_get_groups        = 
  260. "SELECT dbc_dbname
  261. FROM databaseconnect
  262. WHERE dbc_group @@condition@@
  263.     AND dbc_dblogin <> 'ALIAS'
  264.     AND dbc_dbname <> '".addslashes($_PLICI_CFG['superadmin_databasename'])."'
  265. ORDER BY dbc_dbname;";        
  266.  
  267.         // Update group
  268.         $this->req_update_group                =
  269. "UPDATE databaseconnect
  270. SET dbc_group=@@VALUE@@
  271. WHERE dbc_dbname='%s'
  272.     AND dbc_dblogin <> 'ALIAS';";
  273.  
  274.  
  275.         // Define menu to hide when a website become a website group slave
  276.         // This must be not empty 
  277.         $this->m_website_group_slave_menu_to_hide["PAGES1";
  278.         $this->m_website_group_slave_menu_to_hide["NOUVELLE_PAGE";
  279.         $this->m_website_group_slave_menu_to_hide["POIDS";
  280.         $this->m_website_group_slave_menu_to_hide["PRIX";
  281.         $this->m_website_group_slave_menu_to_hide["DATES";
  282.         $this->m_website_group_slave_menu_to_hide["PRODUITS";
  283.         $this->m_website_group_slave_menu_to_hide["COMMANDES";
  284.         $this->m_website_group_slave_menu_to_hide["COMPTES";
  285.         $this->m_website_group_slave_menu_to_hide["CONFIGURATION2";
  286.         $this->m_website_group_slave_menu_to_hide["SUPPLIER";
  287.         $this->m_website_group_slave_menu_to_hide["COMMANDES2";
  288.         $this->m_website_group_slave_menu_to_hide["PANIERS";
  289.  
  290.  
  291.     
  292.     
  293.  
  294.     
  295.     //  xIsNotValid
  296.     //  **********
  297.     /**
  298.      * Parameter Integrity checker
  299.      *
  300.      * @access private
  301.      * @param string $p_value 
  302.      * @return  bool TRUE if not valid
  303.      */
  304.     function xIsNotValidDbcSitename(&$p_value{
  305.  
  306.         if ($this->m_object_format->isNotVarchar($p_value255))
  307.             return true;
  308.         return $this->m_object_format->isNotDomainName($p_value);
  309.     
  310.     /**
  311.      * Parameter Integrity checker
  312.      *
  313.      * @access private
  314.      * @param string $p_value 
  315.      * @return  bool TRUE if not valid
  316.      */
  317.     function isNotValidDbcDbname($p_value{
  318.         return $this->m_object_format->isNotVarchar($p_value64);
  319.     
  320.     /**
  321.      * Parameter Integrity checker
  322.      *
  323.      * @access private
  324.      * @param string $p_value 
  325.      * @return  bool TRUE if not valid
  326.      */
  327.     function xIsNotValidDbcDblogin($p_value{
  328.         return $this->m_object_format->isNotVarchar($p_value40);
  329.     
  330.     /**
  331.      * Parameter Integrity checker
  332.      *
  333.      * @access private
  334.      * @param string $p_value 
  335.      * @return  bool TRUE if not valid
  336.      */
  337.     function xIsNotValidDbcDbpass($p_value{
  338.         return $this->m_object_format->isNotVarchar($p_value40);
  339.     
  340.     /**
  341.      * Parameter Integrity checker
  342.      *
  343.      * @access private
  344.      * @param string $p_value 
  345.      * @return  bool TRUE if not valid
  346.      */
  347.     function xIsNotValidDbcInheritedSitename($p_value{
  348.         return $this->m_object_format->isNotVarchar($p_value255);
  349.     
  350.     /**
  351.      * Parameter Integrity checker
  352.      *
  353.      * @access private
  354.      * @param string $p_value 
  355.      * @return  bool TRUE if not valid
  356.      */
  357.     function xIsNotValidDbcEcommerce($p_value{
  358.         return $this->m_object_format->isNotEnum($p_valuearray('Y','N'));
  359.     
  360.     /**
  361.      * Parameter Integrity checker
  362.      *
  363.      * @access private
  364.      * @param string $p_value 
  365.      * @return  bool TRUE if not valid
  366.      */
  367.     function xIsNotValidDbcDbhost($p_value{
  368.         return $this->m_object_format->isNotVarchar($p_value125);
  369.     
  370.     /**
  371.      * Parameter Integrity checker
  372.      *
  373.      * @access private
  374.      * @param string $p_value 
  375.      * @return  bool TRUE if not valid
  376.      */
  377.     function xIsNotValidDbcAvailable($p_value{
  378.         return $this->m_object_format->isNotEnum($p_valuearray('Y','N'));
  379.     
  380.  
  381.     /**
  382.      * Get sitename prefix for local
  383.      *
  384.      * @return string 
  385.      */
  386.     function getDbcSitenamePrefixForLocal()
  387.     {
  388.         return $this->m_dbc_sitename_prefix_for_local;
  389.     }
  390.     
  391.     /**
  392.      * Get one
  393.      *
  394.      * @param array $r_result 
  395.      * @param string $p_pk_dbc_sitename 
  396.      * @return bool TRUE on error
  397.      */
  398.     function getOneDatabaseconnect(&$r_result$p_pk_dbc_sitename{
  399.     
  400.         
  401.         
  402.         $r_result array();
  403.         
  404.         if ($this->xIsNotValidDbcSitename($p_pk_dbc_sitename))
  405.             return onErrorThrow(true,plici_lang("lang_error_field"));
  406.         
  407.     
  408.         $parameters array($p_pk_dbc_sitename);
  409.     
  410.         $result "";
  411.         if ($this->m_object_dbconnexion->makeSqlQuery($this->req_select_by_primary_key$parameters$result)) {
  412.             return onErrorThrow(true,plici_lang("lang_error_internal"));
  413.         }
  414.     
  415.         while ($row mysql_fetch_row($result)) {
  416.               $this->xRowToArray($row$r_result);
  417.             
  418.         }
  419.             
  420.         return false;
  421.     
  422.  
  423.  
  424.     /**
  425.      * Get theme used for a database name
  426.      *
  427.      * @param string $theme_used 
  428.      * @param string $p_dbc_dbname 
  429.      * @return bool TRUE on error
  430.      */
  431.     function getThemeUsed(&$theme_used$p_dbc_dbname{
  432.     
  433.         
  434.         
  435.         $theme_used "";
  436.         
  437.         if ($this->isNotValidDbcDbname($p_dbc_dbname))
  438.             return onErrorThrow(true,plici_lang("lang_error_field"));
  439.         
  440.     
  441.         $parameters array($p_dbc_dbname);
  442.     
  443.         $result "";
  444.         if ($this->m_object_dbconnexion->makeSqlQuery($this->req_select_theme_used$parameters$result)) {
  445.             return onErrorThrow(true,plici_lang("lang_error_internal"));
  446.         }
  447.     
  448.         $row mysql_fetch_row($result);
  449.         if (isset($row[0]))
  450.             $theme_used $row[0];
  451.             
  452.         return false;
  453.     
  454.  
  455.  
  456.  
  457.     /**
  458.      * Get sitename from a database name
  459.      *
  460.      * @param array $r_result 
  461.      * @param string $p_dbc_dbname 
  462.      * @return bool TRUE on error
  463.      */
  464.     function getDbcSitenamesForDbcDbname(&$r_result$p_dbc_dbname{
  465.     
  466.         
  467.         
  468.         $r_result array();
  469.         
  470.         if ($this->isNotValidDbcDbname($p_dbc_dbname))
  471.             return onErrorThrow(true,plici_lang("lang_error_field"));
  472.         
  473.     
  474.         $parameters array($p_dbc_dbname);
  475.     
  476.         $result "";
  477.         if ($this->m_object_dbconnexion->makeSqlQuery($this->req_select_by_dbc_dbname$parameters$result)) {
  478.             return onErrorThrow(true,plici_lang("lang_error_internal"));
  479.         }
  480.     
  481.         while ($row mysql_fetch_row($result)) {
  482.               array_push($r_result$row[0]);
  483.         }
  484.             
  485.         return false;
  486.     }     
  487.  
  488.  
  489.     /**
  490.      * Get database connect by sitename
  491.      *
  492.      * @param array $p_array_dbc_dbname 
  493.      * @param array $r_result 
  494.      * @return bool TRUE on error
  495.      */
  496.     function getDbcByDbcDbname($p_array_dbc_dbname&$r_result
  497.     {
  498.         
  499.         $r_result array();
  500.  
  501.         if (!is_array($p_array_dbc_dbname))
  502.             return onErrorThrow(true,plici_lang("lang_error_field"));
  503.         for ($i=0$i<count($p_array_dbc_dbname)$i++)
  504.         {
  505.             if ($this->isNotValidDbcDbname($p_array_dbc_dbname[$i]))
  506.                 return onErrorThrow(true,plici_lang("lang_error_field"));
  507.         }
  508.  
  509.         $dbcname_list "('".implode("','"$p_array_dbc_dbname)."')";
  510.         $request $this->req_get_by_dbc_dbname;
  511.         $request str_replace("@@@to_replace@@@"$dbcname_list$request);
  512.         $parameters array();
  513.         $result "";
  514.         if ($this->m_object_dbconnexion->makeSqlQueryAdminSuper($request$parameters$result)) {
  515.             return onErrorThrow(true,plici_lang("lang_error_internal"));
  516.         }
  517.     
  518.         while ($row mysql_fetch_row($result)) {
  519.             $trans_row["dbname"]     $row[0];
  520.             $trans_row["dblogin"]     $row[1];
  521.             $trans_row["dbpass"]     $row[2];
  522.             $trans_row["dbhost"]     $row[3];
  523.             $trans_row["dbc_group"$row[4];
  524.             $r_result[$trans_row;
  525.         }
  526.             
  527.         return false;
  528.     }
  529.  
  530.  
  531.  
  532.     /**
  533.      * Get list
  534.      *
  535.      * @param array $r_result 
  536.      * @param string $p_dbc_dbname 
  537.      * @param order $p_order_by 
  538.      * @param resource $id_sql_admin_super 
  539.      * @return bool TRUE on error
  540.      */
  541.     function getListDatabaseconnect(&$r_result$p_dbc_dbname ""$p_order_by "SPECIAL"$id_sql_admin_super ""{
  542.     
  543.         $order_by "";
  544.         switch($p_order_by){
  545.             case "actif_asc":
  546.                 $order_by "order by dbc_available, dbc_dbname, dbc_sitename";
  547.                 break;
  548.             case "actif_desc":
  549.                 $order_by "order by dbc_available desc, dbc_dbname, dbc_sitename";
  550.                 break;
  551.             case "bd_asc":
  552.                 $order_by "order by dbc_dbname, dbc_sitename";
  553.                 break;
  554.             case "bd_desc":
  555.                 $order_by "order by dbc_dbname desc, dbc_sitename";
  556.                 break;
  557.             case "host_asc":
  558.                 $order_by "order by dbc_sitename";
  559.                 break;
  560.             case "host_desc":
  561.                 $order_by "order by dbc_sitename desc";
  562.                 break;
  563.             case "type_asc":
  564.                 $order_by "order by dbc_ecommerce, dbc_dbname, dbc_sitename";
  565.                 break;
  566.             case "type_desc":
  567.                 $order_by "order by dbc_ecommerce desc, dbc_dbname, dbc_sitename";
  568.                 break;
  569.             
  570.             case "SPECIAL" :
  571.             default :
  572.                 $order_by "order by dbc_dbname, dbc_sitename";
  573.                 break;
  574.             
  575.         }
  576.         
  577.         
  578.         
  579.         
  580.         
  581.         
  582.                     
  583.         
  584.         
  585.         $r_result array();
  586.         
  587.         $parameters array();
  588.         $request $this->req_select;
  589.         if ($p_dbc_dbname != ""{
  590.             array_push($parameters$p_dbc_dbname);
  591.             $request $this->req_select_by_dbc_name;
  592.         }
  593.         array_push($parameters$order_by);
  594.             
  595.         
  596.         $result "";
  597.         
  598.         if ($id_sql_admin_super == ""
  599.             if ($this->m_object_dbconnexion->makeSqlQuery($request$parameters$result)) {
  600.                 return onErrorThrow(true,plici_lang("lang_error_internal"));
  601.             }
  602.         else {
  603.             $result mysql_query(vsprintf($request$parameters)$id_sql_admin_super);
  604.         }
  605.     
  606.         $i 0;
  607.         while ($row mysql_fetch_row($result)) {
  608.               if ($id_sql_admin_super == "")
  609.                   $this->xRowToArray($row$r_result[$i++]);
  610.               else
  611.                   $this->xRowToArrayForScript($row$r_result[$i++]);
  612.         }
  613.             
  614.         return false;
  615.     
  616.     /**
  617.      * return an array with dbc_sitename has an array of site_name
  618.      *
  619.      * @param array $r_result 
  620.      * @param bool $is_excluding_admin_super 
  621.      * @param bool $must_get_admin_directory 
  622.      * @param string $p_order_by 
  623.      * @param resource $id_sql_admin_super 
  624.      */
  625.     function getListDatabaseConnectGroupedBySitename(&$r_result
  626.                 $is_excluding_admin_super true,
  627.                 $must_get_admin_directory true$p_order_by "bd_asc",
  628.                 $id_sql_admin_super ""{
  629.  
  630.  
  631.         global $_PLICI_CFG;
  632.         $r_result array();
  633.         $array_list_site_alias array();
  634.         $this->getListDatabaseconnect($array_list_site_alias""$p_order_by$id_sql_admin_super);
  635.         
  636.         $temporary_memory array();
  637.         
  638.         foreach($array_list_site_alias as $value{
  639.             
  640.             if ($is_excluding_admin_super && ($value['dbc_dbname'== $_PLICI_CFG['superadmin_databasename']))
  641.                 continue;
  642.             
  643.  
  644.             if (!isset($temporary_memory[$value['dbc_dbname']]['dbc_sitename'])) {
  645.                 $temporary_memory[$value['dbc_dbname']]['dbc_sitename'array();
  646.             }
  647.             array_push($temporary_memory[$value['dbc_dbname']]['dbc_sitename']$value['dbc_sitename']);
  648.             
  649.             if ($this->m_dbc_dblogin_value_for_alias != $value['dbc_dblogin']{
  650.  
  651.                 if ($must_get_admin_directory{
  652.                     $r_result[$value['dbc_dbname']] $value;  
  653.                     $r_result[$value['dbc_dbname']]['admin_directory'getAdminDirectory($value['dbc_dbname']);
  654.                 }
  655.                 
  656.             }
  657.  
  658.         }
  659.         
  660.       foreach($temporary_memory as $key => $temp_memory{
  661.                 // ce n'est pas un alias on rempli toutes ces données
  662.                 $r_result[$key]['dbc_sitename'$temp_memory['dbc_sitename'];
  663.       }        
  664.         
  665.     }
  666.  
  667.  
  668.     
  669.     /**
  670.      * Get list database names
  671.      *
  672.      * @param array $r_result 
  673.      * @param string $p_include_admin  'Y','N'
  674.      * @return bool TRUE on error
  675.      */
  676.     function getListDatabaseNames(&$r_result$p_include_admin='N'{
  677.     
  678.         
  679.         
  680.         $r_result array();
  681.         
  682.         $parameters array();
  683.         if ('N' == $p_include_admin{
  684.             array_push($parameters(isset($_PLICI_CFG['superadmin_databasename']))?$_PLICI_CFG['superadmin_databasename']:"admin_super");
  685.         else {
  686.             array_push($parameters"");
  687.         }
  688.     
  689.         $result "";
  690.         if ($this->m_object_dbconnexion->makeSqlQuery($this->req_select_databasename$parameters$result)) {
  691.             return onErrorThrow(true,plici_lang("lang_error_internal"));
  692.         }
  693.     
  694.         $i 0;
  695.         while ($row mysql_fetch_row($result)) {
  696.               $r_result[$row[0];
  697.         }
  698.             
  699.         return false;
  700.         
  701.         
  702.     }        
  703.     
  704.     
  705.     /**
  706.      * Get count
  707.      *
  708.      * @param integer $r_result_count 
  709.      * @return bool TRUE on error
  710.      */
  711.     function getCountDatabaseconnect(&$r_result_count{
  712.  
  713.         
  714.  
  715.         $r_result_count 0;
  716.         
  717.         $parameters array();
  718.  
  719.         $result "";
  720.         if ($this->m_object_dbconnexion->makeSqlQuery($this->req_count$parameters$result)) {
  721.             return onErrorThrow(true,plici_lang("lang_error_internal"));
  722.         }
  723.         
  724.         while ($row mysql_fetch_row($result)) {
  725.             $r_result_count  $row[0]
  726.         }
  727.         return false;        
  728.     }    
  729.     
  730.     
  731.     /**
  732.      * Test if exist
  733.      *
  734.      * @param bool $r_is_existing 
  735.      * @param string $p_pk_dbc_sitename 
  736.      * @return bool TRUE on error
  737.      */
  738.     function existDatabaseconnect(&$r_is_existing$p_pk_dbc_sitename{
  739.         $r_result "";
  740.         $there_is_an_error $this->getOneDatabaseconnect($r_result$p_pk_dbc_sitename);
  741.         $r_is_existing sizeof($r_result0;
  742.         
  743.         return $there_is_an_error;
  744.     }    
  745.     
  746.     
  747.     /**
  748.      * Insert and force to be an ALIAS
  749.      *
  750.      * @param string $p_dbc_sitename 
  751.      * @param string $p_dbc_dbname 
  752.      * @return bool TRUE on error
  753.      */
  754.     function insertDatabaseconnectAlias($p_dbc_sitename$p_dbc_dbname{
  755.         
  756.         $array_is_existing false;
  757.         $this->getDbcSitenamesForDbcDbname($array_is_existing$p_dbc_dbname);
  758.         $array_is_existing sizeof($array_is_existing0;
  759.         if ($array_is_existing{
  760.             return $this->insertDatabaseconnect($p_dbc_sitename$p_dbc_dbname$this->m_dbc_dblogin_value_for_alias
  761.             $this->m_dbc_dblogin_value_for_alias$this->m_dbc_dblogin_value_for_alias
  762.             'N'$this->m_dbc_dblogin_value_for_alias);
  763.         }
  764.         
  765.          
  766.         return true;
  767.     }        
  768.     
  769.     /**
  770.      * Insert
  771.      *
  772.      * @param string $p_dbc_sitename 
  773.      * @param string $p_dbc_dbname 
  774.      * @param string $p_dbc_dblogin 
  775.      * @param string $p_dbc_dbpass 
  776.      * @param string $p_dbc_inherited_sitename 
  777.      * @param string   $p_dbc_ecommerce    'Y','N'
  778.      * @param string $p_dbc_dbhost 
  779.      * @return bool TRUE on error
  780.      */
  781.     function insertDatabaseconnect($p_dbc_sitename$p_dbc_dbname$p_dbc_dblogin$p_dbc_dbpass$p_dbc_inherited_sitename
  782.                 $p_dbc_ecommerce$p_dbc_dbhost/*, &$r_result_id*/{
  783.  
  784.         
  785.         /*$r_result_id = "";*/
  786.  
  787.         global $g_object_loader;
  788.         $g_object_message =$g_object_loader->getMessage()
  789.         
  790.         
  791.         
  792.         onErrorThrow($this->xIsNotValidDbcSitename($p_dbc_sitename),plici_lang("lang_error_field"));
  793.         onErrorThrow($this->isNotValidDbcDbname($p_dbc_dbname),plici_lang("lang_error_field"));
  794.         onErrorThrow($this->xIsNotValidDbcDblogin($p_dbc_dblogin),plici_lang("lang_error_field"));
  795.         onErrorThrow($this->xIsNotValidDbcDbpass($p_dbc_dbpass),plici_lang("lang_error_field"));
  796.         onErrorThrow($this->xIsNotValidDbcInheritedSitename($p_dbc_inherited_sitename),plici_lang("lang_error_field"));
  797.         onErrorThrow($this->xIsNotValidDbcEcommerce($p_dbc_ecommerce),plici_lang("lang_error_field"));
  798.         onErrorThrow($this->xIsNotValidDbcDbhost($p_dbc_dbhost),plici_lang("lang_error_field"));
  799.         if ($g_object_message->thereIsAnError()) {
  800.             return true;    
  801.         }    
  802.  
  803.         // preparation des paramètres
  804.         $parameters array();
  805.         array_push($parameters$p_dbc_sitename);
  806.         array_push($parameters$p_dbc_dbname);
  807.         array_push($parameters$p_dbc_dblogin);
  808.         array_push($parameters$p_dbc_dbpass);
  809.         array_push($parameters$p_dbc_inherited_sitename);
  810.         array_push($parameters$p_dbc_ecommerce);
  811.         array_push($parameters$p_dbc_dbhost);
  812.  
  813.         $result "";
  814.         $this->m_object_dbconnexion->makeSqlQuery($this->req_insert$parameters$result);
  815.         
  816.         /*$r_result_id = mysql_insert_id();*/
  817.  
  818.         //$this->xGenerateUrlRewriting();
  819.         
  820.         return onErrorThrow(!$result,plici_lang("lang_error_internal"));
  821.     }
  822.     
  823.     
  824.     /**
  825.      * Update all databases to ecommerce or not
  826.      *
  827.      * @param string $p_dbc_ecommerce          'Y','N'
  828.      * @param integer $r_nb_row_affected 
  829.      * @return bool TRUE on error
  830.      */
  831.     function updateAllDatabaseconnectEcommerce($p_dbc_ecommerce&$r_nb_row_affected{
  832.  
  833.         
  834.  
  835.         $r_nb_row_affected 0;
  836.  
  837.         global $g_object_loader;
  838.         $g_object_message =$g_object_loader->getMessage()
  839.         onErrorThrow($this->xIsNotValidDbcEcommerce($p_dbc_ecommerce),plici_lang("lang_error_field"));
  840.         if ($g_object_message->thereIsAnError()) {
  841.             return true;    
  842.         }    
  843.  
  844.         // preparation des paramètres
  845.         $parameters array();
  846.         array_push($parameters$p_dbc_ecommerce);
  847.  
  848.  
  849.         $result "";
  850.         if ($this->m_object_dbconnexion->makeSqlQuery($this->req_update_all_update_ecommerce$parameters$result)) {
  851.             return onErrorThrow(true,plici_lang("lang_error_internal"));
  852.         }
  853.  
  854.         $r_nb_row_affected mysql_affected_rows();
  855.  
  856.         return false;
  857.     }
  858.         
  859.     /**
  860.      * Set all databases to Available or not
  861.      *
  862.      * @param string $p_dbc_available  'Y','N'
  863.      * @param integer $r_nb_row_affected 
  864.      * @return bool TRUE on error
  865.      */
  866.     function updateAllDatabaseconnectAvailable($p_dbc_available&$r_nb_row_affected{
  867.  
  868.         
  869.  
  870.         $r_nb_row_affected 0;
  871.  
  872.         global $g_object_loader;
  873.         $g_object_message =$g_object_loader->getMessage()
  874.         onErrorThrow($this->xIsNotValidDbcAvailable($p_dbc_available),plici_lang("lang_error_field"));
  875.         if ($g_object_message->thereIsAnError()) {
  876.             return true;    
  877.         }    
  878.  
  879.         // preparation des paramètres
  880.         $parameters array();
  881.         array_push($parameters$p_dbc_available);
  882.  
  883.  
  884.         $result "";
  885.         if ($this->m_object_dbconnexion->makeSqlQuery($this->req_set_all_available$parameters$result)) {
  886.             return onErrorThrow(true,plici_lang("lang_error_internal"));
  887.         }
  888.  
  889.         $r_nb_row_affected mysql_affected_rows();
  890.  
  891.         return false;
  892.     }    
  893.  
  894.     /**
  895.      * Update database to set inherited site name
  896.      *
  897.      * @param string $p_dbc_dbname 
  898.      * @param string $p_dbc_inherited_sitename 
  899.      * @param integer $r_nb_row_affected 
  900.      * @return bool TRUE on error
  901.      */
  902.     function updateDatabaseconnectInheritedSiteName($p_dbc_dbname$p_dbc_inherited_sitename&$r_nb_row_affected{
  903.  
  904.         
  905.  
  906.         $r_nb_row_affected 0;
  907.  
  908.         global $g_object_loader;
  909.         $g_object_message =$g_object_loader->getMessage()
  910.         onErrorThrow($this->isNotValidDbcDbname($p_dbc_dbname),plici_lang("lang_error_field"));
  911.         onErrorThrow($this->xIsNotValidDbcInheritedSitename($p_dbc_inherited_sitename),plici_lang("lang_error_field"));
  912.         if ($g_object_message->thereIsAnError()) {
  913.             return true;    
  914.         }    
  915.  
  916.         // preparation des paramètres
  917.         $parameters array();
  918.         array_push($parameters$p_dbc_inherited_sitename);
  919.         array_push($parameters$p_dbc_dbname);
  920.  
  921.  
  922.         $result "";
  923.         if ($this->m_object_dbconnexion->makeSqlQuery($this->req_set_inherited_sitename$parameters$result)) {
  924.             return onErrorThrow(true,plici_lang("lang_error_internal"));
  925.         }
  926.  
  927.         $r_nb_row_affected mysql_affected_rows();
  928.  
  929.         return false;
  930.     }
  931.  
  932.     /**
  933.      * Update database available for one database
  934.      *
  935.      * @param string $p_dbc_dbname 
  936.      * @param string $p_dbc_available  'Y','N'
  937.      * @param integer $r_nb_row_affected 
  938.      * @return bool TRUE on error
  939.      */
  940.     function updateDatabaseconnectAvailable($p_dbc_dbname$p_dbc_available&$r_nb_row_affected{
  941.  
  942.         
  943.  
  944.         $r_nb_row_affected 0;
  945.  
  946.         global $g_object_loader;
  947.         $g_object_message =$g_object_loader->getMessage()
  948.         onErrorThrow($this->isNotValidDbcDbname($p_dbc_dbname),plici_lang("lang_error_field"));
  949.         onErrorThrow($this->xIsNotValidDbcAvailable($p_dbc_available),plici_lang("lang_error_field"));
  950.         if ($g_object_message->thereIsAnError()) {
  951.             return true;    
  952.         }    
  953.  
  954.         // preparation des paramètres
  955.         $parameters array();
  956.         array_push($parameters$p_dbc_available);
  957.         array_push($parameters$p_dbc_dbname);
  958.  
  959.  
  960.         $result "";
  961.         if ($this->m_object_dbconnexion->makeSqlQuery($this->req_set_available$parameters$result)) {
  962.             return onErrorThrow(true,plici_lang("lang_error_internal"));
  963.         }
  964.  
  965.         $r_nb_row_affected mysql_affected_rows();
  966.  
  967.         return false;
  968.     }    
  969.     
  970.     /**
  971.      * Update database is ecommerce for one database
  972.      *
  973.      * @param string $p_dbc_dbname 
  974.      * @param string $p_dbc_ecommerce  'Y','N'
  975.      * @param integer $r_nb_row_affected 
  976.      * @return bool TRUE on error
  977.      */
  978.     function updateDatabaseconnectEcommerce($p_dbc_dbname$p_dbc_ecommerce&$r_nb_row_affected{
  979.  
  980.         
  981.  
  982.         $r_nb_row_affected 0;
  983.  
  984.         global $g_object_loader;
  985.         $g_object_message =$g_object_loader->getMessage()
  986.         onErrorThrow($this->isNotValidDbcDbname($p_dbc_dbname),plici_lang("lang_error_field"));
  987.         onErrorThrow($this->xIsNotValidDbcEcommerce($p_dbc_ecommerce),plici_lang("lang_error_field"));
  988.         if ($g_object_message->thereIsAnError()) {
  989.             return true;    
  990.         }    
  991.  
  992.         // preparation des paramètres
  993.         $parameters array();
  994.         array_push($parameters$p_dbc_ecommerce);
  995.         array_push($parameters$p_dbc_dbname);
  996.  
  997.  
  998.         $result "";
  999.         if ($this->m_object_dbconnexion->makeSqlQuery($this->req_update_ecommerce$parameters$result)) {
  1000.             return onErrorThrow(true,plici_lang("lang_error_internal"));
  1001.         }
  1002.  
  1003.         $r_nb_row_affected mysql_affected_rows();
  1004.  
  1005.         return false;
  1006.     }    
  1007.     
  1008.     /**
  1009.      * Update database connect
  1010.      *
  1011.      * @param string $p_dbc_dbname 
  1012.      * @param string $p_dbc_dblogin 
  1013.      * @param string $p_dbc_dbpass 
  1014.      * @param string $p_dbc_inherited_sitename 
  1015.      * @param string $p_dbc_ecommerce 
  1016.      * @param string $p_dbc_dbhost 
  1017.      * @param string $p_pk_dbc_sitename 
  1018.      * @param integer $r_nb_row_affected 
  1019.      * @return bool TRUE on error
  1020.      */
  1021.     function updateDatabaseconnect($p_dbc_dbname$p_dbc_dblogin$p_dbc_dbpass$p_dbc_inherited_sitename
  1022.                 $p_dbc_ecommerce$p_dbc_dbhost$p_pk_dbc_sitename&$r_nb_row_affected{
  1023.  
  1024.         
  1025.  
  1026.         $r_nb_row_affected 0;
  1027.  
  1028.         global $g_object_loader;
  1029.         $g_object_message =$g_object_loader->getMessage()
  1030.         onErrorThrow($this->isNotValidDbcDbname($p_dbc_dbname),plici_lang("lang_error_field"));
  1031.         onErrorThrow($this->xIsNotValidDbcDblogin($p_dbc_dblogin),plici_lang("lang_error_field"));
  1032.         onErrorThrow($this->xIsNotValidDbcDbpass($p_dbc_dbpass),plici_lang("lang_error_field"));
  1033.         onErrorThrow($this->xIsNotValidDbcInheritedSitename($p_dbc_inherited_sitename),plici_lang("lang_error_field"));
  1034.         onErrorThrow($this->xIsNotValidDbcEcommerce($p_dbc_ecommerce),plici_lang("lang_error_field"));
  1035.         onErrorThrow($this->xIsNotValidDbcDbhost($p_dbc_dbhost),plici_lang("lang_error_field"));
  1036.         onErrorThrow($this->xIsNotValidDbcSitename($p_pk_dbc_sitename),plici_lang("lang_error_field"));
  1037.         if ($g_object_message->thereIsAnError()) {
  1038.             return true;    
  1039.         }    
  1040.  
  1041.         // preparation des paramètres
  1042.         $parameters array();
  1043.         array_push($parameters$p_dbc_dbname);
  1044.         array_push($parameters$p_dbc_dblogin);
  1045.         array_push($parameters$p_dbc_dbpass);
  1046.         array_push($parameters$p_dbc_inherited_sitename);
  1047.         array_push($parameters$p_dbc_ecommerce);
  1048.         array_push($parameters$p_dbc_dbhost);
  1049.         array_push($parameters$p_pk_dbc_sitename);
  1050.  
  1051.  
  1052.         $result "";
  1053.         if ($this->m_object_dbconnexion->makeSqlQuery($this->req_update$parameters$result)) {
  1054.             return onErrorThrow(true,plici_lang("lang_error_internal"));
  1055.         }
  1056.  
  1057.         $r_nb_row_affected mysql_affected_rows();
  1058.  
  1059. //        $this->xGenerateUrlRewriting();
  1060.  
  1061.         return false;
  1062.     }    
  1063.     
  1064.     
  1065.  
  1066.     /**
  1067.      * Delete a database connect information
  1068.      *
  1069.      * @param string $p_pk_dbc_sitename 
  1070.      * @param array $r_nb_row_affected 
  1071.      * @return bool TRUE on error
  1072.      */
  1073.     function deleteDatabaseconnect($p_pk_dbc_sitename&$r_nb_row_affected{
  1074.  
  1075.         
  1076.  
  1077.         $r_nb_row_affected 0;
  1078.  
  1079.         global $g_object_loader;
  1080.         $g_object_message =$g_object_loader->getMessage()
  1081.         onErrorThrow($this->xIsNotValidDbcSitename($p_pk_dbc_sitename),plici_lang("lang_error_field"));
  1082.         if ($g_object_message->thereIsAnError()) {
  1083.             return true;    
  1084.         }    
  1085.  
  1086.         // preparation des paramètres
  1087.         $parameters array();
  1088.         array_push($parameters$p_pk_dbc_sitename);
  1089.  
  1090.         $r_result array();
  1091.         $this->getOneDatabaseconnect($r_result$p_pk_dbc_sitename);
  1092.         $it_got_information true;
  1093.         if (isset($r_result['dbc_dblogin']&& $r_result['dbc_dblogin'== $this->m_dbc_dblogin_value_for_alias{
  1094.             $it_got_information false;
  1095.         }
  1096.  
  1097.         if ($it_got_information{
  1098.             // @DONE : je dois transférer les infos sur un autre host de meme database :) sinon ca marche plus
  1099.             $array_list_hosts array();
  1100.             $this->getListDatabaseconnect($array_list_hosts$r_result['dbc_dbname']);
  1101.             foreach($array_list_hosts as $value{
  1102.                 if ($value['dbc_sitename'<> $r_result['dbc_sitename']{
  1103.                     $row_affected 0;
  1104. //                    echo_net("$this->updateDatabaseconnect(".$r_result['dbc_dbname'].", ".$r_result['dbc_dblogin'].",
  1105. //                    ".$r_result['dbc_dbpass'].", ".$r_result['dbc_inherited_sitename'].", ".$r_result['dbc_ecommerce'].",
  1106. //                    ".$r_result['dbc_dbhost'].", ".$value['dbc_sitename'].", ".$row_affected.")");
  1107.  
  1108.                     
  1109.                     if ($this->updateDatabaseconnect($r_result['dbc_dbname']$r_result['dbc_dblogin'],
  1110.                     $r_result['dbc_dbpass']$r_result['dbc_inherited_sitename']$r_result['dbc_ecommerce'],
  1111.                     $r_result['dbc_dbhost']$value['dbc_sitename']$row_affected)) 
  1112.                         return true;
  1113.                     else
  1114.                         break// sinon je les mets à jour tous les ALIAS :(
  1115.                 }
  1116.             }
  1117.         }
  1118.  
  1119.         $result "";
  1120.         if ($this->m_object_dbconnexion->makeSqlQuery($this->req_delete$parameters$result)) {
  1121.             return onErrorThrow(true,plici_lang("lang_error_deletingdata"));
  1122.         }
  1123.  
  1124.         $r_nb_row_affected mysql_affected_rows();
  1125.         
  1126. //        $this->xGenerateUrlRewriting();
  1127.         
  1128.         return false;
  1129.     }    
  1130.     
  1131.     /**
  1132.      * return an array with the available themes
  1133.      *
  1134.      * @param array $result 
  1135.      */
  1136.     function getAvailableThemes(&$result{
  1137.         $result array();
  1138.         
  1139.         global $g_object_siteinformation;        
  1140.         //$dir_themerewriting = $g_object_siteinformation->getThemeRewritingPath();
  1141.         $dir_themeelement $g_object_siteinformation->getViewRootPath()."/".PLICI_FOR_PLICI_DIRECTORY."/";
  1142.         $r_files array();
  1143.         net_scandir($dir_themeelement$r_filesfalse""""false);
  1144.         //print_r_net($r_files);
  1145.         foreach($r_files as $value{
  1146.             //$value['name'] = str_replace('.php', '', $value['name']);
  1147.             if ($value['type'== "directory" && $value['name'!= PLICI_ADMIN_SITES_DIRECTORY && $value['name'!= PLICI_ADMIN_PLICI_DIRECTORY{
  1148.                 $result[array(
  1149.                             'name' => $value['name'],
  1150.                             'screenshoot_little' => 
  1151.                             "/".PLICI_VIEW_SITES_FOR_PLICI_DIRECTORY.'/'.$value['name'].'/pic_sample'.$g_object_siteinformation->m_theme_screen_shoot_little,
  1152.                             
  1153.                             'screenshoot_big' => 
  1154.                             "/".PLICI_VIEW_SITES_FOR_PLICI_DIRECTORY.'/'.$value['name'].'/pic_sample'.$g_object_siteinformation->m_theme_screen_shoot_big,
  1155.                             'come_from_plici_or_my' => $value['parent_dir']
  1156.                             )
  1157.  
  1158.             }
  1159.  
  1160.         }
  1161.         
  1162.         
  1163.         
  1164.     }
  1165.  
  1166.     /**
  1167.      * Convert a number indexed array to an fieldname indexed array
  1168.      *
  1169.      * @access private
  1170.      * @param array $p_row 
  1171.      * @param array $r_result 
  1172.      */    
  1173.     function xRowToArray($p_row&$r_result{
  1174.                 $r_result array(
  1175.                                 'dbc_sitename'    =>    $this->m_object_dbconnexion->translate("DB_TO_HTML"$p_row[0]),
  1176.                                 'dbc_dbname'    =>    $this->m_object_dbconnexion->translate("DB_TO_HTML"$p_row[1]),
  1177.                                 'dbc_dblogin'    =>    $this->m_object_dbconnexion->translate("DB_TO_HTML"$p_row[2]),
  1178.                                 'dbc_dbpass'    =>    $this->m_object_dbconnexion->translate("DB_TO_HTML"$p_row[3]),
  1179.                                 'dbc_inherited_sitename'    =>    $this->m_object_dbconnexion->translate("DB_TO_HTML"$p_row[4]),
  1180.                                 'dbc_ecommerce'    =>    $this->m_object_dbconnexion->translate("DB_TO_HTML"$p_row[5]),
  1181.                                 'dbc_dbhost'    =>    $this->m_object_dbconnexion->translate("DB_TO_HTML"$p_row[6]),
  1182.                                 'dbc_available'    =>    $this->m_object_dbconnexion->translate("DB_TO_HTML"$p_row[7]),
  1183.                                 'dbc_group'        =>    $this->m_object_dbconnexion->translate("DB_TO_HTML"$p_row[8])
  1184.                                  );
  1185.     }    
  1186.  
  1187.     /**
  1188.      * Convert a number indexed array to an fieldname indexed array
  1189.      *
  1190.      * @access private
  1191.      * @param array $p_row 
  1192.      * @param array $r_result 
  1193.      */
  1194.     function xRowToArrayForScript($p_row&$r_result{
  1195.                 $r_result array(
  1196.                                 'dbc_sitename'    =>    $p_row[0],
  1197.                                 'dbc_dbname'    =>    $p_row[1],
  1198.                                 'dbc_dblogin'    =>    $p_row[2],
  1199.                                 'dbc_dbpass'    =>    $p_row[3],
  1200.                                 'dbc_inherited_sitename'    =>    $p_row[4],
  1201.                                 'dbc_ecommerce'    =>    "DB_TO_HTML"$p_row[5],
  1202.                                 'dbc_dbhost'    =>    "DB_TO_HTML"$p_row[6],
  1203.                                 'dbc_available'    =>    "DB_TO_HTML"$p_row[7],
  1204.                                 'dbc_group'        =>    "DB_TO_HTML"$p_row[8]
  1205.                                  );
  1206.     }    
  1207.  
  1208.  
  1209.  
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  
  1220.  
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.     /**
  1242.      * Set a website to doesn't herit from another web site
  1243.      *
  1244.      * @param string $p_dbname 
  1245.      * @return bool TRUE on error
  1246.      */
  1247.     function setNotInheritWebSite($p_dbname{
  1248.  
  1249.         if!ini_get('safe_mode') ) @set_time_limit(999);
  1250.         ignore_user_abort(true);
  1251.  
  1252.         $directory_created_by_script array();
  1253.         $files_created_by_script array();
  1254.                                         
  1255.         $return_value $this->xSetNotInheritWebSite($p_dbname,
  1256.                                 $directory_created_by_script,
  1257.                                 $files_created_by_script);
  1258.         
  1259.         if (sizeof($return_value['error'])>0{
  1260.                 // rollback files en directory created
  1261.                 net_rmdir($directory_created_by_script);
  1262.                 foreach($files_created_by_script as $value{
  1263.                     @unlink($value);
  1264.                 }
  1265.         }
  1266.         
  1267.         
  1268.         
  1269.         
  1270.         
  1271.         if!ini_get('safe_mode') ) @set_time_limit(30);
  1272.         ignore_user_abort(false);
  1273.         
  1274.         return $return_value;        
  1275.     }
  1276.  
  1277.     
  1278.     /**
  1279.      * Set to not inherit website
  1280.      *
  1281.      * @access private
  1282.      * @param string $p_dbname 
  1283.      * @param array $directory_created_by_script 
  1284.      * @param array $files_created_by_script 
  1285.      * @return bool TRUE on error
  1286.      */
  1287.     function xSetNotInheritWebSite($p_dbname&$directory_created_by_script&$files_created_by_script){
  1288.         
  1289.         
  1290.         global $_PLICI_CFG;
  1291.         global $g_object_siteinformation;
  1292.          $racine_path                 $_PLICI_CFG['racine_web']."/";
  1293.  
  1294.         $r_result array('error'=>array()'message'=>array());
  1295.         // récupération du nom de l'héritage
  1296.         $r_theme_used "";
  1297.         $this->getThemeUsed($r_theme_used$p_dbname);
  1298.         if (trim($r_theme_used== ''{
  1299.             array_push($r_result['error']plici_lang('lang_error_themeused'));
  1300.             return $r_result;
  1301.         }
  1302.         $p_site_reference $r_theme_used;
  1303.         
  1304.  
  1305.         if (file_exists($racine_path.$g_object_siteinformation->m_view_from_root.PLICI_FOR_PLICI_DIRECTORY."/".$p_site_reference))
  1306.             $theme_from_plici_or_my PLICI_FOR_PLICI_DIRECTORY;
  1307.         else
  1308.             $theme_from_plici_or_my PLICI_MY_DIRECTORY;
  1309.  
  1310.         $view_dest             $racine_path.$g_object_siteinformation->m_view_from_root.PLICI_MY_DIRECTORY."/".$p_dbname.'/';
  1311.         $view_source         $racine_path.$g_object_siteinformation->m_view_from_root.$theme_from_plici_or_my."/".$p_site_reference."/";
  1312.  
  1313.  
  1314.  
  1315.  
  1316.         $nb_row_affected 0;
  1317.         if ($this->updateDatabaseconnectAvailable($p_dbname'N'$nb_row_affected)) {
  1318.             array_push($r_result['error']plici_lang('lang_error_settobusyoravailable'));
  1319.             return $r_result;
  1320.         }
  1321.             
  1322.         
  1323.         
  1324.         
  1325.         //$path_for_theme_rewriting_orig     = "";
  1326.         //$path_for_theme_rewriting_dest     = "";
  1327.         $core_theme_elements             "";
  1328.         $path_theme_elements_orig         "";
  1329.         $path_theme_elements_dest         "";
  1330.         $theme_from_plici_or_my                "";
  1331.         $this->xVerifyForMakingNotInheritWebSite($racine_path$p_site_reference$p_dbname$view_dest,
  1332.                  $r_result/*$path_for_theme_rewriting_orig, $path_for_theme_rewriting_dest,*/
  1333.                  $core_theme_elements$path_theme_elements_orig$path_theme_elements_dest$theme_from_plici_or_my,true);
  1334.         if (sizeof($r_result['error'])>0)
  1335.             return $r_result;
  1336.         
  1337.         $this->xCopyForMakingNotInheritWebSite($view_dest$r_result$view_source
  1338.         $directory_created_by_script/*$path_for_theme_rewriting_dest, $path_for_theme_rewriting_orig,*/
  1339.         $p_site_reference$p_dbname$path_theme_elements_dest$path_theme_elements_orig,
  1340.         $files_created_by_script,$theme_from_plici_or_my,  true);
  1341.         if (sizeof($r_result['error'])>0)
  1342.             return $r_result;
  1343.         
  1344.         
  1345.         // on update la valeur d'héritage dans la database
  1346.         $this->updateDatabaseconnectInheritedSiteName($p_dbname''$nb_row_affected)
  1347.         if ($nb_row_affected == 0{
  1348.             array_push($r_result['error']plici_lang('lang_error_changeinheritedsite'));
  1349.             return $r_result;
  1350.         }
  1351.         
  1352.         if ($this->updateDatabaseconnectAvailable($p_dbname'Y'$nb_row_affected)) {
  1353.             array_push($r_result['error']plici_lang('lang_error_settobusyoravailable'));
  1354.             return $r_result;
  1355.         }
  1356.  
  1357.         deleteCompleteCacheForWebSite($p_dbname$racine_pathfalse);
  1358.                     
  1359.         return $r_result;
  1360.         
  1361.     }
  1362.     
  1363.  
  1364. /**
  1365.  * Verify for making not inherited web site
  1366.  *
  1367.  * @access private
  1368.  * @param string $racine_path 
  1369.  * @param string $p_site_reference 
  1370.  * @param string $p_dbname 
  1371.  * @param string $view_dest 
  1372.  * @param array $r_result 
  1373.  * @param string $core_theme_elements 
  1374.  * @param string $path_theme_elements_orig 
  1375.  * @param string $path_theme_elements_dest 
  1376.  * @param string $p_theme_from_plici_or_my 
  1377.  * @param string $is_after_site_created 
  1378.  * @return bool TRUE on error
  1379.  */
  1380. function xVerifyForMakingNotInheritWebSite($racine_path$p_site_reference$p_dbname$view_dest,
  1381.                  &$r_result/*&$path_for_theme_rewriting_orig, &$path_for_theme_rewriting_dest,*/
  1382.                  &$core_theme_elements&$path_theme_elements_orig&$path_theme_elements_dest
  1383.                  ,&$p_theme_from_plici_or_my$is_after_site_created false{
  1384.         
  1385.         global $g_object_siteinformation;
  1386.         
  1387.         
  1388.         
  1389.         //$path_for_theme_rewriting_orig = $racine_path.$g_object_siteinformation->m_themerewriting_from_root.$p_theme_from_plici_or_my."/".$p_site_reference."/";
  1390.         //$path_for_theme_rewriting_dest = $racine_path.$g_object_siteinformation->m_themerewriting_from_root."my/".$p_dbname.'/';
  1391.         
  1392.         $core_theme_elements $g_object_siteinformation->m_internal_from_root.$g_object_siteinformation->m_front_site_dir_name.$g_object_siteinformation->m_core_themeelements;
  1393.         
  1394.         $path_theme_elements_orig $racine_path.$core_theme_elements.$p_theme_from_plici_or_my."/".$p_site_reference.".php";
  1395.         $path_theme_elements_dest $racine_path.$core_theme_elements."my/".$p_dbname.".php";
  1396.  
  1397.  
  1398.  
  1399.         if (file_exists($view_dest&& !$is_after_site_created{
  1400.                     array_push($r_result['error']plici_lang('lang_error_directoryalreadyexist'array($view_dest)));
  1401.                     return $r_result;
  1402.         }
  1403. //        if (file_exists($path_for_theme_rewriting_dest) && !$is_after_site_created) {
  1404. //                    array_push($r_result['error'], plici_lang('lang_error_directoryalreadyexist', array($path_for_theme_rewriting_dest)));
  1405. //                    return $r_result;
  1406. //        }
  1407.         if (file_exists($path_theme_elements_dest&& !$is_after_site_created{
  1408.                     array_push($r_result['error']plici_lang('lang_error_directoryalreadyexist'array($path_theme_elements_dest)));
  1409.                     return $r_result;
  1410.         }
  1411. //        if (!file_exists($path_for_theme_rewriting_orig) && !$is_after_site_created) {
  1412. //                    array_push($r_result['error'], plici_lang('lang_error_directoryalreadyexist', array($path_for_theme_rewriting_dest)));
  1413. //                    return $r_result;
  1414. //        }
  1415.         if (!file_exists($path_theme_elements_orig&& !$is_after_site_created{
  1416.                     array_push($r_result['error']plici_lang('lang_error_directoryalreadyexist'array($path_theme_elements_dest)));
  1417.                     return $r_result;
  1418.         }
  1419.     
  1420. }
  1421.  
  1422. /**
  1423.  * Copy for making not inherited website
  1424.  *
  1425.  * @access private
  1426.  * @param string $view_dest 
  1427.  * @param array $r_result 
  1428.  * @param string $view_source 
  1429.  * @param string $directory_created_by_script 
  1430.  * @param string $p_site_reference 
  1431.  * @param string $p_dbname 
  1432.  * @param string $path_theme_elements_dest 
  1433.  * @param string $path_theme_elements_orig 
  1434.  * @param string $files_created_by_script 
  1435.  * @param string $p_theme_from_plici_or_my 
  1436.  * @param string $is_after_site_created 
  1437.  * @return bool TRUE on error
  1438.  */
  1439. function xCopyForMakingNotInheritWebSite($view_dest&$r_result$view_source
  1440.         &$directory_created_by_script/*$path_for_theme_rewriting_dest, $path_for_theme_rewriting_orig,*/
  1441.         $p_site_reference$p_dbname$path_theme_elements_dest$path_theme_elements_orig,
  1442.         &$files_created_by_script&$p_theme_from_plici_or_my$is_after_site_created false{
  1443.             
  1444.         $file_for_not_copy ($is_after_site_created?".dir_not_copy_when_theming_another_web_site":"");    
  1445.         $is_no_error_if_file_exist_and_no_overwrite $is_after_site_created;
  1446.         
  1447.         if (file_exists($view_dest&& !$is_after_site_created{
  1448.                     array_push($r_result['error']plici_lang('lang_error_directoryalreadyexist'array($view_dest)));
  1449.                     return $r_result;
  1450.         }
  1451.         if (net_copy($view_source$view_destarray()$file_for_not_copy$is_no_error_if_file_exist_and_no_overwrite)) {
  1452.             array_push($r_result['error']plici_lang('lang_error_directorycopy'array($view_source,$view_dest)));
  1453.             array_push($directory_created_by_script$view_dest);
  1454.             return $r_result;
  1455.         else {
  1456.             array_push($r_result['message']plici_lang('lang_str_copyfromto'array($view_source$view_dest )));
  1457.             array_push($directory_created_by_script$view_dest);
  1458.             //$files_created_by_script = array();
  1459.         }
  1460.         
  1461. //        // il faut créer le repertoire permettant le theme_rewriting car c'est un nouveau site 
  1462. //        if (file_exists($path_for_theme_rewriting_dest) && !$is_after_site_created) {
  1463. //                    array_push($r_result['error'], plici_lang('lang_error_directoryalreadyexist', array($path_for_theme_rewriting_dest)));
  1464. //                    return $r_result;
  1465. //        }
  1466. //        if (net_copy($path_for_theme_rewriting_orig, $path_for_theme_rewriting_dest, array(), $file_for_not_copy, $is_no_error_if_file_exist_and_no_overwrite)) {
  1467. //            array_push($r_result['error'], plici_lang('lang_error_directorycopy', array($path_for_theme_rewriting_orig, $path_for_theme_rewriting_dest))); 
  1468. //            array_push($directory_created_by_script, $path_for_theme_rewriting_dest);
  1469. //            return $r_result;
  1470. //        } else {
  1471. //            array_push($r_result['message'], plici_lang('lang_str_copyfromto', array($path_for_theme_rewriting_orig, $path_for_theme_rewriting_dest)));
  1472. //            array_push($directory_created_by_script, $path_for_theme_rewriting_dest);
  1473. //            //$files_created_by_script = array();
  1474. //        }
  1475.         
  1476.         
  1477.         // modification du .htaccess pour le nouveau thème
  1478. //        $parameters = array("/".$p_theme_from_plici_or_my."/".$p_site_reference."/" => "/".PLICI_MY_DIRECTORY."/".$p_dbname."/");
  1479. //        $array_for_replace_in_files = array($path_for_theme_rewriting_dest.".htaccess");
  1480. //        if (replace_in_files($array_for_replace_in_files, $parameters)) {
  1481. //            array_push($r_result['error'], plici_lang('lang_error_modifyingfile', array(implode(",", $array_for_replace_in_files)))); 
  1482. //            return $r_result;
  1483. //        } else {
  1484. //            array_push($r_result['message'], plici_lang('lang_str_replacingthisfile', array(implode(",", $array_for_replace_in_files)))); 
  1485. //        }
  1486.  
  1487.         // copie du fichier de theme_elements.php
  1488.         if (file_exists($path_theme_elements_dest&& !$is_after_site_created{
  1489.                     array_push($r_result['error']plici_lang('lang_error_directoryalreadyexist'array($path_theme_elements_dest)))
  1490.                     return $r_result;
  1491.         }
  1492.         if (copy($path_theme_elements_orig$path_theme_elements_dest=== FALSE){
  1493.             array_push($r_result['error']plici_lang('lang_error_directorycopy'array($path_theme_elements_orig$path_theme_elements_dest)))
  1494.             array_push($directory_created_by_script$path_theme_elements_dest);
  1495.             return $r_result;
  1496.         else {
  1497.             array_push($r_result['message']plici_lang('lang_str_copyfromto'array($path_theme_elements_orig$path_theme_elements_dest)));
  1498.             array_push($files_created_by_script$path_theme_elements_dest);
  1499.         }
  1500.     
  1501. }
  1502. /*
  1503.  * 
  1504.  *         return 
  1505.  *                 array(
  1506.  *                         'error' => liste des erreurs,
  1507.  *                         'message' => message positif,
  1508.  *                         'user_pass' => mot de passe de l'utilisateur pour l'interface d'administration,
  1509.  *                         'view_dest_path' => répertoire physique contenant le nouveau site
  1510.  *                     )
  1511.  *                 
  1512.  * 
  1513.  */
  1514.  
  1515. /**
  1516.  * Create a new PLICI website
  1517.  *
  1518.  * @param string $p_domainename 
  1519.  * @param string $p_site_reference 
  1520.  * @param string $p_duplicate_template    'Y','N'
  1521.  * @param string $p_is_ecommerce        'Y','N'
  1522.  * @param string $p_user_name 
  1523.  * @param string $p_user_prenom 
  1524.  * @param string $p_user_login 
  1525.  * @param string $p_user_email 
  1526.  * @param string $p_host 
  1527.  * @param string $p_dbname 
  1528.  * @param string $p_login 
  1529.  * @param string $p_pass 
  1530.  * @return bool TRUE on error
  1531.  */
  1532. function createNewWebSite(    $p_domainename/*OK*/
  1533.                             $p_site_reference/*OK*/
  1534.                             $p_duplicate_template/*OK*/
  1535.                             $p_is_ecommerce/*OK*/,
  1536.                             $p_user_name/*OK*/
  1537.                             $p_user_prenom/*OK*/
  1538.                             $p_user_login/*OK*/
  1539.                             $p_user_email/*OK*/,
  1540.                             $p_host/*OK*/
  1541.                             $p_dbname/*OK*/
  1542.                             $p_login/*OK*/
  1543.                             $p_pass/*OK*/{
  1544.  
  1545.     $directory_created_by_script array();
  1546.     $files_created_by_script array();
  1547.  
  1548.     if!ini_get('safe_mode') ) @set_time_limit(999);
  1549.     ignore_user_abort(true);
  1550.  
  1551.                                     
  1552.     $return_value $this->xCreateNewWebSite($p_domainename/*OK*/
  1553.                             $p_site_reference/*OK*/
  1554.                             $p_duplicate_template/*OK*/
  1555.                             $p_is_ecommerce/*OK*/,
  1556.                             $p_user_name/*OK*/
  1557.                             $p_user_prenom/*OK*/
  1558.                             $p_user_login/*OK*/
  1559.                             $p_user_email/*OK*/,
  1560.                             $p_host/*OK*/
  1561.                             $p_dbname/*OK*/
  1562.                             $p_login/*OK*/
  1563.                             $p_pass/*OK*/,
  1564.                             $directory_created_by_script,
  1565.                             $files_created_by_script);
  1566.  
  1567.     
  1568.     if (sizeof($return_value['error'])>0{
  1569.             // rollback files en directory created
  1570.             net_rmdir($directory_created_by_script);
  1571.             foreach($files_created_by_script as $value{
  1572.                 @unlink($value);
  1573.             }
  1574.             // rollback blocking request
  1575.             global $g_object_loader;
  1576.             if (isset($g_object_loader&& (sizeof($directory_created_by_script0)) {
  1577.                     $object_dbconnexion =$g_object_loader->getDbConnexion();
  1578.                     $parameters array($p_domainename$this->getDbcSitenamePrefixForLocal().$p_domainename$p_dbname);
  1579.                     $result_not_used "";
  1580.                     $object_dbconnexion->makeSqlQuery(
  1581.                                     "delete from databaseconnect where (dbc_sitename='%s' or dbc_sitename='%s') and dbc_dbname='%s' ;",
  1582.                                     $parameters$result_not_used);
  1583.             }
  1584.     }
  1585.     if!ini_get('safe_mode') ) @set_time_limit(30);
  1586.     ignore_user_abort(false);
  1587.     
  1588.     return $return_value;
  1589. }
  1590.  
  1591. /**
  1592.  * Create a new web site
  1593.  * 
  1594.  * @access private
  1595.  *
  1596.  * @param string $p_domainename 
  1597.  * @param string $p_site_reference 
  1598.  * @param string $p_duplicate_template 
  1599.  * @param string $p_is_ecommerce 
  1600.  * @param string $p_user_name 
  1601.  * @param string $p_user_prenom 
  1602.  * @param string $p_user_login 
  1603.  * @param string $p_user_email 
  1604.  * @param string $p_host 
  1605.  * @param string $p_dbname 
  1606.  * @param string $p_login 
  1607.  * @param string $p_pass 
  1608.  * @param string $directory_created_by_script 
  1609.  * @param string $files_created_by_script 
  1610.  * @return bool TRUE on error
  1611.  */
  1612. function xCreateNewWebSite(    $p_domainename/*OK*/
  1613.                             $p_site_reference/*OK*/
  1614.                             $p_duplicate_template/*OK*/
  1615.                             $p_is_ecommerce/*OK*/,
  1616.                             $p_user_name/*OK*/
  1617.                             $p_user_prenom/*OK*/
  1618.                             $p_user_login/*OK*/
  1619.                             $p_user_email/*OK*/,
  1620.                             $p_host/*OK*/
  1621.                             $p_dbname/*OK*/
  1622.                             $p_login/*OK*/
  1623.                             $p_pass/*OK*/,
  1624.                             &$directory_created_by_script,
  1625.                             &$files_created_by_script{
  1626.  
  1627.     $r_result array('error'=>array()'message'=>array());
  1628.     
  1629.     global $g_object_loader;
  1630.     
  1631.     
  1632.     $p_duplicate_template strtoupper($p_duplicate_template);
  1633.     $p_is_ecommerce strtoupper($p_is_ecommerce);
  1634.     
  1635.     if (trim($p_domainename== ""
  1636.         || trim($p_site_reference== ""
  1637.         || (trim($p_duplicate_template!= 'Y' && trim($p_duplicate_template!= 'N')
  1638.         || (trim($p_is_ecommerce!= 'Y' && trim($p_is_ecommerce!= 'N')
  1639.         || trim($p_user_login== ""
  1640.         || trim($p_host== ""
  1641.         || trim($p_dbname== ""
  1642.         || trim($p_login== "" || (trim($p_login== $this->m_dbc_dblogin_value_for_alias
  1643.         /*|| trim($p_pass) == "" STEF : allow empty pass*/
  1644.         {
  1645.             array_push($r_result['error']plici_lang('lang_error_emptyvalue'))
  1646.  
  1647.             return $r_result;
  1648.     
  1649.  
  1650.  
  1651.     $directory_created_by_script array();
  1652.     $files_created_by_script array();
  1653.  
  1654.     //$object_tbousers =& $g_object_loader->getTBoUsers();
  1655. /**
  1656.  * Include "internal_components/admin_sites/t_bo_users/t_bo_users.class.php"
  1657.  */
  1658. require_once("internal_components/admin_sites/t_bo_users/t_bo_users.class.php");
  1659.     
  1660.     if ($this->xIsNotValidDbcSitename($p_domainename)) {
  1661.             array_push($r_result['error']plici_lang('lang_error_domainename'))
  1662.             return $r_result;
  1663.     }
  1664.     $temp_result_set "";
  1665.     $this->getOneDatabaseconnect($temp_result_set$p_domainename);
  1666.     $domain_already_exist false;
  1667.     
  1668.     if (sizeof($temp_result_set0{
  1669.         $domain_already_exist true;
  1670.     }
  1671.     
  1672.     if ($domain_already_exist{
  1673.             array_push($r_result['error']plici_lang('lang_error_domainenamealreadyused'));
  1674.             return $r_result;
  1675.     }
  1676.     
  1677.     if (TBoUsers::xIsNotValidBusPrenom($p_user_prenom)){
  1678.             array_push($r_result['error']plici_lang('lang_error_firstname'));
  1679.             return $r_result;
  1680.     }
  1681.     if (TBoUsers::xIsNotValidBusNom($p_user_name)) {
  1682.             array_push($r_result['error']plici_lang('lang_error_name'));
  1683.             return $r_result;
  1684.     }
  1685.     if (TBoUsers::xIsNotValidBusEmail($p_user_email)) {
  1686.             array_push($r_result['error']plici_lang('lang_error_email'));
  1687.             return $r_result;
  1688.     
  1689.  
  1690.  
  1691.     if (TBoUsers::xIsNotValidBusNick($p_user_login)) {
  1692.             array_push($r_result['error']plici_lang('lang_error_userlogin'));
  1693.             return $r_result;
  1694.     }
  1695.     if ($this->xIsNotValidDbcDbhost($p_host)) {
  1696.             array_push($r_result['error']plici_lang('lang_error_host'));
  1697.             return $r_result;
  1698.     }
  1699.     if ($this->xIsNotValidDbcDblogin($p_login)) {
  1700.             array_push($r_result['error']plici_lang('lang_error_databaselogin'));
  1701.             return $r_result;
  1702.     }
  1703.     if ($this->isNotValidDbcDbname($p_dbname)) {
  1704.             array_push($r_result['error']plici_lang('lang_error_databasename'));
  1705.             return $r_result;
  1706.     }
  1707.     if ($this->xIsNotValidDbcDbpass($p_pass)) {
  1708.             array_push($r_result['error']plici_lang('lang_error_databasepass'));
  1709.             return $r_result;
  1710.     }
  1711.     if ($this->xIsNotValidDbcEcommerce($p_is_ecommerce)) {
  1712.             array_push($r_result['error']plici_lang('lang_error_ecommercestatus'));
  1713.             return $r_result;
  1714.     }
  1715.     if ($this->xIsNotValidDbcInheritedSitename($p_site_reference)) {
  1716.             array_push($r_result['error']plici_lang('lang_error_inheritedsitename'));
  1717.             return $r_result;
  1718.     }
  1719.  
  1720.     
  1721.  
  1722.     global $_PLICI_CFG;
  1723.      $racine_path                 $_PLICI_CFG['racine_web'];
  1724.     $extension_to_copy_in_bd_directory array("php"=>'OK',"sql"=>'OK');
  1725.     
  1726.     $p_user_name strtoupper($p_user_name);
  1727.     
  1728.  
  1729.     global $g_object_siteinformation;
  1730.  
  1731.     if (file_exists($racine_path.$g_object_siteinformation->m_view_from_root.PLICI_FOR_PLICI_DIRECTORY."/".$p_site_reference))
  1732.         $theme_from_plici_or_my PLICI_FOR_PLICI_DIRECTORY;
  1733.     else
  1734.         $theme_from_plici_or_my PLICI_MY_DIRECTORY;
  1735.  
  1736.  
  1737.     // test d'existance des répertoires qui vont être créés
  1738.     $database_directory_src     $racine_path."/".$g_object_siteinformation->m_bd_from_root.$theme_from_plici_or_my."/".$p_site_reference."/";
  1739.     $database_directory_dest     $racine_path."/".$g_object_siteinformation->m_bd_from_root.PLICI_MY_DIRECTORY."/".$p_dbname."/";
  1740.  
  1741.  
  1742.  
  1743.     $view_dest             $racine_path.$g_object_siteinformation->m_view_from_root.PLICI_MY_DIRECTORY."/".$p_dbname.'/';
  1744.     $view_source         $racine_path.$g_object_siteinformation->m_view_from_root.$theme_from_plici_or_my."/".$p_site_reference."/";
  1745.  
  1746.  
  1747.     $r_result['view_dest_path'$view_dest;
  1748.  
  1749.     if (file_exists($database_directory_dest)) {
  1750.             array_push($r_result['error']plici_lang('lang_error_databasedirectoryexist'));
  1751.             return $r_result;
  1752.     }
  1753.     if ($p_duplicate_template == "Y"{
  1754.         
  1755. //        $path_for_theme_rewriting_orig     = "";
  1756. //        $path_for_theme_rewriting_dest     = "";
  1757.         $core_theme_elements             "";
  1758.         $path_theme_elements_orig         "";
  1759.         $path_theme_elements_dest         "";
  1760.         $this->xVerifyForMakingNotInheritWebSite($racine_path$p_site_reference$p_dbname$view_dest,
  1761.                  $r_result/*$path_for_theme_rewriting_orig, $path_for_theme_rewriting_dest,*/
  1762.                  $core_theme_elements$path_theme_elements_orig$path_theme_elements_dest$theme_from_plici_or_my);
  1763.         if (sizeof($r_result['error'])>0)
  1764.             return $r_result;
  1765.                  
  1766.     else {
  1767.         if (file_exists($view_dest)) {
  1768.                     array_push($r_result['error']plici_lang('lang_error_directoryalreadyexist'array($view_dest)));
  1769.                     return $r_result;
  1770.         }
  1771.             
  1772.     }
  1773.  
  1774.  
  1775.     // !! ATTENTION !! pour créer un site à partir d'un autre on ne doit pas tapper dans la BD 
  1776.     //                    seuls des scripts doivent permettre de créer
  1777.     //                    mais on peut créer directement en BD
  1778.     
  1779.     
  1780.     /****************
  1781.      *     @DONE : -> copier les répertoires de la base de donnée
  1782.      *****************/ 
  1783.     
  1784.     if (file_exists($database_directory_dest)) {
  1785.             array_push($r_result['error']plici_lang('lang_error_databasedirectoryexist'));
  1786.             return $r_result;
  1787.     }
  1788.  
  1789.     if (net_copy($database_directory_src$database_directory_dest$extension_to_copy_in_bd_directory)) {
  1790.             array_push($r_result['error']plici_lang('lang_error_directorycopy'array($database_directory_src$database_directory_dest)))
  1791.             return $r_result;
  1792.     else {
  1793.             array_push($r_result['message']plici_lang('lang_str_copyfromto'array($database_directory_src$database_directory_dest)));
  1794.             array_push($directory_created_by_script$database_directory_dest);
  1795.             //$files_created_by_script = array();
  1796.  
  1797.     }
  1798.  
  1799.  
  1800.     $to_execute array();
  1801.  
  1802.     /****************
  1803.      *     @DONE : -> Copie de la partie VIEW
  1804.      *****************/ 
  1805.  
  1806.     // on copie un site entièrement, on ne veut pas d'héritage
  1807.     
  1808.     if ($p_duplicate_template == "Y"{
  1809.         
  1810.         
  1811.         $this->xCopyForMakingNotInheritWebSite($view_dest$r_result$view_source
  1812.         $directory_created_by_script/*$path_for_theme_rewriting_dest, $path_for_theme_rewriting_orig,*/
  1813.         $p_site_reference$p_dbname$path_theme_elements_dest$path_theme_elements_orig,
  1814.         $files_created_by_script$theme_from_plici_or_my);
  1815.         if (sizeof($r_result['error'])>0)
  1816.             return $r_result;
  1817.         
  1818.     else {
  1819.         if (file_exists($view_dest)) {
  1820.                     array_push($r_result['error']plici_lang('lang_error_directoryalreadyexist'array($view_dest)))
  1821.                     return $r_result;
  1822.         }
  1823.         if (net_copy($view_source$view_destarray())) {
  1824.             array_push($r_result['error']plici_lang('lang_error_directorycopy'array($view_source$view_dest)))
  1825.             return $r_result;
  1826.         }else {
  1827.             array_push($r_result['message']plici_lang('lang_str_copyfromto'array($view_source$view_dest)))
  1828.             array_push($directory_created_by_script$view_dest);
  1829.         }
  1830.     }
  1831.  
  1832.  
  1833.     /****************
  1834.      *     @DONE : -> renommage du répertoire d'administration
  1835.      *****************/ 
  1836.     $caracts_for_password "abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ0123456789";
  1837.     $new_admin_directory $g_object_siteinformation->m_admin_site_prefix.generatePassword(6$caracts_for_password);
  1838.  
  1839.     $template_admin_source $view_dest.getAdminDirectory($p_dbname)."/";
  1840.     $template_admin_dest   $view_dest.$new_admin_directory."/";
  1841.     rename($template_admin_source$template_admin_dest);
  1842.     
  1843.     
  1844.     /****************
  1845.      *     @DONE : -> Ajout de l'utilisateur pour l'administration
  1846.      *****************/ 
  1847.          $user_unique_id generateUniqueId();
  1848.          $user_password generatePassword(8$caracts_for_password);
  1849.          $r_result['user_pass'$user_password;
  1850.         array_push($to_executearray(    "type" => "sql",
  1851.                                         "data" => "delete from t_bo_users_has_t_bo_group where bubg_bgr_id <> 1;",
  1852.                                         "parameters" => array("")
  1853.                     ))
  1854.         array_push($to_executearray(    "type" => "sql",
  1855.                                         "data" => "INSERT INTO t_bo_users_has_t_bo_group ( bubg_bgr_id , bubg_bus_id )VALUES ('2', '%s');",
  1856.                                         "parameters" => array($user_unique_id)
  1857.                     ))
  1858.         array_push($to_executearray(    "type" => "sql",
  1859.                                         "data" => "delete from t_bo_users ;",
  1860.                                         "parameters" => array()
  1861.                     ))
  1862.         array_push($to_executearray(    "type" => "sql",
  1863.                                         "data" => "INSERT INTO t_bo_users ( bus_id , bus_nick , bus_password , bus_prenom , bus_nom , bus_email )" .
  1864.                                                 " VALUES ('%s', '%s', '%s', '%s', '%s', '%s');",
  1865.                                         "parameters" => array($user_unique_id$p_user_loginmd5($user_password)$p_user_prenom$p_user_name$p_user_email)
  1866.                     ))
  1867.  
  1868.  
  1869.     /****************
  1870.      *     @DONE : -> ajout dans database connect de la nouvelle database et ajout du script
  1871.      *****************/ 
  1872.  
  1873.     
  1874.     array_push($to_executearray(    "type" => "sql_admin",
  1875.                                     "data" => "delete from databaseconnect where (dbc_sitename='%s' or dbc_sitename='%s') and dbc_dbname='%s' ;",
  1876.                                     "parameters" => array($p_domainename$this->getDbcSitenamePrefixForLocal().$p_domainename$p_dbname
  1877.                 ))
  1878.     
  1879.     array_push($to_executearray(    "type" => "sql_admin",
  1880.                                     "data" => "insert into databaseconnect " .
  1881.                                             "(dbc_sitename , dbc_dbname ,dbc_dblogin , dbc_dbpass,dbc_inherited_sitename,dbc_ecommerce, dbc_dbhost, dbc_group)  " .
  1882.                                             "VALUES " .
  1883.                                             "('%s', '%s', '%s', '%s', '%s', '%s', '%s', NULL );",
  1884.                                     "parameters" => array($p_domainename$p_dbname$p_login$p_pass($p_duplicate_template == 'Y'?'':$p_site_reference)$p_is_ecommerce$p_host)
  1885.                 ));
  1886.     
  1887.     array_push($to_executearray(    "type" => "sql_admin",
  1888.                                     "data" => "insert into databaseconnect " .
  1889.                                                 "(dbc_sitename , dbc_dbname ,dbc_dblogin , dbc_dbpass,dbc_inherited_sitename,dbc_ecommerce, dbc_dbhost, dbc_group)  " .
  1890.                                                 "VALUES " .
  1891.                                                 "('%s', '%s', '%s', '%s', '%s', '%s', '%s', NULL );",
  1892.                                     "parameters" => array($this->getDbcSitenamePrefixForLocal().$p_domainename$p_dbname$this->m_dbc_dblogin_value_for_alias$this->m_dbc_dblogin_value_for_alias$this->m_dbc_dblogin_value_for_alias$this->m_dbc_dblogin_value_for_alias$this->m_dbc_dblogin_value_for_alias)
  1893.                 ));
  1894.  
  1895.                 
  1896.                 
  1897.  
  1898.     /****************
  1899.      *     @DONE : -> on supprime les informations (page, produits, etc...) si c'est un héritage
  1900.      *****************/ 
  1901.     if ($p_duplicate_template == "N"{
  1902.         array_push($to_executearray(    "type" => "php",
  1903.                                         "data" => '<?php  
  1904. /**
  1905.  * Include $_path_for_php_function_includes."_methods.php3"
  1906.  */
  1907. include_once($_path_for_php_function_includes."_methods.php3");
  1908.                                                     $request = "SELECT page_id from t_page where page_type=\'US\' order by page_lb;";
  1909.                                                     $result_high_level = plici_methods_mysql_query($request);
  1910.                                                     while ($row = mysql_fetch_row($result_high_level)) {
  1911.                                                         deletePage($row[0]);
  1912.                                                     }
  1913.  
  1914.                                                     $request = "SELECT bmbg_bo_menu_id FROM  `t_bo_menu_has_t_bo_group` WHERE bmbg_bgr_id = 1;";
  1915.                                                     $result = plici_methods_mysql_query($request);
  1916.                                                     while ($row = mysql_fetch_row($result)) {
  1917.                                                         $request_in = "REPLACE INTO `t_bo_menu_has_t_bo_group`(bmbg_bo_menu_id, bmbg_bgr_id) VALUES(\'".$row[0]."\', 2);";
  1918.                                                         $result_in = plici_methods_mysql_query($request_in);
  1919.                                                     }
  1920.  
  1921.                                                     ?'.'>',
  1922.                                         "parameters" => array(
  1923.                     ))
  1924.         array_push($to_executearray(    "type" => "sql",
  1925.                                         "data" => "delete  from t_ray_has_t_productmaster ;",
  1926.                                         "parameters" => array(
  1927.                     ))
  1928.         array_push($to_executearray(    "type" => "sql",
  1929.                                         "data" => "delete  from t_keyword ;",
  1930.                                         "parameters" => array(
  1931.                     ))
  1932.         array_push($to_executearray(    "type" => "sql",
  1933.                                         "data" => "delete  from t_productmaster;",
  1934.                                         "parameters" => array(
  1935.                     ))
  1936.         array_push($to_executearray(    "type" => "sql",
  1937.                                         "data" => "delete  from t_productlinked;",
  1938.                                         "parameters" => array(
  1939.                     ))
  1940.         array_push($to_executearray(    "type" => "sql",
  1941.                                         "data" => "delete  from t_customer_has_t_productmaster;",
  1942.                                         "parameters" => array(
  1943.                     ))
  1944.         array_push($to_executearray(    "type" => "sql",
  1945.                                         "data" => "delete  from t_productmodifier;",
  1946.                                         "parameters" => array(
  1947.                     ))
  1948.         array_push($to_executearray(    "type" => "php",
  1949.                                         "data" => '<?php  
  1950. /**
  1951.  * Include $_path_for_php_function_includes."_methods.php3"
  1952.  */
  1953. include_once($_path_for_php_function_includes."_methods.php3");
  1954.                                                         $array_list_id_to_delete = array();
  1955.                                                 
  1956.                                                         $request = "select psl_pic_id_medium, psl_pic_id_little, psl_pic_id_full from t_productslave;";
  1957.                                                         $result_high_level = plici_methods_mysql_query($request);
  1958.                                                         while ($row = mysql_fetch_row($result_high_level)) {
  1959.                                                             array_push($array_list_id_to_delete, $row[0]);
  1960.                                                             array_push($array_list_id_to_delete, $row[1]);
  1961.                                                             array_push($array_list_id_to_delete, $row[2]);
  1962.                                                         }
  1963.                                                         
  1964.                                                         if (sizeof($array_list_id_to_delete) > 0) {
  1965.                               $request = "delete from t_picture where pic_id in (".implode(",", $array_list_id_to_delete).");";
  1966.                                                           $result_high_level = plici_methods_mysql_query($request);
  1967.                                                         }
  1968.                                                         
  1969.                                                 ?'.'>',
  1970.                                         "parameters" => array(
  1971.                     ))
  1972.         array_push($to_executearray(    "type" => "sql",
  1973.                                         "data" => "delete  from t_productslave;",
  1974.                                         "parameters" => array(
  1975.                     ))
  1976.         array_push($to_executearray(    "type" => "sql",
  1977.                                         "data" => "delete  from t_attributvalue;",
  1978.                                         "parameters" => array(
  1979.                     ))
  1980.         array_push($to_executearray(    "type" => "sql",
  1981.                                         "data" => "delete  from t_attribut;",
  1982.                                         "parameters" => array(
  1983.                     ))
  1984.  
  1985.         array_push($to_executearray(    "type" => "sql",
  1986.                                         "data" => "delete  from t_searchedwords;",
  1987.                                         "parameters" => array(
  1988.                     ))
  1989.  
  1990.         array_push($to_executearray(    "type" => "sql",
  1991.                                         "data" => "delete  from t_customer;",
  1992.                                         "parameters" => array(
  1993.                     ))
  1994.  
  1995.         array_push($to_executearray(    "type" => "sql",
  1996.                                         "data" => "delete  from t_address;",
  1997.                                         "parameters" => array(
  1998.                     ))
  1999.  
  2000.         array_push($to_executearray(    "type" => "sql",
  2001.                                         "data" => "delete  from t_order;",
  2002.                                         "parameters" => array(
  2003.                     ))
  2004.  
  2005.         array_push($to_executearray(    "type" => "sql",
  2006.                                         "data" => "delete  from t_orderdetail;",
  2007.                                         "parameters" => array(
  2008.                     ))
  2009.  
  2010.         array_push($to_executearray(    "type" => "sql",
  2011.                                         "data" => "delete  from t_session;",
  2012.                                         "parameters" => array(
  2013.                     ))
  2014.  
  2015.         array_push($to_executearray(    "type" => "sql",
  2016.                                         "data" => "delete  from t_shoppingcart;",
  2017.                                         "parameters" => array(
  2018.                     ))
  2019.  
  2020.         array_push($to_executearray(    "type" => "sql",
  2021.                                         "data" => "update t_picture set pic_filename = concat('%s', pic_filename);",
  2022.                                         "parameters" => array("ext/".$theme_from_plici_or_my."/".$p_site_reference."/")
  2023.                     ))
  2024.         array_push($to_executearray(    "type" => "sql",
  2025.                                         "data" => "REPLACE INTO `z_phpmv_site` ( `idsite` , `name` , `logo` , `params_choice` , `params_names` ) VALUES ( 1, '%s', 'pixel.gif', 'all', '' ) ;",
  2026.                                         "parameters" => array("simcp"//@TODO@ Put the real name for site
  2027.                     ))
  2028.         array_push($to_executearray(    "type" => "sql",
  2029.                                         "data" => "REPLACE INTO `z_phpmv_site_url` ( `idsite_url` , `idsite` , `url` ) VALUES ( 1, 1, '%s' ) ;",
  2030.                                         "parameters" => array("http://www.simpliciweb.net"//@TODO@ Put the real url for site
  2031.                     ))
  2032.     }
  2033.  
  2034.     /****************
  2035.      *     @DONE : -> Si c'est un site ecommerce, on indique en bd que c'est en bien un pour le choix des menus
  2036.      *****************/ 
  2037.     if ($p_is_ecommerce == "N"{
  2038.         array_push($to_executearray(    "type" => "php",
  2039.                                         "data" => '<?php  
  2040.                                                     
  2041.                                                         /*
  2042.                                                          *         deplacement des pages pour obtenir un site de contenu
  2043.                                                          * 
  2044.                                                          */
  2045.                                                     
  2046. /**
  2047.  * Include $_path_for_php_function_includes."_methods.php3"
  2048.  */
  2049. include_once($_path_for_php_function_includes."_methods.php3");
  2050.                                                     
  2051.                                                     
  2052.                                                         moveByUid(\'SHOPPING_CART\', \'TRASH_PAGE\');
  2053.                                                         moveByUid(\'SALES_AGREEMENT\', \'TRASH_PAGE\');
  2054.                                                         
  2055.                                                     ?'.'>',
  2056.                                         "parameters" => array()
  2057.                     ))
  2058.     }
  2059.     ;
  2060.  
  2061.     /****************
  2062.      *     @DONE : -> Lancement de tous les scripts SQL et PHP contenu dans  $to_execute
  2063.      *****************/ 
  2064.     
  2065.     $array_string_for_file array();
  2066.     $object_dbconnexion =$g_object_loader->getDbConnexion();
  2067.     foreach($to_execute as $value{
  2068.  
  2069.         // formatage de la requete
  2070.         $sql_query_formated $object_dbconnexion->formatAndProtectRequest($value['parameters']$value['data']);
  2071.  
  2072.         // stockage dans une string pour écriture dans fichier
  2073.         if (!isset($array_string_for_file[$value['type']]))
  2074.             $array_string_for_file[$value['type']] "";
  2075.         $array_string_for_file[$value['type']] .= $sql_query_formated."\n";
  2076.     }
  2077.  
  2078.     global $_3d6f_loc_extention_already_done;
  2079.     
  2080.     // write file for all types
  2081.     $array_rules_for_writing array(
  2082.                                         array(    "type" => "sql_admin",
  2083.                                                 "file" => $racine_path.'/'.$g_object_siteinformation->m_bd_from_root.PLICI_MY_DIRECTORY."/admin_super/"."9_xxxx_new_web_site_".$p_dbname.".sql"
  2084.                                                 ),
  2085.                                         array(    "type" => "sql",
  2086.                                                 "file" => $database_directory_dest."9_xxxxa_new_web_site.sql"$array_string_for_file['sql']
  2087.                                                 ),
  2088.                                         array(    "type" => "php",
  2089.                                                 "file" => $database_directory_dest."9_xxxxb_new_web_site.php"$array_string_for_file['php']
  2090.                                                 ),
  2091.                                     );
  2092.     foreach($array_rules_for_writing as $value{    
  2093.         if (isset($array_string_for_file[$value['type']])) {
  2094.             if (file_exists($value['file'].$_3d6f_loc_extention_already_done))
  2095.                 @unlink($value['file'].$_3d6f_loc_extention_already_done);
  2096.             if (net_file_put_contents($value['file']$array_string_for_file[$value['type']])) {
  2097.                 array_push($r_result['error']plici_lang('lang_error_creatingfile'array($value['file'])))
  2098.                 return $r_result;
  2099.             else {
  2100.             array_push($r_result['message']plici_lang('lang_str_creatingfile'array($value['file'])))
  2101.             }
  2102.             
  2103.         }
  2104.     }
  2105.  
  2106.  
  2107.     // re-charge la database admin_plici
  2108.     ob_start();
  2109.     if (run_db_directory($_PLICI_CFG$_PLICI_CFG['superadmin_databasename']))
  2110.         array_push($r_result['message']ob_get_contents());
  2111.     else
  2112.         array_push($r_result['error']ob_get_contents());
  2113.     ob_end_clean();
  2114.     
  2115.     // charger la nouvelle database pour le site internet
  2116.     ob_start();
  2117.     if (run_db_directory($_PLICI_CFG$p_dbname))
  2118.         array_push($r_result['message']ob_get_contents());
  2119.     else
  2120.         array_push($r_result['error']ob_get_contents());
  2121.     ob_end_clean();
  2122.  
  2123.     
  2124.     /*****************
  2125.      *     @DONE : -> create symbolync link if needed
  2126.      ******************/
  2127.      /*
  2128.     if ($_PLICI_CFG['can_use_symbolic_link'] == 'on') {
  2129.         if (!createSymbolicLinkMyWebSite($p_dbname, $new_admin_directory, false)) {
  2130.             array_push($r_result['error'], plici_lang('lang_error_creatingsymlink', array("$p_dbname, $new_admin_directory")));
  2131.             return $r_result;
  2132.         }
  2133.         
  2134.         if (!createThemeRewritingSymbolicLink(false)) {
  2135.             array_push($r_result['error'], plici_lang('lang_error_creatingsymlink', array("themerewriting")));
  2136.             return $r_result;
  2137.         }
  2138.         
  2139.         if (!createPictureExtSymbolicLink(false)) {
  2140.             array_push($r_result['error'], plici_lang('lang_error_creatingsymlink', array("externals pictures")));
  2141.             return $r_result;
  2142.         }
  2143.         
  2144.         
  2145.     }
  2146.     */
  2147.     /*****************
  2148.      *     @DONE : -> deleting cache files (help if already exist)
  2149.      ******************/
  2150.      
  2151.      deleteCompleteCacheForWebSite($p_dbname$racine_pathfalse);
  2152.      //deleteCacheForMyDatabase($p_dbname, $racine_path, false);
  2153.  
  2154.     /*****************
  2155.      *     @DONE : -> geting coders informations :)
  2156.      ******************/
  2157.  
  2158.  
  2159.     $r_result['database_directory'$database_directory_dest;
  2160.     $r_result['template_directory'$view_dest.$g_object_siteinformation->m_tpl_not_compiled_file;
  2161.     $r_result['picture_directory'$view_dest.$g_object_siteinformation->m_picture_directory_name;
  2162.  
  2163.  
  2164.     $database_directory_src     $racine_path."/".$g_object_siteinformation->m_bd_from_root.$p_site_reference."/";
  2165.  
  2166.     $r_result['core_internal_components_front_sites_directory'$racine_path.$g_object_siteinformation->m_internal_from_root.$g_object_siteinformation->m_front_site_dir_name;
  2167.  
  2168.  
  2169.  
  2170.     //if (isset($path_for_theme_rewriting_dest))
  2171.     //    $r_result['themerewriting_directory'] = $path_for_theme_rewriting_dest;
  2172.     
  2173.     if (isset($path_theme_elements_dest))
  2174.         $r_result['theme_elements_file'$path_theme_elements_dest;
  2175.         
  2176.     $r_result['entrees_directory'$racine_path.$g_object_siteinformation->m_entrees_from_root.$g_object_siteinformation->m_front_site_dir_name.PLICI_MY_DIRECTORY."/";
  2177.     
  2178.  
  2179.  
  2180.     return $r_result;
  2181.  
  2182.  
  2183. }    
  2184.  
  2185.     // Valid if database can be enter in group
  2186.     function xIsNotValidNewGroup($p_new_group$p_databasename)
  2187.     {
  2188.         // Declare allow website var
  2189.         $allow_master_group array();
  2190.  
  2191.         // Get allow master website
  2192.         $this->getAvailableGroup($allow_master_group);
  2193.  
  2194.         // Get slave for this website
  2195.         $website_slave array();
  2196.         $this->getWebSiteGroupSlave($website_slave$p_databasename);
  2197.  
  2198.         if (   
  2199.                 (!in_array($p_new_group$allow_master_group)) // New group must exist and not have slave
  2200.             || ($p_new_group==$p_databasename// Can be group of itself
  2201.             || ($p_databasename==$_PLICI_CFG['superadmin_databasename']// Can be group of super admin
  2202.             || (0<count($website_slave)) // This website have slave
  2203.             
  2204.         {
  2205.             return true;
  2206.         }
  2207.  
  2208.         // Return no error code
  2209.         return false;
  2210.     }
  2211.  
  2212.     /**
  2213.      * Get All Available group
  2214.      *
  2215.      * @param array $r_result 
  2216.      * @return bool TRUE on error
  2217.      */
  2218.     function getAvailableGroup(&$r_result)
  2219.     {
  2220.         if ($this->xGetWebSiteGroup($r_result"IS NULL"))
  2221.             return true;
  2222.  
  2223.         // Add possibility of no group
  2224.         array_unshift($r_result"");
  2225.  
  2226.         // Return no error code
  2227.         return false;
  2228.     }
  2229.     /**
  2230.      * Get Website group slave for current site
  2231.      *
  2232.      * @param array $r_result 
  2233.      * @param string $p_website_selected 
  2234.      * @return bool TRUE on error
  2235.      */
  2236.     function getWebSiteGroupSlave(&$r_result$p_website_selected=NULL)
  2237.     {
  2238.         if (is_null($p_website_selected))
  2239.         {
  2240.             global $g_object_siteinformation;
  2241.             $p_website_selected $g_object_siteinformation->getDatabaseSiteName();
  2242.         }
  2243.         return $this->xGetWebSiteGroup($r_result"='".$p_website_selected."'");
  2244.     }
  2245.  
  2246.     /**
  2247.      * Return website group function of condition
  2248.      *
  2249.      * @access private
  2250.      * @param array $r_result 
  2251.      * @param string $p_condition 
  2252.      * @return bool TRUE on error
  2253.      */
  2254.     function xGetWebSiteGroup(&$r_result$p_condition)
  2255.     {
  2256.         // Set result to empty
  2257.         $r_result array();
  2258.  
  2259.         // Declare request
  2260.         $request $this->req_get_groups;
  2261.  
  2262.         // Set request parameter
  2263.         $parameters array();
  2264.  
  2265.         // Add param to this request
  2266.         $request str_replace("@@condition@@"$p_condition$request);
  2267.  
  2268.         // Declare database request result
  2269.         $result "";
  2270.  
  2271.         // Execute request
  2272.         if ($this->m_object_dbconnexion->makeSqlQueryAdminSuper($request$parameters$result)) {
  2273.             return onErrorThrow(trueplici_lang("lang_error_internal"));
  2274.         }
  2275.  
  2276.         // Arrange result
  2277.         while ($row mysql_fetch_row($result)) {
  2278.             $r_result[$row[0];
  2279.         }
  2280.  
  2281.         // Return no error code
  2282.         return false;
  2283.     }
  2284.  
  2285.  
  2286.     /**
  2287.      * Update group for one website database
  2288.      *
  2289.      * @param string $p_new_group 
  2290.      * @param string $p_databasename 
  2291.      * @return bool TRUE on error
  2292.      */
  2293.     function updateGroup($p_new_group$p_databasename)
  2294.     {
  2295.         global $g_object_loader;
  2296.  
  2297.         // Load object
  2298.         $object_page =$g_object_loader->getTPage();
  2299.  
  2300.         // Valid input
  2301.         if ($this->xIsNotValidNewGroup($p_new_group$p_databasename))
  2302.         {
  2303.             return onErrorThrow(true,plici_lang("lang_error_internal"));
  2304.         }
  2305.  
  2306.         // Get current group information
  2307.         $database_information array();
  2308.         if ($this->getDbcByDbcDbname(array($p_databasename)$database_information))
  2309.             return true;
  2310.         // We recieve an array => Get the one element
  2311.         $database_information array_shift($database_information);
  2312.  
  2313.         if ($database_information['dbc_group'== $p_new_group)
  2314.         {
  2315.             // No change, the new group is egal to current group
  2316.         else {
  2317.             // Set request var
  2318.             $request $this->req_update_group;
  2319.  
  2320.             // Set request parameter
  2321.             $parameters array();
  2322.             if (0<strlen(trim($p_new_group)))
  2323.             {
  2324.                 //Become Slave
  2325.                 if (0<strlen(trim($database_information['dbc_group'])))
  2326.                 {
  2327.                     // Already slave
  2328.                     // Remove slave from old master
  2329.                     if ($object_page->removeDbcDbname($p_databasename$database_information['dbc_group'])) 
  2330.                     return true;
  2331.                     // Add slave in new master
  2332.                     if ($object_page->addDbcDbname($p_databasename$p_new_group))
  2333.                         return true;
  2334.     
  2335.                 else {
  2336.                     // New slave
  2337.                     // Add new slave to the selected master 
  2338.                     if ($object_page->addDbcDbname($p_databasename$p_new_group))
  2339.                         return true;
  2340.                     // Reset value for the new slave
  2341.                     if ($object_page->resetPageDbcDbnameListField($p_databasename))
  2342.                         return true;
  2343.                 }
  2344.                     
  2345.                 $request str_replace("@@VALUE@@""'%s'"$request);
  2346.                 $parameters[$p_new_group;
  2347.     
  2348.                 // Delete old menu
  2349.                 // Declare var
  2350.                 $sql_parameters array();
  2351.                 $sql_result "";
  2352.                 $sql_connection_id "";
  2353.                 
  2354.                     // Declare var 
  2355.                 $super_admin_connection "";
  2356.                 $database_connection_info array();
  2357.                 $database_connection "";
  2358.                     // Get connection to this database
  2359.                 $this->m_object_dbconnexion->getConnection($super_admin_connection$database_connection_info$p_databasename);
  2360.                 $database_connection $database_connection_info['dbc_connection'];
  2361.                 mysql_select_db($p_databasename$database_connection);
  2362.                 mysql_query("DELETE FROM t_bo_menu_has_t_bo_group WHERE 1<=bmbg_bgr_id AND bmbg_bo_menu_id IN ('".implode("','"$this->m_website_group_slave_menu_to_hide)."');"$database_connection);
  2363.             else {
  2364.                 // Become Master
  2365.  
  2366.                 if (0<strlen(trim($database_information['dbc_group'])))
  2367.                 {
  2368.                     // Slave => Master
  2369.                     if ($object_page->removeDbcDbname($p_databasename$database_information['dbc_group'])) 
  2370.                         return true;
  2371.                     // Reset value for the new master
  2372.                     if ($object_page->resetPageDbcDbnameListField($p_databasename))
  2373.                         return true;
  2374.                 }
  2375.     
  2376.                 $request str_replace("@@VALUE@@""NULL"$request);
  2377.     
  2378.                 // Add new menu
  2379.             }
  2380.             $parameters[$p_databasename;
  2381.     
  2382.             // Declare database request result
  2383.             $result "";
  2384.     
  2385.             // Execute request
  2386.             if ($this->m_object_dbconnexion->makeSqlQuery($request$parameters$result)) {
  2387.                 return onErrorThrow(trueplici_lang("lang_error_internal"));
  2388.             }
  2389.         }
  2390.  
  2391.         // Return no error code
  2392.         return false;
  2393.     }
  2394.  
  2395.  
  2396.  
  2397.  
  2398.     /**
  2399.      * Get site name for a selected database
  2400.      *
  2401.      * @param array $r_result 
  2402.      * @param string $p_databasename 
  2403.      * @return bool TRUE on error
  2404.      */
  2405.     function getSiteName(&$r_result$p_databasename)
  2406.     {
  2407.         // Set empty result
  2408.         $r_result "";
  2409.  
  2410.         // Valid input
  2411.         if ($this->isNotValidDbcDbname($p_databasename))
  2412.             return true;
  2413.  
  2414.             // Check cache
  2415.         if ($this->xIsRemembered("sitename_".$p_databasename$r_result)) {
  2416.  
  2417.         else {
  2418.             // Declare parameters var
  2419.             $parameters array();
  2420.             $parameters[$p_databasename;
  2421.  
  2422.             // Declare database request result
  2423.             $result "";
  2424.  
  2425.             // Execute request
  2426.             if ($this->m_object_dbconnexion->makeSqlQueryAdminSuper($this->req_select_sitename$parameters$result)) {
  2427.                 return onErrorThrow(trueplici_lang("lang_error_internal"));
  2428.             }
  2429.  
  2430.             // Arrange sql result
  2431.             while($row=mysql_fetch_row($result))
  2432.             {
  2433.                 $r_result $row[0];
  2434.             }
  2435.             // Add to cache
  2436.             $this->xRemember("sitename_".$p_databasename$r_result);
  2437.         }
  2438.  
  2439.         // Return no error code
  2440.         return false;
  2441.     }
  2442. }
  2443.  
  2444.     ?>

Documentation generated on Tue, 25 Mar 2008 15:34:02 +0100 by phpDocumentor 1.3.2