Пример #1
0
 /**
  * Méthode qui gère les requêtes effectuées par les clients ajax.
  * Filtre pour ne permettre d'appeler que les methodes registrees.
  *
  * @access public
  * @return void
  */
 public function handleRequest()
 {
     if (session_id()) {
         // prolonge les données en session si une session est ouverte
         SearchTools::prolongDataInSession();
     }
     // Recupere la requete envoyee par le client
     if ($this->mode == AJAX_MODE_GET) {
         // XXX bug mochikit ??
         $argv = explode('&args=', $_SERVER['QUERY_STRING']);
         $method = array_shift($argv);
         // on "nettoie" le tableau
         $method = $_GET['method'];
     } else {
         //  AJAX_MODE_POST
         $argv = json_decode($_POST['args']);
         $method = $_POST['calledMethod'];
     }
     //$this->log('count($argv): ' . count($argv));
     // formattage et déserialization des arguments reçus
     for ($i = 0; $i < count($argv); $i++) {
         $arg = json_decode(urldecode($argv[$i]), true);
         // json_decode retourne null si la chaine json n'est ni un
         // objet ni un tableau conformément au RFC
         $argv[$i] = $arg !== null ? $arg : trim(urldecode($argv[$i]), '"\'');
         // gestion correcte des booléens
         if (@strtolower($argv[$i]) == 'true') {
             $argv[$i] = true;
         }
         if (@strtolower($argv[$i]) == 'false') {
             $argv[$i] = false;
         }
         // gestion correct des entiers et des flottants
         if (is_numeric($argv[$i]) && strpos($argv[$i], '.') === false) {
             $argv[$i] = intval($argv[$i]);
         } elseif (is_numeric($argv[$i]) && strpos($argv[$i], '.')) {
             $argv[$i] = floatval($argv[$i]);
         }
     }
     // vérifie si la méthode est dans le registre
     if (!in_array($method, $this->registeredMethods)) {
         $this->send($this->error('Error: call to an unregistered method.'));
         exit(1);
     }
     // Appelle la methode
     try {
         $this->send(call_user_func_array(array($this, $method), $argv));
     } catch (Exception $exc) {
         $this->send($this->error($exc->getMessage()));
         exit(1);
     }
 }
Пример #2
0
 /**
  * Mise en session des saisies dans le form.
  *
  * @param integer $preserveGridItems
  *      - par defaut 0: on veut effacer les traces des cases cochees
  *      - 1: utilisé notamment pour la commande: on doit garder en session
  *           les Product selectionnes
  * @param string $namePrefix prefixe a donner aux noms des var de session,
  * @param boolean $isSearchForm true si on est dans un formulaire de recherche,
  * auquel cas il faut creer $_SESSION["LastEntitySearched"]
  * pour eviter les interferences avec d'autres formulaires
  * @static
  * @return void
  */
 static function inputDataInSession($preserveGridItems = 0, $namePrefix = '', $saveLastEntitySearched = false)
 {
     $session = Session::Singleton();
     foreach ($_REQUEST as $key => $value) {
         $session->register($namePrefix . $key, $value, 2);
         // En session pour 3 pages
     }
     // Pour eviter l'interaction entre differents forms de recherche de l'appli
     if ($saveLastEntitySearched) {
         SearchTools::saveLastEntitySearched();
     }
     SearchTools::prolongDataInSession($preserveGridItems);
 }