phpDocumentor lodel
[ class tree: lodel ] [ index: lodel ] [ all elements ]

Source for file controler.php

Documentation is available at controler.php

  1. <?php
  2. /**
  3.  * Fichier de la classe Controler
  4.  *
  5.  * PHP versions 4 et 5
  6.  *
  7.  * LODEL - Logiciel d'Edition ELectronique.
  8.  *
  9.  * Copyright (c) 2001-2002, Ghislain Picard, Marin Dacos
  10.  * Copyright (c) 2003, Ghislain Picard, Marin Dacos, Luc Santeramo, Nicolas Nutten, Anne Gentil-Beccot
  11.  * Copyright (c) 2004, Ghislain Picard, Marin Dacos, Luc Santeramo, Anne Gentil-Beccot, Bruno Cénou
  12.  * Copyright (c) 2005, Ghislain Picard, Marin Dacos, Luc Santeramo, Gautier Poupeau, Jean Lamy, Bruno Cénou
  13.  * Copyright (c) 2006, Marin Dacos, Luc Santeramo, Bruno Cénou, Jean Lamy, Mikaël Cixous, Sophie Malafosse
  14.  * Copyright (c) 2007, Marin Dacos, Bruno Cénou, Sophie Malafosse, Pierre-Alain Mignot
  15.  *
  16.  * Home page: http://www.lodel.org
  17.  *
  18.  * E-Mail: lodel@lodel.org
  19.  *
  20.  * All Rights Reserved
  21.  *
  22.  * This program is free software; you can redistribute it and/or modify
  23.  * it under the terms of the GNU General Public License as published by
  24.  * the Free Software Foundation; either version 2 of the License, or
  25.  * (at your option) any later version.
  26.  *
  27.  * This program is distributed in the hope that it will be useful,
  28.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  29.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  30.  * GNU General Public License for more details.
  31.  *
  32.  * You should have received a copy of the GNU General Public License
  33.  * along with this program; if not, write to the Free Software
  34.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  35.  *
  36.  * @author Ghislain Picard
  37.  * @author Jean Lamy
  38.  * @copyright 2005, Ghislain Picard, Marin Dacos, Luc Santeramo, Gautier Poupeau, Jean Lamy, Bruno Cénou
  39.  * @copyright 2006, Marin Dacos, Luc Santeramo, Bruno Cénou, Jean Lamy, Mikaël Cixous, Sophie Malafosse
  40.  * @copyright 2007, Marin Dacos, Bruno Cénou, Sophie Malafosse, Pierre-Alain Mignot
  41.  * @licence http://www.gnu.org/copyleft/gpl.html
  42.  * @since Fichier ajouté depuis la version 0.8
  43.  * @version CVS:$Id: controler.php 4266 2008-04-17 12:06:36Z cenou $
  44.  */
  45.  
  46. require_once 'auth.php';
  47.  
  48. // {{{ class
  49. /**
  50.  * Classe gérant la partie contrôleur du modèle MVC utilisé par Lodel 0.8
  51.  * 
  52.  * 
  53.  *
  54.  * @package lodel
  55.  * @author Ghislain Picard
  56.  * @author Jean Lamy
  57.  * @copyright 2005, Ghislain Picard, Marin Dacos, Luc Santeramo, Gautier Poupeau, Jean Lamy, Bruno Cénou
  58.  * @copyright 2006, Marin Dacos, Luc Santeramo, Bruno Cénou, Jean Lamy, Mikaël Cixous, Sophie Malafosse
  59.  * @copyright 2007, Marin Dacos, Bruno Cénou, Sophie Malafosse, Pierre-Alain Mignot
  60.  * @licence http://www.gnu.org/copyleft/gpl.html
  61.  * @since Fichier ajouté depuis la version 0.8
  62.  * @see logic.php
  63.  * @see view.php
  64.  */
  65. class Controler 
  66. {
  67.  
  68.     /**
  69.      * Constructeur de la classe Controler.
  70.      *
  71.      * Ce constructeur se charge du nettoyage des variables $_POST, $_GET dans un premier temps. Puis
  72.      * suivant la logique appelée et l'action demandée il se charge d'appeler la bonne logique métier.
  73.      * Enfin, suivant le résultat de cet appel il appelle vue correspondante.
  74.      *
  75.      *
  76.      * exemple :
  77.      * <code>
  78.      * <?php
  79.      * $lo = "entities";
  80.      * Controler::controler(array("entities","entities_advanced","entities_edition",
  81.      * "entities_import", "entities_index", "filebrowser", "tasks","xml"),$lo);
  82.      * ?>
  83.      * </code>
  84.      *
  85.      * @param array $logics Les logiques métiers acceptées par le point d'entrée
  86.      * @param string $lo La logique métier appelée. Par défaut cette valeur est vide
  87.      * @param array $request La requête à traiter, si elle n'est passée ni en GET ni en POST (dans un script par ex.) : utilisé pour l'import massif de XML
  88.      * 
  89.      */
  90.     function Controler($logics$lo ''$request array())
  91.     {
  92.         global $home$context;
  93.         
  94.         // si la requete provient d'un script qui appelle le controleur
  95.         if (!empty($request)) {
  96.             $context array_merge($context$request);
  97.             $therequest $request;
  98.         // GET ou POST
  99.         else {
  100.             if ($_POST{
  101.                 $therequest &$_POST;
  102.             else {
  103.                 $therequest &$_GET;
  104.             }
  105.         }
  106.         
  107.         $do $therequest['do'];
  108.         
  109.         if ($do == 'back'{
  110.             require_once 'view.php';
  111.             View::back(2)//revient 2 rang en arrière dans l'historique.
  112.             return;
  113.         }
  114.         require_once 'func.php';
  115.         extract_post($therequest)// nettoyage des valeurs issues de formulaire
  116.  
  117.         if ($do{
  118.             if ($therequest['lo']{
  119.                 $lo $therequest['lo'];
  120.             }
  121.             if ($lo != 'texts' && !in_array($lo$logics)) {
  122.                 trigger_error("ERROR: unknown logic"E_USER_ERROR);
  123.             }
  124.             $context['lo'$lo;
  125.  
  126.             // get the various common parameters
  127.             require_once 'validfunc.php';
  128.             foreach (array('class''classtype''type''textgroups'as $var{
  129.                 if ($therequest[$var]{
  130.                     if (!validfield($therequest[$var]$var))
  131.                         die("ERRORa valid $var name is required");
  132.                     $context[$var$therequest[$var];
  133.                 }
  134.             }
  135.  
  136.             // ids. Warning: don't remove this, the security in the following rely on these ids are real int.
  137.             foreach (array('id''idgroup''idclass''idparent'as $var{
  138.                 $context[$varintval($therequest[$var]);
  139.             }
  140.  
  141.                   // dir
  142.             if ($therequest['dir'&& ($therequest['dir'== 'up' || 
  143.                     $therequest['dir'== 'down' || 
  144.                     is_numeric($therequest['dir']))) 
  145.                 $context['dir'$therequest['dir'];
  146.  
  147.             // valid the request
  148.             if (!preg_match("/^[a-zA-Z]+$/"$do)) 
  149.                 die("ERROR: invalid action");
  150.             $do $do'Action';
  151.             
  152.             require_once 'logic.php';
  153.             // que fait-on suivant l'action demandée
  154.             switch($do{
  155.                 case 'listAction' :
  156.                     recordurl()//enregistre l'url dans la pile
  157.                 #case 'viewAction' :
  158.                     #recordurl();
  159.                 default:
  160.                     $logic &getLogic($lo);
  161.                     // create the logic for the table
  162.                     if (!method_exists($logic$do)) {
  163.                         if ($do == 'listAction'{
  164.                             $ret '_ok';
  165.                         else {
  166.                             die('ERROR: invalid action');
  167.                         }
  168.                     else {
  169.                         // call the logic action
  170.                         $ret $logic->$do($context$error);
  171.                     }
  172.             }
  173.             if (!$ret{
  174.                 die('ERROR: invalid return from the logic.');
  175.             }
  176.  
  177.             //Appel de la vue nécessaire
  178.             require_once 'view.php';
  179.             $view &View::getView();
  180.             switch($ret{
  181.                 case '_next' // si le controleur est appelé par un script
  182.                     return 'ok';
  183.                 case '_back' :
  184.                     $view->back();
  185.                     break;
  186.                       case '_error' :
  187.                     // hum... needs to remove the slashes... don't really like that, because some value may still 
  188.                     // come from  database or lodel. Doing this way is not a security issue but may forbide
  189.                     // user to use \' in there text
  190.                     #require_once 'func.php';
  191.                     mystripslashes($context);
  192.                     $logic->viewAction($context$error)// in case anything is needed to be put in the context
  193.                     $context['error'$error;
  194.                     //print_r($error);
  195.                 case '_ok' :
  196.                     if ($do == 'listAction'{
  197.                         $view->renderCached($context$lo);
  198.                     else {
  199.                         $view->render($context"edit_$lo");
  200.                     }
  201.                     break;
  202.             default:
  203.                 if (strpos($ret'_location:'=== 0{
  204.                     header(substr($ret1));
  205.                     exit;
  206.                 }
  207.                 $view->render($context$ret);
  208.             }
  209.         else {
  210.             require_once 'view.php';
  211.             $view &View::getView();
  212.             $view->renderCached($context'index');
  213.         }
  214.   // constructor }}}
  215. // }}}
  216. ?>

Documentation generated on Thu, 17 Jul 2008 05:07:29 +0200 by phpDocumentor 1.4.0a2