[ Index ]
 

Code source de SPIP Agora 1.4

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/Agora1-4/ecrire/include/bd/ -> metier.php (source)

   1  <?php
   2  /*****************************************************
   3  * This file is part of Agora, web based content management system.
   4  *
   5  * Agora is free software; you can redistribute it and/or modify
   6  * it under the terms of the GNU General Public License as published by
   7  * the Free Software Foundation; version 2 of the License.
   8  *
   9  * Agora is distributed in the hope that it will be useful,
  10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  * GNU General Public License for more details (file "COPYING").
  13  *
  14  * Copyright © Arnaud Martin, Antoine Pitrou et Philippe Rivière.
  15  * List of authors detailed in "copyright_fr.html" file.
  16  * E-mail : agora@sig.premier-ministre.gouv.fr
  17  * Web site : http://www.agora.gouv.fr
  18  *****************************************************/
  19  // Base class for any business persistence abstraction.
  20  // $Id$
  21  
  22  require_once("PEAR.php");
  23  
  24  require_once (dirname(__FILE__). "/DBManager.php");
  25  require_once (dirname(__FILE__). "/../date.php");
  26  require_once (dirname(__FILE__). "/parameters.php");
  27  
  28  if (file_exists(dirname(__FILE__). "/../../mes_options.php")) {
  29      require_once (dirname(__FILE__). "/../../mes_options.php");
  30  }
  31  else {
  32      $GLOBALS['table_prefix'] = 'spip';
  33  }
  34  
  35  if (!file_exists(dirname(__FILE__). "/inc_config_metier.php")) {
  36      require_once (dirname(__FILE__). "/inc_config_metier_install.php");
  37  }
  38  else {
  39      require_once (dirname(__FILE__). "/inc_config_metier.php");
  40  }
  41  
  42  /**
  43   * BD_metier is a base class for all business persistence abstraction implementations, and must be
  44   * inherited by all such.
  45   * @package    BD
  46   * @author  Antoine Angenieux <aangenieux@clever-age.com>
  47   * @author     Erwan Le Bescond <elebescond@clever-age.com>
  48   * @access    public
  49   */
  50  
  51  class BD_metier {
  52      // {{{ properties
  53  
  54      /**
  55       * Parameters instance used for PEAR::DB factory and
  56       * Metier subclasses factories.
  57       *
  58       * @access private
  59       */
  60      var $_dbParameters;
  61  
  62      /**
  63       * DB options array used for PEAR::DB options.
  64       *
  65       * @access private
  66       */
  67      var $_dbOptions = false;
  68  
  69      /**
  70       * DB_NestedSet tehcnical manipulation object
  71       * @var DB_NestedSet_DB
  72       * @access private
  73       */
  74      var $_nestedSet;
  75  
  76      var $nestedset_params = array('id_mot' => 'id', 'id_root' => 'rootid', 'l' => 'l', 'r' => 'r',
  77                              'streh' => 'norder', 'level_mot' => 'level',
  78      /* Correction S.PETIT - omansour*/
  79                              'titre' => 'name', 'descriptif' => 'descriptif', 'texte' => 'texte', 'extra' => 'extra',
  80                              'id_groupe' => 'id_groupe', 'type_mot' => 'type_mot'
  81      /* fin correction */
  82                                  );
  83  
  84      var $nestedset_node_table;
  85  
  86      var $nestedset_lock_table;
  87  
  88      var $nestedset_sequence_table;
  89  
  90      var $nestedset_secondary_sort = "titre";
  91  
  92      var $nestedset_debug = false;
  93  
  94      // }}}
  95  
  96  	function BD_metier () {
  97          $this->nestedset_node_table = $GLOBALS['table_prefix']. "_mots";
  98          $this->nestedset_lock_table = $GLOBALS['table_prefix']. "_lock_mots";
  99      }
 100      // {{{ getDbParameters()
 101  
 102      /**
 103       * Getter method to retreive the instance Parameters object
 104       *
 105       * @return      DB parameters
 106       * @access      public
 107       */
 108  
 109  	function getDbParameters () {
 110          return $this->_dbParameters;
 111      }
 112  
 113      // }}}
 114  
 115      // {{{ setDbParameters()
 116  
 117      /**
 118       * Setter method to set the instance Parameters object
 119       *
 120       * @param $dbParameters     new DB parameters
 121       */
 122  
 123  	function setDbParameters ($dbParameters) {
 124          if (strtolower(get_class($dbParameters)) == "bd_parameters") {
 125              $this->_dbParameters = $dbParameters;
 126          }
 127          else {
 128              return PEAR::raiseError(
 129                         "Erreur! le parametre de la methode setDbParameters doit etre un objet de la hierarchie DB_parameters !",
 130                         null,
 131                         null,
 132                         null,
 133                         null,
 134                         null,
 135                         false);
 136          }
 137      }
 138  
 139      // }}}
 140  
 141      // {{{ getDbParameters()
 142  
 143      /**
 144       * Getter method to retreive the instance Options array
 145       *
 146       * @return      array
 147       * @access      public
 148       */
 149  
 150  	function getDbOptions () {
 151          return $this->_dbOptions;
 152      }
 153  
 154      // }}}
 155  
 156      // {{{ setDbOptions()
 157  
 158      /**
 159       * Setter method to set the instance Parameters object
 160       *
 161       * @param array     array of PEAR::DB options
 162       */
 163  
 164  	function setDbOptions ($dbOptions) {
 165          $this->_dbOptions = $dbOptions;
 166      }
 167  
 168      // }}}
 169  
 170      // {{{ _traiteQuery()
 171  
 172      /**
 173       * This protected method is used to keep SPIP compatibility.
 174       * This is the method where table prefixes must be handled.
 175       *
 176       * @param $query        The SQL query that must be "SPIP"ed
 177       * @return              String representing the modified SQL query
 178       *
 179       */
 180  
 181      /* obsolete maintenant */
 182  
 183  	function _traiteQuery ($query) {
 184          if ($GLOBALS['mysql_rappel_connexion']AND $db = $this->_dbParameters->_dbName) {
 185              $db = '`' . $db . '`.';
 186          }
 187  
 188          // changer les noms des tables ($table_prefix)
 189          if (eregi('[[:space:]](VALUES|WHERE)[[:space:]].*$', $query, $regs)) {
 190              $suite = $regs[0];
 191              $query = substr($query, 0, -strlen($suite));
 192          }
 193  
 194          $query = ereg_replace('([[:space:],])' . $GLOBALS['table_prefix']. '_',
 195                                '\1' . $db . $GLOBALS['table_prefix']. '_',
 196                                $query). $suite;
 197  
 198          return $query;
 199      }
 200  
 201      // }}}
 202  
 203      // {{{ _getDB()
 204  
 205      /**
 206       * Protected method used to get an PEAR::DB instance
 207       * using the parameters stored in the _dbParameters field
 208       *
 209       * @return      Newly creating PEAR::DB object
 210       *              according to the instance parameters
 211       * @access private
 212       */
 213      function &_getDB ($dbParameters = null) {
 214          require_once("PEAR.php");
 215  
 216          if ($dbParameters == null) {
 217              $DBManager = &DBManager::getDBManager($this->_dbParameters->getDSN(), $this->_dbOptions);
 218              $db = $DBManager->getDB($this->_dbParameters->getDSN(), $this->_dbOptions);
 219          }
 220          else {
 221              $DBManager = &DBManager::getDBManager($dbParameters->getDSN(), $this->_dbOptions);
 222              $db = $DBManager->getDB($dbParameters->getDSN(), $this->_dbOptions);
 223          }
 224  
 225          return $db;
 226      }
 227  
 228      // }}}
 229  
 230      // {{{ _getNestedSetInstance()
 231  
 232      /**
 233       * This method returns a configured ready-to-use DB_NestedSet/NestedSet instance
 234       *
 235       * @access private
 236       * @return NestedSet instance
 237       */
 238  
 239      function &_getNestedSetInstance () {
 240          $db = &$this->_getDB();
 241  
 242          $this->nestedset_node_table = $GLOBALS['table_prefix']. "_mots";
 243          $this->nestedset_lock_table = $GLOBALS['table_prefix']. "_lock_mots";
 244          $this->nestedset_sequence_table = $GLOBALS['table_prefix']. "_mots";
 245  
 246          require_once dirname(__FILE__). "/NestedSetHelper/NestedSet.php";
 247          $nestedSet = &new NestedSetHelper_NestedSet($db, $this->nestedset_params);
 248  
 249          $nestedSet->node_table = &$this->nestedset_node_table;
 250          $nestedSet->lock_table = &$this->nestedset_lock_table;
 251          $nestedSet->sequence_table = &$this->nestedset_sequence_table;
 252          $nestedSet->secondarySort = &$this->nestedset_secondary_sort;
 253          $nestedSet->debug = &$this->nestedset_debug;
 254  
 255          return $nestedSet;
 256      }
 257  
 258      // }}}
 259  
 260      // {{{ _pearIncluded()
 261  
 262      /**
 263       * Protected method used to check whether we are 
 264       * in the fast pear-less mode.
 265       *
 266       * @return      true if PEAR has been included, false otherwise
 267       * @access private
 268       */
 269  	function _pearIncluded () {
 270          if (defined('PEAR_OS'))
 271              return true;
 272          else
 273              return false;
 274      }
 275  
 276      // }}}
 277  
 278      // {{{
 279  
 280      //C"est la copie de la methode de inc_filtres. A voir comment
 281      //merger les deux (attention a la difference par rapport a la gestion des metas)
 282      // Corrige les caracteres degoutants utilises par les Windozeries
 283  	function corriger_caracteres ($texte) {
 284          static $trans;
 285  
 286          if (!$trans) {
 287              // 145,146,180 = simple quote ; 147,148 = double quote ; 150,151 = tiret long
 288              $trans['iso-8859-1'] = array(chr(146)=> "'", chr(180)=> "'", chr(147)=> '&#8220;', chr(148)=> '&#8221;',
 289                                     chr(150)=> '-', chr(151)=> '-', chr(133)=> '...');
 290              $trans['utf-8'] = array(chr(194). chr(146)=> "'", chr(194). chr(180)=> "'", chr(194). chr(147)=> '&#8220;',
 291                                chr(194). chr(148)=> '&#8221;', chr(194). chr(150)=> '-', chr(194). chr(151)=> '-',
 292                                chr(194). chr(133)=> '...');
 293          }
 294          /* On utilise le cache des metas */
 295          global $meta;
 296  
 297          if (isset($meta)) {
 298              $charset = $meta['charset'];
 299          }
 300          else {
 301              require_once (dirname(__FILE__). "/inc_meta_factory.php");
 302              $metaMetier = &recuperer_instance_meta();
 303              $loadOK = $metaMetier->load('charset');
 304  
 305              if (PEAR::isError($loadOK)) {
 306                  die ($loadOK->getMessage());
 307              }
 308              $charset = $metaMetier->getValeur();
 309          }
 310  
 311          if (!$trans[$charset])
 312              return $texte;
 313  
 314          if ($GLOBALS['flag_strtr2'])
 315              return strtr($texte, $trans[$charset]);
 316  
 317          reset ($trans[$charset]);
 318  
 319          while (list($from, $to) = each($trans[$charset]))
 320              $texte = str_replace($from, $to, $texte);
 321  
 322          return $texte;
 323      }
 324  
 325      // {{{
 326  
 327  	function corriger_null ($texte) {
 328          if (is_null($texte) || $texte == 'NULL') {
 329              return '';
 330          }
 331          else {
 332              return $texte;
 333          }
 334      }
 335  
 336      // }}}
 337  
 338      // {{{
 339  
 340      /** Mise à jour en cascade des objets liés à celui-ci lors de changement de statut. 
 341       */
 342  	function updateRelatedObjects () {
 343          $rubriqueMetier = &recuperer_instance_rubrique();
 344  
 345          $parent_rubrique_updated = false;
 346  
 347          // Changement de statut
 348          if (count($this->_statutsHisto)) { // le statut a change
 349  
 350              // -- Mise à jour de la rubrique contenant cet objet
 351              $rubriqueMetier->load($this->getRubriqueId());
 352              $parent_rubrique_updated = $rubriqueMetier->checkStatutDateAndUpdate($rubriqueMetier->getRubriqueId());
 353          }
 354  
 355          // Changement de date
 356          if ((count($this->_datesHisto))and (!$parent_rubrique_updated)) { // la date a changee ... ok on la verifie
 357              $rubriqueMetier->load($this->getRubriqueId());
 358              $dateCalcul = $rubriqueMetier->getDateFromRubrique($rubriqueMetier->getRubriqueId());
 359              $dateRubrique = new Date($rubriqueMetier->getDate());
 360              if (Date::compare($dateCalcul, $dateRubrique) != 0) {
 361                  $rubriqueMetier->setDate($dateCalcul->getDate());
 362                  // $rubriqueMetier->update(); 
 363                  $rubriqueMetier->update(); // va enclencher la recursivite
 364              }
 365          }
 366  
 367          $rubriqueIds = array();
 368          // detection du changement de rubrique pour les objets différents des rubriques
 369          $rubriqueIds[] = array();
 370  
 371          if (isset($this->_rubriqueIdsHisto)) {
 372              $rubriqueIds = $this->getRubriqueIdsHisto();
 373              $rubriqueIds[] = $this->getRubriqueId();
 374          }
 375  
 376          $rubriqueIds = array_unique($rubriqueIds);
 377  
 378          // changement de rubriques 
 379          if (count($rubriqueIds) > 1) { // on a change de rubrique
 380              // echo 'on a change de rubrique'; 
 381              foreach ($rubriqueIds as $rubId) {
 382                  $update = false;
 383                  $rubriqueMetier->load($rubId);
 384                  $update = $rubriqueMetier->checkStatutDateAndUpdate($rubriqueMetier->getRubriqueId());
 385                  if ($update) {
 386                  // $rubriqueMetier->update();
 387                      }
 388                  else { // update du parent mais .... pourquoi ? 
 389                      if ($rubriqueMetier->getParentId() > 0) {
 390                          $rubriqueMetierParent = &recuperer_instance_rubrique();
 391                          $rubriqueMetierParent->load($rubriqueMetier->getParentId()); // charge la rubrique parente
 392                          $rubriqueMetierParent->checkStatutDateAndUpdate($rubriqueMetier->getParentId());
 393                      }
 394                  }
 395              }
 396          }
 397  
 398          unset ($rubriqueMetier);
 399      }
 400  
 401      // }}}
 402  
 403      // {{{
 404  
 405      /** Renvoie l'URL vers la page de l'objet 
 406       * @param      bool     $edit      Url vers la page de consultation ($edit == false) ou d'édition ($edit == true)
 407       * @return     string
 408       * @abstract   Cette méthode doit être surchargée dans les classes descendantes de bd_metier.
 409       */
 410  	function getUrl ($edit = false) {
 411          if (get_class($this) == 'bd_metier') {
 412              trigger_error('Cette méthode doit être surchargée dans les classes descendantes de bd_metier.',
 413                            E_WARNING);
 414          }
 415      }
 416  
 417      // }}}
 418  
 419      // {{{
 420  
 421  	function accept (&$renderer) {
 422          $renderer->visit($this);
 423      }
 424  
 425      // }}}
 426  
 427      // {{{ getChildObject($objectname)
 428      /**  
 429       * @param string objectname
 430       * @return object
 431       * @abstract revoie un object métier selon le parametre passé - peut être appelé statiquement
 432       */
 433  
 434  	function getChildObject ($objectname) {
 435  
 436          // les articles
 437          if (strpos($objectname, 'article') !== false) {
 438              include_once (dirname(__FILE__). '/inc_article_factory.php');
 439              $obj = &recuperer_instance_article();
 440              return $obj;
 441          }
 442  
 443          // les breves
 444          if (strpos($objectname, 'breve') !== false) {
 445              include_once (dirname(__FILE__). '/inc_breve_factory.php');
 446              $obj = &recuperer_instance_breve();
 447              return $obj;
 448          }
 449  
 450          // les rubriques
 451          if (strpos($objectname, 'rubrique') !== false) {
 452              include_once (dirname(__FILE__). '/inc_rubrique_factory.php');
 453              $obj = &recuperer_instance_rubrique();
 454              return $obj;
 455          }
 456  
 457          // les auteurs
 458          if (strpos($objectname, 'auteur') !== false) {
 459              include_once (dirname(__FILE__). '/inc_auteur_factory.php');
 460              $obj = &recuperer_instance_auteur();
 461              return $obj;
 462          }
 463  
 464          // les mots
 465          if (strpos($objectname, 'mot') !== false) {
 466              include_once (dirname(__FILE__). '/inc_mot_factory.php');
 467              $obj = &recuperer_instance_mot();
 468              return $obj;
 469          }
 470  
 471          // les sites
 472          if ((strpos($objectname, 'site') !== false)or (strpos($objectname, 'syndic') !== false)) {
 473              include_once (dirname(__FILE__). '/inc_syndic_factory.php');
 474              $obj = &recuperer_instance_syndic();
 475              return $obj;
 476          }
 477  
 478          // cas par défaut : 
 479          return PEAR::raiseError("impossible de créer un objet avec $objectname", null, null, null, null, null, false);
 480      }
 481  
 482      // {{{ ImportUpdate()
 483  
 484      /**
 485       * Replace one row in DB, used when importing xml data
 486       * Called by inc_import.php
 487       * @param array $from
 488           * @param array $to
 489       * @access  public
 490       * @return  Boolean
 491       */
 492  
 493  	function ImportUpdate ($type, $from, $to) {
 494          $db = &$this->_getDB();
 495  
 496          if (DB::isError($db)) {
 497              spip_log ("Erreur 1 [" . get_class($this). " DB_metier : ImportUpdate()] " . $db->getMessage());
 498              return PEAR::raiseError("[" . get_class($this). " DB_metier : ImportUpdate()] " . $db->getMessage(). "",
 499                                      null,
 500                                      null,
 501                                      null,
 502                                      null,
 503                                      null,
 504                                      false);
 505          }
 506  
 507          $query = "REPLACE " . $GLOBALS['table_prefix']. "_$type (" . join(',',
 508                                                                            $from). ') VALUES (' . join(',', $to). ')';
 509          $result = $db->query($query);
 510  
 511          if (DB::isError($result)) {
 512              spip_log
 513                  ("Erreur 2 [" . get_class(
 514                                      $this). " DB_metier : ImportUpdate()] " . print_r($result, 1). ",query = $query");
 515              return PEAR::raiseError($result->getMessage(), null, null, null, null, null, false);
 516          }
 517          else {
 518              return true;
 519          }
 520      }
 521      // }}}
 522  
 523      // {{{ Insert()
 524  
 525      /**
 526       * Insert rows in DB, used when importing xml data
 527       * Called by inc_import.php
 528       * @param string $from
 529           * @param string $to
 530       * @access  public
 531       * @return  Boolean
 532       * exemple INSERT INTO spip_articles_liens ($id, id_$type_lien) VALUES (1,2),(2,7)
 533       */
 534  
 535  	function Insert ($type, $from, $to) {
 536          $db = &$this->_getDB();
 537  
 538          if (DB::isError($db)) {
 539              spip_log ("Erreur 1 [" . get_class($this). " DB_metier : Insert()] " . $db->getMessage());
 540              return PEAR::raiseError("[" . get_class($this). " DB_metier : Insert()] " . $db->getMessage(). "", null,
 541                                      null, null,
 542                                      null, null,
 543                                      false);
 544          }
 545  
 546          $query = "INSERT INTO " . $GLOBALS['table_prefix']. "_$type $from VALUES $to ";
 547          $result = $db->query($query);
 548  
 549          if (DB::isError($result)) {
 550              spip_log
 551                  ("Erreur 2 [" . get_class($this). " DB_metier : Insert()] " . $result->getMessage(). ",query = $query");
 552              return false;
 553          }
 554          else {
 555              return true;
 556          }
 557      }
 558  // }}}
 559  // }}}
 560  }
 561  ?>


Généré le : Sat Feb 24 14:40:03 2007 par Balluche grâce à PHPXref 0.7