izForm
[ class tree: izForm ] [ index: izForm ] [ all elements ]

Source for file izform.class.php

Documentation is available at izform.class.php

  1. <?php
  2.  
  3.  
  4. /**
  5. * Classe de génération et de contrôle de formulaires
  6. *
  7. * @package izForm
  8. * @author Loic Mathaud <loic@mathaud.net>
  9. *
  10. */
  11. # ******* BEGIN LICENSE BLOCK *******
  12. #
  13. # Copyright (c) 2003, Loic Mathaud
  14. # All rights reserved.
  15. #
  16. # Redistribution and use in source and binary forms, with or without
  17. # modification, are permitted provided that the following conditions are met:
  18. #
  19. # * Redistributions of source code must retain the above copyright notice,
  20. # this list of conditions and the following disclaimer.
  21. # * Redistributions in binary form must reproduce the above copyright notice,
  22. # this list of conditions and the following disclaimer in the documentation
  23. # and/or other materials provided with the distribution.
  24. # * Neither the name of izForm nor the names of its contributors
  25. # may be used to endorse or promote products derived from this software
  26. # without specific prior written permission.
  27. #
  28. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  29. # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
  30. # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  31. # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
  32. # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
  33. # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  34. # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  35. # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  36. # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  37. # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  38. # THE POSSIBILITY OF SUCH DAMAGE
  39. #
  40. # ******* END LICENSE BLOCK *******
  41.  
  42.  
  43.  
  44. /**
  45. * définie la balise par défaut qui encadre les éléments de formulaire
  46. */
  47. define( 'IZF_DEFAULT_WRAPPER', 'P' );
  48.  
  49.  
  50.  
  51. /**
  52. * classe IzForm
  53. *
  54. * @package izForm
  55. */
  56. class IzForm {
  57. /**
  58. * Chaîne de caractère contenant la sortie html du formulaire
  59. *
  60. * @var string
  61. * @access private
  62. */
  63. var $elementsHtml;
  64. /**
  65. * Tableau contenant les éléments du formulaire
  66. *
  67. * @var array
  68. * @access private
  69. */
  70. var $elements = array();
  71. /**
  72. * Tableau contenant les éléments à charger dans une liste déroulante
  73. *
  74. * @var array
  75. * @access private
  76. */
  77. var $selectElements = array();
  78. /**
  79. * Tableau de 2 valeurs contenant les indices qui permettront de positionner un élément fieldset
  80. *
  81. * @var array
  82. * @access private
  83. */
  84. var $fieldSetElements = array();
  85. /**
  86. * Tableau de 2 valeurs contenant les indices qui permettront de positionner un élément optgroup dans une liste déroulante
  87. *
  88. * @var array
  89. * @access private
  90. */
  91. var $optGroupElements = array();
  92. /**
  93. * Tableau qui est la copie du tableau superglobal correspond à la méthode employée pour soumettre le formulaire
  94. *
  95. * @var array
  96. * @access public
  97. */
  98. var $submittedData = array();
  99. /**
  100. * Tableau des valeurs à contrôler une fois le formulaire soumis
  101. *
  102. * @var array
  103. * @access private
  104. */
  105. var $verifData = array();
  106. /**
  107. * Défini la manière dont est affiché le label
  108. *
  109. * Par défaut, vaut 'wrapp' : le label englobe l'élément de formulaire
  110. * Autre valeur possible : 'nowrapp' : le label est refermé avant l'élément de formulaire
  111. *
  112. * @var string
  113. */
  114. var $labelMode = 'wrapp';
  115. /**
  116. * Constructeur de la classe
  117. *
  118. * Défini le script cible du formulaire, la méthode par laquelle il est soumis
  119. * et quel est le type d'encryption de celui-ci
  120. * Le constructeur enregistre la balise d'ouverture du formulaire,
  121. * copie dans la variable de classe {@link $submittedData} le bon tableau superglobal en fonction
  122. * de la méthode employée pour envoyer le formulaire
  123. *
  124. * @param string $method methode par laquelle est soumis le formulaire. Peut prendre les valeurs 'post' ou 'get' ('post' par defaut)
  125. * @param string $action script cible du formulaire. Si $action n'est pas spécifiée elle prend pour valeur le script même qui contient le formulaire
  126. * @param string $id identifiant du formulaire. Prend 'form1' par défaut
  127. * @param int $enctype type d'encryption du formulaire (0: multipart/form-data, 1: application/x-www-form-urlencoded)
  128. * @access public
  129. */
  130. function IzForm( $method = 'post', $action = '', $id = 'form1', $enctype = 1 ) {
  131. $this->method = strtoupper( $method );
  132. if ( $this->method == 'POST' ) {
  133. $this->submittedData = $_POST;
  134. } elseif ( $this->method == 'GET' ) {
  135. $this->submittedData == $_GET;
  136. }
  137. switch ($enctype) {
  138. case 0:
  139. $enctype = "multipart/form-data";
  140. break;
  141. case 1:
  142. $enctype = "application/x-www-form-urlencoded";
  143. break;
  144. }
  145. $attributes['action'] = ( $action == '' ) ? $_SERVER['PHP_SELF'] : $action;
  146. $attributes['id'] = $id;
  147. $attributes['method'] = strtolower( $method );
  148. $attributes['enctype'] = $enctype;
  149. $res = array( 'type' => 'open_form', 'attributes' => $attributes );
  150. $this->setElement($res);
  151. }
  152. /**
  153. * Ajoute un element de type input type="text" au formulaire
  154. *
  155. * @param string $name nom du champs texte
  156. * @param string $label label du champs texte: texte placé devant le champ pour l'identifier
  157. * @param string $value valeur du champs texte
  158. * @param int $size taille du champs texte
  159. * @param int $maxlength taille maximale du champs texte
  160. * @param string $id identifiant du champs texte. Si n'est pas affecté, prend la valeur de $name
  161. * @param string $before élement ouvrant encadrant le champs texte. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  162. * @param string $after élement fermant encadrant le champs texte. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  163. * @param string $lbl_attributes attributs pouvant être ajoutés au label du champs texte pour les css (class, id, style inline) ou du javascript
  164. * @param string $elem_attributes attributs pouvant être ajoutés au champs texte pour les css (class, id, style inline) ou du javascript ou autre
  165. * @access public
  166. */
  167. function addText( $name, $label = '', $value = '' , $size = '', $maxlength = '', $id = '', $before = '', $after = '', $elem_attributes = '', $lbl_attributes = '' ) {
  168. $attributes['name'] = $name;
  169. $attributes['label'] = $label;
  170. $attributes['value'] = $value;
  171. $attributes['size'] = $size;
  172. $attributes['maxlength'] = $maxlength;
  173. $attributes['id'] = ( empty($id) ? $name : $id );
  174. $before = ( empty($before) ? IZF_DEFAULT_WRAPPER : $before );
  175. $after = ( empty($after) ? IZF_DEFAULT_WRAPPER : $after );
  176. $attributes['before'] = $before;
  177. $attributes['after'] = $after;
  178. $attributes['lbl_attributes'] = '';
  179. $attributes['elem_attributes'] = '';
  180. if ( !empty($lbl_attributes) ) {
  181. $attributes['lbl_attributes'] = ' '. $lbl_attributes;
  182. }
  183. if ( !empty($elem_attributes) ) {
  184. $attributes['elem_attributes'] = ' '. $elem_attributes;
  185. }
  186. $res = array( 'type' => 'text', 'attributes' => $attributes);
  187. $wrappOpenAttributes['description'] = 'open';
  188. $wrappCloseAttributes['description'] = 'close';
  189. $wrappOpen = array( 'type' => 'wrapp_'. $before, 'attributes' => $wrappOpenAttributes );
  190. $wrappClose = array( 'type' => 'wrapp_'. $after, 'attributes' => $wrappCloseAttributes );
  191. $this->setElement($wrappOpen);
  192. $this->setElement($res);
  193. $this->setElement($wrappClose);
  194. }
  195. /**
  196. * Ajoute un element de type input type="password" au formulaire
  197. *
  198. * @param string $name nom du champs password
  199. * @param string $label label du champs password: texte place devant le champ pour l'identifier
  200. * @param string $value valeur du champs password
  201. * @param int $size taille du champs password
  202. * @param int $maxlength taille maximale du champs password
  203. * @param string $id identifiant du champs password. Si n'est pas affecté, prend la valeur de $name
  204. * @param string $before élement ouvrant encadrant le champs password. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  205. * @param string $after élement fermant encadrant le champs password. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  206. * @param string $lbl_attributes attributs pouvant être ajoutés au label du champs password pour les css (class, id, style inline) ou du javascript
  207. * @param string $elem_attributes attributs pouvant être ajoutés au champs password pour les css (class, id, style inline) ou du javascript ou autre
  208. * @access public
  209. */
  210. function addPassword( $name, $label = '', $value = '', $size = '', $maxlength = '', $id = '', $before = '', $after = '', $elem_attributes = '', $lbl_attributes = '' ) {
  211. $attributes['name'] = $name;
  212. $attributes['label'] = $label;
  213. $attributes['value'] = $value;
  214. $attributes['size'] = $size;
  215. $attributes['maxlength'] = $maxlength;
  216. $attributes['id'] = ( empty($id) ? $name : $id );
  217. $before = ( empty($before) ? IZF_DEFAULT_WRAPPER : $before );
  218. $after = ( empty($after) ? IZF_DEFAULT_WRAPPER : $after );
  219. $attributes['before'] = $before;
  220. $attributes['after'] = $after;
  221. $attributes['lbl_attributes'] = '';
  222. $attributes['elem_attributes'] = '';
  223. if ( !empty($lbl_attributes) ) {
  224. $attributes['lbl_attributes'] = ' '. $lbl_attributes;
  225. }
  226. if ( !empty($elem_attributes) ) {
  227. $attributes['elem_attributes'] = ' '. $elem_attributes;
  228. }
  229. $res = array( 'type' => 'password', 'attributes' => $attributes);
  230. $wrappOpenAttributes['description'] = 'open';
  231. $wrappCloseAttributes['description'] = 'close';
  232. $wrappOpen = array( 'type' => 'wrapp_'. $before, 'attributes' => $wrappOpenAttributes );
  233. $wrappClose = array( 'type' => 'wrapp_'. $after, 'attributes' => $wrappCloseAttributes );
  234. $this->setElement($wrappOpen);
  235. $this->setElement($res);
  236. $this->setElement($wrappClose);
  237. }
  238. /**
  239. * Ajoute un element de type input type="checkbox" au formulaire
  240. *
  241. * @param string $name nom de l'élément checkbox
  242. * @param string $label label de l'élément checkbox : texte place après l'élement pour l'identifier
  243. * @param string $value valeur de l'élément checkbox
  244. * @param boolen $check valeur par défaut de l'état de la case à cocher (0 = non cochée, 1 = cochée)
  245. * @param string $id identifiant de l'élément checkbox. Si n'est pas affecté, prend la valeur de $name
  246. * @param string $before élement ouvrant encadrant l'élément checkbox. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  247. * @param string $after élement fermant encadrant l'élément checkbox. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  248. * @param string $lbl_attributes attributs pouvant être ajoutés au label de l'élément checkbox pour les css (class, id, style inline) ou du javascript
  249. * @param string $elem_attributes attributs pouvant être ajoutés à l'élément checkbox pour les css (class, id, style inline) ou du javascript ou autre
  250. * @access public
  251. */
  252. function addCheckBox( $name, $label, $value, $check = 0, $id = '', $before = '', $after = '', $elem_attributes = '', $lbl_attributes = '' ) {
  253. $attributes['name'] = $name;
  254. $attributes['label'] = $label;
  255. $attributes['value'] = $value;
  256. $attributes['check'] = $check;
  257. $attributes['id'] = ( empty($id) ? $name . '-' . $value : $id );
  258. $before = ( empty($before) ? IZF_DEFAULT_WRAPPER : $before );
  259. $after = ( empty($after) ? IZF_DEFAULT_WRAPPER : $after );
  260. $attributes['before'] = $before;
  261. $attributes['after'] = $after;
  262. $attributes['lbl_attributes'] = '';
  263. $attributes['elem_attributes'] = '';
  264. if ( !empty($lbl_attributes) ) {
  265. $attributes['lbl_attributes'] = ' '. $lbl_attributes;
  266. }
  267. if ( !empty($elem_attributes) ) {
  268. $attributes['elem_attributes'] = ' '. $elem_attributes;
  269. }
  270. $res = array( 'type' => 'checkbox', 'attributes' => $attributes);
  271. $wrappOpenAttributes['description'] = 'open';
  272. $wrappCloseAttributes['description'] = 'close';
  273. $wrappOpen = array( 'type' => 'wrapp_'. $before, 'attributes' => $wrappOpenAttributes );
  274. $wrappClose = array( 'type' => 'wrapp_'. $after, 'attributes' => $wrappCloseAttributes );
  275. $this->setElement($wrappOpen);
  276. $this->setElement($res);
  277. $this->setElement($wrappClose);
  278. }
  279. /**
  280. * Ajoute un element de type input type="radio" au formulaire
  281. *
  282. * @param string $name nom de l'élément radio
  283. * @param string $label label de l'élément radio : texte place après l'élement pour l'identifier
  284. * @param string $value valeur de l'élément radio
  285. * @param boolen $check valeur par défaut de l'état du bouton radio (0 = non coché, 1 = coché)
  286. * @param string $id identifiant de l'élément radio. Si n'est pas affecté, prend la valeur de $name
  287. * @param string $before élement ouvrant encadrant l'élément radio. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  288. * @param string $after élement fermant encadrant l'élément radio. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  289. * @param string $lbl_attributes attributs pouvant être ajoutés au label de l'élément radio pour les css (class, id, style inline) ou du javascript
  290. * @param string $elem_attributes attributs pouvant être ajoutés à l'élément radio pour les css (class, id, style inline) ou du javascript ou autre
  291. * @access public
  292. */
  293. function addRadio( $name, $label, $value, $check = 0, $id = '', $before = '', $after = '', $elem_attributes = '', $lbl_attributes = '' ) {
  294. $attributes['name'] = $name;
  295. $attributes['label'] = $label;
  296. $attributes['value'] = $value;
  297. $attributes['check'] = $check;
  298. $attributes['id'] = ( empty($id) ? $name . '-' . $value : $id );
  299. $before = ( empty($before) ? IZF_DEFAULT_WRAPPER : $before );
  300. $after = ( empty($after) ? IZF_DEFAULT_WRAPPER : $after );
  301. $attributes['before'] = $before;
  302. $attributes['after'] = $after;
  303. $attributes['lbl_attributes'] = '';
  304. $attributes['elem_attributes'] = '';
  305. if ( !empty($lbl_attributes) ) {
  306. $attributes['lbl_attributes'] = ' '. $lbl_attributes;
  307. }
  308. if ( !empty($elem_attributes) ) {
  309. $attributes['elem_attributes'] = ' '. $elem_attributes;
  310. }
  311. $res = array( 'type' => 'radio', 'attributes' => $attributes);
  312. $wrappOpenAttributes['description'] = 'open';
  313. $wrappCloseAttributes['description'] = 'close';
  314. $wrappOpen = array( 'type' => 'wrapp_'. $before, 'attributes' => $wrappOpenAttributes );
  315. $wrappClose = array( 'type' => 'wrapp_'. $after, 'attributes' => $wrappCloseAttributes );
  316. $this->setElement($wrappOpen);
  317. $this->setElement($res);
  318. $this->setElement($wrappClose);
  319. }
  320. /**
  321. * Ajoute un element de type input type="submit" au formulaire
  322. *
  323. * @param string $value valeur du bouton submit (texte affiché sur le bouton)
  324. * @param string $name nom du bouton submit
  325. * @param string $label label du bouton submit : texte place devant le bouton pour l'identifier
  326. * @param string $id identifiant du bouton submit. Si n'est pas affecté, prend la valeur de $name
  327. * @param string $before élement ouvrant encadrant le bouton submit. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  328. * @param string $after élement fermant encadrant le bouton submit. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  329. * @param string $lbl_attributes attributs pouvant être ajoutés au label du bouton submit pour les css (class, id, style inline) ou du javascript
  330. * @param string $elem_attributes attributs pouvant être ajoutés au bouton submit pour les css (class, id, style inline) ou du javascript ou autre
  331. * @access public
  332. */
  333. function addSubmit( $value, $name = '', $label = '', $id = '', $before = '', $after = '', $lbl_attributes = '', $elem_attributes = '' ) {
  334. $attributes['value'] = $value;
  335. $attributes['name'] = $name;
  336. $attributes['label'] = $label;
  337. $attributes['id'] = ( empty($id) ? $name : $id );
  338. $before = ( empty($before) ? IZF_DEFAULT_WRAPPER : $before );
  339. $after = ( empty($after) ? IZF_DEFAULT_WRAPPER : $after );
  340. $attributes['before'] = $before;
  341. $attributes['after'] = $after;
  342. $attributes['lbl_attributes'] = '';
  343. $attributes['elem_attributes'] = '';
  344. if ( !empty($lbl_attributes) ) {
  345. $attributes['lbl_attributes'] = ' '. $lbl_attributes;
  346. }
  347. if ( !empty($elem_attributes) ) {
  348. $attributes['elem_attributes'] = ' '. $elem_attributes;
  349. }
  350. $res = array( 'type' => 'submit', 'attributes' => $attributes);
  351. $wrappOpenAttributes['description'] = 'open';
  352. $wrappCloseAttributes['description'] = 'close';
  353. $wrappOpen = array( 'type' => 'wrapp_'. $before, 'attributes' => $wrappOpenAttributes );
  354. $wrappClose = array( 'type' => 'wrapp_'. $after, 'attributes' => $wrappCloseAttributes );
  355. $this->setElement($wrappOpen);
  356. $this->setElement($res);
  357. $this->setElement($wrappClose);
  358. }
  359. /**
  360. * Ajoute un element de type input type="reset" au formulaire
  361. *
  362. * @param string $value valeur du bouton reset (texte affiché sur le bouton)
  363. * @param string $name nom du bouton reset
  364. * @param string $label label du bouton reset : texte place devant le bouton pour l'identifier
  365. * @param string $id identifiant du bouton reset. Si n'est pas affecté, prend la valeur de $name
  366. * @param string $before élement ouvrant encadrant le bouton reset. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  367. * @param string $after élement fermant encadrant le bouton reset. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  368. * @param string $lbl_attributes attributs pouvant être ajoutés au label du bouton reset pour les css (class, id, style inline) ou du javascript
  369. * @param string $elem_attributes attributs pouvant être ajoutés au bouton reset pour les css (class, id, style inline) ou du javascript ou autre
  370. * @access public
  371. */
  372. function addReset( $value, $name = '', $label = '', $id = '', $before = '', $after = '', $lbl_attributes = '', $elem_attributes = '' ) {
  373. $attributes['value'] = $value;
  374. $attributes['name'] = $name;
  375. $attributes['label'] = $label;
  376. $attributes['id'] = ( empty($id) ? $name : $id );
  377. $before = ( empty($before) ? IZF_DEFAULT_WRAPPER : $before );
  378. $after = ( empty($after) ? IZF_DEFAULT_WRAPPER : $after );
  379. $attributes['before'] = $before;
  380. $attributes['after'] = $after;
  381. $attributes['lbl_attributes'] = '';
  382. $attributes['elem_attributes'] = '';
  383. if ( !empty($lbl_attributes) ) {
  384. $attributes['lbl_attributes'] = ' '. $lbl_attributes;
  385. }
  386. if ( !empty($elem_attributes) ) {
  387. $attributes['elem_attributes'] = ' '. $elem_attributes;
  388. }
  389. $res = array( 'type' => 'reset', 'attributes' => $attributes);
  390. $wrappOpenAttributes['description'] = 'open';
  391. $wrappCloseAttributes['description'] = 'close';
  392. $wrappOpen = array( 'type' => 'wrapp_'. $before, 'attributes' => $wrappOpenAttributes );
  393. $wrappClose = array( 'type' => 'wrapp_'. $after, 'attributes' => $wrappCloseAttributes );
  394. $this->setElement($wrappOpen);
  395. $this->setElement($res);
  396. $this->setElement($wrappClose);
  397. }
  398. /**
  399. * Ajoute un element de type input type="file" au formulaire
  400. *
  401. * @param string $name nom du bouton parcourir pour joindre un fichier
  402. * @param string $label label du bouton parcourir : texte place devant le bouton pour l'identifier
  403. * @param string $id identifiant du bouton parcourir. Si n'est pas affecté, prend la valeur de $name
  404. * @param string $before élement ouvrant encadrant le bouton parcourir. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  405. * @param string $after élement fermant encadrant le bouton parcourir. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  406. * @param string $lbl_attributes attributs pouvant être ajoutés au label du bouton parcourir pour les css (class, id, style inline) ou du javascript
  407. * @param string $elem_attributes attributs pouvant être ajoutés au bouton parcourir pour les css (class, id, style inline) ou du javascript ou autre
  408. * @access public
  409. */
  410. function addFile( $name , $label = '', $id = '', $before = '', $after = '', $lbl_attributes = '', $elem_attributes = '' ) {
  411. $attributes['name'] = $name;
  412. $attributes['label'] = $label;
  413. $attributes['id'] = ( empty($id) ? $name : $id );
  414. $before = ( empty($before) ? IZF_DEFAULT_WRAPPER : $before );
  415. $after = ( empty($after) ? IZF_DEFAULT_WRAPPER : $after );
  416. $attributes['before'] = $before;
  417. $attributes['after'] = $after;
  418. $attributes['lbl_attributes'] = '';
  419. $attributes['elem_attributes'] = '';
  420. if ( !empty($lbl_attributes) ) {
  421. $attributes['lbl_attributes'] = ' '. $lbl_attributes;
  422. }
  423. if ( !empty($elem_attributes) ) {
  424. $attributes['elem_attributes'] = ' '. $elem_attributes;
  425. }
  426. $res = array( 'type' => 'file', 'attributes' => $attributes);
  427. $wrappOpenAttributes['description'] = 'open';
  428. $wrappCloseAttributes['description'] = 'close';
  429. $wrappOpen = array( 'type' => 'wrapp_'. $before, 'attributes' => $wrappOpenAttributes );
  430. $wrappClose = array( 'type' => 'wrapp_'. $after, 'attributes' => $wrappCloseAttributes );
  431. $this->setElement($wrappOpen);
  432. $this->setElement($res);
  433. $this->setElement($wrappClose);
  434. }
  435. /**
  436. * Ajoute un element de type input type="hidden" au formulaire
  437. *
  438. * @param string $name nom du champ caché
  439. * @param string $value valeur du champ caché
  440. * @access public
  441. */
  442. function addHidden( $name, $value) {
  443. $attributes['name'] = $name;
  444. $attributes['value'] = $value;
  445. $res = array( 'type' => 'hidden', 'attributes' => $attributes);
  446. $this->setElement($res);
  447. }
  448. /**
  449. * Ajoute un element de type textarea au formulaire
  450. *
  451. * @param string $name nom de la zone de texte
  452. * @param int $rows nombre de lignes de la zone de texte
  453. * @param int $cols nombre de colonnes de la zone de texte
  454. * @param string $label label de la zone de texte : texte place devant cette zone pour l'identifier
  455. * @param string $value valeur de la zone de texte
  456. * @param string $id identifiant unique de la zone de texte. Si n'est pas affecté, prend la valeur de $name
  457. * @param string $before élement ouvrant encadrant la zone de texte. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  458. * @param string $after élement fermant encadrant la zone de texte. Peut prendre 3 valeurs : P (paragraphe), D (div) ou B (espace). Vaut P par défaut
  459. * @param string $lbl_attributes attributs pouvant être ajoutés au label de la zone de texte pour les css (class, id, style inline) ou du javascript
  460. * @param string $elem_attributes attributs pouvant être ajoutés à la zone de texte pour les css (class, id, style inline) ou du javascript ou autre
  461. * @access public
  462. */
  463. function addTextArea( $name, $rows, $cols, $label = '', $value = '', $id = '', $before = '', $after = '', $lbl_attributes = '', $elem_attributes = '' ) {
  464. $attributes['name'] = $name;
  465. $attributes['rows'] = $rows;
  466. $attributes['cols'] = $cols;
  467. $attributes['label'] = $label;
  468. $attributes['value'] = $value;
  469. $attributes['id'] = ( empty($id) ? $name : $id );
  470. $before = ( empty($before) ? IZF_DEFAULT_WRAPPER : $before );
  471. $after = ( empty($after) ? IZF_DEFAULT_WRAPPER : $after );
  472. $attributes['before'] = $before;
  473. $attributes['after'] = $after;
  474. $attributes['lbl_attributes'] = '';
  475. $attributes['elem_attributes'] = '';
  476. if ( !empty($lbl_attributes) ) {
  477. $attributes['lbl_attributes'] = ' '. $lbl_attributes;
  478. }
  479. if ( !empty($elem_attributes) ) {
  480. $attributes['elem_attributes'] = ' '. $elem_attributes;
  481. }
  482. $res = array( 'type' => 'textarea', 'attributes' => $attributes);
  483. $wrappOpenAttributes['description'] = 'open';
  484. $wrappCloseAttributes['description'] = 'close';
  485. $wrappOpen = array( 'type' => 'wrapp_'. IZF_DEFAULT_WRAPPER, 'attributes' => $wrappOpenAttributes );
  486. $wrappClose = array( 'type' => 'wrapp_'. IZF_DEFAULT_WRAPPER, 'attributes' => $wrappCloseAttributes );
  487. $this->setElement($wrappOpen);
  488. $this->setElement($res);
  489. $this->setElement($wrappClose);
  490. }
  491. /**
  492. * Ajoute un paragraphe de texte dans le formulaire
  493. *
  494. * @param string $value texte du paragraphe
  495. * @param string $elem_attributes attributs pouvant être ajoutés au paragraphe pour les css (class, id, style inline)
  496. * @access public
  497. */
  498. function addParagraph( $value, $elem_attributes = '' ) {
  499. $attributes['value'] = $value;
  500. $attributes['elem_attributes'] = '';
  501. if ( !empty($elem_attributes) ) {
  502. $attributes['elem_attributes'] = ' '. $elem_attributes;
  503. }
  504. $res = array( 'type' => 'paragraph', 'attributes' => $attributes);
  505. $this->setElement($res);
  506. }
  507. /**
  508. * Ajoute un élément '<option></option> dans une liste déroulante
  509. * Charge la paire valeur/label dans la liste deroulante
  510. *
  511. * addDataInSelect précharge en fait les données qui seront dans la liste déroulante
  512. * Il faut donc précharger toutes les valaurs que l'on souhaite pour la liste avant d'ajouter celle-ci
  513. * avec la méthode {@link addSelect()}
  514. *
  515. * @param string $value valeur de l'attribut 'value' de la balise 'option'
  516. * @param string $label texte visible de l'element option de la liste deroulante
  517. * @access public
  518. */
  519. function addDataInSelect( $value, $label ) {
  520. $attributes['value'] = $value;
  521. $attributes['label'] = $label;
  522. $res = array( 'type' => 'option', 'attributes' => $attributes);
  523. $this->setSelectElement($res);
  524. }
  525. /**
  526. * Ajoute un élément dans le tableau selectElement[], tableau de préchargement des éléments pour une lsite déroulante
  527. *
  528. * @param array $res tableau associatif contenu la valeur et le label de la balise '<option>' à rajouter à la liste déroulante
  529. * @access private
  530. */
  531. function setSelectElement( $res ) {
  532. $this->selectElements[] = $res;
  533. }
  534. /**
  535. * Défini les limites pour mettre des éléments '<option>' d'une liste déroulante dans une balsie '<optgroup>'
  536. *
  537. * Cette méthode défini les bornes parmi les éléments déjà préchargés par la méthode {@link addDataInSelect()}
  538. *
  539. * @param string $start élement de début. Correspond à l'attribut $value du premier élément qui sera dans l'optgroup
  540. * @param string $end élement de fin. Correspond à l'attribut $value du dernier élément qui sera dans l'optgroup
  541. * @access public
  542. */
  543. function setOptGroupLimiters( $start, $end ) {
  544. foreach ( $this->selectElements as $id => $elem ) {
  545. foreach ( $elem as $k => $attribut ) {
  546. if ( $k == 'attributes' ) {
  547. if ( isset($