1
0
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:
Cameron
2013-02-24 19:52:25 -08:00
parent 763d1de7f7
commit 6011b65a4c
2 changed files with 279 additions and 12 deletions

View File

@@ -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,

View File

@@ -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)