mirror of
https://github.com/e107inc/e107.git
synced 2025-08-04 21:57:51 +02:00
Admin-ui Tabs support added.
This commit is contained in:
@@ -2355,6 +2355,17 @@ class e_admin_controller_ui extends e_admin_controller
|
|||||||
{
|
{
|
||||||
return deftrue($this->pluginTitle, $this->pluginTitle);
|
return deftrue($this->pluginTitle, $this->pluginTitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Tab data
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getTabs()
|
||||||
|
{
|
||||||
|
return $this->tabs;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all field data
|
* Get all field data
|
||||||
@@ -4761,11 +4772,12 @@ class e_admin_form_ui extends e_form
|
|||||||
$forms = $models = array();
|
$forms = $models = array();
|
||||||
$forms[] = array(
|
$forms[] = array(
|
||||||
'id' => $this->getElementId(),
|
'id' => $this->getElementId(),
|
||||||
|
|
||||||
//'url' => e_SELF,
|
//'url' => e_SELF,
|
||||||
//'query' => 'self', or custom GET query, self is default
|
//'query' => 'self', or custom GET query, self is default
|
||||||
'tabs' => true, // TODO - NOT IMPLEMENTED YET - enable tabs (only if fieldset count is > 1)
|
|
||||||
'fieldsets' => array(
|
'fieldsets' => array(
|
||||||
'create' => array(
|
'create' => array(
|
||||||
|
'tabs' => $controller->getTabs(), //used within a single form.
|
||||||
'legend' => $legend,
|
'legend' => $legend,
|
||||||
'fields' => $controller->getFields(), //see e_admin_ui::$fields
|
'fields' => $controller->getFields(), //see e_admin_ui::$fields
|
||||||
'header' => $form_start,
|
'header' => $form_start,
|
||||||
|
@@ -663,14 +663,15 @@ class e_form
|
|||||||
{
|
{
|
||||||
if(!is_array($options)) parse_str($options, $options);
|
if(!is_array($options)) parse_str($options, $options);
|
||||||
|
|
||||||
|
$default_name = vartrue($default_name,USERNAME);
|
||||||
|
$default_id = vartrue($default_id,USERID);
|
||||||
|
|
||||||
//TODO Auto-calculate $name_fld from $id_fld ie. append "_usersearch" here ?
|
//TODO Auto-calculate $name_fld from $id_fld ie. append "_usersearch" here ?
|
||||||
|
|
||||||
return $this->text($name_fld,$default_name,20, "class=e-tip&title=Type name of user&typeahead=users&readonly=".vartrue($options['readonly']))
|
return $this->text($name_fld,$default_name,20, "class=e-tip&title=Type name of user&typeahead=users&readonly=".vartrue($options['readonly']))
|
||||||
.$this->hidden($id_fld,$default_id, array('id' => $this->name2id($id_fld)))." id# ".$default_id;
|
.$this->hidden($id_fld,$default_id, array('id' => $this->name2id($id_fld)))." id# ".$default_id;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
$label_fld = str_replace('_', '-', $name_fld).'-upicker-lable';
|
$label_fld = str_replace('_', '-', $name_fld).'-upicker-lable';
|
||||||
|
|
||||||
//'.$this->text($id_fld, $default_id, 10, array('id' => false, 'readonly'=>true, 'class'=>'tbox number')).'
|
//'.$this->text($id_fld, $default_id, 10, array('id' => false, 'readonly'=>true, 'class'=>'tbox number')).'
|
||||||
@@ -728,7 +729,7 @@ class e_form
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A 'Rating' element
|
* A Rating element
|
||||||
* @var $text
|
* @var $text
|
||||||
*/
|
*/
|
||||||
function rate($table,$id,$options=null)
|
function rate($table,$id,$options=null)
|
||||||
@@ -2936,7 +2937,7 @@ class e_form
|
|||||||
* 'id' => 'myplugin',
|
* 'id' => 'myplugin',
|
||||||
* 'url' => '{e_PLUGIN}myplug/admin_config.php', //if not set, e_SELF is used
|
* 'url' => '{e_PLUGIN}myplug/admin_config.php', //if not set, e_SELF is used
|
||||||
* 'query' => 'mode=main&action=edit&id=1', //or e_QUERY if not set
|
* 'query' => 'mode=main&action=edit&id=1', //or e_QUERY if not set
|
||||||
* 'tabs' => true, // TODO - NOT IMPLEMENTED YET - enable tabs (only if fieldset count is > 1)
|
* 'tabs' => true, // TODO - NOT IMPLEMENTED YET - enable tabs (only if fieldset count is > 1) //XXX Multiple triggers in a single form?
|
||||||
* 'fieldsets' => array(
|
* 'fieldsets' => array(
|
||||||
* 'general' => array(
|
* 'general' => array(
|
||||||
* 'legend' => 'Fieldset Legend',
|
* 'legend' => 'Fieldset Legend',
|
||||||
@@ -2972,7 +2973,8 @@ class e_form
|
|||||||
$model = $models[$fid];
|
$model = $models[$fid];
|
||||||
$query = isset($form['query']) ? $form['query'] : e_QUERY ;
|
$query = isset($form['query']) ? $form['query'] : e_QUERY ;
|
||||||
$url = (isset($form['url']) ? e107::getParser()->replaceConstants($form['url'], 'abs') : e_SELF).($query ? '?'.$query : '');
|
$url = (isset($form['url']) ? e107::getParser()->replaceConstants($form['url'], 'abs') : e_SELF).($query ? '?'.$query : '');
|
||||||
|
|
||||||
|
|
||||||
$text .= "
|
$text .= "
|
||||||
<form method='post' action='".$url."' id='{$form['id']}-form' enctype='multipart/form-data'>
|
<form method='post' action='".$url."' id='{$form['id']}-form' enctype='multipart/form-data'>
|
||||||
<div>
|
<div>
|
||||||
@@ -2980,10 +2982,38 @@ class e_form
|
|||||||
".$this->token()."
|
".$this->token()."
|
||||||
";
|
";
|
||||||
|
|
||||||
foreach ($form['fieldsets'] as $elid => $data)
|
foreach ($form['fieldsets'] as $elid => $data) //XXX rename 'fieldsets' to 'forms' ?
|
||||||
{
|
{
|
||||||
$elid = $form['id'].'-'.$elid;
|
$elid = $form['id'].'-'.$elid;
|
||||||
$text .= $this->renderCreateFieldset($elid, $data, $model);
|
|
||||||
|
|
||||||
|
if(vartrue($data['tabs'])) // Tabs Present
|
||||||
|
{
|
||||||
|
$text .= '<ul class="nav nav-tabs">';
|
||||||
|
foreach($data['tabs'] as $i=>$label)
|
||||||
|
{
|
||||||
|
$class = ($i == 0) ? 'class="active" ' : '';
|
||||||
|
$text .= '<li '.$class.'><a href="#tab'.$i.'" data-toggle="tab">'.$label.'</a></li>';
|
||||||
|
}
|
||||||
|
$text .= ' </ul><div class="tab-content">';
|
||||||
|
|
||||||
|
foreach($data['tabs'] as $tabId=>$label)
|
||||||
|
{
|
||||||
|
$active = ($tabId == 0) ? 'active' : '';
|
||||||
|
$text .= '<div class="tab-pane '.$active.'" id="tab'.$tabId.'">';
|
||||||
|
$text .= $this->renderCreateFieldset($elid, $data, $model, $tabId);
|
||||||
|
$text .= "</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$text .= "</div>";
|
||||||
|
|
||||||
|
}
|
||||||
|
else // No Tabs Present
|
||||||
|
{
|
||||||
|
$text .= $this->renderCreateFieldset($elid, $data, $model, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
$text .= $this->renderCreateButtonsBar($elid, $data, $model); // Create/Update Buttons etc.
|
||||||
}
|
}
|
||||||
|
|
||||||
$text .= "
|
$text .= "
|
||||||
@@ -2992,7 +3022,7 @@ class e_form
|
|||||||
</form>
|
</form>
|
||||||
";
|
";
|
||||||
|
|
||||||
e107::js('footer-inline',"Form.focusFirstElement('{$form['id']}-form');",'prototype');
|
// e107::js('footer-inline',"Form.focusFirstElement('{$form['id']}-form');",'prototype');
|
||||||
// e107::getJs()->footerInline("Form.focusFirstElement('{$form['id']}-form');");
|
// e107::getJs()->footerInline("Form.focusFirstElement('{$form['id']}-form');");
|
||||||
}
|
}
|
||||||
if(!$nocontainer)
|
if(!$nocontainer)
|
||||||
@@ -3009,8 +3039,9 @@ class e_form
|
|||||||
* @param array $fdata fieldset data
|
* @param array $fdata fieldset data
|
||||||
* @param e_admin_model $model
|
* @param e_admin_model $model
|
||||||
*/
|
*/
|
||||||
function renderCreateFieldset($id, $fdata, $model)
|
function renderCreateFieldset($id, $fdata, $model, $tab=0)
|
||||||
{
|
{
|
||||||
|
|
||||||
$text = vartrue($fdata['fieldset_pre'])."
|
$text = vartrue($fdata['fieldset_pre'])."
|
||||||
<fieldset id='{$id}'>
|
<fieldset id='{$id}'>
|
||||||
<legend>".vartrue($fdata['legend'])."</legend>
|
<legend>".vartrue($fdata['legend'])."</legend>
|
||||||
@@ -3029,6 +3060,13 @@ class e_form
|
|||||||
$hidden_fields = array();
|
$hidden_fields = array();
|
||||||
foreach($fdata['fields'] as $key => $att)
|
foreach($fdata['fields'] as $key => $att)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if($tab !== false && varset($att['tab'],0) !== $tab)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// convert aliases - not supported in edit mod
|
// convert aliases - not supported in edit mod
|
||||||
if(vartrue($att['alias']) && !$model->hasData($key))
|
if(vartrue($att['alias']) && !$model->hasData($key))
|
||||||
{
|
{
|
||||||
@@ -3078,6 +3116,7 @@ class e_form
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
if('hidden' === $att['type'])
|
if('hidden' === $att['type'])
|
||||||
{
|
{
|
||||||
parse_str(varset($att['writeParms']), $tmp);
|
parse_str(varset($att['writeParms']), $tmp);
|
||||||
@@ -3089,6 +3128,8 @@ class e_form
|
|||||||
}
|
}
|
||||||
unset($tmp);
|
unset($tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
$text .= "
|
$text .= "
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
@@ -3112,7 +3153,14 @@ class e_form
|
|||||||
|
|
||||||
$text .= "
|
$text .= "
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table></fieldset>";
|
||||||
|
|
||||||
|
$text .= vartrue($fdata['fieldset_post']);
|
||||||
|
|
||||||
|
return $text;
|
||||||
|
|
||||||
|
/*
|
||||||
|
$text .= "
|
||||||
".implode("\n", $hidden_fields)."
|
".implode("\n", $hidden_fields)."
|
||||||
".$required_help."
|
".$required_help."
|
||||||
".vartrue($fdata['table_post'])."
|
".vartrue($fdata['table_post'])."
|
||||||
@@ -3188,11 +3236,218 @@ class e_form
|
|||||||
|
|
||||||
$text .= "
|
$text .= "
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
|
||||||
|
".vartrue($fdata['fieldset_post'])."
|
||||||
|
";
|
||||||
|
return $text;
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function renderCreateButtonsBar($id, $fdata, $model, $tab=0)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
$text = vartrue($fdata['fieldset_pre'])."
|
||||||
|
<fieldset id='{$id}'>
|
||||||
|
<legend>".vartrue($fdata['legend'])."</legend>
|
||||||
|
".vartrue($fdata['table_pre'])."
|
||||||
|
<table class='table adminform'>
|
||||||
|
<colgroup>
|
||||||
|
<col class='col-label' />
|
||||||
|
<col class='col-control' />
|
||||||
|
</colgroup>
|
||||||
|
<tbody>
|
||||||
|
";
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// required fields - model definition
|
||||||
|
$model_required = $model->getValidationRules();
|
||||||
|
$required_help = false;
|
||||||
|
$hidden_fields = array();
|
||||||
|
foreach($fdata['fields'] as $key => $att)
|
||||||
|
{
|
||||||
|
|
||||||
|
if($att['tab'] !== $tab)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// convert aliases - not supported in edit mod
|
||||||
|
if(vartrue($att['alias']) && !$model->hasData($key))
|
||||||
|
{
|
||||||
|
$key = $att['field'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if($key == 'checkboxes' || $key == 'options')
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$parms = vartrue($att['formparms'], array());
|
||||||
|
if(!is_array($parms)) parse_str($parms, $parms);
|
||||||
|
$label = vartrue($att['note']) ? '<div class="label-note">'.deftrue($att['note'], $att['note']).'</div>' : '';
|
||||||
|
$help = vartrue($att['help']) ? '<div class="field-help">'.deftrue($att['help'], $att['help']).'</div>' : '';
|
||||||
|
|
||||||
|
$valPath = trim(vartrue($att['dataPath'], $key), '/');
|
||||||
|
$keyName = $key;
|
||||||
|
if(strpos($valPath, '/')) //not TRUE, cause string doesn't start with /
|
||||||
|
{
|
||||||
|
$tmp = explode('/', $valPath);
|
||||||
|
$keyName = array_shift($tmp);
|
||||||
|
foreach ($tmp as $path)
|
||||||
|
{
|
||||||
|
$keyName .= '['.$path.']';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// print_a($att)."<br />";
|
||||||
|
// type null - system (special) fields
|
||||||
|
if(vartrue($att['type']) !== null && !vartrue($att['noedit']) && $key != $model->getFieldIdName())
|
||||||
|
{
|
||||||
|
$required = '';
|
||||||
|
$required_class = '';
|
||||||
|
if(isset($model_required[$key]) || vartrue($att['validate']))
|
||||||
|
{
|
||||||
|
$required = $this->getRequiredString();
|
||||||
|
$required_class = ' class="required-label"'; // TODO - add 'required-label' to the core CSS definitions
|
||||||
|
$required_help = true;
|
||||||
|
if(vartrue($att['validate']))
|
||||||
|
{
|
||||||
|
// override
|
||||||
|
$model_required[$key] = array();
|
||||||
|
$model_required[$key][] = true === $att['validate'] ? 'required' : $att['validate'];
|
||||||
|
$model_required[$key][] = varset($att['rule']);
|
||||||
|
$model_required[$key][] = $att['title'];
|
||||||
|
$model_required[$key][] = varset($att['error']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if('hidden' === $att['type'])
|
||||||
|
{
|
||||||
|
parse_str(varset($att['writeParms']), $tmp);
|
||||||
|
if(!vartrue($tmp['show']))
|
||||||
|
{
|
||||||
|
$hidden_fields[] = $this->renderElement($keyName, $model->getIfPosted($valPath), $att, varset($model_required[$key], array()));
|
||||||
|
unset($tmp);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
unset($tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
$text .= "
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
".$required."<span{$required_class}>".defset(vartrue($att['title']), vartrue($att['title']))."</span>".$label."
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
".$this->renderElement($keyName, $model->getIfPosted($valPath), $att, varset($model_required[$key], array()))."
|
||||||
|
{$help}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
* */
|
||||||
|
}
|
||||||
|
//if($bckp) $model->remove($bckp);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if($required_help)
|
||||||
|
{
|
||||||
|
// $required_help = '<div class="form-note">'.$this->getRequiredString().' - required fields</div>'; //TODO - lans
|
||||||
|
}
|
||||||
|
|
||||||
|
// $text .= "
|
||||||
|
// </tbody>
|
||||||
|
// </table></fieldset>";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$text .= "
|
||||||
|
".implode("\n", $hidden_fields)."
|
||||||
|
".$required_help."
|
||||||
|
".vartrue($fdata['table_post'])."
|
||||||
|
<div class='buttons-bar center'>
|
||||||
|
";
|
||||||
|
// After submit options
|
||||||
|
$defsubmitopt = array('list' => 'go to list', 'create' => 'create another', 'edit' => 'edit current');
|
||||||
|
$submitopt = isset($fdata['after_submit_options']) ? $fdata['after_submit_options'] : true;
|
||||||
|
if(true === $submitopt)
|
||||||
|
{
|
||||||
|
$submitopt = $defsubmitopt;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($submitopt)
|
||||||
|
{
|
||||||
|
$selected = isset($fdata['after_submit_default']) && array_key_exists($fdata['after_submit_default'], $submitopt) ? $fdata['after_submit_default'] : '';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$triggers = vartrue($fdata['triggers'], 'auto');
|
||||||
|
if(is_string($triggers) && 'auto' === $triggers)
|
||||||
|
{
|
||||||
|
$triggers = array();
|
||||||
|
if($model->getId())
|
||||||
|
{
|
||||||
|
$triggers['submit'] = array(LAN_UPDATE, 'update', $model->getId());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$triggers['submit'] = array(LAN_CREATE, 'create', 0);
|
||||||
|
}
|
||||||
|
$triggers['cancel'] = array(LAN_CANCEL, 'cancel');
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($triggers as $trigger => $tdata)
|
||||||
|
{
|
||||||
|
$text .= ($trigger == 'submit') ? "<div class=' btn-group'>" : "";
|
||||||
|
$text .= $this->admin_button('etrigger_'.$trigger, $tdata[0], $tdata[1]);
|
||||||
|
|
||||||
|
if($trigger == 'submit' && $submitopt)
|
||||||
|
{
|
||||||
|
|
||||||
|
$text .=
|
||||||
|
'<button class="btn btn-success dropdown-toggle left" data-toggle="dropdown">
|
||||||
|
<span class="caret"></span>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu col-selection">
|
||||||
|
<li class="nav-header">After submit:</li>
|
||||||
|
';
|
||||||
|
|
||||||
|
foreach($defsubmitopt as $k=>$v)
|
||||||
|
{
|
||||||
|
$text .= "<li><a href='#' class='e-noclick'>".$this->radio('__after_submit_action', $k, $selected,"label=".$v)."</a></li>";
|
||||||
|
}
|
||||||
|
|
||||||
|
//$text .= '
|
||||||
|
// <li role="menuitem">
|
||||||
|
// <div class="options left" style="padding:5px">
|
||||||
|
// '.$this->radio_multi('__after_submit_action', $submitopt, $selected, true).'
|
||||||
|
// </div></li>';
|
||||||
|
|
||||||
|
|
||||||
|
$text .= '</ul>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$text .= ($trigger == 'submit') ?"</div>" : "";
|
||||||
|
|
||||||
|
if(isset($tdata[2]))
|
||||||
|
{
|
||||||
|
$text .= $this->hidden($trigger.'_value', $tdata[2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$text .= "
|
||||||
|
</div>
|
||||||
|
|
||||||
".vartrue($fdata['fieldset_post'])."
|
".vartrue($fdata['fieldset_post'])."
|
||||||
";
|
";
|
||||||
return $text;
|
return $text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// JUST A DRAFT - generic renderForm solution
|
// JUST A DRAFT - generic renderForm solution
|
||||||
function renderForm($forms, $nocontainer = false)
|
function renderForm($forms, $nocontainer = false)
|
||||||
|
Reference in New Issue
Block a user