/** * 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); } }
/** * 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); }