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

Source for file class.scale.php

Documentation is available at class.scale.php

  1. <?php
  2. /**
  3.  * @package linea21.core
  4.  * @subpackage scale
  5.  * @author linea21 <info@linea21.com>
  6.  * @version $id SVN
  7.  * @access public
  8.  * @license http://opensource.org/licenses/gpl-3.0.html
  9.  *  Scale Management
  10.  */
  11. class scale {
  12.   /* @param
  13.    * */
  14.   var $TDB_SCALE = T_SCALE// nom de la table.
  15.   var $ID;
  16.   var $DENOMINATION;
  17.   var $ROOT;
  18.   var $SURFACE;
  19.   var $INHABITANTSNUM;
  20.   var $COMMENT;
  21.   var $DEPENDENCIES;
  22.   var $DATE_CREA;
  23.   var $STATUT;
  24.   var $LAST_MODIFY;
  25.  
  26.   var $DEPTH_TABLE = array ()// tableau contenant les profondeurs d'échelles
  27.   var $SON_TABLE = array ()// tableau contenant les fils d'échelles
  28.   var $ALL_REC = array ()// tableau contenant les fils d'échelles
  29.   /**
  30.   * scale::CheckDataIntegrity()
  31.   * Vérification des données d'une echelle
  32.   *
  33.   * @access public
  34.   * @param array $table_scale : contient les composants d'une echelle
  35.   * @return boolean si vrai renvoie true sinon message d'erreurs (string)
  36.   */
  37.   function CheckDataIntegrity($table_scale)
  38.   {
  39.     $notdenomination _t('scale','object_notdenomination');
  40.     $notnumsurface _t('scale','object_notnumsurface');
  41.     $notnuminhabitants _t('scale','object_notnuminhabitants');
  42.     $notroot _t('scale','object_notroot');
  43.  
  44.     if (strlen($table_scale[0]2return $notdenomination;
  45.     if (trim($table_scale[1]!= '' && !is_numeric($table_scale[1])) return $notnumsurface;
  46.     if (trim($table_scale[2]!= '' && !is_numeric($table_scale[2])) return $notnuminhabitants;
  47.     if (!is_numeric($table_scale[3]|| $table_scale[3== -1return $notroot;
  48.     return true;
  49.   }
  50.  
  51.   /**
  52.    * scale::getMaxDepth()
  53.    * obtention de la profondeur max d'une échelle ( par rapport a ses filles
  54.    *
  55.    * @access public
  56.    * @param  $id : identifiant de l'échelle courante
  57.    * @param  $sql_object 
  58.    * @return array $return_table contennat profondeur et échelle d'exclusion
  59.    */
  60.   function getMaxDepth($id$sql_object)
  61.   {
  62.     $this->ID = $id;
  63.  
  64.     $requete "SELECT scale_dependencies FROM " $this->TDB_SCALE . " WHERE scale_id='" $this->ID . "';";
  65.     $result $sql_object->DBSelect($requete);
  66.     $this->DEPENDENCIES = $result[0]['scale_dependencies'];
  67.     array_push($this->DEPTH_TABLE$this->DEPENDENCIES);
  68.     array_push($this->SON_TABLE$this->ID);
  69.  
  70.     $this->getAllRecord($sql_object);
  71.     $this->getScaleDepthAndSon($this->ALL_REC$this->ID);
  72.     rsort($this->DEPTH_TABLE);
  73.  
  74.     $return_table["depth"MAX_SCALE_LEVEL ($this->DEPTH_TABLE[0($this->DEPTH_TABLE[(count($this->DEPTH_TABLE)-1)])) 1;
  75.     $return_table["exclusion"$this->SON_TABLE;
  76.  
  77.     return $return_table;
  78.   }
  79.  
  80.   /**
  81.    * scale::getScaleDepthAndSon()
  82.    * obtention des fils et profondeur ( récursif ) par rapport à une échelle données
  83.    * stockage dans des tableaux respectifs.
  84.    *
  85.    * @param  $table Ensemble des échelles
  86.    * @param  $id échelle courante
  87.    * @return void 
  88.    */
  89.   function getScaleDepthAndSon($table$id)
  90.   {
  91.     for($i 0$i count($table)$i++{
  92.       $current_dep $table[$i]['scale_dependencies'];
  93.       $current_root $table[$i]['scale_root'];
  94.       $current_id $table[$i]['scale_id'];
  95.  
  96.       if ($id == $current_root{
  97.         if (!in_array($current_dep$this->DEPTH_TABLE)) array_push($this->DEPTH_TABLE$current_dep);
  98.         if (!in_array($current_id$this->SON_TABLE)) array_push($this->SON_TABLE$current_id);
  99.         $this->getScaleDepthAndSon($table$current_id);
  100.       }
  101.     }
  102.   }
  103.  
  104.   /**
  105.    * scale::getAllRecord()
  106.    * Obtention de toutes les échelles.
  107.    *
  108.    * @param  $sql_object 
  109.    * @return void 
  110.    */
  111.   function getAllRecord($sql_object)
  112.   {
  113.     $requete "SELECT scale_dependencies, scale_id, scale_root FROM " $this->TDB_SCALE . ";";
  114.     $this->ALL_REC = $sql_object->DBSelect($requete);
  115.   }
  116.  
  117.   /**
  118.    * scale::AddScale()
  119.    * Ajout d'une echelle
  120.    *
  121.    * @access public
  122.    * @param array $table_scale contient les composants d'une echelle
  123.    * @param object $sql_object 
  124.    * @return integer $last_id
  125.    */
  126.   function AddScale($table_scale$sql_object)
  127.   {
  128.     $table_scale=$sql_object->DBescape($table_scale);
  129.  
  130.     if (strlen($table_scale[0]1{
  131.       $this->DENOMINATION = strip_input(trim($table_scale[0]));
  132.     else return $notdenomination;
  133.     if (trim($table_scale[1]== ''{
  134.       $this->SURFACE = 0;
  135.     else {
  136.       $this->SURFACE = trim($table_scale[1]);
  137.     }
  138.     if (trim($table_scale[2]== ''{
  139.       $this->INHABITANTSNUM = 0;
  140.     else {
  141.       $this->INHABITANTSNUM = trim($table_scale[2]);
  142.     }
  143.     if (is_numeric($table_scale[3])) {
  144.       $this->ROOT = $table_scale[3];
  145.     }
  146.  
  147.     $this->COMMENT = strip_input(trim($table_scale[4]true));
  148.  
  149.     if ($table_scale[5!= ''{
  150.       strtoupper($table_scale[5]);
  151.       switch ($table_scale[5]{
  152.         case 'P':
  153.           $this->STATUT = $table_scale[5];
  154.           break;
  155.         case 'D':
  156.           $this->STATUT = $table_scale[5];
  157.           break;
  158.         default:
  159.           $this->STATUT = 'P';
  160.           break;
  161.       }
  162.     else $this->STATUT = 'P';
  163.     // On Determine le rang de l'échelle
  164.     $requete "SELECT scale_dependencies FROM " $this->TDB_SCALE . " WHERE scale_id=" $this->ROOT . ";";
  165.     $result $sql_object->DBSelect($requete);
  166.     $this->DEPENDENCIES = $result[0]['scale_dependencies'1;
  167.  
  168.     $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());";
  169.     $last_id $sql_object->DBInsert ($requete1);
  170.     return $last_id;
  171.   }
  172.  
  173.   /**
  174.    * scale::ModifyScale()
  175.    * modification d'une echelle
  176.    *
  177.    * @access public
  178.    * @param int $ID identifiant de l'echelle
  179.    * @param object $sql_object 
  180.    * @param array $table_scale contient les composants d'une echelle
  181.    * @return bool $result
  182.    */
  183.   function ModifyScale($ID$table_scale$sql_object)
  184.   {
  185.     $table_scale=$sql_object->DBescape($table_scale);
  186.  
  187.     if (is_numeric($ID)) {
  188.       $this->ID = $ID;
  189.     }
  190.     if ($table_scale[0!= ''{
  191.       $this->DENOMINATION = strip_input(trim($table_scale[0]));
  192.     }
  193.     if (trim($table_scale[1]== ''{
  194.       $this->SURFACE = 0;
  195.     else {
  196.       $this->SURFACE = trim($table_scale[1]);
  197.     }
  198.     if (trim($table_scale[2]== ''{
  199.       $this->INHABITANTSNUM = 0;
  200.     else {
  201.       $this->INHABITANTSNUM = trim($table_scale[2]);
  202.     }
  203.     if (is_numeric($table_scale[3])) {
  204.       $this->ROOT = $table_scale[3];
  205.     }
  206.  
  207.     $this->COMMENT = strip_input(trim($table_scale[4]true));
  208.  
  209.     if ($table_scale[5!= ''{
  210.       strtoupper($table_scale[5]);
  211.       switch ($table_scale[5]{
  212.         case 'P':
  213.           $this->STATUT = $table_scale[5];
  214.           break;
  215.         case 'D':
  216.           $this->STATUT = $table_scale[5];
  217.           break;
  218.         default:
  219.           $this->STATUT = 'P';
  220.           break;
  221.       }
  222.     }
  223.     // On Determine le rang de l'échelle
  224.     $requete "SELECT scale_dependencies FROM " $this->TDB_SCALE . " WHERE scale_id=" $this->ROOT . ";";
  225.     $result $sql_object->DBSelect($requete);
  226.     // Si ce n'est pas l'échelle racine on assigne sinon =-1
  227.     $current_depth(empty($result)) ? -$result[0]['scale_dependencies'];
  228.     $this->DEPENDENCIES = $current_depth 1;
  229.     // mise à jour du niveau des informations relatives à l'échelle
  230.     $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 . ";";
  231.     $result $sql_object->DBQuery($requete);
  232.     // si la nouvelle échelle root diffère de la précédente, update récursif des dépendances des échelles filles
  233.     if ($table_scale[6!= $this->ROOT{
  234.       $this->getAllRecord($sql_object);
  235.       $tabledepth $this->update_all_dependencies($this->ALL_REC$this->DEPENDENCIES$this->ID$sql_object);
  236.     }
  237.  
  238.     return true;
  239.   }
  240.  
  241.   /**
  242.    * scale::update_all_dependencies()
  243.    * Mise à jour de l'ensemble des échelles filles par rapport à ul'échelle courante.
  244.    *
  245.    * @param  $table 
  246.    * @param  $depth 
  247.    * @param  $id 
  248.    * @param  $sql_object 
  249.    * @return void 
  250.    */
  251.   function update_all_dependencies($table$depth$id$sql_object)
  252.   {
  253.     $table_depth array();
  254.     for($i 0$i count($table)$i++{
  255.       $current_dep $table[$i]['scale_dependencies'];
  256.       $current_root $table[$i]['scale_root'];
  257.       $current_id $table[$i]['scale_id'];
  258.  
  259.       if ($id == $current_root{
  260.         $requete "UPDATE  " $this->TDB_SCALE . " SET scale_dependencies='" ($depth 1"' WHERE scale_id='" $current_id "';";
  261.         $result $sql_object->DBQuery($requete);
  262.         $this->update_all_dependencies($table$depth 1$current_id$sql_object);
  263.       }
  264.     }
  265.   }
  266.  
  267.   /**
  268.    * scale::StateScale()
  269.    * modification du statut d'une échelle
  270.    *
  271.    * @access public
  272.    * @param int $id identifiant de l'echelle
  273.    * @param string $state (facultatif) 'P' Public/'D' Draft
  274.    * @param object $sql_object 
  275.    * @return bool $result
  276.    */
  277.   function StateScale($ID$state$sql_object)
  278.   {
  279.     if (is_numeric($ID)) {
  280.       $this->ID = $ID;
  281.     }
  282.     if ($state != ''{
  283.       strtoupper($state);
  284.       switch ($state{
  285.         case 'P':
  286.           $this->STATUT = $state;
  287.           break;
  288.         case 'D':
  289.           $this->STATUT = $state;
  290.           break;
  291.         default:
  292.           $this->STATUT = $state;
  293.           break;
  294.       }
  295.     else $this->STATUT = 'P';
  296.     $requete "UPDATE  " $this->TDB_SCALE . " set scale_statut='" $this->STATUT . "', scale_last_modify=NOW() WHERE scale_id=" $this->ID . ";";
  297.     $result $sql_object->DBQuery($requete);
  298.     return $result;
  299.   }
  300.  
  301.   /**
  302.    * scale::DeleteScale()
  303.    * suppression d'une echelle
  304.    *
  305.    * @access public
  306.    * @param int $ID identifiant de l'echelle
  307.    * @param string $type 'MASS_DELETE'
  308.    *  'MASS_DELETE' toutes les ressources associées à l'échelle sont rendues inactives
  309.    *  'MASS_MODIFY' remplacement de l'ancienne échelle par $ID_new
  310.    * @param int $ID_new nouvel id de rattachement
  311.    * @param object $sql_object 
  312.    * @return integer $affected // nombre de ressources affectées par les changements
  313.    */
  314.   function DeleteScale($ID$sql_object$type$ID_new = -1)
  315.   {
  316.     $affected 0;
  317.     $this->ID = $ID;
  318.     if ($type == 'MASS_MODIFY'{
  319.       if ($ID_new != -&& is_numeric($ID_new)) {
  320.         $requete "UPDATE  " $this->TDB_SCALE . " set scale_statut='E', scale_last_modify=NOW() WHERE scale_id=" $this->ID . ";";
  321.         $result $sql_object->DBQuery($requete);
  322.         if ($result{
  323.           $requete "SELECT scale_dependencies FROM " $this->TDB_SCALE . " WHERE scale_id=" $ID_new ";";
  324.           $result $sql_object->DBSelect($requete);
  325.           $dependencies $result[0]['scale_dependencies'];
  326.           $requete "UPDATE  " $this->TDB_SCALE . " set scale_root=" $ID_new " WHERE scale_root=" $this->ID . ";";
  327.           $result $sql_object->DBQuery($requete);
  328.           // modification récursive des dépendances.
  329.           $this->getAllRecord($sql_object);
  330.           $this->update_all_dependencies($this->ALL_REC$dependencies$ID_new$sql_object);
  331.           // mise à jour des ressources.
  332.           $requete_news "UPDATE  " T_NEWS " set news_scale=" $ID_new " WHERE  news_scale=" $this->ID . ";";
  333.           $result $sql_object->DBQuery($requete_news);
  334.           $affected += $sql_object->DBaffectedRow();
  335.           $requete_project "UPDATE  " T_PROJECT " set project_scale_id=" $ID_new " WHERE  project_scale_id=" $this->ID . ";";
  336.           $result $sql_object->DBQuery($requete_project);
  337.           $affected += $sql_object->DBaffectedRow();
  338.           $requete_publication "UPDATE  " T_PUBLI " set publi_scale=" $ID_new " WHERE  publi_scale=" $this->ID . ";";
  339.           $result $sql_object->DBQuery($requete_publication);
  340.           $affected += $sql_object->DBaffectedRow();
  341.           $requete_sdi "UPDATE  " T_SDI_VALUE " set sdiv_scale=" $ID_new " WHERE  sdiv_scale=" $this->ID . ";";
  342.           $result $sql_object->DBQuery($requete_sdi);
  343.           $affected += $sql_object->DBaffectedRow();
  344.         }
  345.       }
  346.     }
  347.     if ($type == 'MASS_DELETE'{
  348.       $this->getAllRecord($sql_object);
  349.       $this->getScaleDepthAndSon($this->ALL_REC$this->ID);
  350.  
  351.       $update_bdd_scale '';
  352.       $update_bdd_news '';
  353.       $update_bdd_publi '';
  354.       $update_bdd_sdi '';
  355.       for($i 0$i count($this->SON_TABLE)$i++{
  356.         $update_bdd_scale .= " OR scale_id='" $this->SON_TABLE[$i"'";
  357.         $update_bdd_news .= " OR news_scale='" $this->SON_TABLE[$i"'";
  358.         $update_bdd_publi .= " OR publi_scale='" $this->SON_TABLE[$i"'";
  359.         $update_bdd_sdi .= " OR sdiv_scale='" $this->SON_TABLE[$i"'";
  360.         $update_bdd_project .= " OR projetc_scale_id='" $this->SON_TABLE[$i"'";
  361.       }
  362.       // Effacement de l'échelle et ses fils
  363.       $requete "UPDATE  " $this->TDB_SCALE . " set scale_statut='E', scale_last_modify=NOW() WHERE scale_id='" $this->ID . "'";
  364.       $requete .= $update_bdd_scale;
  365.       $requete .= ";";
  366.  
  367.       $result $sql_object->DBQuery($requete);
  368.  
  369.       if ($result == 1{
  370.         $requete_news "UPDATE  " T_NEWS " SET news_statut='E' WHERE  news_scale='" $this->ID . "'";
  371.         $requete_news .= $update_bdd_news;
  372.         $requete_news .= ";";
  373.  
  374.         $result $sql_object->DBQuery($requete_news);
  375.         $affected += $sql_object->DBaffectedRow();
  376.  
  377.         $requete_project "UPDATE  " T_PROJECT " SET project_statut='E' WHERE  project_scale_id='" $this->ID . "'";
  378.         $requete_project .= $update_bdd_project;
  379.         $requete_project .= ";";
  380.  
  381.         $result $sql_object->DBQuery($requete_project);
  382.         $affected += $sql_object->DBaffectedRow();
  383.  
  384.         $requete_publication "UPDATE  " T_PUBLI " SET publi_statut='E' WHERE  publi_scale='" $this->ID . "'";
  385.         $requete_publication .= $update_bdd_publi;
  386.         $requete_publication .= ";";
  387.  
  388.         $result $sql_object->DBQuery($requete_publication);
  389.         $affected += $sql_object->DBaffectedRow();
  390.  
  391.         $requete_sdi "UPDATE  " T_SDI_VALUE " SET sdiv_statut='E' WHERE  sdiv_scale='" $this->ID . "'";
  392.         $requete_sdi .= $update_bdd_sdi;
  393.         $requete_sdi .= ";";
  394.  
  395.         $result $sql_object->DBQuery($requete_sdi);
  396.         $affected += $sql_object->DBaffectedRow();
  397.       }
  398.     }
  399.     return $affected;
  400.   }
  401. }
  402.  
  403. ?>

Documentation generated on Fri, 16 Oct 2009 09:30:08 +0200 by phpDocumentor 1.4.1