Source for file class.scale.php
Documentation is available at class.scale.php 
 * @author linea21 <info@linea21.com>  
 * @license http://opensource.org/licenses/gpl-3.0.html  
  var $DEPTH_TABLE =  array (); // tableau contenant les profondeurs d'échelles  
  var $SON_TABLE =  array (); // tableau contenant les fils d'échelles  
  var $ALL_REC =  array (); // tableau contenant les fils d'échelles  
  public function __call($method, $arguments)  
    $event =  $this->dispatcher->notifyUntil(new sfEvent($this, 'scale.extensible_function', array(  
      'arguments' =>  $arguments  
    if (!$event->isProcessed())  
      throw  new Exception(sprintf('Call to undefined method %s::%s.', get_class($this), $method)); 
    return $event->getReturnValue();  
   * scale::CheckDataIntegrity()  
   * Vérification des données d'une echelle  
   * @param array $table_scale : contient les composants d'une echelle  
   * @return boolean si vrai renvoie true sinon message d'erreurs (string)  
    $notdenomination =  _t('scale','object_notdenomination');  
    $notnumsurface =  _t('scale','object_notnumsurface');  
    $notnuminhabitants =  _t('scale','object_notnuminhabitants');  
    $notroot =  _t('scale','object_notroot');  
    if (strlen($table_scale[0]) <  2) return $notdenomination;  
    if (trim($table_scale[1]) !=  '' &&  !is_numeric($table_scale[1])) return $notnumsurface;  
    if (trim($table_scale[2]) !=  '' &&  !is_numeric($table_scale[2])) return $notnuminhabitants;  
    if (!is_numeric($table_scale[3]) ||  $table_scale[3] == - 1) return $notroot;  
   * obtention de la profondeur max d'une échelle ( par rapport a ses filles  
   * @param  $id : identifiant de l'échelle courante  
   * @return array $return_table contennat profondeur et échelle d'exclusion  
    $requete =  "SELECT scale_dependencies FROM " .  $this->TDB_SCALE .  " WHERE scale_id='" .  $this->ID .  "';";  
    $result =  $sql_object->DBSelect($requete);  
    $return_table["exclusion"] =  $this->SON_TABLE;  
   * scale::getScaleDepthAndSon()  
   * obtention des fils et profondeur ( récursif ) par rapport à une échelle données  
   * stockage dans des tableaux respectifs.  
   * @param  $table Ensemble des échelles  
   * @param  $id échelle courante  
    for($i =  0; $i <  count($table); $i++ ) {  
      $current_dep =  $table[$i]['scale_dependencies'];  
      $current_root =  $table[$i]['scale_root'];  
      $current_id =  $table[$i]['scale_id'];  
      if ($id ==  $current_root) {  
   * Obtention de toutes les échelles.  
    $requete =  "SELECT scale_dependencies, scale_id, scale_root FROM " .  $this->TDB_SCALE .  ";";  
    $this->ALL_REC =  $sql_object->DBSelect($requete);  
   * @param array $table_scale contient les composants d'une echelle  
   * @param object $sql_object   
   * @return integer $last_id  
  function AddScale($table_scale, $sql_object)  
    $table_scale= $sql_object->DBescape($table_scale);  
    if (strlen($table_scale[0]) >  1) {  
    } else return $notdenomination;  
    if (trim($table_scale[1]) ==  '') {  
    if (trim($table_scale[2]) ==  '') {  
      $this->ROOT =  $table_scale[3];  
    if ($table_scale[5] !=  '') {  
      switch ($table_scale[5]) {  
          $this->STATUT =  $table_scale[5];  
          $this->STATUT =  $table_scale[5];  
    // On Determine le rang de l'échelle  
    $requete =  "SELECT scale_dependencies FROM " .  $this->TDB_SCALE .  " WHERE scale_id=" .  $this->ROOT .  ";";  
    $result =  $sql_object->DBSelect($requete);  
    $requete =  "INSERT INTO " .  $this->TDB_SCALE .  " (scale_denomination, scale_surface, scale_inhabitantsnumber, scale_root, scale_comment, " .  "scale_dependencies, scale_statut, scale_date_crea) " .  "VALUES('" .  $this->DENOMINATION .  "', " .  $this->SURFACE .  ", " .  $this->INHABITANTSNUM .  ", " .  $this->ROOT .  ", '" .  $this->COMMENT .  "', " .  $this->DEPENDENCIES .  ", '" .  $this->STATUT .  "', NOW());";  
    $last_id =  $sql_object->DBInsert ($requete, 1);  
   * modification d'une echelle  
   * @param int $ID identifiant de l'echelle  
   * @param object $sql_object   
   * @param array $table_scale contient les composants d'une echelle  
    $table_scale= $sql_object->DBescape($table_scale);  
    if ($table_scale[0] !=  '') {  
    if (trim($table_scale[1]) ==  '') {  
    if (trim($table_scale[2]) ==  '') {  
      $this->ROOT =  $table_scale[3];  
    if ($table_scale[5] !=  '') {  
      switch ($table_scale[5]) {  
          $this->STATUT =  $table_scale[5];  
          $this->STATUT =  $table_scale[5];  
    // On Determine le rang de l'échelle  
    $requete =  "SELECT scale_dependencies FROM " .  $this->TDB_SCALE .  " WHERE scale_id=" .  $this->ROOT .  ";";  
    $result =  $sql_object->DBSelect($requete);  
    // Si ce n'est pas l'échelle racine on assigne sinon =-1  
    $current_depth=  (empty($result)) ? - 1 :  $result[0]['scale_dependencies'];  
    // mise à jour du niveau des informations relatives à l'échelle  
    $requete =  "UPDATE  " .  $this->TDB_SCALE .  " set scale_denomination='" .  $this->DENOMINATION .  "', scale_surface=" .  $this->SURFACE .  ", scale_inhabitantsnumber=" .  $this->INHABITANTSNUM .  ", scale_root=" .  $this->ROOT .  ", scale_comment='" .  $this->COMMENT .  "', scale_dependencies=" .  $this->DEPENDENCIES .  ", scale_statut='" .  $this->STATUT .  "', scale_last_modify=NOW() WHERE scale_id=" .  $this->ID .  ";";  
    $result =  $sql_object->DBQuery($requete);  
    // si la nouvelle échelle root diffère de la précédente, update récursif des dépendances des échelles filles  
    if ($table_scale[6] !=  $this->ROOT) {  
   * scale::update_all_dependencies()  
   * Mise à jour de l'ensemble des échelles filles par rapport à ul'échelle courante.  
    for($i =  0; $i <  count($table); $i++ ) {  
      $current_dep =  $table[$i]['scale_dependencies'];  
      $current_root =  $table[$i]['scale_root'];  
      $current_id =  $table[$i]['scale_id'];  
      if ($id ==  $current_root) {  
        $requete =  "UPDATE  " .  $this->TDB_SCALE .  " SET scale_dependencies='" .  ($depth +  1) .  "' WHERE scale_id='" .  $current_id .  "';";  
        $result =  $sql_object->DBQuery($requete);  
   * modification du statut d'une échelle  
   * @param int $id identifiant de l'echelle  
   * @param string $state (facultatif) 'P' Public/'D' Draft  
   * @param object $sql_object   
    $requete =  "UPDATE  " .  $this->TDB_SCALE .  " set scale_statut='" .  $this->STATUT .  "', scale_last_modify=NOW() WHERE scale_id=" .  $this->ID .  ";";  
    $result =  $sql_object->DBQuery($requete);  
   * suppression d'une echelle  
   * @param int $ID identifiant de l'echelle  
   * @param string $type 'MASS_DELETE'  
   *  'MASS_DELETE' toutes les ressources associées à l'échelle sont rendues inactives  
   *  'MASS_MODIFY' remplacement de l'ancienne échelle par $ID_new  
   * @param int $ID_new nouvel id de rattachement  
   * @param object $sql_object   
   * @return integer $affected // nombre de ressources affectées par les changements  
  function DeleteScale($ID, $sql_object, $type, $ID_new = - 1)  
    if ($type ==  'MASS_MODIFY') {  
        $requete =  "UPDATE  " .  $this->TDB_SCALE .  " set scale_statut='E', scale_last_modify=NOW() WHERE scale_id=" .  $this->ID .  ";";  
        $result =  $sql_object->DBQuery($requete);  
          $requete =  "SELECT scale_dependencies FROM " .  $this->TDB_SCALE .  " WHERE scale_id=" .  $ID_new .  ";";  
          $result =  $sql_object->DBSelect($requete);  
          $dependencies =  $result[0]['scale_dependencies'];  
          $requete =  "UPDATE  " .  $this->TDB_SCALE .  " set scale_root=" .  $ID_new .  " WHERE scale_root=" .  $this->ID .  ";";  
          $result =  $sql_object->DBQuery($requete);  
          // modification récursive des dépendances.  
          // mise à jour des ressources.  
          $requete_news =  "UPDATE  " .  T_NEWS .  " set news_scale=" .  $ID_new .  " WHERE  news_scale=" .  $this->ID .  ";";  
          $result =  $sql_object->DBQuery($requete_news);  
          $affected +=  $sql_object->DBaffectedRow();  
          $requete_project =  "UPDATE  " .  T_PROJECT .  " set project_scale_id=" .  $ID_new .  " WHERE  project_scale_id=" .  $this->ID .  ";";  
          $result =  $sql_object->DBQuery($requete_project);  
          $affected +=  $sql_object->DBaffectedRow();  
          $requete_publication =  "UPDATE  " .  T_PUBLI .  " set publi_scale=" .  $ID_new .  " WHERE  publi_scale=" .  $this->ID .  ";";  
          $result =  $sql_object->DBQuery($requete_publication);  
          $affected +=  $sql_object->DBaffectedRow();  
          $requete_sdi =  "UPDATE  " .  T_SDI_VALUE .  " set sdiv_scale=" .  $ID_new .  " WHERE  sdiv_scale=" .  $this->ID .  ";";  
          $result =  $sql_object->DBQuery($requete_sdi);  
          $affected +=  $sql_object->DBaffectedRow();  
    if ($type ==  'MASS_DELETE') {  
        $update_bdd_scale .=  " OR scale_id='" .  $this->SON_TABLE[$i] .  "'";  
        $update_bdd_news .=  " OR news_scale='" .  $this->SON_TABLE[$i] .  "'";  
        $update_bdd_publi .=  " OR publi_scale='" .  $this->SON_TABLE[$i] .  "'";  
        $update_bdd_sdi .=  " OR sdiv_scale='" .  $this->SON_TABLE[$i] .  "'";  
        $update_bdd_project .=  " OR projetc_scale_id='" .  $this->SON_TABLE[$i] .  "'";  
      // Effacement de l'échelle et ses fils  
      $requete =  "UPDATE  " .  $this->TDB_SCALE .  " set scale_statut='E', scale_last_modify=NOW() WHERE scale_id='" .  $this->ID .  "'";  
      $requete .=  $update_bdd_scale;  
      $result =  $sql_object->DBQuery($requete);  
        $requete_news =  "UPDATE  " .  T_NEWS .  " SET news_statut='E' WHERE  news_scale='" .  $this->ID .  "'";  
        $requete_news .=  $update_bdd_news;  
        $result =  $sql_object->DBQuery($requete_news);  
        $affected +=  $sql_object->DBaffectedRow();  
        $requete_project =  "UPDATE  " .  T_PROJECT .  " SET project_statut='E' WHERE  project_scale_id='" .  $this->ID .  "'";  
        $requete_project .=  $update_bdd_project;  
        $result =  $sql_object->DBQuery($requete_project);  
        $affected +=  $sql_object->DBaffectedRow();  
        $requete_publication =  "UPDATE  " .  T_PUBLI .  " SET publi_statut='E' WHERE  publi_scale='" .  $this->ID .  "'";  
        $requete_publication .=  $update_bdd_publi;  
        $requete_publication .=  ";";  
        $result =  $sql_object->DBQuery($requete_publication);  
        $affected +=  $sql_object->DBaffectedRow();  
        $requete_sdi =  "UPDATE  " .  T_SDI_VALUE .  " SET sdiv_statut='E' WHERE  sdiv_scale='" .  $this->ID .  "'";  
        $requete_sdi .=  $update_bdd_sdi;  
        $result =  $sql_object->DBQuery($requete_sdi);  
        $affected +=  $sql_object->DBaffectedRow();  
 
 
        
       |