From 3f78a8be2d5bf34fb18712172c09e634fdcfdffe Mon Sep 17 00:00:00 2001 From: Cameron Date: Thu, 23 Oct 2014 18:53:50 -0700 Subject: [PATCH] Added checkboxes form element. --- e107_handlers/admin_ui.php | 16 ++++++-- e107_handlers/form_handler.php | 68 ++++++++++++++++++++++++++++++++-- 2 files changed, 77 insertions(+), 7 deletions(-) diff --git a/e107_handlers/admin_ui.php b/e107_handlers/admin_ui.php index 578d4b853..d173506f6 100644 --- a/e107_handlers/admin_ui.php +++ b/e107_handlers/admin_ui.php @@ -3188,6 +3188,7 @@ class e_admin_controller_ui extends e_admin_controller case 'lanlist': case 'userclasses': case 'comma': + case 'checkboxes': if(is_array($value)) { // no sanitize here - data is added to model posted stack @@ -3548,11 +3549,16 @@ class e_admin_controller_ui extends e_admin_controller if($filterField && $filterValue !== '' && isset($this->fields[$filterField])) { $_type = $this->fields[$filterField]['data']; - if($this->fields[$filterField]['type'] === 'comma') $_type = 'set'; + + if($this->fields[$filterField]['type'] === 'comma' || $this->fields[$filterField]['type'] === 'checkboxes') + { + $_type = 'set'; + } + switch ($_type) { case 'set': - $searchQry[] = "FIND_IN_SET('".$tp->toDB($filterValue)."',".$this->fields[$filterField]['__tableField'].")"; + $searchQry[] = "FIND_IN_SET('".$tp->toDB($filterValue)."', ".$this->fields[$filterField]['__tableField'].")"; break; case 'int': @@ -3802,8 +3808,9 @@ class e_admin_controller_ui extends e_admin_controller } // Debug Filter Query. - - // echo $qry.'
'; + e107::getMessage()->addDebug('QRY='.$qry); + // echo $qry.'
'; + // print_a($this->fields); // print_a($_GET); return $qry; @@ -5620,6 +5627,7 @@ class e_admin_form_ui extends e_form } break; + case 'checkboxes': case 'comma': // TODO lan if(!isset($parms['__options'])) $parms['__options'] = array(); diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php index 7270dfabc..d8a7df080 100644 --- a/e107_handlers/form_handler.php +++ b/e107_handlers/form_handler.php @@ -1268,6 +1268,32 @@ class e_form return $pre.$text.$post; } + + /** + * Render an array of checkboxes. + * @param string $name + * @param array $option_array + * @param mixed $checked + * @param array $options [optional] + */ + function checkboxes($name, $option_array, $checked, $options=array()) + { + $name = (strpos($name, '[') === false) ? $name.'[]' : $name; + if(!is_array($checked)) $checked = explode(",",$checked); + + $text = ""; + + foreach($option_array as $k=>$label) + { + $c = in_array($k, $checked) ? true : false; + $text .= $this->checkbox($name, $k, $c, $label); + } + + return $text; + + } + + function checkbox_label($label_title, $name, $value, $checked = false, $options = array()) { return $this->checkbox($name, $value, $checked, $options).$this->label($label_title, $name, $value); @@ -2739,6 +2765,11 @@ class e_form if(vartrue($attributes['inline'])) $parms['editable'] = true; // attribute alias if(vartrue($attributes['sort'])) $parms['sort'] = true; // attribute alias + if(vartrue($parms['type'])) // Allow the use of a different type in readMode. eg. type=method. + { + $attributes['type'] = $parms['type']; + } + $this->renderValueTrigger($field, $value, $parms, $id); $tp = e107::getParser(); @@ -2882,6 +2913,7 @@ class e_form // $value = $pre.vartrue($tmp[$value]).$post; // FIXME "Fatal error: Only variables can be passed by reference" featurebox list page. break; + case 'checkboxes': case 'comma': case 'dropdown': // XXX - should we use readParams at all here? see writeParms check below @@ -2904,7 +2936,12 @@ class e_form unset($wparms['__options']); $_value = $value; - if(vartrue($opts['multiple']) || vartrue($attributes['type']) == 'comma') + if($attributes['type'] == 'checkboxes' || $attributes['type'] == 'comma') + { + $opts['multiple'] = true; + } + + if(vartrue($opts['multiple'])) { $ret = array(); $value = is_array($value) ? $value : explode(',', $value); @@ -2920,7 +2957,7 @@ class e_form if(isset($wparms[$value])) $ret = $wparms[$value]; $value = $ret; } - + $value = ($value ? vartrue($parms['pre']).defset($value, $value).vartrue($parms['post']) : ''); // Inline Editing. @@ -3291,13 +3328,24 @@ class e_form $_value = $value; $value = call_user_func_array(array($this, $method), array($value, 'read', $parms)); + // print_a($attributes); // Inline Editing. if(!vartrue($attributes['noedit']) && vartrue($parms['editable'])) // avoid bad markup, better solution coming up { $mode = preg_replace('/[^\w]/', '', vartrue($_GET['mode'], '')); $methodParms = call_user_func_array(array($this, $method), array($value, 'inline', $parms)); - $xtype = 'select'; + + if($attributes['inline'] === 'checklist') + { + $xtype = 'checklist'; + } + else + { + $xtype = 'select'; + } + + $value = $this->renderInline($field, $id, $attributes['title'], $_value, $value, $xtype, $methodParms); @@ -3598,6 +3646,20 @@ class e_form $ret = (vartrue($parms['raw']) ? $templates : $this->selectbox($key, $templates, $value)); break; + case 'checkboxes': + + if(is_array($parms)) + { + if(!is_array($value) && !empty($value)) + { + $value = explode(",",$value); + } + $ret = vartrue($eloptions['pre']).$this->checkboxes($key, $parms, $value, $eloptions).vartrue($eloptions['post']); + } + return $ret; + break; + + case 'dropdown': case 'comma': $eloptions = vartrue($parms['__options'], array());