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

Documentation generated on Thu, 03 May 2012 15:03:04 +0200 by phpDocumentor 1.4.1