/[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 522 by mlimic, Thu Oct 18 16:37:15 2012 UTC revision 778 by fmichon, Tue Nov 20 16:14:25 2012 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 net 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("./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
26       */       */
27      var $fptrs = array('user' => 'synchronizeUsers'); // 'UserManager'      var $fptrs = array(
28                'user' => 'synchronizeUsers',
29                'consultation' => 'updateConsultationsStates',
30      /*      );
31       * Constructor.  
32        /**
33         * Cette méthode permet de gérer l'appel aux différentes méthodes
34         * correspondantes au module appelé.
35       *       *
36       * Calls its parent's constructor.       * @param string $module Le module à exécuter reçu dans la requête
37         * @param mixed $data Les données reçues dans la requête
38         * @return string Le résultat du traitement
39       */       */
40      function __construct() {      public function performMaintenance($module, $data) {
41          parent::__construct();  
42            // 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))) {
46                $this->setMessage("Le module demandé n'existe pas");
47                return $this->BAD_DATA;
48            }
49    
50            // Si le module existe dans la liste des modules disponibles
51            // 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       * Destructor.       * de l'application avec l'annuaire LDAP paramétré dans l'application.
59         *
60         * @param mixed $data Les données reçues dans la requête
61         * @return string Le résultat du traitement
62       *       *
63       * Calls its parent's destructor.       * @todo XXX Faire une getsion des erreurs dans om_application pour
64         * permettre d'avoir un retour sur le déroulement de la synchronisation
65       */           */    
66      function __destruct() {      public function synchronizeUsers($data) {
67          parent::__destruct();  
68            // La gestion des erreurs ne permet pas de savoir si tout s'est déroulé
69            // correctement ou non donc on renvoi un retour erreur en attendant
70            // on retrourne une erreur KO
71            $this->setMessage("Erreur interne");
72            return $this->KO;
73    
74            // Appel aux méthodes de synchronisation des utilisateurs via l'annuaire
75            $results = $this->f->initSynchronization();
76            $this->f->synchronizeUsers($results);
77            return $this->OK;
78    
79      }      }
80        
81            /**
82      /*       * Cette méthode permet d'effectuer le traitement de gestion des avis
83       * Starts a synchronization process by calling       * tacites sur les consultations qui ont atteint leur date limite de
84       * one of the functions in the fptrs array.       * retour.
85         *
86         * @param mixed $data Les données reçues dans la requête
87         * @return string Le résultat du traitement
88       *       *
89       * @param string $module The key to be used in order to retreive the name       * @todo XXX Traduire et commenter la méthode et voir si il est possible
90       * of the function that should be called.       * de la déplacer dans l'application
      * @param mixed $data The data that was received as a part of the request.  
      * @return string The result of processing.  
91       */       */
92      function performMaintenance($module, $data) {      public function updateConsultationsStates($data) {
93            
94          // check that the known module is called          // Nom de la table
95          if (!in_array($module, array_keys($this->fptrs))) {          $table_name = 'consultation';
96              return 'Unknown module in request.';  
97            // Récupération de la liste des consultations correspondantes aux
98            // critères du traitement
99            $sql = "SELECT consultation FROM ".DB_PREFIXE."$table_name ";
100            $sql .= " WHERE date_limite < CURRENT_DATE" ;
101            $sql .= " AND date_retour IS NULL AND avis_consultation IS NULL ";
102            $res = $this->db->query($sql);
103            // Logger
104            $this->addToLog("updateConsultationsStates(): db->query(\"".$sql."\"", VERBOSE_MODE);
105            //
106            if ($this->f->isDatabaseError($res, true)) {
107                $this->setMessage("Erreur de base de données.");
108                return $this->KO;
109          }          }
110            
111          $ret = call_user_func(array($this, $this->fptrs[$module]), $data);          $ids = array();
112          return $ret;          while ($row =& $res->fetchRow(DB_FETCHMODE_ORDERED)) {
113      }              $ids[] = $row[0];
114                }
115                $res->free();
116      /*  
117       * Synchronizes the users data in a DB with the user's data from the          // Si aucune consultation n'est concernée par le traitement alors on
118       * directory services that communicate via LDAP.          // ajoute un message d'informations et on retourne un résultat 'OK'
119       *          if (count($ids) == 0) {
120       * @param mixed $data The data that was received as a part of the request.              $this->setMessage("Aucune mise à jour.");
121       * @return string The result of processing.              return $this->OK;
122       */              }
123      function synchronizeUsers($data) {  
124          // depending on what is in the data do the treatement          // Récupération de la référence vers un avis_consultation correspondant
125          // currently only user synchronization with ldap is supported          // au libellé 'Tacite'
126          $keys = array_keys($data);          $sql = "SELECT avis_consultation FROM ".DB_PREFIXE."avis_consultation ";
127          if (in_array('userToAdd', $keys)          $sql .= " WHERE libelle = 'Tacite'";
128              || in_array('userToDelete', $keys)          $res = $this->db->query($sql);
129              || in_array('userToUpdate', $keys)) {          // Logger
130              //$this->f->synchronizeUsers($data);          $this->addToLog("updateConsultationsStates(): db->query(\"".$sql."\"", VERBOSE_MODE);
131            //
132            if ($this->f->isDatabaseError($res, true)) {
133                $this->setMessage("Erreur de base de données.");
134                return $this->KO;
135          }          }
136          return $this->OK;          
137            $favorable = -1;
138            while ($row =& $res->fetchRow(DB_FETCHMODE_ORDERED)) {
139                $favorable = $row[0];
140            }
141            $res->free();
142    
143            // if we did not find the evaluation 'Favorable', return error
144            if ($favorable < 0) {
145                $this->setMessage("'Favorable' n'est pas présent ".
146                             "dans la columne : avis_consultation.libelle");
147                return $this->KO;
148            }
149    
150            // update the consultation table to set the 'Favorable' evaluation for
151            // the pertinent consultations
152            $fields = array('avis_consultation' => $favorable);
153            $res = $this->db->autoExecute(DB_PREFIXE.$table_name, $fields,
154                                          DB_AUTOQUERY_UPDATE,
155                                          'consultation IN ('.implode(',', $ids).')');
156            // Logger
157            $this->addToLog("updateConsultationsStates(): db->autoExecute(\"".DB_PREFIXE.$table_name."\", ".print_r($fields, true).", DB_AUTOQUERY_UPDATE, \"consultation IN (\"".implode(',', $ids)."\")", VERBOSE_MODE);
158            //
159            if ($this->f->isDatabaseError($res, true)) {
160                $this->setMessage("Erreur de base de données.");
161                return $this->KO;
162            }
163    
164            // $res->getDebugInfo(), $res->getMessage()
165            $this->setMessage('Il y a eu '.count($ids).' demandes de consultations dont '.
166                              'l\'avis été passé à Tacite');
167            return $this->OK;
168    
169      }      }
170    
171  }  }
172    
173  ?>  ?>

Legend:
Removed from v.522  
changed lines
  Added in v.778

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26