/[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 523 by mlimic, Fri Oct 19 11:59:44 2012 UTC revision 759 by mlimic, Tue Nov 20 09:09:35 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 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("./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       * Calls its parent's constructor.       * Constructeur
34       */       */
35      function __construct() {      public function __construct() {
36    
37            // Appel du constructeur parent
38          parent::__construct();          parent::__construct();
39    
40      }      }
41    
42            /**
43      /*       * Destructeur
44       * Destructor.       */
45       *      public function __destruct() {
46       * Calls its parent's destructor.  
47       */              // Appel du destructeur parent
     function __destruct() {  
48          parent::__destruct();          parent::__destruct();
49    
50      }      }
51        
52            /**
53      /*       * Cette méthode permet de gérer l'appel aux différentes méthodes
54       * Starts a synchronization process by calling       * correspondantes au module appelé.
      * one of the functions in the fptrs array.  
55       *       *
56       * @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
57       * of the function that should be called.       * @param mixed $data Les données reçues dans la requête
58       * @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.  
59       */       */
60      function performMaintenance($module, $data) {      public function performMaintenance($module, $data) {
61            
62          // check that the known module is called          // Si le module n'existe pas dans la liste des modules disponibles
63            // alors on ajoute un message d'informations et on retourne un
64            // un résultat d'erreur
65          if (!in_array($module, array_keys($this->fptrs))) {          if (!in_array($module, array_keys($this->fptrs))) {
66              return 'Unknown module in request.';              $this->setMessage("Le module demandé n'existe pas");
67                return $this->BAD_DATA;
68          }          }
69            
70          $ret = call_user_func(array($this, $this->fptrs[$module]), $data);          // Si le module existe dans la liste des modules disponibles
71          return $ret;          // alors on appelle la méthode en question et on retourne son résultat
72            return call_user_func(array($this, $this->fptrs[$module]), $data);
73    
74      }      }
75        
76            /**
77      /*       * Cette méthode permet d'effectuer la synchronisation des utilisateurs
78       * 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.  
79       *       *
80       * @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
81       * @return string The result of processing.       * @return string Le résultat du traitement
82         *
83         * @todo XXX Faire une getsion des erreurs dans om_application pour
84         * permettre d'avoir un retour sur le déroulement de la synchronisation
85       */           */    
86      function synchronizeUsers($data) {      public function synchronizeUsers($data) {
87          // depending on what is in the data do the treatement  
88          // currently only user synchronization with ldap is supported          // La gestion des erreurs ne permet pas de savoir si tout s'est déroulé
89          $keys = array_keys($data);          // correctement ou non donc on renvoi un retour erreur en attendant
90          if (in_array('userToAdd', $keys)          $this->setMessage("Erreur interne");
91              || in_array('userToDelete', $keys)          return $this->KO;
92              || in_array('userToUpdate', $keys)) {  
93              //$this->f->synchronizeUsers($data);          // Appel aux méthodes de synchronisation des utilisateurs via l'annuaire
94            $results = $this->f->initSynchronization();
95            $this->f->synchronizeUsers($results);
96            return $this->OK;
97    
98        }
99    
100        /**
101         * Cette méthode permet d'effectuer le traitement de gestion des avis
102         * tacites sur les consultations qui ont atteint leur date limite de
103         * retour.
104         *
105         * @param mixed $data Les données reçues dans la requête
106         * @return string Le résultat du traitement
107         *
108         * @todo XXX Traduire et commenter la méthode et voir si il est possible
109         * de la déplacer dans l'application
110         */
111        public function updateConsultationsStates($data) {
112    
113            $table_name = 'consultation';
114            $sql = "SELECT consultation FROM $table_name WHERE ".
115                " date_limite < DATE '". date('Y-m-d', time()) .
116                "' AND date_retour IS NULL AND avis_consultation IS NULL";
117    
118            $res = $this->db->query($sql);
119            // In case of error
120            if ($this->verifieResultatBD($res, 'Erreur lors de mise à jour')) {
121                return $this->KO;
122            }
123            
124            $ids = array();
125            while ($row =& $res->fetchRow(DB_FETCHMODE_ORDERED)) {
126                $ids[] = $row[0];
127            }
128            $res->free();
129    
130            // if there are no consultations that need to have
131            // their state set to Favorable, return OK
132            if (count($ids) == 0) {
133                $this->setMessage("Aucune mise à jour");
134                return $this->NA;
135          }          }
136          return $this->OK;                  
137            // get the idenfier of the evaluation: 'Favorable'
138            $sql = "SELECT avis_consultation FROM avis_consultation WHERE ".
139                "libelle = 'Tacite'";
140            $res = $this->db->query($sql);
141            if ($this->verifieResultatBD($res, 'Erreur lors de mise à jour')) {
142                return $this->KO;
143            }
144    
145            $favorable = -1;
146            while ($row =& $res->fetchRow(DB_FETCHMODE_ORDERED)) {
147                $favorable = $row[0];
148            }
149            $res->free();
150    
151            // if we did not find the evaluation 'Favorable', return error
152            if ($favorable < 0) {
153                $this->setMessage("'Favorable' n'est pas présent ".
154                             "dans la columne : avis_consultation.libelle");
155                return $this->KO;
156            }
157    
158            // update the consultation table to set the 'Favorable' evaluation for
159            // the pertinent consultations
160            $fields = array('avis_consultation' => $favorable);
161            $res = $this->db->autoExecute($table_name, $fields, DB_AUTOQUERY_UPDATE,
162                                    'consultation IN ('.implode(',', $ids).')');
163            if ($this->verifieResultatBD($res, 'Erreur lors de mise à jour')) {
164                return $this->KO;
165            }
166    
167            // $res->getDebugInfo(), $res->getMessage()
168            $this->setMessage('Il y a eu '.count($ids).' demandes de consultations dont '.
169                              'l\'avis été passé à Tacite');
170            return $this->OK;
171    
172      }      }
173    
174  }  }
175    
176  ?>  ?>

Legend:
Removed from v.523  
changed lines
  Added in v.759

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26