Source for file jForms.class.php

Documentation is available at jForms.class.php

  1. <?php
  2. /**
  3. @package     jelix
  4. @subpackage  forms
  5. @author      Laurent Jouanneau
  6. @contributor
  7. @copyright   2006-2009 Laurent Jouanneau
  8. @link        http://www.jelix.org
  9. @licence     http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
  10. */
  11.  
  12. /**
  13.  *
  14.  */
  15. require_once(JELIX_LIB_PATH.'forms/jFormsBase.class.php');
  16.  
  17. /**
  18.  * static class to manage and call a form
  19.  *
  20.  * A form is identified by a selector, and each instance of a form have a unique id (formId).
  21.  * This id can be the id of a record for example. If it is not given, the id is set to 0.
  22.  * @package     jelix
  23.  * @subpackage  forms
  24.  */
  25. class jForms {
  26.  
  27.     const ID_PARAM '__forms_id__';
  28.  
  29.     const DEFAULT_ID 0;
  30.  
  31.     const ERRDATA_INVALID 1;
  32.     const ERRDATA_REQUIRED 2;
  33.  
  34.     /**
  35.      * pure static class, so no constructor
  36.      */
  37.     private function __construct()}
  38.  
  39.     /**
  40.      * Create a new form with empty data
  41.      *
  42.      * Call it to create a new form, before to display it.
  43.      * Data of the form are stored in the php session in a jFormsDataContainer object.
  44.      * If a form with same id exists, data are erased.
  45.      *
  46.      * @param string $formSel the selector of the xml jform file
  47.      * @param string $formId  the id of the new instance (an id of a record for example)
  48.      * @return jFormBase the object representing the form
  49.      */
  50.     public static function create($formSel$formId=null){
  51.         $sel new jSelectorForm($formSel);
  52.         // normalize the selector to avoid conflict in session
  53.         $formSel $sel->toString()
  54.         jIncluder::inc($sel);
  55.         $c $sel->getClass();
  56.         if($formId === null)
  57.             $formId self::DEFAULT_ID;
  58.         $fid is_array($formIdserialize($formId$formId;
  59.         if(!isset($_SESSION['JFORMS'][$formSel][$fid])){
  60.             $dc $_SESSION['JFORMS'][$formSel][$fid]new jFormsDataContainer($formSel$formId);
  61.             if ($formId == self::DEFAULT_ID{
  62.                 $dc->refcount 1;
  63.             }
  64.         }
  65.         else {
  66.             $dc $_SESSION['JFORMS'][$formSel][$fid];
  67.             if ($formId == self::DEFAULT_ID
  68.                 $dc->refcount++;
  69.         }
  70.         $form new $c($formSel$dctrue);
  71.         return $form;
  72.     }
  73.  
  74.     /**
  75.      * get an existing instance of a form
  76.      *
  77.      * In your controller, call it before to re-display a form with existing data.
  78.      *
  79.      * @param string $formSel the selector of the xml jform file
  80.      * @param string $formId  the id of the form (if you use multiple instance of a form)
  81.      * @return jFormBase the object representing the form. Return null if there isn't an existing form
  82.      */
  83.     static public function get($formSel$formId=null){
  84.         global $gJCoord;
  85.         if($formId === null)
  86.             $formIdself::DEFAULT_ID;
  87.         $fid is_array($formIdserialize($formId$formId;
  88.  
  89.         $sel new jSelectorForm($formSel);
  90.         // normalize the selector to avoid conflict in session
  91.         $formSel $sel->toString();
  92.  
  93.         if(!isset($_SESSION['JFORMS'][$formSel][$fid])){
  94.             return null;
  95.         }
  96.  
  97.         jIncluder::inc($sel);
  98.         $c $sel->getClass();
  99.         $form new $c($formSel$_SESSION['JFORMS'][$formSel][$fid],false);
  100.  
  101.         return $form;
  102.     }
  103.  
  104.     /**
  105.      * get an existing instance of a form, and fill it with data provided by the request
  106.      *
  107.      * use it in the action called to submit a webform.
  108.      *
  109.      * @param string $formSel the selector of the xml jform file
  110.      * @param string $formId  the id of the form (if you use multiple instance of a form)
  111.      * @return jFormBase the object representing the form. Return null if there isn't an existing form
  112.      */
  113.     static public function fill($formSel,$formId=null){
  114.         $form self::get($formSel,$formId);
  115.         if($form)
  116.             $form->initFromRequest();
  117.         return $form;
  118.     }
  119.  
  120.     /**
  121.      * destroy a form in the session
  122.      *
  123.      * use it after saving data of a form, and if you don't want to re-display the form.
  124.      *
  125.      * @param string $formSel the selector of the xml jform file
  126.      * @param string $formId  the id of the form (if you use multiple instance of a form)
  127.      */
  128.     static public function destroy($formSel$formId=null){
  129.         global $gJCoord;
  130.         if($formId === null)  $formId self::DEFAULT_ID;
  131.         if(is_array($formId)) $formId serialize($formId);
  132.         
  133.         // normalize the selector to avoid conflict in session
  134.         $sel new jSelectorForm($formSel);
  135.         $formSel $sel->toString();
  136.  
  137.         if(isset($_SESSION['JFORMS'][$formSel][$formId])){
  138.             if ($formId == self::DEFAULT_ID{
  139.                 if((--$_SESSION['JFORMS'][$formSel][$formId]->refcount0{
  140.                   $_SESSION['JFORMS'][$formSel][$formId]->clear();
  141.                     return;
  142.                 }
  143.             }
  144.             unset($_SESSION['JFORMS'][$formSel][$formId]);
  145.         }
  146.     }
  147.  
  148.     /**
  149.      * destroy all form which are too old and unused
  150.      * @param integer $life the number of second of a life of a form
  151.      */
  152.     static public function clean($formSel=''$life=86400{
  153.         if(!isset($_SESSION['JFORMS'])) return;
  154.         if($formSel==''{
  155.             foreach($_SESSION['JFORMS'as $sel=>$f{
  156.                 self::clean($sel$life);
  157.             }
  158.         else {
  159.             // normalize the selector to avoid conflict in session
  160.             $sel new jSelectorForm($formSel);
  161.             $formSel $sel->toString();
  162.             
  163.             if(isset($_SESSION['JFORMS'][$formSel])) {
  164.                 $t time();
  165.                 foreach($_SESSION['JFORMS'][$formSelas $id=>$cont{
  166.                     if($t-$cont->updatetime $life)
  167.                         unset($_SESSION['JFORMS'][$formSel][$id]);
  168.                 }
  169.             }
  170.         }
  171.     }
  172. }

Documentation generated on Thu, 22 Mar 2012 22:15:33 +0100 by phpDocumentor 1.4.3