mirror of
https://github.com/e107inc/e107.git
synced 2025-01-17 12:48:24 +01:00
Form Handler: renderElement() and renderValue() now support json values. (used by Pages/Menus custom fields)
This commit is contained in:
parent
3e9624be81
commit
2c2b9d4091
@ -335,8 +335,8 @@ class page_chapters_form_ui extends e_admin_form_ui
|
||||
|
||||
function chapter_fields($curVal,$mode,$parm)
|
||||
{
|
||||
$fieldAmount = (deftrue('e_DEBUG')) ? 20 :10;
|
||||
|
||||
$frm = e107::getForm();
|
||||
|
||||
if($mode == 'read')
|
||||
{
|
||||
@ -372,13 +372,32 @@ class page_chapters_form_ui extends e_admin_form_ui
|
||||
<tr><th>".LAN_NAME."</th><th>".LAN_TITLE."</th><th>".LAN_TYPE."</th><th>Params</th><th>".LAN_TOOLTIP."</th></tr>
|
||||
";
|
||||
|
||||
for ($i = 0; $i <= 20; $i++)
|
||||
|
||||
|
||||
|
||||
|
||||
for ($i = 0; $i <= $fieldAmount; $i++)
|
||||
{
|
||||
|
||||
$writeParms = array(
|
||||
'class' => 'e-ajax',
|
||||
'useValues' => 1,
|
||||
'default' => 'blank',
|
||||
'data-src' => e_REQUEST_URI,
|
||||
|
||||
);
|
||||
|
||||
$parmsWriteParms= array(
|
||||
'size' => 'block-level',
|
||||
'placeholder' => $this->getCustomFieldPlaceholder($value[$i]['type'])
|
||||
|
||||
);
|
||||
|
||||
$fieldName = $this->text('chapter_fields['.$i.'][key]',$value[$i]['key'],30, array('pattern'=>'^[a-z0-9-]*'));
|
||||
$fieldTitle = $this->text('chapter_fields['.$i.'][title]',$value[$i]['title'], 80);
|
||||
$fieldType = $this->select('chapter_fields['.$i.'][type]',$this->getFieldTypes(),$value[$i]['type'], 'useValues=1&default=blank');
|
||||
$fieldParms = $this->text('chapter_fields['.$i.'][writeParms]',$value[$i]['writeParms'], 80, array('size'=>'block-level'));
|
||||
$fieldHelp = $this->text('chapter_fields['.$i.'][help]',$value[$i]['help'], 80, array('size'=>'block-level'));
|
||||
$fieldType = $this->select('chapter_fields['.$i.'][type]',$this->getFieldTypes(),$value[$i]['type'], $writeParms);
|
||||
$fieldParms = $this->text('chapter_fields['.$i.'][writeParms]',$value[$i]['writeParms'], 255, $parmsWriteParms);
|
||||
$fieldHelp = $this->text('chapter_fields['.$i.'][help]',$value[$i]['help'], 255, array('size'=>'block-level'));
|
||||
$text .= "<tr><td>".$fieldName."</td><td>".$fieldTitle."</td><td>".$fieldType."</td><td>".$fieldParms."</td><td>".$fieldHelp."</td></tr>";
|
||||
}
|
||||
|
||||
@ -399,8 +418,37 @@ class page_chapters_form_ui extends e_admin_form_ui
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//@XXX Move to Form-handler?
|
||||
public function getCustomFieldPlaceholder($type)
|
||||
{
|
||||
switch($type)
|
||||
{
|
||||
case "radio":
|
||||
case "dropdown":
|
||||
case "checkboxes":
|
||||
return 'eg. { "optArray": { "blue": "Blue", "green": "Green", "red": "Red" }, "default": "blank" }';
|
||||
break;
|
||||
|
||||
case "tags":
|
||||
return 'eg. tag1,tag2,tag3,tag4';
|
||||
break;
|
||||
|
||||
case "datestamp":
|
||||
return 'eg. (Optional) { "format": "yyyy-mm-dd" }';
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
|
||||
}
|
||||
|
||||
|
||||
return null;
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Override the default Options field.
|
||||
function options($parms, $value, $id, $attributes)
|
||||
@ -785,8 +833,18 @@ class page_admin_ui extends e_admin_ui
|
||||
$this->fields['page_chapter']['writeParms']['ajax'] = array('src'=>e_SELF."?mode=page&action=chapter-change",'target'=>'tabadditional');
|
||||
}
|
||||
|
||||
|
||||
if(e_AJAX_REQUEST)
|
||||
{
|
||||
// @todo insert placeholder examples in params input when 'type' dropdown value is changed
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if(e_AJAX_REQUEST && isset($_POST['page_chapter']) ) //&& $this->getAction() === 'chapter-change'
|
||||
{
|
||||
|
||||
$this->initCustomFields($_POST['page_chapter']);
|
||||
|
||||
$elid = 'core-page-create';
|
||||
@ -821,7 +879,9 @@ class page_admin_ui extends e_admin_ui
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @todo Move to admin-ui ?
|
||||
*/
|
||||
private function initCustomFields($chap=null)
|
||||
{
|
||||
$tabId = 'additional';
|
||||
@ -835,7 +895,24 @@ class page_admin_ui extends e_admin_ui
|
||||
$fld['tab'] = $tabId;
|
||||
$fld['data'] = false;
|
||||
|
||||
if($fld['type'] === 'icon')
|
||||
{
|
||||
$fld['writeParms'] .= "&glyphs=1";
|
||||
}
|
||||
|
||||
if($fld['type'] == 'checkboxes')
|
||||
{
|
||||
if($tmp = e107::getParser()->isJSON($fld['writeParms']))
|
||||
{
|
||||
$fld['writeParms'] = $tmp;
|
||||
}
|
||||
|
||||
$fld['writeParms']['useKeyValues'] = 1;
|
||||
}
|
||||
|
||||
|
||||
$this->fields['page_fields__'.$key] = $fld;
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -879,19 +956,11 @@ class page_admin_ui extends e_admin_ui
|
||||
|
||||
parent::EditObserver();
|
||||
|
||||
if(!deftrue('e_DEBUG'))
|
||||
{
|
||||
// return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
$row = e107::getDb()->retrieve('page', 'page_chapter, page_fields', 'page_id='.$this->getId());
|
||||
$chap = intval($row['page_chapter']);
|
||||
$this->initCustomFields($chap);
|
||||
$this->loadCustomFieldsData();
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -928,6 +997,11 @@ class page_admin_ui extends e_admin_ui
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Overrid
|
||||
*/
|
||||
|
@ -652,6 +652,9 @@ class cpage_shortcodes extends e_shortcode
|
||||
|
||||
$fieldType = $fields[$key]['type'];
|
||||
|
||||
// print_a($fields);
|
||||
|
||||
|
||||
// @todo Move this part to form_handler or e_parse somewhere.
|
||||
|
||||
if(isset($fieldData[$key]))
|
||||
@ -660,6 +663,12 @@ class cpage_shortcodes extends e_shortcode
|
||||
|
||||
switch($fieldType)
|
||||
{
|
||||
case "dropdown":
|
||||
case "checkboxes":
|
||||
case "radio":
|
||||
return ($raw) ? $value : e107::getForm()->renderValue($key,$value,$fields[$key]);
|
||||
break;
|
||||
|
||||
case "image":
|
||||
return ($raw) ? $tp->thumbUrl($value) : $tp->toImage($value);
|
||||
break;
|
||||
@ -728,6 +737,7 @@ class cpage_shortcodes extends e_shortcode
|
||||
{
|
||||
$fieldData = e107::unserialize($this->var['page_fields']);
|
||||
|
||||
|
||||
$text = '<table class="table table-bordered table-striped">
|
||||
<tr><th>Name</th><th>Title<br /><small>{CPAGEFIELDTITLE: name=x}</small></th><th>Normal<br /><small>{CPAGEFIELD: name=x}</small></th><th>Raw<br /><small>{CPAGEFIELD: name=x&mode=raw}</small></th></tr>';
|
||||
|
||||
|
@ -3995,6 +3995,30 @@ class e_parser
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if string is json and parse or return false.
|
||||
* @param $text
|
||||
* @return bool|mixed return false if not json, and json values if true.
|
||||
*/
|
||||
public function isJSON($text)
|
||||
{
|
||||
if(substr($text,0,1) === '{' || substr($text,0,1) === '[') // json
|
||||
{
|
||||
$dat = json_decode($text, true);
|
||||
|
||||
if(json_last_error() != JSON_ERROR_NONE)
|
||||
{
|
||||
// e107::getDebug()->log("Json data found");
|
||||
return false;
|
||||
}
|
||||
|
||||
return $dat;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
@ -3893,8 +3893,14 @@ class e_form
|
||||
$parms = $attributes['readParms'];
|
||||
}
|
||||
|
||||
// @see custom fields in cpage which accept json params.
|
||||
if(!empty($attributes['writeParms']) && $tmpOpt = e107::getParser()->isJSON($attributes['writeParms']))
|
||||
{
|
||||
$attributes['writeParms'] = $tmpOpt;
|
||||
unset($tmpOpt);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(!empty($attributes['inline'])) $parms['editable'] = true; // attribute alias
|
||||
if(!empty($attributes['sort'])) $parms['sort'] = true; // attribute alias
|
||||
|
||||
@ -3998,9 +4004,15 @@ class e_form
|
||||
break;
|
||||
|
||||
case 'checkboxes':
|
||||
$value = $this->checkbox(vartrue($attributes['toggle'], 'multiselect').'['.$id.']', $id);
|
||||
|
||||
//$attributes['type'] = 'text';
|
||||
return $value;
|
||||
if(empty($attributes['writeParms'])) // avoid comflicts with a field called 'checkboxes'
|
||||
{
|
||||
$value = $this->checkbox(vartrue($attributes['toggle'], 'multiselect').'['.$id.']', $id);
|
||||
return $value;
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@ -4102,7 +4114,7 @@ class e_form
|
||||
$opts['multiple'] = true;
|
||||
}
|
||||
|
||||
if(vartrue($opts['multiple']))
|
||||
if(!empty($opts['multiple']))
|
||||
{
|
||||
$ret = array();
|
||||
$value = is_array($value) ? $value : explode(',', $value);
|
||||
@ -4111,6 +4123,8 @@ class e_form
|
||||
if(isset($wparms[$v])) $ret[] = $wparms[$v];
|
||||
}
|
||||
$value = implode(', ', $ret);
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -4857,10 +4871,14 @@ class e_form
|
||||
{
|
||||
$tp = e107::getParser();
|
||||
|
||||
|
||||
|
||||
$parms = vartrue($attributes['writeParms'], array());
|
||||
|
||||
if($tmpOpt = $tp->isJSON($parms))
|
||||
{
|
||||
$parms = $tmpOpt;
|
||||
unset($tmpOpt);
|
||||
}
|
||||
|
||||
if(is_string($parms)) parse_str($parms, $parms);
|
||||
|
||||
$ajaxParms = array();
|
||||
|
Loading…
x
Reference in New Issue
Block a user