1
0
mirror of https://github.com/e107inc/e107.git synced 2025-04-22 13:41:52 +02:00

Admin-ui Tabs support added.

This commit is contained in:
Cameron 2013-02-24 19:52:25 -08:00
parent 763d1de7f7
commit 6011b65a4c
2 changed files with 279 additions and 12 deletions

@ -2355,6 +2355,17 @@ class e_admin_controller_ui extends e_admin_controller
{
return deftrue($this->pluginTitle, $this->pluginTitle);
}
/**
* Get Tab data
* @return array
*/
public function getTabs()
{
return $this->tabs;
}
/**
* Get all field data
@ -4761,11 +4772,12 @@ class e_admin_form_ui extends e_form
$forms = $models = array();
$forms[] = array(
'id' => $this->getElementId(),
//'url' => e_SELF,
//'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(
'create' => array(
'tabs' => $controller->getTabs(), //used within a single form.
'legend' => $legend,
'fields' => $controller->getFields(), //see e_admin_ui::$fields
'header' => $form_start,

@ -663,14 +663,15 @@ class e_form
{
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 ?
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;
/*
$label_fld = str_replace('_', '-', $name_fld).'-upicker-lable';
//'.$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
*/
function rate($table,$id,$options=null)
@ -2936,7 +2937,7 @@ class e_form
* 'id' => 'myplugin',
* '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
* '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(
* 'general' => array(
* 'legend' => 'Fieldset Legend',
@ -2972,7 +2973,8 @@ class e_form
$model = $models[$fid];
$query = isset($form['query']) ? $form['query'] : e_QUERY ;
$url = (isset($form['url']) ? e107::getParser()->replaceConstants($form['url'], 'abs') : e_SELF).($query ? '?'.$query : '');
$text .= "
<form method='post' action='".$url."' id='{$form['id']}-form' enctype='multipart/form-data'>
<div>
@ -2980,10 +2982,38 @@ class e_form
".$this->token()."
";
foreach ($form['fieldsets'] as $elid => $data)
foreach ($form['fieldsets'] as $elid => $data) //XXX rename 'fieldsets' to 'forms' ?
{
$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 .= "
@ -2992,7 +3022,7 @@ class e_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');");
}
if(!$nocontainer)
@ -3009,8 +3039,9 @@ class e_form
* @param array $fdata fieldset data
* @param e_admin_model $model
*/
function renderCreateFieldset($id, $fdata, $model)
function renderCreateFieldset($id, $fdata, $model, $tab=0)
{
$text = vartrue($fdata['fieldset_pre'])."
<fieldset id='{$id}'>
<legend>".vartrue($fdata['legend'])."</legend>
@ -3029,6 +3060,13 @@ class e_form
$hidden_fields = array();
foreach($fdata['fields'] as $key => $att)
{
if($tab !== false && varset($att['tab'],0) !== $tab)
{
continue;
}
// convert aliases - not supported in edit mod
if(vartrue($att['alias']) && !$model->hasData($key))
{
@ -3078,6 +3116,7 @@ class e_form
}
}
/*
if('hidden' === $att['type'])
{
parse_str(varset($att['writeParms']), $tmp);
@ -3089,6 +3128,8 @@ class e_form
}
unset($tmp);
}
*/
$text .= "
<tr>
<td>
@ -3112,7 +3153,14 @@ class e_form
$text .= "
</tbody>
</table>
</table></fieldset>";
$text .= vartrue($fdata['fieldset_post']);
return $text;
/*
$text .= "
".implode("\n", $hidden_fields)."
".$required_help."
".vartrue($fdata['table_post'])."
@ -3188,11 +3236,218 @@ class e_form
$text .= "
</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'])."
";
return $text;
}
// JUST A DRAFT - generic renderForm solution
function renderForm($forms, $nocontainer = false)