/[openfoncier]/trunk/services/metier/maintenancemanager.php
ViewVC logotype

Diff of /trunk/services/metier/maintenancemanager.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 529 by mlimic, Mon Oct 22 12:04:18 2012 UTC revision 1159 by fmichon, Mon Jan 7 17:15:57 2013 UTC
# Line 1  Line 1 
1  <?php  <?php
2    /**
3  /*   * Ce fichier permet de déclarer la classe MaintenanceManager, qui effectue les
4   * Processes requests received via services which are meant to initiate a   * traitements pour la ressource 'maintenance'.
  * synchronization.  
  *  
  * @author Mirna Limic <[email protected]>  
  * Date: 18/10/2012  
5   *   *
6   * Follow-up:   * @package openfoncier
7   * Bugs:   * @version SVN : $Id$
8   */   */
9    
10  require_once ("./metier/metiermanager.php");  // Inclusion de la classe de base MetierManager
11  //require_once('./REST/amqp_publisher.php');  require_once("./metier/metiermanager.php");
12    
13    /**
14     * Cette classe hérite de la classe MetierManager. Elle permet d'effectuer des
15     * traitements pour la ressource 'maintenance' qui ont vocation à être
16     * déclenché de manière automatique ou par une application externe. Par
17     * exemple, un cron permet chaque soir d'exécuter la synchronisation des
18     * utilisateurs de l'application avec l'annuaire LDAP.
19     */
20  class MaintenanceManager extends MetierManager {  class MaintenanceManager extends MetierManager {
21        
22      /*      /**
23       * @var mixed Array containing function pointers (i.e. function names)       * @var mixed Ce tableau permet d'associer un module a une méthode,
24       * that are (dereferenced and) called to perform the synchronization tasks.       * le module (key) est celui reçu dans la requête REST, la méthode (value)
25       */       * est la méthode de cette classe qui va exécuter le traitement
     var $fptrs = array('user' => 'synchronizeUsers'); // 'UserManager'  
       
       
     /*  
      * Constructor.  
      *  
      * Calls its parent's constructor.  
26       */       */
27      public function __construct() {      var $fptrs = array(
28          parent::__construct();          'user' => 'synchronizeUsers',
29      }          'consultation' => 'updateConsultationsStates',
30        );
31    
32            /**
33      /*       * Cette méthode permet de gérer l'appel aux différentes méthodes
34       * Destructor.       * correspondantes au module appelé.
      *  
      * Calls its parent's destructor.  
      */      
     public function __destruct() {  
         parent::__destruct();  
     }  
       
       
     /*  
      * Starts a synchronization process by calling  
      * one of the functions in the fptrs array.  
35       *       *
36       * @param string $module The key to be used in order to retreive the name       * @param string $module Le module à exécuter reçu dans la requête
37       * of the function that should be called.       * @param mixed $data Les données reçues dans la requête
38       * @param mixed $data The data that was received as a part of the request.       * @return string Le résultat du traitement
      * @return string The result of processing.  
39       */       */
40      public function performMaintenance($module, $data) {      public function performMaintenance($module, $data) {
41            
42          // check that the known module is called          // Si le module n'existe pas dans la liste des modules disponibles
43            // alors on ajoute un message d'informations et on retourne un
44            // un résultat d'erreur
45          if (!in_array($module, array_keys($this->fptrs))) {          if (!in_array($module, array_keys($this->fptrs))) {
46              return 'Unknown module in request.';              $this->setMessage("Le module demandé n'existe pas");
47                return $this->BAD_DATA;
48          }          }
49            
50          $ret = call_user_func(array($this, $this->fptrs[$module]), $data);          // Si le module existe dans la liste des modules disponibles
51          return $ret;          // alors on appelle la méthode en question et on retourne son résultat
52            return call_user_func(array($this, $this->fptrs[$module]), $data);
53    
54      }      }
55        
56            /**
57      /*       * Cette méthode permet d'effectuer la synchronisation des utilisateurs
58       * Synchronizes the users data in a DB with the user's data from the       * de l'application avec l'annuaire LDAP paramétré dans l'application.
      * directory services that communicate via LDAP.  
59       *       *
60       * @param mixed $data The data that was received as a part of the request.       * @param mixed $data Les données reçues dans la requête
61       * @return string The result of processing.       * @return string Le résultat du traitement
62         *
63         * @todo XXX Faire une getsion des erreurs dans om_application pour
64         * permettre d'avoir un retour sur le nombre d'utilisateurs synchronisés
65       */           */    
66      public function synchronizeUsers($data) {      public function synchronizeUsers($data) {
67          // depending on what is in the data do the treatement  
68          // currently only user synchronization with ldap is supported          // Initialisation de la synchronisation des utilisateurs LDAP
69          $keys = array_keys($data);          $results = $this->f->initSynchronization();
70          if (in_array('userToAdd', $keys)  
71              || in_array('userToDelete', $keys)          // Si l'initialisation ne se déroule pas correctement alors on retourne
72              || in_array('userToUpdate', $keys)) {          // un résultat d'erreur
73              //$this->f->synchronizeUsers($data);          if (is_null($results) || $results == false) {
74                $this->setMessage("Erreur interne");
75                return $this->KO;
76          }          }
77          return $this->OK;          
78            // Application du traitement de synchronisation
79            $ret = $this->f->synchronizeUsers($results);
80    
81            // Si l'a synchronisation ne se déroule pas correctement alors on
82            // retourne un résultat d'erreur
83            if ($ret == false) {
84                $this->setMessage("Erreur interne");
85                return $this->KO;
86            }
87    
88            // Si l'a synchronisation ne se déroule correctement alors on
89            // retourne un résultat OK
90            $this->setMessage("Synchronisation terminée.");
91            return $this->OK;
92    
93      }      }
94    
95        /**
96         * Cette méthode permet d'effectuer le traitement de gestion des avis
97         * tacites sur les consultations qui ont atteint leur date limite de
98         * retour.
99         *
100         * @param mixed $data Les données reçues dans la requête
101         * @return string Le résultat du traitement
102         *
103         * @todo Vérifier si il est possible de déplacer la méthode dans
104         * l'application
105         */
106        public function updateConsultationsStates($data) {
107    
108            // Nom de la table
109            $table_name = 'consultation';
110    
111            // Récupération de la référence vers un avis_consultation correspondant
112            // au libellé 'Tacite'
113            $sql = "SELECT avis_consultation FROM ".DB_PREFIXE."avis_consultation ";
114            $sql .= " WHERE libelle = 'Tacite' ";
115            $sql .= " AND ((avis_consultation.om_validite_debut IS NULL ";
116            $sql .= " AND (avis_consultation.om_validite_fin IS NULL ";
117            $sql .= " OR avis_consultation.om_validite_fin > CURRENT_DATE)) ";
118            $sql .= " OR (avis_consultation.om_validite_debut <= CURRENT_DATE ";
119            $sql .= " AND (avis_consultation.om_validite_fin IS NULL ";
120            $sql .= " OR avis_consultation.om_validite_fin > CURRENT_DATE))) ";
121            $res = $this->db->query($sql);
122            // Logger
123            $this->addToLog("updateConsultationsStates(): db->query(\"".$sql."\"", VERBOSE_MODE);
124            // Si une erreur de base de données se produit sur cette requête
125            // alors on retourne un résultat d'erreur
126            if ($this->f->isDatabaseError($res, true)) {
127                $this->setMessage("Erreur de base de données.");
128                return $this->KO;
129            }
130    
131            // Récupération de la référence vers un avis_consultation correspondant
132            // au libellé 'Tacite'
133            $tacite = NULL;
134            while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
135                $tacite = $row["avis_consultation"];
136            }
137            $res->free();
138    
139            // Si la décision n'existe pas dans la base de données alors on ajoute
140            // un message d'informations et on retourne un résultat d'erreur
141            if (is_null($tacite)) {
142                $this->setMessage("L'avis n'existe pas.");
143                return $this->KO;
144            }
145    
146            // Récupération de la liste des consultations correspondantes aux
147            // critères du traitement
148            $sql = "SELECT consultation FROM ".DB_PREFIXE."$table_name ";
149            $sql .= " WHERE date_limite < CURRENT_DATE" ;
150            $sql .= " AND date_retour IS NULL AND avis_consultation IS NULL ";
151            $res = $this->db->query($sql);
152            // Logger
153            $this->addToLog("updateConsultationsStates(): db->query(\"".$sql."\"", VERBOSE_MODE);
154            // Si une erreur de base de données se produit sur cette requête
155            // alors on retourne un résultat d'erreur
156            if ($this->f->isDatabaseError($res, true)) {
157                $this->setMessage("Erreur de base de données.");
158                return $this->KO;
159            }
160    
161            // Récupération de la liste des consultations correspondantes aux
162            // critères du traitement
163            $ids = array();
164            while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
165                $ids[] = $row["consultation"];
166            }
167            $res->free();
168    
169            // Si aucune consultation n'est concernée par le traitement alors on
170            // ajoute un message d'informations et on retourne un résultat 'OK'
171            if (count($ids) == 0) {
172                $this->setMessage("Aucune mise a jour.");
173                return $this->OK;
174            }
175    
176            // Exécution du traitement
177            // On met à jour toutes les consultation avec le retour d'avis
178            $fields = array(
179                'avis_consultation' => $tacite,
180            );
181            $res = $this->db->autoExecute(DB_PREFIXE.$table_name,
182                                          $fields,
183                                          DB_AUTOQUERY_UPDATE,
184                                          'consultation IN ('.implode(',', $ids).')');
185            // Logger
186            $this->addToLog("updateConsultationsStates(): db->autoExecute(\"".DB_PREFIXE.$table_name."\", ".print_r($fields, true).", DB_AUTOQUERY_UPDATE, \"consultation IN (\"".implode(',', $ids)."\")", VERBOSE_MODE);
187            // Si une erreur de base de données se produit sur cette requête
188            // alors on retourne un résultat d'erreur
189            if ($this->f->isDatabaseError($res, true)) {
190                $this->setMessage("Erreur de base de données.");
191                return $this->KO;
192            }
193    
194            // Tout s'est déroulé correctement alors on ajoute un message
195            // d'informations et on retourne le résultat 'OK'
196            $this->setMessage(count($ids)." consultations mise(s) à jour.");
197            return $this->OK;
198    
199        }
200    
201  }  }
202    
203  ?>  ?>

Legend:
Removed from v.529  
changed lines
  Added in v.1159

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26