/inc/class/p8/class.p8.forms.php
PHP | 427 lines | 336 code | 53 blank | 38 comment | 71 complexity | 8c519b6182e601e8e9badb7dee88e0d0 MD5 | raw file
- <?php
- /**
- * P8_Forms
- * class.p8.forms.php extends class.p8.php
- * stuart sillitoe | stuart@pulse8.co.uk
- *
- * collection of useful functions for outputting
- * dropdowns, radio groups and checkboxes etc from arrays
- * also date dropdown is here now, as it os a form element after all
- *
- *
- *
- */
-
- class P8_Forms extends P8 {
-
- function dropdownNumbers($name, $start, $stop, $increment, $selected = '') {
- $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth">';
- for($i = $start; $i <= $stop; $i = $i + $increment) {
- $out .= '<option ';
- if ($selected == $i) {
- $out .= ' selected="selected" ';
- }
- $out .= ' value="' . $i . '">' . $i . '</option>';
- }
- $out .= '</select>';
- return $out;
- }
-
- function dropdownArray($name, $array, $selected = '', $handler = '') {
-
- if (! is_array ( $array )) {
- return false;
- }
- $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
-
- if (! empty ( $handler )) {
- foreach ( $handler as $event => $function ) {
- $out .= ' on' . $event . '="' . $function . ';" ';
- }
- }
-
- $out .= '>';
- $out .= '<option value="">-- select</option>';
- foreach ( $array as $k => $v ) {
- if (is_array ( $v )) {
- $out .= '<optgroup label="' . $k . '">';
- foreach ( $v as $k2 => $v2 ) {
- $out .= '<option ';
- if ($selected == $k2) {
- $out .= ' selected="selected" ';
- }
- $out .= ' value="' . $k2 . '">' . $v2 . '</option>';
- }
- $out .= '</optgroup>';
- } else {
- $out .= '<option ';
- if ($selected == $k) {
- $out .= ' selected="selected" ';
- }
- $out .= ' value="' . $k . '">' . $v . '</option>';
- }
- }
- $out .= '</select>';
- return $out;
- }
-
- function dropdownAlphabet($name, $case = 'lower', $selected = '') {
- // uppercase: 65 - 90
- // lowercase: 97 -122
- if ($case == 'upper') {
- $start = 65;
- $stop = 90;
- } else if ($case == 'lower') {
- $start = 97;
- $stop = 122;
- }
- $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth">';
- for($i = $start; $i <= $stop; $i ++) {
- $letter = chr ( $i );
- $out .= '<option ';
- if ($selected == $letter) {
- $out .= ' selected="selected" ';
- }
- $out .= ' value="' . $letter . '">' . $letter . '</option>';
- }
- $out .= '</select>';
- return $out;
- }
-
- function checkboxArray($name, $array, $checked = array()) {
- if (! is_array ( $array )) {
- return false;
- }
-
- $out = '<fieldset>';
- $out .= '<legend>select ' . $name . '</legend>';
- foreach ( $array as $k => $v ) {
- $out .= '<label for="' . $name . '" class="inline">';
- $out .= '<input type="checkbox" name="' . $name . '[' . $k . ']" ';
-
- if ((is_array ( $checked ) && in_array ( $k, $checked )) || (is_array ( $checked ) && in_array ( $v, $checked ))) {
- $out .= ' checked="checked" ';
- }
- $out .= ' value="' . $v . '" class="autowidth inline" />';
- $out .= $v;
- $out .= '</label>';
- }
- $out .= '</fieldset>';
-
- return $out;
- }
-
- function radioArray($name, $legend, $array, $checked = '') {
- if (! is_array ( $array )) {
- die ( 'radioArray Error: <strong>' . $array . '</strong> is not an array<br/>' );
- return false;
- }
-
- $out = '<fieldset>';
- $out .= '<legend>' . $legend . '</legend>';
- foreach ( $array as $k => $v ) {
- $out .= '<label for="' . $name . '" class="inline">';
- $out .= '<input type="radio" name="' . $name . '" ';
- if ($k == $checked || $v == $checked) {
- $out .= ' checked="checked" ';
- }
- $out .= ' value="' . $v . '" class="autowidth inline" />';
-
- if ($v == 0) {
- $out .= 'No';
- } else if ($v == 1) {
- $out .= 'Yes';
- } else {
- $out .= $v;
- }
-
- $out .= '</label>';
- }
- $out .= '</fieldset>';
- return $out;
- }
-
- /* date and time dropdowns */
- //
- // can pass either a normal value to them or a full mysql datetime
- // example:
- // pass 13 to dropdownHour and the hour 13 will be selected
- // pass 2008-02-24 13:52:49 to it and the hour 13 will be selected...
- //
- // uses parseMysqlDatetime in class.p8.php
-
-
- function dropdownSecond($name, $selected = '', $handler = '') {
- // if its longer than 2 its likely to be a date / datetime
- if (strlen ( $selected ) > 2) {
- $datetime = $this->parseMysqlDateTime ( $selected );
- $selected = $datetime ['second'];
- }
-
- $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
- if (! empty ( $handler )) {
- foreach ( $handler as $event => $function ) {
- $out .= ' ' . $event . '="' . $function . ';" ';
- }
- }
- $out .= '>';
- for($i = 0; $i <= 60; $i ++) {
- $i = str_pad ( $i, 2, 0, STR_PAD_LEFT );
- $out .= '<option ';
- if ($selected == $i) {
- $out .= ' selected="selected" ';
- }
- $out .= ' value="' . $i . '">' . $i . '</option>';
- }
- $out .= '</select>';
- return $out;
- }
-
- function dropdownMinute($name, $selected = '', $handler = '') {
- // if its longer than 2 its likely to be a date / datetime
- if (strlen ( $selected ) > 2) {
- $datetime = $this->parseMysqlDateTime ( $selected );
- $selected = $datetime ['minute'];
- }
-
- $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
- if (! empty ( $handler )) {
- foreach ( $handler as $event => $function ) {
- $out .= ' ' . $event . '="' . $function . '" ';
- }
- }
- $out .= '>';
- for($i = 0; $i <= 60; $i ++) {
- $i = str_pad ( $i, 2, 0, STR_PAD_LEFT );
- $out .= '<option ';
- if ($selected == $i) {
- $out .= ' selected="selected" ';
- }
- $out .= ' value="' . $i . '">' . $i . '</option>';
- }
- $out .= '</select>';
- return $out;
- }
-
- function dropdownHour($name, $selected = '', $handler = '') {
- // if its longer than 2 its likely to be a date / datetime
- if (strlen ( $selected ) > 2) {
- $datetime = $this->parseMysqlDateTime ( $selected );
- $selected = $datetime ['hour'];
- }
-
- $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
- if (! empty ( $handler )) {
- foreach ( $handler as $event => $function ) {
- $out .= ' ' . $event . '="' . $function . '" ';
- }
- }
- $out .= '>';
- for($i = 0; $i <= 23; $i ++) {
- $out .= '<option ';
- if ($selected == $i) {
- $out .= ' selected="selected" ';
- }
- $out .= ' value="' . $i . '">' . $i . '</option>';
- }
- $out .= '</select>';
- return $out;
- }
-
- function dropdownDay($name, $selected = '', $handler = '') {
- // if its longer than 2 its likely to be a date / datetime
- if (strlen ( $selected ) > 2) {
- $datetime = $this->parseMysqlDateTime ( $selected );
- $selected = $datetime ['day'];
- }
-
- $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
- if (! empty ( $handler )) {
- foreach ( $handler as $event => $function ) {
- $out .= ' ' . $event . '="' . $function . '" ';
- }
- }
- $out .= '>';
- for($i = 1; $i <= 31; $i ++) {
- $i = str_pad ( $i, 2, 0, STR_PAD_LEFT );
- $out .= '<option ';
- if ($selected == $i) {
- $out .= ' selected="selected" ';
- }
- $out .= ' value="' . $i . '">' . $i . '</option>';
- }
- $out .= '</select>';
- return $out;
- }
-
- function dropdownMonth($name, $selected = '') {
- // if its longer than 2 its likely to be a date / datetime
- if (strlen ( $selected ) > 2) {
- $datetime = $this->parseMysqlDateTime ( $selected );
- $selected = $datetime ['month'];
- }
-
- $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
- if (! empty ( $handler )) {
- foreach ( $handler as $event => $function ) {
- $out .= ' ' . $event . '="' . $function . '" ';
- }
- }
- $out .= '>';
- for($i = 1; $i <= 12; $i ++) {
- $i = str_pad ( $i, 2, 0, STR_PAD_LEFT );
- $out .= '<option ';
- if ($selected == $i) {
- $out .= ' selected="selected" ';
- }
- $out .= ' value="' . $i . '">' . $i . '</option>';
- }
- $out .= '</select>';
- return $out;
- }
-
- // start and stop can either be years or a rang such as start = -5, stop = 5
- // which would give 5 years either side of now.
- function dropdownYear($name, $start = -5, $stop = 5, $selected = '', $handler = '') {
- // if its longer than 4 its likely to be a date / datetime
- if (strlen ( $selected ) > 4) {
- $datetime = $this->parseMysqlDateTime ( $selected );
- $selected = $datetime ['year'];
- }
- // if start is 0 or below, we intend to use a range
- // so add start to the year now, example: 2008 + -5 = 2003
- if ($start <= 0) {
- $start = date ( "Y" ) + $start;
- }
- if ($stop < date ( "Y" )) // simple check, improve.
- {
- $stop = date ( "Y" ) + $stop;
- }
-
- $out = '<select name="' . $name . '" id="' . $name . '" class="autowidth" ';
- if (! empty ( $handler )) {
- foreach ( $handler as $event => $function ) {
- $out .= ' ' . $event . '="' . $function . '" ';
- }
- }
- $out .= '>';
-
- for($i = $start; $i <= $stop; $i ++) {
- $out .= '<option ';
- if ($selected == $i) {
- $out .= ' selected="selected" ';
- }
- $out .= ' value="' . $i . '">' . $i . '</option>';
- }
- $out .= '</select>';
- return $out;
- }
-
- // a date or datetime should be passed
- function dropdownDate($name, $start = '', $stop = '', $selected = '') {
- if (empty ( $start )) {
- $start = date ( "Y" ) - 100;
- }
- if (empty ( $stop )) {
- $stop = date ( "Y" );
- }
-
- $datetime = $this->parseMysqlDateTime ( $selected );
-
- $out = '<script type="text/javascript">
- function ' . $name . '_set()
- {
- document.getElementById(\'' . $name . '\').value = document.getElementById(\'' . $name . '_year\').options[document.getElementById(\'' . $name . '_year\').selectedIndex].value + \'-\';
- document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_month\').options[document.getElementById(\'' . $name . '_month\').selectedIndex].value + \'-\';
- document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_day\').options[document.getElementById(\'' . $name . '_day\').selectedIndex].value + \' \';
- }
- </script>';
-
- $out .= '<input type="hidden" name="' . $name . '" id="' . $name . '" value="' . $datetime ['date'] . '" />';
-
- $handler = array ('onchange' => $name . '_set()' );
-
- $out .= $this->dropdownDay ( $name . '_day', $datetime ['day'], $handler );
- $out .= $this->dropdownMonth ( $name . '_month', $datetime ['month'], $handler );
- $out .= $this->dropdownYear ( $name . '_year', $start, $stop, $datetime ['year'], $handler );
- return $out;
- }
-
- // a date or datetime should be passed
- function dropdownTime($name, $selected = '') {
- $datetime = $this->parseMysqlDateTime ( $selected );
-
- $out = '<script type="text/javascript">
- function ' . $name . '_set()
- {
- document.getElementById(\'' . $name . '\').value = document.getElementById(\'' . $name . '_hour\').options[document.getElementById(\'' . $name . '_hour\').selectedIndex].value + \':\';
- document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_minute\').options[document.getElementById(\'' . $name . '_minute\').selectedIndex].value + \':\';
- document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_second\').options[document.getElementById(\'' . $name . '_second\').selectedIndex].value;
- }
- </script>';
-
- $out .= '<input type="hidden" name="' . $name . '" id="' . $name . '" value="' . $datetime ['time'] . '" />';
-
- $handler = array ('onchange' => $name . '_set()' );
-
- $out .= $this->dropdownHour ( $name . '_hour', $datetime ['hour'], $handler );
- $out .= $this->dropdownMinute ( $name . '_minute', $datetime ['minute'], $handler );
- $out .= $this->dropdownSecond ( $name . '_second', $datetime ['second'], $handler );
- return $out;
- }
-
- // a date or datetime should be passed
- function dropdownDateTime($name, $start = '', $stop = '', $selected = '') {
- if (empty ( $start )) {
- $start = date ( "Y" ) - 100;
- }
- if (empty ( $stop )) {
- $stop = date ( "Y" );
- }
-
- $datetime = $this->parseMysqlDateTime ( $selected );
-
- $out = '<script type="text/javascript">
- function ' . $name . '_set()
- {
- document.getElementById(\'' . $name . '\').value = document.getElementById(\'' . $name . '_year\').options[document.getElementById(\'' . $name . '_year\').selectedIndex].value + \'-\';
- document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_month\').options[document.getElementById(\'' . $name . '_month\').selectedIndex].value + \'-\';
- document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_day\').options[document.getElementById(\'' . $name . '_day\').selectedIndex].value + \' \';
- document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_hour\').options[document.getElementById(\'' . $name . '_hour\').selectedIndex].value + \':\';
- document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_minute\').options[document.getElementById(\'' . $name . '_minute\').selectedIndex].value + \':\';
- document.getElementById(\'' . $name . '\').value += document.getElementById(\'' . $name . '_second\').options[document.getElementById(\'' . $name . '_second\').selectedIndex].value;
- }
- </script>';
-
- $out .= '<input type="hidden" name="' . $name . '" id="' . $name . '" value="' . $datetime ['datetime'] . '" />';
-
- $handler = array ('onchange' => $name . '_set()' );
-
- $out .= $this->dropdownDay ( $name . '_day', $datetime ['day'], $handler );
- $out .= $this->dropdownMonth ( $name . '_month', $datetime ['month'], $handler );
- $out .= $this->dropdownYear ( $name . '_year', $start, $stop, $datetime ['year'], $handler );
- $out .= $this->dropdownHour ( $name . '_hour', $datetime ['hour'], $handler );
- $out .= $this->dropdownMinute ( $name . '_minute', $datetime ['minute'], $handler );
- $out .= $this->dropdownSecond ( $name . '_second', $datetime ['second'], $handler );
- return $out;
- }
-
- /* inputs - not sure i will use them, lets build a few and see if its any good */
- // useful for making a formbuilder... hmmm...
- // and validator / required fields checker etc.
-
-
- function label($for, $label) {
- return '<label for="' . $for . '">' . $label . '</label>';
- }
-
- function input($type, $name, $id, $value = '') {
- return '<input type="' . $type . '" name="' . $name . '" id="' . $id . '" value="' . $value . '" />';
- }
-
- function textarea($name, $id, $value = '') {
- return '<textarea name="' . $name . '" id="' . $id . '">' . $value . '</textarea>';
- }
-
- }
- ?>