/[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 537 by mlimic, Thu Oct 25 16:31:52 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 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 {
       
     /*  
      * @var mixed Array containing function pointers (i.e. function names)  
      * that are (dereferenced and) called to perform the synchronization tasks.  
      */  
     var $fptrs = array('user' => 'synchronizeUsers',  
                        'consultation' => 'updateConsultationsStates'); // 'UserManager'  
       
       
     /*  
      * Constructor.  
      *  
      * Calls its parent's constructor.  
      */  
     public function __construct() {  
         parent::__construct();  
     }  
21    
22            /**
23      /*       * @var mixed Ce tableau permet d'associer un module a une méthode,
24       * Destructor.       * 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       * Calls its parent's destructor.       */
27       */          var $fptrs = array(
28      public function __destruct() {          'user' => 'synchronizeUsers',
29          parent::__destruct();          'consultation' => 'updateConsultationsStates',
30      }      );
31        
32            /**
33      /*       * Cette méthode permet de gérer l'appel aux différentes méthodes
34       * Starts a synchronization process by calling       * correspondantes au module appelé.
      * 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 déroulement de la synchronisation
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          // La gestion des erreurs ne permet pas de savoir si tout s'est déroulé
69          $keys = array_keys($data);          // correctement ou non donc on renvoi un retour erreur en attendant
70          if (in_array('userToAdd', $keys)          // on retrourne une erreur KO
71              || in_array('userToDelete', $keys)          $this->setMessage("Erreur interne");
72              || in_array('userToUpdate', $keys)) {          return $this->KO;
73              //$this->f->synchronizeUsers($data);  
74          }          // Appel aux méthodes de synchronisation des utilisateurs via l'annuaire
75          return $this->OK;                  $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       * Sets to favorable the avis (evaluation) of consultations whose limit       * tacites sur les consultations qui ont atteint leur date limite de
84       * date has passed without there being a return (from an external service).       * retour.
85       * @param mixed $data The data passed in with the REST call       *
86       * @return OK on success or not applicable, KO on DB error       * @param mixed $data Les données reçues dans la requête
87         * @return string Le résultat du traitement
88         *
89         * @todo XXX Traduire et commenter la méthode et voir si il est possible
90         * de la déplacer dans l'application
91       */       */
92      public function updateConsultationsStates($data) {      public function updateConsultationsStates($data) {
93    
94            // Nom de la table
95          $table_name = 'consultation';          $table_name = 'consultation';
         $sql = "SELECT consultation FROM $table_name WHERE ".  
             " date_limite < DATE '". date('Y-m-d', time()) .  
             "' AND date_retour IS NULL AND avis_consultation IS NULL";  
96    
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);          $res = $this->db->query($sql);
103          // In case of error          // Logger
104          if (database::isError($res, true)) {          $this->addToLog("updateConsultationsStates(): db->query(\"".$sql."\"", VERBOSE_MODE);
105              //print '  ERROR in SELECTION  ';          //
106            if ($this->f->isDatabaseError($res, true)) {
107                $this->setMessage("Erreur de base de données.");
108              return $this->KO;              return $this->KO;
109          }          }
110            
111          $ids = array();          $ids = array();
112          while ($row =& $res->fetchRow(DB_FETCHMODE_ORDERED)) {          while ($row =& $res->fetchRow(DB_FETCHMODE_ORDERED)) {
             //print '$row'.$row;  
113              $ids[] = $row[0];              $ids[] = $row[0];
114          }          }
115          $res->free();          $res->free();
116    
117          // if there are no consultations that need to have          // Si aucune consultation n'est concernée par le traitement alors on
118          // their state set to Favorable, return OK          // ajoute un message d'informations et on retourne un résultat 'OK'
119          if (count($ids) == 0) {          if (count($ids) == 0) {
120                $this->setMessage("Aucune mise à jour.");
121              return $this->OK;              return $this->OK;
122          }          }
123            
124          // get the idenfier of the evaluation: 'Favorable'          // Récupération de la référence vers un avis_consultation correspondant
125          $sql = "SELECT avis_consultation FROM avis_consultation WHERE ".          // au libellé 'Tacite'
126              "libelle = 'Favorable'";          $sql = "SELECT avis_consultation FROM ".DB_PREFIXE."avis_consultation ";
127            $sql .= " WHERE libelle = 'Tacite'";
128          $res = $this->db->query($sql);          $res = $this->db->query($sql);
129          if (database::isError($res, true)) {          // Logger
130              $res->free();          $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;              return $this->KO;
135          }          }
136    
137          $favorable = -1;          $favorable = -1;
138          while ($row =& $res->fetchRow(DB_FETCHMODE_ORDERED)) {          while ($row =& $res->fetchRow(DB_FETCHMODE_ORDERED)) {
139              $favorable = $row[0];              $favorable = $row[0];
# Line 133  class MaintenanceManager extends MetierM Line 142  class MaintenanceManager extends MetierM
142    
143          // if we did not find the evaluation 'Favorable', return error          // if we did not find the evaluation 'Favorable', return error
144          if ($favorable < 0) {          if ($favorable < 0) {
145                $this->setMessage("'Favorable' n'est pas présent ".
146                             "dans la columne : avis_consultation.libelle");
147              return $this->KO;              return $this->KO;
148          }          }
149            
150          // update the consultation table to set the 'Favorable' evaluation for          // update the consultation table to set the 'Favorable' evaluation for
151          // the pertinent consultations          // the pertinent consultations
152          $fields = array('avis_consultation' => $favorable);          $fields = array('avis_consultation' => $favorable);
153          $res = $this->db->autoExecute($table_name, $fields, DB_AUTOQUERY_UPDATE,          $res = $this->db->autoExecute(DB_PREFIXE.$table_name, $fields,
154                                  'consultation IN ('.implode(',', $ids).')');                                        DB_AUTOQUERY_UPDATE,
155          if (database::isError($res, true)) {                                        'consultation IN ('.implode(',', $ids).')');
156              $res->free();          // 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;              return $this->KO;
162          }          }
163            
164          return $this->OK;              // $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.537  
changed lines
  Added in v.778

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26