[ Index ]
 

Code source de Dolibarr 2.0.1

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/htdocs/includes/modules/ -> DolibarrModules.class.php (source)

   1  <?php
   2  /* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
   3   * Copyright (C) 2004 Sebastien Di Cintio  <sdicintio@ressource-toi.org>
   4   * Copyright (C) 2004 Benoit Mortier       <benoit.mortier@opensides.be>
   5   * Copyright (C) 2004 Eric Seigne          <eric.seigne@ryxeo.com>
   6   * Copyright (C) 2005 Laurent Destailleur  <eldy@users.sourceforge.net>
   7   *
   8   * This program is free software; you can redistribute it and/or modify
   9   * it under the terms of the GNU General Public License as published by
  10   * the Free Software Foundation; either version 2 of the License, or
  11   * (at your option) any later version.
  12   *
  13   * This program is distributed in the hope that it will be useful,
  14   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16   * GNU General Public License for more details.
  17   *
  18   * You should have received a copy of the GNU General Public License
  19   * along with this program; if not, write to the Free Software
  20   * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  21   *
  22   * $Id: DolibarrModules.class.php,v 1.35 2005/10/22 13:45:24 eldy Exp $
  23   * $Source: /cvsroot/dolibarr/dolibarr/htdocs/includes/modules/DolibarrModules.class.php,v $
  24   */
  25  
  26  /**
  27          \file       htdocs/includes/modules/DolibarrModules.class.php
  28          \brief      Fichier de description et activation des modules Dolibarr
  29  */
  30  
  31  
  32  /**
  33          \class      DolibarrModules
  34          \brief      Classe mère des classes de description et activation des modules Dolibarr
  35  */
  36  class DolibarrModules
  37  {
  38      var $db;         // Handler d'accès aux bases
  39  
  40      var $boxes;      // Tableau des boites
  41      var $const;      // Tableau des constantes
  42      var $rights;     // Tableau des droits
  43  
  44      var $dbversion;
  45  
  46  
  47      /**
  48       *      \brief      Constructeur
  49       *      \param      DB      handler d'accès base
  50       */
  51      function DolibarrModules($DB)
  52      {
  53          $this->db = $DB ;
  54          $this->dbversion = "-";
  55      }
  56  
  57  
  58      /**
  59       *      \brief      Fonction d'activation. Insère en base les constantes et boites du module
  60       *      \param      array_sql       tableau de requete sql a exécuter à l'activation
  61       *      \return     int             1 si ok, 0 si erreur
  62       */
  63      function _init($array_sql)
  64      {
  65          global $langs;
  66          $err='';
  67          
  68          // Insère une entrée dans llx_dolibarr_modules
  69          $err+=$this->_dbactive();
  70  
  71          // Insère la constante d'activation module
  72          $err+=$this->_active();
  73  
  74          // Insère les boites dans llx_boxes_def
  75          $err+=$this->insert_boxes();
  76          
  77          // Insère les constantes associées au module dans llx_const
  78          $err+=$this->insert_const();
  79  
  80          // Insère les permissions associées au module actif dans llx_rights_def
  81          $err+=$this->insert_permissions();
  82  
  83          // Créé les répertoires
  84          if (is_array($this->dirs))
  85          {
  86              foreach ($this->dirs as $key => $value)
  87              {
  88                  $dir = $value;
  89                  if ($dir && ! file_exists($dir))
  90                  {
  91                      umask(0);
  92                      if (! @mkdir($dir, 0755))
  93                      {
  94                          $this->error = $langs->trans("ErrorCanNotCreateDir",$dir);
  95                          dolibarr_syslog("DolibarrModules::_init error");
  96                          dolibarr_syslog("ErrorCanNotCreateDir $dir");
  97                      }
  98                  }
  99              }
 100          }
 101  
 102          // Exécute les requetes sql complémentaires
 103          for ($i = 0 ; $i < sizeof($array_sql) ; $i++)
 104          {
 105              if (! $this->db->query($array_sql[$i]))
 106              {
 107                  $err++;
 108              }
 109          }
 110  
 111          // Renvoi valeur de retour
 112          if ($err > 0) return 0;
 113          return 1;
 114      }
 115  
 116  
 117      /**     \brief      Fonction de désactivation. Supprime de la base les constantes et boites du module
 118       *      \param      array_sql       tableau de requete sql a exécuter à la désactivation
 119       *      \return     int             1 si ok, 0 si erreur
 120       */
 121      function _remove($array_sql)
 122      {
 123          $err = 0;
 124  
 125          // Supprime entrée des modules
 126          $err+=$this->_dbunactive();
 127  
 128          // Supprime la constante d'activation du module
 129          $err+=$this->_unactive();
 130  
 131          // Supprime les droits de la liste des droits disponibles
 132          $err+=$this->delete_permissions();
 133  
 134          // Supprime les boites de la liste des boites disponibles
 135          $err+=$this->delete_boxes();
 136  
 137          // Exécute les requetes sql complémentaires
 138          for ($i = 0 ; $i < sizeof($array_sql) ; $i++)
 139          {
 140              if (!$this->db->query($array_sql[$i]))
 141              {
 142                  $err++;
 143              }
 144          }
 145  
 146          // Renvoi valeur de retour
 147          if ($err > 0) return 0;
 148          return 1;
 149      }
 150  
 151  
 152      /**
 153          \brief      Retourne le nom traduit du module si la traduction existe dans admin.lang,
 154                      sinon le nom défini par défaut dans le module.
 155          \return     string      Nom du module traduit
 156      */
 157      function getName()
 158      {
 159          global $langs;
 160          $langs->load("admin");
 161  
 162          if ($langs->trans("Module".$this->numero."Name") != ("Module".$this->numero."Name"))
 163          {
 164              // Si traduction du nom du module existe
 165              return $langs->trans("Module".$this->numero."Name");
 166          }
 167          else
 168          {
 169              // Si traduction du nom du module n'existe pas, on prend définition en dur dans module
 170              return $this->name;
 171          }
 172      }
 173  
 174  
 175      /**
 176              \brief      Retourne la description traduite du module si la traduction existe dans admin.lang,
 177                          sinon la description définie par défaut dans le module.
 178              \return     string      Nom du module traduit
 179      */
 180      function getDesc()
 181      {
 182          global $langs;
 183          $langs->load("admin");
 184  
 185          if ($langs->trans("Module".$this->numero."Desc") != ("Module".$this->numero."Desc"))
 186          {
 187              // Si traduction de la description du module existe
 188              return $langs->trans("Module".$this->numero."Desc");
 189          }
 190          else
 191          {
 192              // Si traduction de la description du module n'existe pas, on prend définition en dur dans module
 193              return $this->description;
 194          }
 195      }
 196  
 197  
 198      /**
 199              \brief      Retourne la version du module.
 200                          Pour les modules à l'état 'experimental', retourne la traduction de 'experimental'
 201                          Pour les modules 'dolibarr', retourne la version de Dolibarr
 202                          Pour les autres modules, retourne la version du module
 203              \return     string      Version du module
 204      */
 205      function getVersion()
 206      {
 207          global $langs;
 208          $langs->load("admin");
 209  
 210          if ($this->version == 'experimental') return $langs->trans("VersionExperimental");
 211          elseif ($this->version == 'development') return $langs->trans("VersionDevelopment");
 212          elseif ($this->version == 'dolibarr') return DOL_VERSION;
 213          elseif ($this->version) return $this->version;
 214          else return $langs->trans("VersionUnknown");
 215      }
 216  
 217  
 218      /**
 219              \brief      Retourne la version en base du module.
 220              \return     string      Version du module
 221       */
 222      function getDbVersion()
 223      {
 224          global $langs;
 225          $langs->load("admin");
 226  
 227          $sql ="SELECT active_version FROM ".MAIN_DB_PREFIX."dolibarr_modules";
 228          $sql .= " WHERE numero=".$this->numero." AND active = 1";
 229  
 230          $resql = $this->db->query($sql);
 231  
 232          if ($resql)
 233          {
 234              $num = $this->db->num_rows($resql);
 235  
 236              if ($num > 0)
 237              {
 238                  $row = $this->db->fetch_row($resql);
 239  
 240                  $this->dbversion = $row[0];
 241              }
 242  
 243              $this->db->free($resql);
 244          }
 245          
 246          
 247          if ($this->version == 'experimental') return $langs->trans("VersionExperimental");
 248          elseif ($this->version == 'development') return $langs->trans("VersionDevelopment");
 249          elseif ($this->version == 'dolibarr') return DOL_VERSION;
 250          elseif ($this->version) return $this->version;
 251          else return "";
 252  
 253      }
 254  
 255  
 256      /**
 257              \brief      Insère ligne module
 258              \return     int     Nombre d'erreurs (0 si ok)
 259       */
 260      function _dbactive()
 261      {
 262          $err = 0;
 263  
 264          $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."dolibarr_modules WHERE numero=".$this->numero.";";
 265          $this->db->query($sql_del);
 266  
 267          $sql ="INSERT INTO ".MAIN_DB_PREFIX."dolibarr_modules (numero,active,active_date,active_version)";
 268          $sql .= " VALUES (";
 269          $sql .= $this->numero.",1,now(),'".$this->version."')";
 270  
 271          $this->db->query($sql);
 272  
 273          return $err;
 274      }
 275  
 276  
 277      /**
 278              \brief      Supprime ligne module
 279              \return     int     Nombre d'erreurs (0 si ok)
 280       */
 281      function _dbunactive()
 282      {
 283          $err = 0;
 284  
 285          $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."dolibarr_modules WHERE numero=".$this->numero.";";
 286          $this->db->query($sql_del);
 287  
 288          return $err;
 289      }
 290      
 291  
 292      /**
 293              \brief      Insère constante d'activation module
 294              \return     int     Nombre d'erreurs (0 si ok)
 295       */
 296      function _active()
 297      {
 298          $err = 0;
 299  
 300          $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = '".$this->const_name."';";
 301          $this->db->query($sql_del);
 302  
 303          $sql ="INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
 304          ('".$this->const_name."','1',0);";
 305          if (!$this->db->query($sql))
 306          {
 307              $err++;
 308          }
 309          
 310          return $err;
 311      }
 312      
 313      
 314      /**
 315              \brief      Supprime constante d'activation module
 316              \return     int     Nombre d'erreurs (0 si ok)
 317       */
 318      function _unactive()
 319      {
 320          $err = 0;
 321  
 322          $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = '".$this->const_name."';";
 323          $this->db->query($sql_del);
 324  
 325          return $err;
 326      }
 327  
 328  
 329      /**
 330              \brief      Insère les boites associées au module dans llx_boxes_def
 331              \return     int     Nombre d'erreurs (0 si ok)
 332       */
 333      function insert_boxes()
 334      {
 335          $err=0;
 336  
 337          foreach ($this->boxes as $key => $value)
 338          {
 339              $titre = $this->boxes[$key][0];
 340              $file  = $this->boxes[$key][1];
 341  
 342              $sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."boxes_def WHERE name ='".$titre."'";
 343  
 344              $result=$this->db->query($sql);
 345              if ($result)
 346              {
 347                  $row = $this->db->fetch_row($result);
 348                  if ($row[0] == 0)
 349                  {
 350                      $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes_def (name, file) VALUES ('".$titre."','".$file."')";
 351                      if (! $this->db->query($sql))
 352                      {
 353                          $err++;
 354                      }
 355                  }
 356              }
 357              else
 358              {
 359                  $err++;
 360              }
 361          }
 362          
 363          return $err;
 364      }
 365  
 366  
 367      /**
 368              \brief      Supprime les boites
 369              \return     int     Nombre d'erreurs (0 si ok)
 370       */
 371      function delete_boxes()
 372      {
 373          $err=0;
 374          
 375          foreach ($this->boxes as $key => $value)
 376          {
 377              $titre = $this->boxes[$key][0];
 378              $file  = $this->boxes[$key][1];
 379  
 380              $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def WHERE file = '".$file."'";
 381              if (! $this->db->query($sql) )
 382              {
 383                  $err++;
 384              }
 385          }
 386      
 387          return $err;
 388      }
 389  
 390      /**
 391              \brief      Insère les constantes associées au module dans llx_const
 392              \return     int     Nombre d'erreurs (0 si ok)
 393       */
 394      function insert_const()
 395      {
 396          $err=0;
 397          
 398          foreach ($this->const as $key => $value)
 399          {
 400              $name   = $this->const[$key][0];
 401              $type   = $this->const[$key][1];
 402              $val    = $this->const[$key][2];
 403              $note   = $this->const[$key][3];
 404              $visible= $this->const[$key][4];
 405  
 406              $sql = "SELECT count(*) FROM ".MAIN_DB_PREFIX."const WHERE name ='".$name."'";
 407  
 408              $result=$this->db->query($sql);
 409              if ($result)
 410              {
 411                  $row = $this->db->fetch_row($result);
 412  
 413                  if ($row[0] == 0)
 414                  {
 415                      if (! $visible) $visible='0';
 416                      if (strlen($note))
 417                      {
 418                          $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,value,note,visible) VALUES ('$name','$type','$val','$note','$visible');";
 419                      }
 420                      elseif (strlen($val))
 421                      {
 422                          $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,value,visible) VALUES ('$name','$type','$val','$visible');";
 423                      }
 424                      else
 425                      {
 426                          $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,visible) VALUES ('$name','$type','$visible');";
 427                      }
 428  
 429                      if (! $this->db->query($sql) )
 430                      {
 431                          $err++;
 432                      }
 433                  }
 434              }
 435              else
 436              {
 437                  $err++;
 438              }
 439          }
 440          
 441          return $err;
 442      }
 443      
 444      /**
 445              \brief      Insère les permissions associées au module dans llx_rights_def
 446              \return     int     Nombre d'erreurs (0 si ok)
 447       */
 448      function insert_permissions()
 449      {
 450          $err=0;
 451  
 452          //print $this->rights_class." ".sizeof($this->rights)."<br>";
 453  
 454          // Test si module actif
 455          $sql_del = "SELECT value FROM ".MAIN_DB_PREFIX."const WHERE name = '".$this->const_name."';";
 456          $resql=$this->db->query($sql_del);
 457          if ($resql) {
 458              
 459              $obj=$this->db->fetch_object($resql);
 460              if ($obj->value) {
 461                  
 462                  // Si module actif
 463                  foreach ($this->rights as $key => $value)
 464                  {
 465                      $r_id       = $this->rights[$key][0];
 466                      $r_desc     = $this->rights[$key][1];
 467                      $r_type     = $this->rights[$key][2];
 468                      $r_def      = $this->rights[$key][3];
 469                      $r_perms    = $this->rights[$key][4];
 470                      $r_subperms = $this->rights[$key][5];
 471                      $r_modul    = $this->rights_class;
 472          
 473                      if (strlen($r_perms) )
 474                      {
 475                          if (strlen($r_subperms) )
 476                          {
 477                              $sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def ";
 478                              $sql .= " (id, libelle, module, type, bydefault, perms, subperms)";
 479                              $sql .= " VALUES ";
 480                              $sql .= "(".$r_id.",'".addslashes($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."','".$r_subperms."');";
 481                          }
 482                          else
 483                          {
 484                              $sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def ";
 485                              $sql .= " (id, libelle, module, type, bydefault, perms)";
 486                              $sql .= " VALUES ";
 487                              $sql .= "(".$r_id.",'".addslashes($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."');";
 488                          }
 489                      }
 490                      else
 491                      {
 492                          $sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def ";
 493                          $sql .= " (id, libelle, module, type, bydefault)";
 494                          $sql .= " VALUES ";
 495                          $sql .= "(".$r_id.",'".addslashes($r_desc)."','".$r_modul."','".$r_type."',".$r_def.");";
 496                      }
 497          
 498                      $resql=$this->db->query($sql);
 499                      if (! $resql)
 500                      {
 501                          if ($this->db->errno() != "DB_ERROR_RECORD_ALREADY_EXISTS") {
 502                              $err++;
 503                          }
 504                      }
 505                  }
 506              }
 507          }
 508          
 509          return $err;
 510      }
 511  
 512  
 513      /**
 514              \brief      Supprime les permissions
 515              \return     int     Nombre d'erreurs (0 si ok)
 516       */
 517      function delete_permissions()
 518      {
 519          $err=0;
 520          
 521          $sql = "DELETE FROM ".MAIN_DB_PREFIX."rights_def WHERE module = '".$this->rights_class."';";
 522          if (!$this->db->query($sql))
 523          {
 524              $err++;
 525          }
 526  
 527          return $err;
 528      }
 529  
 530  }
 531  ?>


Généré le : Mon Nov 26 12:29:37 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics