PageRenderTime 53ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/inc/class/p8/class.p8.forms.php

https://bitbucket.org/DarkMantis/pfb
PHP | 427 lines | 336 code | 53 blank | 38 comment | 71 complexity | 8c519b6182e601e8e9badb7dee88e0d0 MD5 | raw file
  1. <?php
  2. /**
  3. * P8_Forms
  4. * class.p8.forms.php extends class.p8.php
  5. * stuart sillitoe | stuart@pulse8.co.uk
  6. *
  7. * collection of useful functions for outputting
  8. * dropdowns, radio groups and checkboxes etc from arrays
  9. * also date dropdown is here now, as it os a form element after all
  10. *
  11. *
  12. *
  13. */
  14. class P8_Forms extends P8 {
  15. function dropdownNumbers($name, $start, $stop, $increment, $selected = '') {
  16. $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth">';
  17. for($i = $start; $i <= $stop; $i = $i + $increment) {
  18. $out .= '<option ';
  19. if ($selected == $i) {
  20. $out .= ' selected="selected" ';
  21. }
  22. $out .= ' value="' . $i . '">' . $i . '</option>';
  23. }
  24. $out .= '</select>';
  25. return $out;
  26. }
  27. function dropdownArray($name, $array, $selected = '', $handler = '') {
  28. if (! is_array ( $array )) {
  29. return false;
  30. }
  31. $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
  32. if (! empty ( $handler )) {
  33. foreach ( $handler as $event => $function ) {
  34. $out .= ' on' . $event . '="' . $function . ';" ';
  35. }
  36. }
  37. $out .= '>';
  38. $out .= '<option value="">-- select</option>';
  39. foreach ( $array as $k => $v ) {
  40. if (is_array ( $v )) {
  41. $out .= '<optgroup label="' . $k . '">';
  42. foreach ( $v as $k2 => $v2 ) {
  43. $out .= '<option ';
  44. if ($selected == $k2) {
  45. $out .= ' selected="selected" ';
  46. }
  47. $out .= ' value="' . $k2 . '">' . $v2 . '</option>';
  48. }
  49. $out .= '</optgroup>';
  50. } else {
  51. $out .= '<option ';
  52. if ($selected == $k) {
  53. $out .= ' selected="selected" ';
  54. }
  55. $out .= ' value="' . $k . '">' . $v . '</option>';
  56. }
  57. }
  58. $out .= '</select>';
  59. return $out;
  60. }
  61. function dropdownAlphabet($name, $case = 'lower', $selected = '') {
  62. // uppercase: 65 - 90
  63. // lowercase: 97 -122
  64. if ($case == 'upper') {
  65. $start = 65;
  66. $stop = 90;
  67. } else if ($case == 'lower') {
  68. $start = 97;
  69. $stop = 122;
  70. }
  71. $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth">';
  72. for($i = $start; $i <= $stop; $i ++) {
  73. $letter = chr ( $i );
  74. $out .= '<option ';
  75. if ($selected == $letter) {
  76. $out .= ' selected="selected" ';
  77. }
  78. $out .= ' value="' . $letter . '">' . $letter . '</option>';
  79. }
  80. $out .= '</select>';
  81. return $out;
  82. }
  83. function checkboxArray($name, $array, $checked = array()) {
  84. if (! is_array ( $array )) {
  85. return false;
  86. }
  87. $out = '<fieldset>';
  88. $out .= '<legend>select ' . $name . '</legend>';
  89. foreach ( $array as $k => $v ) {
  90. $out .= '<label for="' . $name . '" class="inline">';
  91. $out .= '<input type="checkbox" name="' . $name . '[' . $k . ']" ';
  92. if ((is_array ( $checked ) && in_array ( $k, $checked )) || (is_array ( $checked ) && in_array ( $v, $checked ))) {
  93. $out .= ' checked="checked" ';
  94. }
  95. $out .= ' value="' . $v . '" class="autowidth inline" />';
  96. $out .= $v;
  97. $out .= '</label>';
  98. }
  99. $out .= '</fieldset>';
  100. return $out;
  101. }
  102. function radioArray($name, $legend, $array, $checked = '') {
  103. if (! is_array ( $array )) {
  104. die ( 'radioArray Error: <strong>' . $array . '</strong> is not an array<br/>' );
  105. return false;
  106. }
  107. $out = '<fieldset>';
  108. $out .= '<legend>' . $legend . '</legend>';
  109. foreach ( $array as $k => $v ) {
  110. $out .= '<label for="' . $name . '" class="inline">';
  111. $out .= '<input type="radio" name="' . $name . '" ';
  112. if ($k == $checked || $v == $checked) {
  113. $out .= ' checked="checked" ';
  114. }
  115. $out .= ' value="' . $v . '" class="autowidth inline" />';
  116. if ($v == 0) {
  117. $out .= 'No';
  118. } else if ($v == 1) {
  119. $out .= 'Yes';
  120. } else {
  121. $out .= $v;
  122. }
  123. $out .= '</label>';
  124. }
  125. $out .= '</fieldset>';
  126. return $out;
  127. }
  128. /* date and time dropdowns */
  129. //
  130. // can pass either a normal value to them or a full mysql datetime
  131. // example:
  132. // pass 13 to dropdownHour and the hour 13 will be selected
  133. // pass 2008-02-24 13:52:49 to it and the hour 13 will be selected...
  134. //
  135. // uses parseMysqlDatetime in class.p8.php
  136. function dropdownSecond($name, $selected = '', $handler = '') {
  137. // if its longer than 2 its likely to be a date / datetime
  138. if (strlen ( $selected ) > 2) {
  139. $datetime = $this->parseMysqlDateTime ( $selected );
  140. $selected = $datetime ['second'];
  141. }
  142. $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
  143. if (! empty ( $handler )) {
  144. foreach ( $handler as $event => $function ) {
  145. $out .= ' ' . $event . '="' . $function . ';" ';
  146. }
  147. }
  148. $out .= '>';
  149. for($i = 0; $i <= 60; $i ++) {
  150. $i = str_pad ( $i, 2, 0, STR_PAD_LEFT );
  151. $out .= '<option ';
  152. if ($selected == $i) {
  153. $out .= ' selected="selected" ';
  154. }
  155. $out .= ' value="' . $i . '">' . $i . '</option>';
  156. }
  157. $out .= '</select>';
  158. return $out;
  159. }
  160. function dropdownMinute($name, $selected = '', $handler = '') {
  161. // if its longer than 2 its likely to be a date / datetime
  162. if (strlen ( $selected ) > 2) {
  163. $datetime = $this->parseMysqlDateTime ( $selected );
  164. $selected = $datetime ['minute'];
  165. }
  166. $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
  167. if (! empty ( $handler )) {
  168. foreach ( $handler as $event => $function ) {
  169. $out .= ' ' . $event . '="' . $function . '" ';
  170. }
  171. }
  172. $out .= '>';
  173. for($i = 0; $i <= 60; $i ++) {
  174. $i = str_pad ( $i, 2, 0, STR_PAD_LEFT );
  175. $out .= '<option ';
  176. if ($selected == $i) {
  177. $out .= ' selected="selected" ';
  178. }
  179. $out .= ' value="' . $i . '">' . $i . '</option>';
  180. }
  181. $out .= '</select>';
  182. return $out;
  183. }
  184. function dropdownHour($name, $selected = '', $handler = '') {
  185. // if its longer than 2 its likely to be a date / datetime
  186. if (strlen ( $selected ) > 2) {
  187. $datetime = $this->parseMysqlDateTime ( $selected );
  188. $selected = $datetime ['hour'];
  189. }
  190. $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
  191. if (! empty ( $handler )) {
  192. foreach ( $handler as $event => $function ) {
  193. $out .= ' ' . $event . '="' . $function . '" ';
  194. }
  195. }
  196. $out .= '>';
  197. for($i = 0; $i <= 23; $i ++) {
  198. $out .= '<option ';
  199. if ($selected == $i) {
  200. $out .= ' selected="selected" ';
  201. }
  202. $out .= ' value="' . $i . '">' . $i . '</option>';
  203. }
  204. $out .= '</select>';
  205. return $out;
  206. }
  207. function dropdownDay($name, $selected = '', $handler = '') {
  208. // if its longer than 2 its likely to be a date / datetime
  209. if (strlen ( $selected ) > 2) {
  210. $datetime = $this->parseMysqlDateTime ( $selected );
  211. $selected = $datetime ['day'];
  212. }
  213. $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
  214. if (! empty ( $handler )) {
  215. foreach ( $handler as $event => $function ) {
  216. $out .= ' ' . $event . '="' . $function . '" ';
  217. }
  218. }
  219. $out .= '>';
  220. for($i = 1; $i <= 31; $i ++) {
  221. $i = str_pad ( $i, 2, 0, STR_PAD_LEFT );
  222. $out .= '<option ';
  223. if ($selected == $i) {
  224. $out .= ' selected="selected" ';
  225. }
  226. $out .= ' value="' . $i . '">' . $i . '</option>';
  227. }
  228. $out .= '</select>';
  229. return $out;
  230. }
  231. function dropdownMonth($name, $selected = '') {
  232. // if its longer than 2 its likely to be a date / datetime
  233. if (strlen ( $selected ) > 2) {
  234. $datetime = $this->parseMysqlDateTime ( $selected );
  235. $selected = $datetime ['month'];
  236. }
  237. $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
  238. if (! empty ( $handler )) {
  239. foreach ( $handler as $event => $function ) {
  240. $out .= ' ' . $event . '="' . $function . '" ';
  241. }
  242. }
  243. $out .= '>';
  244. for($i = 1; $i <= 12; $i ++) {
  245. $i = str_pad ( $i, 2, 0, STR_PAD_LEFT );
  246. $out .= '<option ';
  247. if ($selected == $i) {
  248. $out .= ' selected="selected" ';
  249. }
  250. $out .= ' value="' . $i . '">' . $i . '</option>';
  251. }
  252. $out .= '</select>';
  253. return $out;
  254. }
  255. // start and stop can either be years or a rang such as start = -5, stop = 5
  256. // which would give 5 years either side of now.
  257. function dropdownYear($name, $start = -5, $stop = 5, $selected = '', $handler = '') {
  258. // if its longer than 4 its likely to be a date / datetime
  259. if (strlen ( $selected ) > 4) {
  260. $datetime = $this->parseMysqlDateTime ( $selected );
  261. $selected = $datetime ['year'];
  262. }
  263. // if start is 0 or below, we intend to use a range
  264. // so add start to the year now, example: 2008 + -5 = 2003
  265. if ($start <= 0) {
  266. $start = date ( "Y" ) + $start;
  267. }
  268. if ($stop < date ( "Y" )) // simple check, improve.
  269. {
  270. $stop = date ( "Y" ) + $stop;
  271. }
  272. $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
  273. if (! empty ( $handler )) {
  274. foreach ( $handler as $event => $function ) {
  275. $out .= ' ' . $event . '="' . $function . '" ';
  276. }
  277. }
  278. $out .= '>';
  279. for($i = $start; $i <= $stop; $i ++) {
  280. $out .= '<option ';
  281. if ($selected == $i) {
  282. $out .= ' selected="selected" ';
  283. }
  284. $out .= ' value="' . $i . '">' . $i . '</option>';
  285. }
  286. $out .= '</select>';
  287. return $out;
  288. }
  289. // a date or datetime should be passed
  290. function dropdownDate($name, $start = '', $stop = '', $selected = '') {
  291. if (empty ( $start )) {
  292. $start = date ( "Y" ) - 100;
  293. }
  294. if (empty ( $stop )) {
  295. $stop = date ( "Y" );
  296. }
  297. $datetime = $this->parseMysqlDateTime ( $selected );
  298. $out = '<script type="text/javascript">
  299. function ' . $name . '_set()
  300. {
  301. document.getElementById(\'' . $name . '\').value = document.getElementById(\'' . $name . '_year\').options[document.getElementById(\'' . $name . '_year\').selectedIndex].value + \'-\';
  302. document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_month\').options[document.getElementById(\'' . $name . '_month\').selectedIndex].value + \'-\';
  303. document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_day\').options[document.getElementById(\'' . $name . '_day\').selectedIndex].value + \' \';
  304. }
  305. </script>';
  306. $out .= '<input type="hidden" name="' . $name . '" id="' . $name . '" value="' . $datetime ['date'] . '" />';
  307. $handler = array ('onchange' => $name . '_set()' );
  308. $out .= $this->dropdownDay ( $name . '_day', $datetime ['day'], $handler );
  309. $out .= $this->dropdownMonth ( $name . '_month', $datetime ['month'], $handler );
  310. $out .= $this->dropdownYear ( $name . '_year', $start, $stop, $datetime ['year'], $handler );
  311. return $out;
  312. }
  313. // a date or datetime should be passed
  314. function dropdownTime($name, $selected = '') {
  315. $datetime = $this->parseMysqlDateTime ( $selected );
  316. $out = '<script type="text/javascript">
  317. function ' . $name . '_set()
  318. {
  319. document.getElementById(\'' . $name . '\').value = document.getElementById(\'' . $name . '_hour\').options[document.getElementById(\'' . $name . '_hour\').selectedIndex].value + \':\';
  320. document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_minute\').options[document.getElementById(\'' . $name . '_minute\').selectedIndex].value + \':\';
  321. document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_second\').options[document.getElementById(\'' . $name . '_second\').selectedIndex].value;
  322. }
  323. </script>';
  324. $out .= '<input type="hidden" name="' . $name . '" id="' . $name . '" value="' . $datetime ['time'] . '" />';
  325. $handler = array ('onchange' => $name . '_set()' );
  326. $out .= $this->dropdownHour ( $name . '_hour', $datetime ['hour'], $handler );
  327. $out .= $this->dropdownMinute ( $name . '_minute', $datetime ['minute'], $handler );
  328. $out .= $this->dropdownSecond ( $name . '_second', $datetime ['second'], $handler );
  329. return $out;
  330. }
  331. // a date or datetime should be passed
  332. function dropdownDateTime($name, $start = '', $stop = '', $selected = '') {
  333. if (empty ( $start )) {
  334. $start = date ( "Y" ) - 100;
  335. }
  336. if (empty ( $stop )) {
  337. $stop = date ( "Y" );
  338. }
  339. $datetime = $this->parseMysqlDateTime ( $selected );
  340. $out = '<script type="text/javascript">
  341. function ' . $name . '_set()
  342. {
  343. document.getElementById(\'' . $name . '\').value = document.getElementById(\'' . $name . '_year\').options[document.getElementById(\'' . $name . '_year\').selectedIndex].value + \'-\';
  344. document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_month\').options[document.getElementById(\'' . $name . '_month\').selectedIndex].value + \'-\';
  345. document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_day\').options[document.getElementById(\'' . $name . '_day\').selectedIndex].value + \' \';
  346. document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_hour\').options[document.getElementById(\'' . $name . '_hour\').selectedIndex].value + \':\';
  347. document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_minute\').options[document.getElementById(\'' . $name . '_minute\').selectedIndex].value + \':\';
  348. document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_second\').options[document.getElementById(\'' . $name . '_second\').selectedIndex].value;
  349. }
  350. </script>';
  351. $out .= '<input type="hidden" name="' . $name . '" id="' . $name . '" value="' . $datetime ['datetime'] . '" />';
  352. $handler = array ('onchange' => $name . '_set()' );
  353. $out .= $this->dropdownDay ( $name . '_day', $datetime ['day'], $handler );
  354. $out .= $this->dropdownMonth ( $name . '_month', $datetime ['month'], $handler );
  355. $out .= $this->dropdownYear ( $name . '_year', $start, $stop, $datetime ['year'], $handler );
  356. $out .= $this->dropdownHour ( $name . '_hour', $datetime ['hour'], $handler );
  357. $out .= $this->dropdownMinute ( $name . '_minute', $datetime ['minute'], $handler );
  358. $out .= $this->dropdownSecond ( $name . '_second', $datetime ['second'], $handler );
  359. return $out;
  360. }
  361. /* inputs - not sure i will use them, lets build a few and see if its any good */
  362. // useful for making a formbuilder... hmmm...
  363. // and validator / required fields checker etc.
  364. function label($for, $label) {
  365. return '<label for="' . $for . '">' . $label . '</label>';
  366. }
  367. function input($type, $name, $id, $value = '') {
  368. return '<input type="' . $type . '" name="' . $name . '" id="' . $id . '" value="' . $value . '" />';
  369. }
  370. function textarea($name, $id, $value = '') {
  371. return '<textarea name="' . $name . '" id="' . $id . '">' . $value . '</textarea>';
  372. }
  373. }
  374. ?>