2006-12-02 04:36:16 +00:00
< ? php
/*
2008-12-12 16:36:45 +00:00
* e107 website system
*
* Copyright ( C ) 2001 - 2008 e107 Inc ( e107 . org )
* Released under the terms and conditions of the
* GNU General Public License ( http :// www . gnu . org / licenses / gpl . txt )
*
* Form Handler
*
* $Source : / cvs_backup / e107_0 . 8 / e107_handlers / form_handler . php , v $
2009-07-17 07:53:13 +00:00
* $Revision : 1.36 $
* $Date : 2009 - 07 - 17 07 : 53 : 13 $
2009-07-03 02:27:03 +00:00
* $Author : e107coders $
2008-12-12 16:36:45 +00:00
*
2006-12-02 04:36:16 +00:00
*/
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
if ( ! defined ( 'e107_INIT' )) { exit ; }
2008-12-12 16:36:45 +00:00
/**
* Automate Form fields creation . Produced markup is following e107 CSS / XHTML standards
* If options argument is omitted , default values will be used ( which OK most of the time )
* Options are intended to handle some very special cases .
*
* Overall field options format ( array or GET string like this one : var1 = val1 & var2 = val2 ... ) :
*
* - id => ( mixed ) custom id attribute value
* if numeric value is passed it ' ll be just appended to the name e . g . { filed - name } - { value }
* if false is passed id will be not created
* if empty string is passed ( or no 'id' option is found )
* in all other cases the value will be used as field id
* default : empty string
*
* - class = > ( string ) field class ( es )
* Example : 'tbox select class1 class2 class3'
* NOTE : this will override core classes , so you have to explicit include them !
* default : empty string
*
* - size => ( int ) size attribute value ( used when needed )
* default : 40
2008-12-16 14:22:01 +00:00
*
2008-12-12 22:39:17 +00:00
* - title ( string ) title attribute
* default : empty string ( omitted )
2008-12-12 16:36:45 +00:00
*
* - readonly => ( bool ) readonly attribute
* default : false
2008-12-16 14:22:01 +00:00
*
2008-12-12 22:39:17 +00:00
* - selected => ( bool ) selected attribute ( used when needed )
* default : false
2008-12-16 14:22:01 +00:00
*
2008-12-12 22:39:17 +00:00
* checked => ( bool ) checked attribute ( used when needed )
* default : false
2008-12-12 16:36:45 +00:00
* - disabled => ( bool ) disabled attribute
* default : false
*
* - tabindex => ( int ) tabindex attribute value
* default : inner tabindex counter
*
* - other => ( string ) additional data
* Example : 'attribute1="value1" attribute2="value2"'
* default : empty string
*/
class e_form
{
var $_tabindex_counter = 0 ;
var $_tabindex_enabled = true ;
var $_cached_attributes = array ();
2009-05-10 17:31:51 +00:00
/**
* @ var user_class
*/
2009-01-20 20:46:26 +00:00
var $_uc ;
2008-12-12 16:36:45 +00:00
2008-12-17 11:08:31 +00:00
function e_form ( $enable_tabindex = false )
2008-12-12 16:36:45 +00:00
{
$this -> _tabindex_enabled = $enable_tabindex ;
2009-01-20 20:46:26 +00:00
$e107 = & e107 :: getInstance ();
2009-01-20 22:37:49 +00:00
$this -> _uc = & $e107 -> user_class ;
2008-12-12 16:36:45 +00:00
}
function text ( $name , $value , $maxlength = 200 , $options = array ())
{
$options = $this -> format_options ( 'text' , $name , $options );
2008-12-17 11:08:31 +00:00
//never allow id in format name-value for text fields
return " <input type='text' name=' { $name } ' value=' { $value } ' maxlength=' { $maxlength } ' " . $this -> get_attributes ( $options , $name ) . " /> " ;
2008-12-12 16:36:45 +00:00
}
2009-01-16 17:57:57 +00:00
function iconpicker ( $name , $default , $label , $sc_parameters = '' , $ajax = true )
{
2009-07-16 08:15:35 +00:00
// TODO - Hide the <input type='text'> element, and display the icon itself after it has been chosen.
// eg. <img id='iconview' src='".$img."' style='border:0; ".$blank_display."' alt='' />
// The button itself could be replaced with an icon just for this purpose.
2009-01-16 17:57:57 +00:00
$e107 = & e107 :: getInstance ();
$id = $this -> name2id ( $name );
$sc_parameters .= '&id=' . $id ;
$jsfunc = $ajax ? " e107Ajax.toggleUpdate(' { $id } -iconpicker', ' { $id } -iconpicker-cn', 'sc:iconpicker= " . urlencode ( $sc_parameters ) . " ', ' { $id } -iconpicker-ajax', { overlayElement: ' { $id } -iconpicker-button' }) " : " e107Helper.toggle(' { $id } -iconpicker') " ;
$ret = $this -> text ( $name , $default ) . $this -> admin_button ( $name . '-iconpicker-button' , $label , 'action' , '' , array ( 'other' => " onclick= \" { $jsfunc } \" " ));
$ret .= "
< div id = '{$id}-iconpicker' class = 'e-hideme' >
< div class = 'expand-container' id = '{$id}-iconpicker-cn' >
" .(! $ajax ? $e107->tp ->parseTemplate(' { ICONPICKER='. $sc_parameters .'}') : ''). "
</ div >
</ div >
" ;
return $ret ;
}
2008-12-16 14:22:01 +00:00
function file ( $name , $options = array ())
2008-12-12 22:39:17 +00:00
{
2009-01-15 15:42:24 +00:00
$options = $this -> format_options ( 'file' , $name , $options );
2008-12-17 11:08:31 +00:00
//never allow id in format name-value for text fields
2008-12-23 08:28:42 +00:00
return " <input type='file' name=' { $name } ' " . $this -> get_attributes ( $options , $name ) . " /> " ;
2008-12-12 22:39:17 +00:00
}
2008-12-16 14:22:01 +00:00
2008-12-12 22:39:17 +00:00
2008-12-12 16:36:45 +00:00
function password ( $name , $maxlength = 50 , $options = array ())
{
$options = $this -> format_options ( 'text' , $name , $options );
2008-12-17 11:08:31 +00:00
//never allow id in format name-value for text fields
return " <input type='password' name=' { $name } ' value='' maxlength=' { $maxlength } ' " . $this -> get_attributes ( $options , $name ) . " /> " ;
2008-12-12 16:36:45 +00:00
}
2008-12-12 22:39:17 +00:00
function textarea ( $name , $value , $rows = 15 , $cols = 40 , $options = array ())
2008-12-12 16:36:45 +00:00
{
2008-12-12 22:39:17 +00:00
$options = $this -> format_options ( 'textarea' , $name , $options );
2008-12-17 11:08:31 +00:00
//never allow id in format name-value for text fields
return " <textarea name=' { $name } ' rows=' { $rows } ' cols=' { $cols } ' " . $this -> get_attributes ( $options , $name ) . " > { $value } </textarea> " ;
2008-12-12 22:39:17 +00:00
}
2008-12-16 14:22:01 +00:00
2009-01-07 15:40:06 +00:00
function bbarea ( $name , $value , $help_mod = '' , $help_tagid = '' )
{
2009-07-14 11:05:54 +00:00
$options = array ( 'class' => 'tbox large e-wysiwyg' );
2009-01-07 15:40:06 +00:00
if ( ! defsettrue ( 'e_WYSIWYG' ))
{
require_once ( e_HANDLER . " ren_help.php " );
$options [ 'other' ] = " onselect='storeCaret(this);' onclick='storeCaret(this);' onkeyup='storeCaret(this);' " ;
$bbbar = display_help ( $help_tagid , $help_mod );
}
$ret = "
< div class = 'bbarea' >
< div class = 'field-spacer' >
" . $this->textarea ( $name , $value , 15, 50, $options ). "
</ div >
{ $bbbar }
</ div >
" ;
return $ret ;
}
2008-12-16 14:22:01 +00:00
function checkbox ( $name , $value , $checked = false , $options = array ())
2008-12-12 22:39:17 +00:00
{
$options [ 'checked' ] = $checked ; //comes as separate argument just for convenience
$options = $this -> format_options ( 'checkbox' , $name , $options );
2008-12-12 23:29:32 +00:00
return " <input type='checkbox' name=' { $name } ' value=' { $value } ' " . $this -> get_attributes ( $options , $name , $value ) . " /> " ;
2008-12-12 22:39:17 +00:00
2008-12-12 16:36:45 +00:00
}
2009-01-28 14:57:27 +00:00
2009-01-17 22:48:14 +00:00
function checkbox_switch ( $name , $value , $checked = false , $label = '' )
{
return $this -> checkbox ( $name , $value , $checked ) . $this -> label ( $label ? $label : LAN_ENABLED , $name , $value );
}
2008-12-16 14:22:01 +00:00
2008-12-30 13:51:41 +00:00
function checkbox_toggle ( $name , $selector = 'multitoggle' )
{
$selector = 'jstarget:' . $selector ;
return $this -> checkbox ( $name , $selector , false , array ( 'id' => false , 'class' => 'checkbox toggle-all' ));
}
2009-01-28 14:57:27 +00:00
2009-01-20 22:37:49 +00:00
function uc_checkbox ( $name , $current_value , $uc_options , $field_options = array ())
{
2009-01-28 14:57:27 +00:00
if ( ! is_array ( $field_options )) parse_str ( $field_options , $field_options );
2009-01-20 22:37:49 +00:00
return '
< div class = " check-block " >
'.$this->_uc->vetted_tree($name, array($this, ' _uc_checkbox_cb '), $current_value, $uc_options, $field_options).'
</ div >
' ;
}
2009-01-28 14:57:27 +00:00
2009-01-20 22:37:49 +00:00
function _uc_checkbox_cb ( $treename , $classnum , $current_value , $nest_level , $field_options )
{
if ( $classnum == e_UC_BLANK )
return '' ;
$tmp = explode ( ',' , $current_value );
$class = $style = '' ;
if ( $nest_level == 0 )
{
$class = " strong " ;
2009-01-28 14:57:27 +00:00
}
2009-01-20 22:37:49 +00:00
else
{
$style = " style='text-indent: " . ( 1.2 * $nest_level ) . " em' " ;
}
$descr = varset ( $field_options [ 'description' ]) ? ' <span class="smalltext">(' . $this -> _uc -> uc_get_classdescription ( $classnum ) . ')</span>' : '' ;
2009-01-28 14:57:27 +00:00
2009-01-20 22:59:39 +00:00
return " <div class='field-spacer { $class } ' { $style } > " . $this -> checkbox ( $treename . '[]' , $classnum , in_array ( $classnum , $tmp ), $field_options ) . $this -> label ( $this -> _uc -> uc_get_classname ( $classnum ) . $descr , $treename . '[]' , $classnum ) . " </div> \n " ;
2009-01-20 22:37:49 +00:00
}
2009-01-28 14:57:27 +00:00
2008-12-16 14:22:01 +00:00
function radio ( $name , $value , $checked = false , $options = array ())
2008-12-12 22:39:17 +00:00
{
$options [ 'checked' ] = $checked ; //comes as separate argument just for convenience
$options = $this -> format_options ( 'radio' , $name , $options );
2008-12-12 23:29:32 +00:00
return " <input type='radio' name=' { $name } ' value=' " . $value . " ' " . $this -> get_attributes ( $options , $name , $value ) . " /> " ;
2008-12-12 16:36:45 +00:00
2008-12-12 22:39:17 +00:00
}
2008-12-16 14:22:01 +00:00
2008-12-19 14:01:07 +00:00
function radio_switch ( $name , $checked_enabled = false , $label_enabled = '' , $label_disabled = '' )
{
return $this -> radio ( $name , 1 , $checked_enabled ) . " " . $this -> label ( $label_enabled ? $label_enabled : LAN_ENABLED , $name , 1 ) . "
" . $this->radio ( $name , 0, ! $checked_enabled ). " " . $this->label ( $label_disabled ? $label_disabled : LAN_DISABLED, $name , 0);
}
2009-01-15 15:42:24 +00:00
function radio_multi ( $name , $elements , $checked , $multi_line = false )
2008-12-19 14:01:07 +00:00
{
$text = array ();
if ( is_string ( $elements )) parse_str ( $elements , $elements );
foreach ( $elements as $value => $label )
{
$text [] = $this -> radio ( $name , $value , $checked == $value ) . " " . $this -> label ( $label , $name , $value );
}
2009-01-15 15:42:24 +00:00
if ( ! $multi_line )
return implode ( " " , $text );
2008-12-19 14:01:07 +00:00
2009-01-15 15:42:24 +00:00
return " <div class='field-spacer'> " . implode ( " </div><div class='field-spacer'> " , $text ) . " </div> " ;
2008-12-19 14:01:07 +00:00
}
2008-12-16 14:22:01 +00:00
function label ( $text , $name = '' , $value = '' )
2008-12-12 22:39:17 +00:00
{
2008-12-12 23:29:32 +00:00
$for_id = $this -> _format_id ( '' , $name , $value , 'for' );
return " <label $for_id > { $text } </label> " ;
2008-12-12 22:39:17 +00:00
}
2008-12-12 16:36:45 +00:00
2008-12-16 14:22:01 +00:00
function select_open ( $name , $options = array ())
2008-12-12 22:39:17 +00:00
{
$options = $this -> format_options ( 'select' , $name , $options );
2008-12-12 23:29:32 +00:00
return " <select name=' { $name } ' " . $this -> get_attributes ( $options , $name ) . " > " ;
2008-12-12 22:39:17 +00:00
}
2009-01-28 14:57:27 +00:00
2009-01-17 22:48:14 +00:00
function selectbox ( $name , $option_array , $selected = false , $options = array ())
{
return $this -> select_open ( $name , $options ) . " \n " . $this -> option_multi ( $option_array , $selected ) . " \n " . $this -> select_close ();
}
2009-01-20 22:37:49 +00:00
function uc_select ( $name , $current_value , $uc_options , $select_options = array (), $opt_options = array ())
2009-01-18 22:26:35 +00:00
{
2009-01-20 22:59:39 +00:00
return $this -> select_open ( $name , $select_options ) . " \n " . $this -> _uc -> vetted_tree ( $name , array ( $this , '_uc_select_cb' ), $current_value , $uc_options , $opt_options ) . " \n " . $this -> select_close ();
2009-01-18 22:26:35 +00:00
}
2009-01-28 14:57:27 +00:00
2009-01-18 22:26:35 +00:00
// Callback for vetted_tree - Creates the option list for a selection box
function _uc_select_cb ( $treename , $classnum , $current_value , $nest_level )
{
if ( $classnum == e_UC_BLANK )
return $this -> option ( ' ' , '' );
2009-05-10 17:31:51 +00:00
2009-01-18 22:26:35 +00:00
$tmp = explode ( ',' , $current_value );
if ( $nest_level == 0 )
{
$prefix = '' ;
$style = " font-weight:bold; font-style: italic; " ;
2009-01-28 14:57:27 +00:00
}
2009-01-18 22:26:35 +00:00
elseif ( $nest_level == 1 )
{
$prefix = ' ' ;
$style = " font-weight:bold " ;
2009-01-28 14:57:27 +00:00
}
2009-01-18 22:26:35 +00:00
else
{
$prefix = ' ' . str_repeat ( '--' , $nest_level - 1 ) . '>' ;
$style = '' ;
2009-01-28 14:57:27 +00:00
}
2009-01-20 22:59:39 +00:00
return $this -> option ( $prefix . $this -> _uc -> uc_get_classname ( $classnum ), $classnum , in_array ( $classnum , $tmp ), " style= { $style } " ) . " \n " ;
2009-01-18 22:26:35 +00:00
}
2008-12-16 14:22:01 +00:00
function optgroup_open ( $label , $disabled )
2008-12-12 22:39:17 +00:00
{
return " <optgroup class='optgroup' label=' { $label } ' " . ( $disabled ? " disabled='disabled' " : '' ) . " > " ;
}
2008-12-16 14:22:01 +00:00
function option ( $option_name , $value , $selected = false , $options = array ())
2008-12-12 22:39:17 +00:00
{
if ( false === $value ) $value = '' ;
$options = $this -> format_options ( 'option' , '' , $options );
2009-05-10 17:31:51 +00:00
$options [ 'selected' ] = $selected ; //comes as separate argument just for convenience
2008-12-12 22:39:17 +00:00
return " <option value=' { $value } ' " . $this -> get_attributes ( $options ) . " > { $option_name } </option> " ;
}
2009-01-28 14:57:27 +00:00
2009-01-17 22:48:14 +00:00
function option_multi ( $option_array , $selected = false , $options = array ())
{
if ( is_string ( $option_array )) parse_str ( $option_array , $option_array );
$text = '' ;
foreach ( $option_array as $value => $label )
{
$text .= $this -> option ( $label , $value , $selected == $value , $options ) . " \n " ;
}
return $text ;
}
2008-12-12 16:36:45 +00:00
2008-12-16 14:22:01 +00:00
function optgroup_close ()
2008-12-12 22:39:17 +00:00
{
return " </optgroup> " ;
}
2008-12-16 14:22:01 +00:00
function select_close ()
2008-12-12 22:39:17 +00:00
{
return " </select> " ;
}
2008-12-16 14:22:01 +00:00
function hidden ( $name , $value , $options = array ())
2008-12-12 22:39:17 +00:00
{
$options = $this -> format_options ( 'hidden' , $name , $options );
2008-12-12 23:29:32 +00:00
return " <input type='hidden' name=' { $name } ' value=' { $value } ' " . $this -> get_attributes ( $options , $name , $value ) . " /> " ;
2008-12-12 22:39:17 +00:00
}
2008-12-16 14:22:01 +00:00
function submit ( $name , $value , $options = array ())
2008-12-12 22:39:17 +00:00
{
$options = $this -> format_options ( 'submit' , $name , $options );
2008-12-17 11:08:31 +00:00
return " <input type='submit' name=' { $name } ' value=' { $value } ' " . $this -> get_attributes ( $options , $name , $value ) . " /> " ;
2008-12-12 22:39:17 +00:00
}
2008-12-16 14:22:01 +00:00
2008-12-17 11:08:31 +00:00
function submit_image ( $name , $value , $image , $title = '' , $options = array ())
2008-12-12 22:39:17 +00:00
{
2008-12-17 11:08:31 +00:00
$options = $this -> format_options ( 'submit_image' , $name , $options );
switch ( $image ) {
case 'edit' :
2009-07-17 03:53:14 +00:00
$image = ADMIN_EDIT_ICON_PATH ;
2008-12-17 11:08:31 +00:00
$options [ 'class' ] = 'action edit' ;
break ;
case 'delete' :
2009-07-17 03:53:14 +00:00
$image = ADMIN_DELETE_ICON_PATH ;
2008-12-17 11:08:31 +00:00
$options [ 'class' ] = 'action delete' ;
break ;
}
$options [ 'title' ] = $title ; //shorthand
return " <input type='image' src=' { $image } ' name=' { $name } ' value=' { $value } ' " . $this -> get_attributes ( $options , $name , $value ) . " /> " ;
2008-12-12 22:39:17 +00:00
}
2008-12-16 14:22:01 +00:00
2008-12-15 21:16:32 +00:00
function admin_button ( $name , $value , $action = 'submit' , $label = '' , $options = array ())
2008-12-12 22:39:17 +00:00
{
2008-12-17 11:08:31 +00:00
2008-12-12 22:39:17 +00:00
$btype = 'submit' ;
if ( $action == 'action' ) $btype = 'button' ;
$options = $this -> format_options ( 'admin_button' , $name , $options );
2008-12-17 11:08:31 +00:00
$options [ 'class' ] = $action ; //shorthand
2008-12-12 22:39:17 +00:00
if ( empty ( $label )) $label = $value ;
2008-12-16 14:22:01 +00:00
2008-12-12 22:39:17 +00:00
return "
2008-12-16 14:22:01 +00:00
< button type = '{$btype}' name = '{$name}' value = '{$value}' " . $this->get_attributes ( $options , $name ). " >< span > { $label } </ span ></ button >
2008-12-12 22:39:17 +00:00
" ;
}
2008-12-16 14:22:01 +00:00
2008-12-17 11:08:31 +00:00
function getNext ()
{
if ( ! $this -> _tabindex_enabled ) return 0 ;
$this -> _tabindex_counter += 1 ;
return $this -> _tabindex_counter ;
}
2009-01-17 22:48:14 +00:00
function getCurrent ()
{
if ( ! $this -> _tabindex_enabled ) return 0 ;
return $this -> _tabindex_counter ;
}
2009-01-28 14:57:27 +00:00
2009-01-17 22:48:14 +00:00
function resetTabindex ( $reset = 0 )
2008-12-17 11:08:31 +00:00
{
2009-01-17 22:48:14 +00:00
$this -> _tabindex_counter = $reset ;
2008-12-17 11:08:31 +00:00
}
2008-12-12 23:29:32 +00:00
function get_attributes ( $options , $name = '' , $value = '' )
2008-12-12 16:36:45 +00:00
{
$ret = '' ;
//
foreach ( $options as $option => $optval )
{
switch ( $option ) {
case 'id' :
2008-12-12 23:29:32 +00:00
$ret .= $this -> _format_id ( $optval , $name , $value );
2008-12-12 16:36:45 +00:00
break ;
case 'class' :
if ( ! empty ( $optval )) $ret .= " class=' { $optval } ' " ;
break ;
case 'size' :
if ( $optval ) $ret .= " size=' { $optval } ' " ;
break ;
2008-12-16 14:22:01 +00:00
2008-12-12 22:39:17 +00:00
case 'title' :
if ( $optval ) $ret .= " title=' { $optval } ' " ;
break ;
2008-12-12 16:36:45 +00:00
case 'tabindex' :
2009-01-17 22:48:14 +00:00
if ( $optval ) $ret .= " tabindex=' { $optval } ' " ;
elseif ( false === $optval || ! $this -> _tabindex_enabled ) break ;
else
{
$this -> _tabindex_counter += 1 ;
$ret .= " tabindex=' " . $this -> _tabindex_counter . " ' " ;
}
2008-12-12 16:36:45 +00:00
break ;
case 'readonly' :
if ( $optval ) $ret .= " readonly='readonly' " ;
break ;
2008-12-12 22:39:17 +00:00
case 'selected' :
if ( $optval ) $ret .= " selected='selected' " ;
break ;
2008-12-16 14:22:01 +00:00
2008-12-12 22:39:17 +00:00
case 'checked' :
if ( $optval ) $ret .= " checked='checked' " ;
break ;
2008-12-12 16:36:45 +00:00
case 'disabled' :
if ( $optval ) $ret .= " disabled='disabled' " ;
break ;
case 'other' :
if ( $optval ) $ret .= " $optval " ;
break ;
}
}
return $ret ;
}
2008-12-12 23:29:32 +00:00
/**
* Auto - build field attribute id
*
* @ param string $id_value value for attribute id passed with the option array
* @ param string $name the name attribute passed to that field
* @ param unknown_type $value the value attribute passed to that field
2009-01-16 17:57:57 +00:00
* @ return string formatted id attribute
2008-12-12 23:29:32 +00:00
*/
function _format_id ( $id_value , $name , $value = '' , $return_attribute = 'id' )
2008-12-12 16:36:45 +00:00
{
2008-12-12 23:29:32 +00:00
if ( $id_value === false ) return '' ;
2008-12-12 16:36:45 +00:00
2008-12-17 11:08:31 +00:00
//format data first
2009-01-16 17:57:57 +00:00
$name = $this -> name2id ( $name );
2008-12-17 11:08:31 +00:00
$value = trim ( preg_replace ( '#[^a-z0-9\-]/i#' , '-' , $value ), '-' );
if ( ! $id_value && is_numeric ( $value )) $id_value = $value ;
2008-12-16 14:22:01 +00:00
2008-12-12 23:29:32 +00:00
if ( empty ( $id_value ) ) return " { $return_attribute } =' { $name } " . ( $value ? " - { $value } " : '' ) . " ' " ; // also useful when name is e.g. name='my_name[some_id]'
elseif ( is_numeric ( $id_value ) && $name ) return " { $return_attribute } =' { $name } - { $id_value } ' " ; // also useful when name is e.g. name='my_name[]'
else return " { $return_attribute } =' { $id_value } ' " ;
2008-12-12 16:36:45 +00:00
}
2009-01-16 17:57:57 +00:00
function name2id ( $name )
{
return rtrim ( str_replace ( array ( '[]' , '[' , ']' , '_' ), array ( '-' , '-' , '' , '-' ), $name ), '-' );
}
2008-12-12 16:36:45 +00:00
/**
* Format options based on the field type ,
* merge with default
*
* @ param string $type
* @ param string $name form name attribute value
* @ param array | string $user_options
* @ return array merged options
*/
function format_options ( $type , $name , $user_options )
{
if ( is_string ( $user_options )) parse_str ( $user_options , $user_options );
$def_options = $this -> _default_options ( $type );
foreach ( array_keys ( $user_options ) as $key )
{
2008-12-17 11:08:31 +00:00
if ( ! isset ( $def_options [ $key ])) unset ( $user_options [ $key ]); //remove it?
2008-12-12 16:36:45 +00:00
}
$user_options [ 'name' ] = $name ; //required for some of the automated tasks
return array_merge ( $def_options , $user_options );
}
/**
* Get default options array based on the filed type
*
* @ param string $type
* @ return array default options
*/
function _default_options ( $type )
{
if ( isset ( $this -> _cached_attributes [ $type ])) return $this -> _cached_attributes [ $type ];
$def_options = array (
2008-12-12 22:39:17 +00:00
'id' => '' ,
2008-12-12 16:36:45 +00:00
'class' => '' ,
2008-12-12 22:39:17 +00:00
'title' => '' ,
2008-12-12 16:36:45 +00:00
'size' => '' ,
'readonly' => false ,
2008-12-12 22:39:17 +00:00
'selected' => false ,
'checked' => false ,
2008-12-12 16:36:45 +00:00
'disabled' => false ,
2008-12-12 22:39:17 +00:00
'tabindex' => 0 ,
2008-12-12 16:36:45 +00:00
'other' => ''
);
switch ( $type ) {
case 'hidden' :
2009-01-28 14:57:27 +00:00
$def_options = array ( 'id' => false , 'disabled' => false , 'other' => '' );
2008-12-12 16:36:45 +00:00
break ;
case 'text' :
$def_options [ 'class' ] = 'tbox input-text' ;
2008-12-12 22:39:17 +00:00
unset ( $def_options [ 'selected' ], $def_options [ 'checked' ]);
2008-12-12 16:36:45 +00:00
break ;
2009-01-15 15:42:24 +00:00
case 'file' :
$def_options [ 'class' ] = 'tbox file' ;
unset ( $def_options [ 'selected' ], $def_options [ 'checked' ]);
break ;
2008-12-12 16:36:45 +00:00
case 'textarea' :
$def_options [ 'class' ] = 'tbox textarea' ;
2008-12-12 22:39:17 +00:00
unset ( $def_options [ 'selected' ], $def_options [ 'checked' ], $def_options [ 'size' ]);
2008-12-12 16:36:45 +00:00
break ;
case 'select' :
$def_options [ 'class' ] = 'tbox select' ;
2008-12-12 22:39:17 +00:00
unset ( $def_options [ 'checked' ], $def_options [ 'checked' ]);
break ;
case 'option' :
$def_options = array ( 'class' => '' , 'selected' => false , 'other' => '' );
2008-12-12 16:36:45 +00:00
break ;
case 'radio' :
$def_options [ 'class' ] = 'radio' ;
2008-12-12 22:39:17 +00:00
unset ( $def_options [ 'size' ], $def_options [ 'selected' ]);
2008-12-12 16:36:45 +00:00
break ;
case 'checkbox' :
$def_options [ 'class' ] = 'checkbox' ;
2008-12-12 22:39:17 +00:00
unset ( $def_options [ 'size' ], $def_options [ 'selected' ]);
2008-12-12 16:36:45 +00:00
break ;
case 'submit' :
$def_options [ 'class' ] = 'button' ;
2008-12-12 22:39:17 +00:00
unset ( $def_options [ 'checked' ], $def_options [ 'selected' ], $def_options [ 'readonly' ]);
2008-12-12 16:36:45 +00:00
break ;
2008-12-17 11:08:31 +00:00
case 'submit_image' :
2008-12-17 11:12:44 +00:00
$def_options [ 'class' ] = 'action' ;
2008-12-17 11:08:31 +00:00
unset ( $def_options [ 'checked' ], $def_options [ 'selected' ], $def_options [ 'readonly' ]);
break ;
2008-12-12 16:36:45 +00:00
case 'admin_button' :
2008-12-12 22:39:17 +00:00
unset ( $def_options [ 'checked' ], $def_options [ 'selected' ], $def_options [ 'readonly' ]);
2008-12-12 16:36:45 +00:00
break ;
}
$this -> _cached_attributes [ $type ] = $def_options ;
return $def_options ;
}
2009-07-03 02:27:03 +00:00
function columnSelector ( $columnsArray , $columnsDefault = '' , $id = 'column_options' )
{
2009-07-15 09:38:00 +00:00
$text = " <div style='position:relative;float:right;'>
2009-07-03 02:27:03 +00:00
< a href = '#".$id."' class = 'e-expandit' style = 'height:16px' title = 'Click to select columns to display' >
2009-07-07 02:43:14 +00:00
< img class = 'middle' src = '".e_IMAGE_ABS."admin_images/select_columns_16.png' alt = 'select columns' /></ a >
2009-07-03 02:27:03 +00:00
< div id = '".$id."' class = 'e-hideme col-selection' > \n " ;
unset ( $columnsArray [ 'options' ]);
foreach ( $columnsArray as $key => $fld )
{
2009-07-14 03:18:17 +00:00
if ( ! varset ( $fld [ 'forced' ]))
2009-07-07 06:26:51 +00:00
{
$checked = ( in_array ( $key , $columnsDefault )) ? TRUE : FALSE ;
$text .= $this -> checkbox ( 'e-columns[]' , $key , $checked ) . $fld [ 'title' ] . " <br /> \n " ;
}
2009-07-03 02:27:03 +00:00
}
2009-07-07 06:26:51 +00:00
$text .= " <div id='button' style='text-align:right'> \n " ; // has issues with the checkboxes.
2009-07-03 02:27:03 +00:00
$text .= $this -> admin_button ( 'submit-e-columns' , 'Save' , 'Save' );
2009-07-07 06:26:51 +00:00
$text .= " </div> \n " ;
2009-07-03 02:27:03 +00:00
$text .= " </div></div> " ;
return $text ;
}
function colGroup ( $fieldarray , $columnPref = '' )
{
2009-07-14 03:18:17 +00:00
$text = " " ;
2009-07-17 07:53:13 +00:00
$count = 0 ;
2009-07-03 02:27:03 +00:00
foreach ( $fieldarray as $key => $val )
{
2009-07-14 03:18:17 +00:00
if ( in_array ( $key , $columnPref ) || $key == 'options' || varsettrue ( $val [ 'forced' ]))
2009-07-03 02:27:03 +00:00
{
2009-07-07 06:26:51 +00:00
$text .= " \n <col style='width: " . $val [ 'width' ] . " ;'></col> " ;
2009-07-17 07:53:13 +00:00
$count ++ ;
2009-07-03 02:27:03 +00:00
}
}
2009-07-17 07:53:13 +00:00
return " <colgroup span=' " . $count . " '> \n " . $text . " \n </colgroup> \n " ;
2009-07-03 02:27:03 +00:00
}
2009-07-17 07:53:13 +00:00
function thead ( $fieldarray , $columnPref = '' , $querypattern = '' )
2009-07-03 02:27:03 +00:00
{
2009-07-14 03:18:17 +00:00
$text = " " ;
2009-07-17 07:53:13 +00:00
$tmp = explode ( " . " , e_QUERY );
$etmp = explode ( " . " , $querypattern );
// Note: this function should probably be adapted to ALSO deal with $_GET. eg. ?mode=main&field=user_name&asc=desc&from=100
// or as a pattern: ?mode=main&field=[FIELD]&asc=[ASC]&from=[FROM]
foreach ( $etmp as $key => $val ) // I'm sure there's a more efficient way to do this, but too tired to see it right now!.
{
if ( $val == " [FIELD] " )
{
$field = $tmp [ $key ];
}
if ( $val == " [ASC] " )
{
$ascdesc = $tmp [ $key ];
}
if ( $val == " [FROM] " )
{
$fromval = $tmp [ $key ];
}
}
if ( ! $fromval ){ $fromval = 0 ; }
$ascdesc = ( $ascdesc == 'desc' ) ? 'asc' : 'desc' ;
2009-07-03 02:27:03 +00:00
foreach ( $fieldarray as $key => $val )
{
2009-07-14 03:18:17 +00:00
if ( in_array ( $key , $columnPref ) || $key == " options " || ( varsettrue ( $val [ 'forced' ])))
2009-07-03 02:27:03 +00:00
{
2009-07-14 03:18:17 +00:00
$cl = ( varset ( $val [ 'thclass' ])) ? " class=' " . $val [ 'thclass' ] . " ' " : " " ;
2009-07-17 07:53:13 +00:00
$text .= " \n \t <th id='e-column- " . $key . " ' { $cl } > " ;
if ( $querypattern != " " && ! varsettrue ( $val [ 'nosort' ]) && $key != " options " )
{
$from = ( $key == $field ) ? $fromval : 0 ;
$srch = array ( " [FIELD] " , " [ASC] " , " [FROM] " );
$repl = array ( $key , $ascdesc , $from );
$val [ 'url' ] = e_SELF . " ? " . str_replace ( $srch , $repl , $querypattern );
}
2009-07-14 03:18:17 +00:00
$text .= ( varset ( $val [ 'url' ])) ? " <a href=' " . $val [ 'url' ] . " '> " : " " ; // Really this column-sorting link should be auto-generated, or be autocreated via unobtrusive js.
2009-07-03 02:27:03 +00:00
$text .= $val [ 'title' ];
2009-07-17 07:53:13 +00:00
$text .= ( $val [ 'url' ]) ? " </a> " : " " ;
2009-07-04 13:36:15 +00:00
$text .= ( $key == " options " ) ? $this -> columnSelector ( $fieldarray , $columnPref ) : " " ;
2009-07-03 02:27:03 +00:00
2009-07-17 07:53:13 +00:00
2009-07-03 02:27:03 +00:00
$text .= " </th> " ;
}
}
2009-07-17 07:53:13 +00:00
return " <thead> \n <tr> \n " . $text . " \n </tr> \n </thead> \n \n " ;
2009-07-03 02:27:03 +00:00
}
2009-07-03 06:48:43 +00:00
// The 2 functions below are for demonstration purposes only, and may be moved/modified before release.
function filterType ( $fieldarray )
{
define ( " e_AJAX_REQUEST " , TRUE );
$text .= " <select name='search_filter[]' style='margin:2px' onchange='UpdateForm(this.options[selectedIndex].value)'> " ;
foreach ( $fieldarray as $key => $val )
{
$text .= ( $val [ 'type' ]) ? " <option value=' $key '> " . $val [ 'title' ] . " </option> \n " : " " ;
}
$text .= " </select> " ;
return $text ;
}
function filterValue ( $type , $fields )
{
2009-07-08 06:58:00 +00:00
2009-07-03 06:48:43 +00:00
if ( $type )
{
switch ( $fields [ $type ][ 'type' ]) {
case " datestamp " :
return " [date field] " ;
break ;
case " boolean " :
return " <select name='searchquery'><option value='1'> " . LAN_YES . " </option> \n
< option value = '0' > " .LAN_NO. " </ option >
</ select > " ;
break ;
case " user " :
return " <select name='searchquery'><option value='1'>User One</option><option value='2'>User Two</option></select> " ;
break ;
default :
return $this -> text ( 'searchquery' , '' , 50 );
}
}
else
{
return $this -> text ( 'searchquery' , '' , 50 );
}
// This needs to be dynamic for the various form types, and be loaded via ajax.
}
2008-12-12 16:36:45 +00:00
}
2006-12-02 04:36:16 +00:00
class form {
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
function form_open ( $form_method , $form_action , $form_name = " " , $form_target = " " , $form_enctype = " " , $form_js = " " ) {
$method = ( $form_method ? " method=' " . $form_method . " ' " : " " );
$target = ( $form_target ? " target=' " . $form_target . " ' " : " " );
$name = ( $form_name ? " id=' " . $form_name . " ' " : " id='myform' " );
return " \n <form action=' " . $form_action . " ' " . $method . $target . $name . $form_enctype . $form_js . " > " ;
}
2008-12-12 16:36:45 +00:00
2008-04-04 21:40:50 +00:00
function form_text ( $form_name , $form_size , $form_value , $form_maxlength = FALSE , $form_class = " tbox " , $form_readonly = " " , $form_tooltip = " " , $form_js = " " ) {
2006-12-02 04:36:16 +00:00
$name = ( $form_name ? " id=' " . $form_name . " ' name=' " . $form_name . " ' " : " " );
2007-03-23 21:46:57 +00:00
$value = ( isset ( $form_value ) ? " value=' " . $form_value . " ' " : " " );
2006-12-02 04:36:16 +00:00
$size = ( $form_size ? " size=' " . $form_size . " ' " : " " );
$maxlength = ( $form_maxlength ? " maxlength=' " . $form_maxlength . " ' " : " " );
$readonly = ( $form_readonly ? " readonly='readonly' " : " " );
$tooltip = ( $form_tooltip ? " title=' " . $form_tooltip . " ' " : " " );
return " \n <input class=' " . $form_class . " ' type='text' " . $name . $value . $size . $maxlength . $readonly . $tooltip . $form_js . " /> " ;
}
2008-12-12 16:36:45 +00:00
2008-04-04 21:40:50 +00:00
function form_password ( $form_name , $form_size , $form_value , $form_maxlength = FALSE , $form_class = " tbox " , $form_readonly = " " , $form_tooltip = " " , $form_js = " " ) {
2006-12-02 04:36:16 +00:00
$name = ( $form_name ? " id=' " . $form_name . " ' name=' " . $form_name . " ' " : " " );
2007-03-23 21:46:57 +00:00
$value = ( isset ( $form_value ) ? " value=' " . $form_value . " ' " : " " );
2006-12-02 04:36:16 +00:00
$size = ( $form_size ? " size=' " . $form_size . " ' " : " " );
$maxlength = ( $form_maxlength ? " maxlength=' " . $form_maxlength . " ' " : " " );
$readonly = ( $form_readonly ? " readonly='readonly' " : " " );
$tooltip = ( $form_tooltip ? " title=' " . $form_tooltip . " ' " : " " );
return " \n <input class=' " . $form_class . " ' type='password' " . $name . $value . $size . $maxlength . $readonly . $tooltip . $form_js . " /> " ;
}
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
function form_button ( $form_type , $form_name , $form_value , $form_js = " " , $form_image = " " , $form_tooltip = " " ) {
$name = ( $form_name ? " id=' " . $form_name . " ' name=' " . $form_name . " ' " : " " );
$image = ( $form_image ? " src=' " . $form_image . " ' " : " " );
$tooltip = ( $form_tooltip ? " title=' " . $form_tooltip . " ' " : " " );
return " \n <input class='button' type=' " . $form_type . " ' " . $form_js . " value=' " . $form_value . " ' " . $name . $image . $tooltip . " /> " ;
}
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
function form_textarea ( $form_name , $form_columns , $form_rows , $form_value , $form_js = " " , $form_style = " " , $form_wrap = " " , $form_readonly = " " , $form_tooltip = " " ) {
$name = ( $form_name ? " id=' " . $form_name . " ' name=' " . $form_name . " ' " : " " );
$readonly = ( $form_readonly ? " readonly='readonly' " : " " );
$tooltip = ( $form_tooltip ? " title=' " . $form_tooltip . " ' " : " " );
$wrap = ( $form_wrap ? " wrap=' " . $form_wrap . " ' " : " " );
$style = ( $form_style ? " style=' " . $form_style . " ' " : " " );
return " \n <textarea class='tbox' cols=' " . $form_columns . " ' rows=' " . $form_rows . " ' " . $name . $form_js . $style . $wrap . $readonly . $tooltip . " > " . $form_value . " </textarea> " ;
}
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
function form_checkbox ( $form_name , $form_value , $form_checked = 0 , $form_tooltip = " " , $form_js = " " ) {
$name = ( $form_name ? " id=' " . $form_name . $form_value . " ' name=' " . $form_name . " ' " : " " );
$checked = ( $form_checked ? " checked='checked' " : " " );
$tooltip = ( $form_tooltip ? " title=' " . $form_tooltip . " ' " : " " );
return " \n <input type='checkbox' value=' " . $form_value . " ' " . $name . $checked . $tooltip . $form_js . " /> " ;
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
}
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
function form_radio ( $form_name , $form_value , $form_checked = 0 , $form_tooltip = " " , $form_js = " " ) {
$name = ( $form_name ? " id=' " . $form_name . $form_value . " ' name=' " . $form_name . " ' " : " " );
$checked = ( $form_checked ? " checked='checked' " : " " );
$tooltip = ( $form_tooltip ? " title=' " . $form_tooltip . " ' " : " " );
return " \n <input type='radio' value=' " . $form_value . " ' " . $name . $checked . $tooltip . $form_js . " /> " ;
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
}
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
function form_file ( $form_name , $form_size , $form_tooltip = " " , $form_js = " " ) {
$name = ( $form_name ? " id=' " . $form_name . " ' name=' " . $form_name . " ' " : " " );
$tooltip = ( $form_tooltip ? " title=' " . $form_tooltip . " ' " : " " );
return " <input type='file' class='tbox' size=' " . $form_size . " ' " . $name . $tooltip . $form_js . " /> " ;
}
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
function form_select_open ( $form_name , $form_js = " " ) {
return " \n <select id=' " . $form_name . " ' name=' " . $form_name . " ' class='tbox' " . $form_js . " > " ;
}
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
function form_select_close () {
return " \n </select> " ;
}
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
function form_option ( $form_option , $form_selected = " " , $form_value = " " , $form_js = " " ) {
$value = ( $form_value !== FALSE ? " value=' " . $form_value . " ' " : " " );
$selected = ( $form_selected ? " selected='selected' " : " " );
return " \n <option " . $value . $selected . " " . $form_js . " > " . $form_option . " </option> " ;
}
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
function form_hidden ( $form_name , $form_value ) {
return " \n <input type='hidden' id=' " . $form_name . " ' name=' " . $form_name . " ' value=' " . $form_value . " ' /> " ;
}
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
function form_close () {
return " \n </form> " ;
}
}
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
/*
Usage
echo $rs -> form_open ( " post " , e_SELF , " _blank " );
echo $rs -> form_text ( " testname " , 100 , " this is the value " , 100 , 0 , " tooltip " );
echo $rs -> form_button ( " submit " , " testsubmit " , " SUBMIT! " , " " , " Click to submit " );
echo $rs -> form_button ( " reset " , " testreset " , " RESET! " , " " , " Click to reset " );
echo $rs -> form_textarea ( " textareaname " , 10 , 10 , " Value " , " overflow:hidden " );
echo $rs -> form_checkbox ( " testcheckbox " , 1 , 1 );
echo $rs -> form_checkbox ( " testcheckbox2 " , 2 );
echo $rs -> form_hidden ( " hiddenname " , " hiddenvalue " );
echo $rs -> form_radio ( " testcheckbox " , 1 , 1 );
echo $rs -> form_radio ( " testcheckbox " , 1 );
echo $rs -> form_file ( " testfile " , " 20 " );
echo $rs -> form_select_open ( " testselect " );
echo $rs -> form_option ( " Option 1 " );
echo $rs -> form_option ( " Option 2 " );
echo $rs -> form_option ( " Option 3 " , 1 , " defaultvalue " );
echo $rs -> form_option ( " Option 4 " );
echo $rs -> form_select_close ();
echo $rs -> form_close ();
*/
2008-12-12 16:36:45 +00:00
2006-12-02 04:36:16 +00:00
?>