mirror of
https://github.com/e107inc/e107.git
synced 2025-08-06 14:46:56 +02:00
Admin tools - more work, final stage, work in progress
This commit is contained in:
@@ -9,8 +9,8 @@
|
||||
* Admin Header
|
||||
*
|
||||
* $Source: /cvs_backup/e107_0.8/e107_admin/header.php,v $
|
||||
* $Revision: 1.50 $
|
||||
* $Date: 2009-10-31 17:57:15 $
|
||||
* $Revision: 1.51 $
|
||||
* $Date: 2009-11-02 17:45:29 $
|
||||
* $Author: secretr $
|
||||
*/
|
||||
|
||||
@@ -189,7 +189,7 @@ echo "<html xmlns='http://www.w3.org/1999/xhtml'".(defined("TEXTDIRECTION") ? "
|
||||
<meta http-equiv='content-style-type' content='text/css' />
|
||||
";
|
||||
echo(defined("CORE_LC")) ? "<meta http-equiv='content-language' content='".CORE_LC."' />\n" : "";
|
||||
echo "<title>".SITENAME." : ".LAN_head_4.(defined("e_PAGETITLE") ? ": ".e_PAGETITLE : (defined("PAGE_NAME") ? ": ".PAGE_NAME : ""))."</title>\n";
|
||||
echo "<title>".LAN_head_4.(defined("e_PAGETITLE") ? " - ".e_PAGETITLE : (defined("PAGE_NAME") ? ": ".PAGE_NAME : ""))." :: ".SITENAME."</title>\n";
|
||||
|
||||
//
|
||||
// D: Send JS
|
||||
|
@@ -394,11 +394,31 @@ class e_admin_request
|
||||
*
|
||||
* @param string|array $merge_with [optional] override request values
|
||||
* @param boolean $encode if true & separator will be used, all values will be http encoded, default true
|
||||
* @param string|array $exclude_from_query numeric array/comma separated list of vars to be excluded from current query, true - don't use current query at all
|
||||
* @return string url encoded query string
|
||||
*/
|
||||
public function buildQueryString($merge_with = array(), $encode = true)
|
||||
public function buildQueryString($merge_with = array(), $encode = true, $exclude_from_query = '')
|
||||
{
|
||||
$ret = $this->getQuery();
|
||||
|
||||
//special case - exclude all current
|
||||
if(true === $exclude_from_query)
|
||||
{
|
||||
$exclude_from_query = $ret;
|
||||
}
|
||||
// to array
|
||||
if(is_string($exclude_from_query))
|
||||
{
|
||||
$exclude_from_query = array_map('trim', explode(',', $exclude_from_query));
|
||||
}
|
||||
if($exclude_from_query)
|
||||
{
|
||||
foreach ($exclude_from_query as $var)
|
||||
{
|
||||
unset($ret[$var]);
|
||||
}
|
||||
}
|
||||
|
||||
if(is_string($merge_with))
|
||||
{
|
||||
parse_str($merge_with, $merge_with);
|
||||
@@ -409,10 +429,6 @@ class e_admin_request
|
||||
{
|
||||
$separator = '&';
|
||||
$ret = array_map('rawurlencode', $ret);
|
||||
foreach ($ret as $key => $value)
|
||||
{
|
||||
$ret[$key] = rawurlencode($value);
|
||||
}
|
||||
}
|
||||
|
||||
return http_build_query($ret, 'numeric_', $separator);
|
||||
@@ -1456,11 +1472,13 @@ class e_admin_controller
|
||||
* Add page title, response proxy method
|
||||
*
|
||||
* @param string $title
|
||||
* @param boolean $meta add to meta as well
|
||||
* @return e_admin_controller
|
||||
*/
|
||||
public function addTitle($title)
|
||||
public function addTitle($title, $meta = true)
|
||||
{
|
||||
$this->getResponse()->appendTitle($title);
|
||||
if($meta) $this->addMetaTitle($title);
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -1734,38 +1752,12 @@ class e_admin_controller
|
||||
public function redirect($action = null, $mode = null, $exclude_query = '', $merge_query = array(), $path = null)
|
||||
{
|
||||
$request = $this->getRequest();
|
||||
|
||||
//special case - exclude all current
|
||||
if(true === $exclude_query)
|
||||
{
|
||||
$exclude_query = $this->getQuery();
|
||||
}
|
||||
// to array
|
||||
if(is_string($exclude_query))
|
||||
{
|
||||
$exclude_query = array_map('trim', explode(',', $exclude_query));
|
||||
}
|
||||
// to array
|
||||
if(is_string($merge_query))
|
||||
{
|
||||
parse_str($merge_query, $merge_query);
|
||||
}
|
||||
//this should be part of request handler
|
||||
if($exclude_query)
|
||||
{
|
||||
// Converting array on the fly as of PHP 5.3+/6 - cool, isn't it!
|
||||
// $request->setQuery(array_map(function($value) { return null; }, $exclude_query));
|
||||
foreach ($exclude_query as $var)
|
||||
{
|
||||
$request->setQuery($var, null);
|
||||
}
|
||||
}
|
||||
// Set them in the end
|
||||
|
||||
if($mode) $request->setMode($mode);
|
||||
if($action) $request->setAction($action);
|
||||
if(!$path) $path = e_SELF;
|
||||
|
||||
$url = $path.'?'.$request->buildQueryString($merge_query, false);
|
||||
$url = $path.'?'.$request->buildQueryString($merge_query, false, $exclude_query);
|
||||
// Transfer all messages to session
|
||||
e107::getMessage()->moveToSession();
|
||||
// write session data
|
||||
@@ -1933,7 +1925,7 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
$this->fieldpref = $ufieldpref;
|
||||
}
|
||||
|
||||
$this->addTitle($this->pluginTitle);
|
||||
$this->addTitle($this->pluginTitle, true);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1942,7 +1934,7 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
*/
|
||||
public function ListObserver()
|
||||
{
|
||||
$this->getTreeModel()->load();
|
||||
$this->getTreeModel()->setParam('db_query', $this->_modifyListQry())->load();
|
||||
$this->addTitle('List');
|
||||
//var_dump($_POST, $this->getParam('enable_triggers'));
|
||||
}
|
||||
@@ -1954,30 +1946,7 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
*/
|
||||
public function ListBatchTrigger($batch_trigger)
|
||||
{
|
||||
$multi_name = vartrue($this->fields['checkboxes']['toggle'], 'multiselect');
|
||||
$data = $this->getPosted($multi_name, array());
|
||||
$this->triggersEnabled(false); //disable further triggering
|
||||
if(!$this->getBatchDelete())
|
||||
{
|
||||
e107::getMessage()->add('Batch delete not allowed!', E_MESSAGE_WARNING);
|
||||
return;
|
||||
}
|
||||
$this->_handleListBatch($batch_trigger, array_values($data));
|
||||
}
|
||||
|
||||
public function _handleListBatch($trigger, $data)
|
||||
{
|
||||
switch($trigger)
|
||||
{
|
||||
case 'delete': //FIXME - confirmation screen
|
||||
$this->getTreeModel()->delete($data);
|
||||
$this->getTreeModel()->setMessages();
|
||||
break;
|
||||
|
||||
default:
|
||||
//TODO - batch handling;
|
||||
break;
|
||||
}
|
||||
$this->_handleListBatch($batch_trigger);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2005,6 +1974,7 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
public function EditObserver()
|
||||
{
|
||||
$this->getModel()->load($this->getId());
|
||||
$this->addTitle(LAN_UPDATE, true);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2039,6 +2009,7 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
public function CreateObserver()
|
||||
{
|
||||
$this->triggersEnabled(true);
|
||||
$this->addTitle(LAN_CREATE, true);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2056,11 +2027,11 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
{
|
||||
// Scenario I - use request owned POST data - toForm already exeuted
|
||||
$posted = $this->getPosted();
|
||||
$this->convertData($posted);
|
||||
$this->convertToData($posted);
|
||||
$this->getModel()->setPostedData($posted, null, false, false)
|
||||
->save(true);
|
||||
// Scenario II - inner model sanitize
|
||||
//$this->getModel()->setPosted($this->convertData($_POST(, null, false, true);
|
||||
//$this->getModel()->setPosted($this->convertToData($_POST(, null, false, true);
|
||||
|
||||
// Copy model messages to the default message stack
|
||||
$this->getModel()->setMessages();
|
||||
@@ -2082,18 +2053,85 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
return $this->getUI()->getCreate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle posted batch options
|
||||
* @param string $batch_trigger
|
||||
* @return void
|
||||
*/
|
||||
protected function _handleListBatch($batch_trigger)
|
||||
{
|
||||
$tp = e107::getParser();
|
||||
$multi_name = vartrue($this->fields['checkboxes']['toggle'], 'multiselect');
|
||||
$selected = $tp->toDB(array_values($this->getPosted($multi_name, array())));
|
||||
$trigger = $tp->toDB(explode('__', $batch_trigger));
|
||||
|
||||
$this->triggersEnabled(false); //disable further triggering
|
||||
|
||||
switch($trigger[0])
|
||||
{
|
||||
case 'delete': //FIXME - confirmation screen
|
||||
if(!$this->getBatchDelete())
|
||||
{
|
||||
e107::getMessage()->add('Batch delete not allowed!', E_MESSAGE_WARNING);
|
||||
return;
|
||||
}
|
||||
$this->getTreeModel()->delete($selected);
|
||||
$this->getTreeModel()->setMessages();
|
||||
break;
|
||||
|
||||
case 'bool':
|
||||
// direct query
|
||||
$field = $trigger[1];
|
||||
$value = $trigger[2];
|
||||
if($cnt = e107::getDb()->db_Update($this->getTableName(), "{$field}={$value} WHERE {$field} IN (".implode(', ', $selected).")"))
|
||||
{
|
||||
$this->getTreeModel()->addMessageSuccess($cnt.' records successfully updated.');
|
||||
}
|
||||
$this->getTreeModel()->setMessages();
|
||||
break;
|
||||
|
||||
case 'boolreverse':
|
||||
// direct query
|
||||
$field = $trigger[1]; //TODO - errors
|
||||
if($cnt = e107::getDb()->db_Update($this->getTableName(), "{$field}=1-{$field} WHERE {$field} IN (".implode(', ', $selected).")"))
|
||||
{
|
||||
e107::getMessage()->add($cnt.' records successfully reversed.', E_MESSAGE_SUCCESS);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
//something like handleListUrlTypeBatch(); for custom handling of 'url_type' field name
|
||||
$method = 'handle'.$this->getRequest()->getActionName().$this->getRequest()->camelize($trigger[0]).'Batch';
|
||||
if(method_exists($this, $method)) // callback handling
|
||||
{
|
||||
$this->$method($trigger[1], $selected);
|
||||
}
|
||||
else // default handling
|
||||
{
|
||||
$field = $trigger[0];
|
||||
$value = $trigger[1]; //TODO - errors
|
||||
if($cnt = e107::getDb()->db_Update($this->getTableName(), "{$field}={$value} WHERE {$field} IN (".implode(', ', $selected).")"))
|
||||
{
|
||||
e107::getMessage()->add('<strong>'.$value.'</strong> set for <strong>'.$cnt.'</strong> records.', E_MESSAGE_SUCCESS);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Take approproate action after successfull submit
|
||||
*
|
||||
* @param integer $id optional, needed only if redirect action is 'edit'
|
||||
* @param string $noredirect_for don't redirect if action equals to its value
|
||||
*/
|
||||
public function doAfterSubmit($id = 0, $noredirect_for = '')
|
||||
protected function doAfterSubmit($id = 0, $noredirect_for = '')
|
||||
{
|
||||
if($noredirect_for && $noredirect_for == $this->getPosted('__after_submit_action'))
|
||||
if($noredirect_for && $noredirect_for == $this->getPosted('__after_submit_action') && $noredirect_for == $this->getAction())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$choice = $this->getPosted('__after_submit_action', 0);
|
||||
switch ($choice) {
|
||||
case 'create': // create
|
||||
@@ -2120,7 +2158,7 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
* @param array $data
|
||||
* @return void
|
||||
*/
|
||||
public function convertData(&$data)
|
||||
protected function convertToData(&$data)
|
||||
{
|
||||
foreach ($this->getFields() as $key => $attributes)
|
||||
{
|
||||
@@ -2141,6 +2179,52 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
}
|
||||
}
|
||||
|
||||
protected function _modifyListQry()
|
||||
{
|
||||
$searchQry = array();
|
||||
$request = $this->getRequest();
|
||||
$tp = e107::getParser();
|
||||
|
||||
$searchQuery = $tp->toDB($request->getQuery('searchquery', ''));
|
||||
list($filterField, $filterValue) = $tp->toDB(explode('__', $request->getQuery('filter_options', '')));
|
||||
|
||||
if($filterField)
|
||||
{
|
||||
$searchQry[] = $filterField." = '".$filterValue."'";
|
||||
}
|
||||
|
||||
$filter = array();
|
||||
|
||||
foreach($this->fields as $key=>$var)
|
||||
{
|
||||
if(($var['type'] == 'text' || $var['type'] == 'method') && $searchQuery)
|
||||
{
|
||||
$filter[] = "(".$key." REGEXP ('".$searchQuery."'))";
|
||||
}
|
||||
}
|
||||
if(count($filter)>0)
|
||||
{
|
||||
$searchQry[] = " (".implode(" OR ",$filter)." )";
|
||||
}
|
||||
|
||||
$qry = $this->listQry;
|
||||
if(count($searchQry) > 0)
|
||||
{
|
||||
$qry .= " WHERE ".implode(" AND ", $searchQry);
|
||||
}
|
||||
|
||||
|
||||
$qry .= ' ORDER BY '.$tp->toDB($request->getQuery('field', $this->getPrimaryName())).' '.($request->getQuery('asc') == 'desc' ? 'DESC' : 'ASC');
|
||||
|
||||
if($this->getPerPage())
|
||||
{
|
||||
$from = $request->getQuery('from', 0) < 1 ? 1 : intval($request->getQuery('from'));
|
||||
$startfrom = ($from-1) * intval($this->getPerPage());
|
||||
$qry .= ' LIMIT '.$startfrom.', '.intval($this->getPerPage());
|
||||
}
|
||||
return $qry;
|
||||
}
|
||||
|
||||
public function getPerPage()
|
||||
{
|
||||
return $this->perPage;
|
||||
@@ -2350,193 +2434,43 @@ class e_admin_form_ui extends e_form
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* WORK IN PROGRESS
|
||||
* Generic DB Record Creation Form.
|
||||
* Expected array format:
|
||||
* <code>
|
||||
* $form = array(
|
||||
* 'id' => 'myplugin',
|
||||
* 'url' => '{e_PLUGIN}myplug/admin_config.php',
|
||||
* 'fieldsets' => array(
|
||||
* 'create' => array(
|
||||
* 'primary' => 'primary_id',
|
||||
* 'legend' => 'Fieldset Legend',
|
||||
* 'fields' => array(...), //see e_admin_ui::$fields
|
||||
*
|
||||
* )
|
||||
* )
|
||||
* );
|
||||
* </code>
|
||||
* @param array $form
|
||||
* @param array $models instances of e_admin_model
|
||||
* @return string
|
||||
*/
|
||||
function createForm($forms, $models)
|
||||
{
|
||||
$text = '';
|
||||
foreach ($forms as $fid => $form)
|
||||
{
|
||||
$model = $models[$fid];
|
||||
$text .= "
|
||||
<form method='post' action='".e107::getParser()->replaceConstants($form['url'], 'abs')."' id='{$form['id']}-form' enctype='multipart/form-data'>
|
||||
";
|
||||
|
||||
foreach ($form['fieldsets'] as $elid => $data)
|
||||
{
|
||||
$elid = $form['id'].'-'.$elid;
|
||||
$text .= "
|
||||
<fieldset id='{$elid}'>
|
||||
<legend>{$data['legend']}</legend>
|
||||
<table cellpadding='0' cellspacing='0' class='adminedit'>
|
||||
<colgroup span='2'>
|
||||
<col class='col-label' />
|
||||
<col class='col-control' />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
";
|
||||
|
||||
foreach($data['fields'] as $key => $att)
|
||||
{
|
||||
|
||||
$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>' : '';
|
||||
|
||||
// type null - system (special) fields
|
||||
if($att['type'] !== null && !vartrue($att['noedit']) && $key != $form['primary'])
|
||||
{
|
||||
$text .= "
|
||||
<tr>
|
||||
<td class='label'>
|
||||
".defset($att['title'], $att['title']).$label."
|
||||
</td>
|
||||
<td class='control'>
|
||||
".$this->renderElement($key, $model->getIfPosted($key), $att)."
|
||||
{$help}
|
||||
</td>
|
||||
</tr>
|
||||
";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$text .= "
|
||||
</tbody>
|
||||
</table>
|
||||
<div class='buttons-bar center'>
|
||||
";
|
||||
// TODO - make this optional, introduce ui_parameters variable (array)
|
||||
$text .= '
|
||||
<div class="options">
|
||||
After submit: '.$this->radio_multi('__after_submit_action', array('list' => 'go to list', 'create' => 'create another', 'edit' => 'edit current'), $request->getPosted('__after_submit_action', 'list'), false).'
|
||||
</div>
|
||||
';
|
||||
if($controller->getId())
|
||||
{
|
||||
$text .= $this->admin_button('etrigger_submit', LAN_UPDATE, 'update');
|
||||
$text .= "<input type='hidden' name='record_id' value='".$controller->getId()."' />";
|
||||
}
|
||||
else
|
||||
{
|
||||
$text .= $this->admin_button('etrigger_submit', LAN_CREATE, 'create');
|
||||
$text .= "<input type='hidden' name='record_id' value='0' />";
|
||||
}
|
||||
$text .= $this->admin_button('etrigger_cancel', LAN_CANCEL, 'cancel');
|
||||
|
||||
$text .= "
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* This will use the above (after it's done)
|
||||
* TODO - lans
|
||||
* Generic DB Record Creation Form.
|
||||
* @return string
|
||||
*/
|
||||
function getCreate()
|
||||
{
|
||||
$controller = $this->getController();
|
||||
$model = $controller->getModel();
|
||||
$request = $controller->getRequest();
|
||||
$elid = ($controller->getPluginName() == 'core' ? 'core-' : '').str_replace('_', '-', $controller->getTableName()); //TODO - method getElId()
|
||||
|
||||
$text = "
|
||||
<form method='post' action='".e_SELF."?".e_QUERY."' id='{$elid}-create-form' enctype='multipart/form-data'>
|
||||
<fieldset id='{$elid}-create'>
|
||||
<legend class='e-hideme'>".$controller->getPluginTitle()."</legend>
|
||||
<table cellpadding='0' cellspacing='0' class='adminedit'>
|
||||
<colgroup span='2'>
|
||||
<col class='col-label' />
|
||||
<col class='col-control' />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
";
|
||||
|
||||
foreach($controller->getFields() as $key => $att)
|
||||
if($controller->getId())
|
||||
{
|
||||
$parms = vartrue($att['parms'], 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>' : '';
|
||||
|
||||
// type null - system (special) fields
|
||||
if($att['type'] !== null && !vartrue($att['noedit']) && $key != $controller->getPrimaryName())
|
||||
{
|
||||
$text .= "
|
||||
<tr>
|
||||
<td class='label'>
|
||||
".defset($att['title'], $att['title']).$label."
|
||||
</td>
|
||||
<td class='control'>
|
||||
".$this->renderElement($key, $model->getIfPosted($key), $att)."
|
||||
{$help}
|
||||
</td>
|
||||
</tr>
|
||||
";
|
||||
}
|
||||
|
||||
$legend = LAN_UPDATE.' record #'.$controller->getId();
|
||||
}
|
||||
|
||||
$text .= "
|
||||
</tbody>
|
||||
</table>
|
||||
<div class='buttons-bar center'>
|
||||
";
|
||||
// TODO - make this optional, introduce ui_parameters variable (array)
|
||||
$text .= '
|
||||
<div class="options">
|
||||
After submit: '.$this->radio_multi('__after_submit_action', array('list' => 'go to list', 'create' => 'create another', 'edit' => 'edit current'), $request->getPosted('__after_submit_action', 'list'), false).'
|
||||
</div>
|
||||
';
|
||||
if($controller->getId())
|
||||
{
|
||||
$text .= $this->admin_button('etrigger_submit', LAN_UPDATE, 'update');
|
||||
$text .= "<input type='hidden' name='record_id' value='".$controller->getId()."' />";
|
||||
}
|
||||
else
|
||||
{
|
||||
$text .= $this->admin_button('etrigger_submit', LAN_CREATE, 'create');
|
||||
$text .= "<input type='hidden' name='record_id' value='0' />";
|
||||
}
|
||||
$text .= $this->admin_button('etrigger_cancel', LAN_CANCEL, 'cancel');
|
||||
|
||||
$text .= "
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
";
|
||||
else
|
||||
{
|
||||
$legend = 'New record';
|
||||
}
|
||||
$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(
|
||||
'legend' => $legend,
|
||||
'fields' => $controller->getFields(), //see e_admin_ui::$fields
|
||||
'after_submit_options' => true, // or true for default redirect options
|
||||
'after_submit_default' => $request->getPosted('__after_submit_action', $controller->getDefaultAction()), // or true for default redirect options
|
||||
'triggers' => 'auto', // standard create/update-cancel triggers
|
||||
)
|
||||
)
|
||||
);
|
||||
$models[] = $controller->getModel();
|
||||
|
||||
return $text;
|
||||
return $this->createForm($forms, $models);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2550,68 +2484,40 @@ class e_admin_form_ui extends e_form
|
||||
{
|
||||
$tp = e107::getParser();
|
||||
$controller = $this->getController();
|
||||
$request = $controller->getRequest();
|
||||
$tree = $controller->getTreeModel()->getTree();
|
||||
$total = $controller->getTreeModel()->getTotal();
|
||||
|
||||
$amount = $controller->getPerPage();
|
||||
$from = $controller->getQuery('from', 0);
|
||||
$field = $controller->getQuery('field', $controller->getPrimaryName());
|
||||
$asc = strtoupper($controller->getQuery('asc', 'desc'));
|
||||
$elid = ($controller->getPluginName() == 'core' ? 'core-' : '').str_replace('_', '-', $controller->getTableName());
|
||||
|
||||
$text = $tree ? $this->renderFilter($tp->post_toForm(array($controller->getQuery('searchquery'), $controller->getQuery('filter_options')))) : '';
|
||||
$text .= "
|
||||
<form method='post' action='".e_SELF."?".e_QUERY."' id='{$elid}-list-form'>
|
||||
<fieldset id='{$elid}-list'>
|
||||
<legend class='e-hideme'>".$controller->getPluginTitle()."</legend>
|
||||
<table cellpadding='0' cellspacing='0' class='adminlist' id='{$elid}-list-table'>
|
||||
".$this->colGroup($controller->getFields(), $controller->getFieldPref())."
|
||||
".$this->thead($controller->getFields(), $controller->getFieldPref(), 'mode='.$request->buildQueryString('field=[FIELD]&asc=[ASC]&from=[FROM]'))."
|
||||
<tbody>
|
||||
";
|
||||
|
||||
if(!$tree)
|
||||
{
|
||||
$text .= "
|
||||
<tr>
|
||||
<td colspan='".count($controller->getFieldPref())."' class='center middle'>".LAN_NO_RECORDS."</td>
|
||||
</tr>
|
||||
";
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($tree as $model)
|
||||
{
|
||||
$text .= $this->trow($controller->getFields(), $controller->getFieldPref(), $model->getData(), $controller->getPrimaryName());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$text .= "
|
||||
</tbody>
|
||||
</table>
|
||||
";
|
||||
|
||||
$text .= $tree ? $this->renderBatch($controller->getBatchDelete()) : '';
|
||||
|
||||
$text .= "
|
||||
</fieldset>
|
||||
</form>
|
||||
";
|
||||
|
||||
if($tree)
|
||||
{
|
||||
$parms = $total.",".$amount.",".$from.",".e_SELF.'?'.$request->buildQueryString('from=[FROM]');
|
||||
$text .= e107::getParser()->parseTemplate("{NEXTPREV={$parms}}");
|
||||
}
|
||||
|
||||
return $text;
|
||||
$request = $controller->getRequest();
|
||||
$tree = $controller->getTreeModel();
|
||||
$options = array(
|
||||
'id' => $this->getElementId(), // unique string used for building element ids, REQUIRED
|
||||
'pid' => $controller->getPrimaryName(), // primary field name, REQUIRED
|
||||
//'url' => e_SELF, default
|
||||
//'query' => e_QUERY, default
|
||||
'head_query' => $request->buildQueryString(array(), true, 'field,asc,from'), // without field, asc and from vars, REQUIRED
|
||||
'np_query' => $request->buildQueryString(array(), true, 'from'), // without from var, REQUIRED for next/prev functionality
|
||||
'legend' => $controller->getPluginTitle(), // hidden by default
|
||||
'form_pre' => !$tree->isEmpty() ? $this->renderFilter($tp->post_toForm(array($controller->getQuery('searchquery'), $controller->getQuery('filter_options')), $controller->getModel().'/'.$controller->getAction())) : '',
|
||||
'form_post' => '', // markup to be added after closing form element
|
||||
'fields' => $controller->getFields(), // see e_admin_ui::$fields
|
||||
'fieldpref' => $controller->getFieldPref(), // see e_admin_ui::$fieldpref
|
||||
'table_pre' => '', // markup to be added before opening table element
|
||||
'table_post' => !$tree->isEmpty() ? $this->renderBatch($controller->getBatchDelete()) : '',
|
||||
'fieldset_pre' => '', // markup to be added before opening fieldset element
|
||||
'fieldset_post' => '', // markup to be added after closing fieldset element
|
||||
'perPage' => $controller->getPerPage(), // if 0 - no next/prev navigation
|
||||
'from' => $controller->getQuery('from', 0), // current page, default 0
|
||||
'field' => $controller->getQuery('field'), //current order field name, default - primary field
|
||||
'asc' => $controller->getQuery('asc', 'desc'), //current 'order by' rule, default 'asc'
|
||||
);
|
||||
return $this->listForm($options, $tree);
|
||||
}
|
||||
|
||||
function renderFilter($current_query = array(), $input_options = array())
|
||||
function renderFilter($current_query = array(), $location = '', $input_options = array())
|
||||
{
|
||||
if(!$input_options) $input_options = array('size' => 20);
|
||||
if(!$location)
|
||||
{
|
||||
$location = 'main/list'; //default location
|
||||
}
|
||||
$l = explode('/', $location);
|
||||
$text = "
|
||||
<form method='get' action='".e_SELF."?".e_QUERY."'>
|
||||
<fieldset class='e-filter'>
|
||||
@@ -2622,13 +2528,13 @@ class e_admin_form_ui extends e_form
|
||||
".$this->option('Display All', '')."
|
||||
".$this->renderBatchFilter('filter', $current_query[1])."
|
||||
".$this->select_close()."
|
||||
".$this->hidden('mode', $this->getController()->getMode())."
|
||||
".$this->hidden('action', $this->getController()->getAction())."
|
||||
".$this->hidden('mode', $l[0])."
|
||||
".$this->hidden('action', $l[1])."
|
||||
".$this->admin_button('etrigger_filter', LAN_FILTER)."
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
"; //TODO assign CSS
|
||||
";
|
||||
|
||||
return $text;
|
||||
}
|
||||
@@ -2673,14 +2579,18 @@ class e_admin_form_ui extends e_form
|
||||
switch($val['type'])
|
||||
{
|
||||
case 'boolean': //TODO modify description based on $val['parm]
|
||||
$option[$key."_1"] = LAN_YES;
|
||||
$option[$key."_0"] = LAN_NO;
|
||||
$option['bool__'.$key.'__1'] = LAN_YES;
|
||||
$option['bool__'.$key.'__0'] = LAN_NO;
|
||||
if($type == 'batch')
|
||||
{
|
||||
$option['boolreverse__'.$key] = LAN_BOOL_REVERSE;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'dropdown': // use the array $parm;
|
||||
foreach($val['parm'] as $k=>$name)
|
||||
foreach($val['parm'] as $k => $name)
|
||||
{
|
||||
$option[$key."_".$k] = $name;
|
||||
$option[$key.'__'.$k] = $name;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -2695,9 +2605,9 @@ class e_admin_form_ui extends e_form
|
||||
case 'userclass':
|
||||
case 'userclasses':
|
||||
$classes = e107::getUserClass()->uc_required_class_list($val['parms']);
|
||||
foreach($classes as $k=>$name)
|
||||
foreach($classes as $k => $name)
|
||||
{
|
||||
$option[$key."_".$k] = $name;
|
||||
$option[$key.'__'.$k] = $name;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -2706,9 +2616,9 @@ class e_admin_form_ui extends e_form
|
||||
$list = call_user_func_array(array($this, $method), array('', $type));
|
||||
if(is_array($list))
|
||||
{
|
||||
foreach($list as $k=>$name)
|
||||
foreach($list as $k => $name)
|
||||
{
|
||||
$option[$key."_".$k] = $name;
|
||||
$option[$key.'__'.$k] = $name;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -2729,94 +2639,10 @@ class e_admin_form_ui extends e_form
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Render Form Element
|
||||
* @param string $key
|
||||
* @param mixed $value
|
||||
* @param array $attributes field attributes including render parameters, element options
|
||||
* @return string
|
||||
*/
|
||||
function renderElement($key, $value, $attributes)
|
||||
public function getElementId()
|
||||
{
|
||||
$parms = vartrue($attributes['parms'], array());
|
||||
if(is_string($parms)) parse_str($parms, $parms);
|
||||
|
||||
//FIXME - this block is present in trow(), so make it separate method, use it in both methods
|
||||
switch($attributes['type'])
|
||||
{
|
||||
case 'number':
|
||||
$maxlength = vartrue($parms['maxlength'], 255);
|
||||
unset($parms['maxlength']);
|
||||
if(!vartrue($parms['size'])) $parms['size'] = 15;
|
||||
if(!vartrue($parms['class'])) $parms['class'] = 'tbox number';
|
||||
return $this->text($key, $value, $maxlength, $parms);
|
||||
break;
|
||||
|
||||
case 'url':
|
||||
case 'text':
|
||||
$maxlength = vartrue($parms['maxlength'], 255);
|
||||
unset($parms['maxlength']);
|
||||
return $this->text($key, $value, $maxlength, $parms);
|
||||
break;
|
||||
|
||||
case 'image': //TODO - thumb, image list shortcode, js tooltip...
|
||||
$label = varset($parms['label']);
|
||||
unset($parms['label']);
|
||||
return $this->imagepicker($key, $value, $label, $parms);
|
||||
break;
|
||||
|
||||
case 'icon':
|
||||
$label = varset($parms['label']);
|
||||
$ajax = varset($parms['ajax']) ? true : false;
|
||||
unset($parms['label'], $parms['ajax']);
|
||||
return $this->iconpicker($key, $value, $label, $parms, $ajax);
|
||||
break;
|
||||
|
||||
case 'datestamp':
|
||||
return $this->datepicker($key, $value, $parms);
|
||||
break;
|
||||
|
||||
case 'dropdown':
|
||||
$eloptions = vartrue($parms['dropdown'], array());
|
||||
if(is_string($eloptions)) parse_str($eloptions);
|
||||
unset($parms['dropdown']);
|
||||
return $this->selectbox($name, $eloptions, $value, $parms);
|
||||
break;
|
||||
|
||||
case 'userclass':
|
||||
case 'userclasses':
|
||||
$uc_options = vartrue($parms['userclass'], '');
|
||||
unset($parms['userclass']);
|
||||
$method = $attributes['type'] == 'userclass' ? 'uc_select' : 'uc_checkbox';
|
||||
return $this->$method($key, $value, $uc_options, $parms);
|
||||
break;
|
||||
|
||||
case 'user_name':
|
||||
case 'user_loginname':
|
||||
case 'user_login':
|
||||
case 'user_customtitle':
|
||||
case 'user_email':
|
||||
//user_id expected
|
||||
//$value = get_user_data($value);
|
||||
return $this->user($key, $value, $parms);
|
||||
break;
|
||||
|
||||
case 'boolean':
|
||||
$lenabled = vartrue($parms['enabled'], 'LAN_ENABLED');
|
||||
$ldisabled = vartrue($parms['disabled'], 'LAN_DISABLED');
|
||||
unset($parms['enabled'], $parms['disabled']);
|
||||
return $this->radio_switch($key, $value, defset($lenabled, $lenabled), defset($ldisabled, $ldisabled));
|
||||
break;
|
||||
|
||||
case 'method': // Custom Function
|
||||
return call_user_func_array(array($this, $key), array($value, 'form'));
|
||||
break;
|
||||
|
||||
default:
|
||||
//unknown type
|
||||
break;
|
||||
}
|
||||
|
||||
$controller = $this->getController();
|
||||
return str_replace('_', '-', ($controller->getPluginName() == 'core' ? 'core-'.$controller->getTableName() : 'plugin-'.$controller->getPluginName()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2977,79 +2803,6 @@ class e_admin_ui_dummy extends e_form
|
||||
$query = $field." = ".$value." WHERE ".$this->pid." IN (".implode(",",$ids).") ";
|
||||
$count = $sql->db_Update($this->table,$query);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Generic Save DB Record Function.
|
||||
* @param object $id [optional]
|
||||
* @return
|
||||
*/
|
||||
function saveRecord($id=FALSE)
|
||||
{
|
||||
global $e107cache, $admin_log, $e_event;
|
||||
|
||||
$sql = e107::getDb();
|
||||
$tp = e107::getParser();
|
||||
$mes = e107::getMessage();
|
||||
|
||||
$insert_array = array();
|
||||
|
||||
//TODO validation and sanitizing using above classes.
|
||||
|
||||
foreach($this->fields as $key=>$att)
|
||||
{
|
||||
if($att['forced']!=TRUE)
|
||||
{
|
||||
$insert_array[$key] = $_POST[$key];
|
||||
}
|
||||
}
|
||||
|
||||
if($id)
|
||||
{
|
||||
$insert_array['WHERE'] = $this->primary." = ".$id;
|
||||
$status = $sql->db_Update($this->table,$insert_array) ? E_MESSAGE_SUCCESS : E_MESSAGE_FAILED;
|
||||
$message = LAN_UPDATED; // deliberately ambiguous - to be used on success or error.
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
$status = $sql->db_Insert($this->table,$insert_array) ? E_MESSAGE_SUCCESS : E_MESSAGE_FAILED;
|
||||
$message = LAN_CREATED;
|
||||
}
|
||||
|
||||
|
||||
$mes->add($message, $status);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic Delete DB Record Function.
|
||||
* @param object $id
|
||||
* @return
|
||||
*/
|
||||
function deleteRecord($id)
|
||||
{
|
||||
if(!$id || !$this->primary || !$this->table)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$mes = e107::getMessage();
|
||||
$sql = e107::getDb();
|
||||
|
||||
$query = $this->primary." = ".$id;
|
||||
$status = $sql->db_Delete($this->table,$query) ? E_MESSAGE_SUCCESS : E_MESSAGE_FAILED;
|
||||
$message = LAN_DELETED;
|
||||
$mes->add($message, $status);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Generic Options/Preferences Form.
|
||||
|
@@ -9,8 +9,8 @@
|
||||
* Form Handler
|
||||
*
|
||||
* $Source: /cvs_backup/e107_0.8/e107_handlers/form_handler.php,v $
|
||||
* $Revision: 1.62 $
|
||||
* $Date: 2009-11-01 19:05:25 $
|
||||
* $Revision: 1.63 $
|
||||
* $Date: 2009-11-02 17:45:28 $
|
||||
* $Author: secretr $
|
||||
*
|
||||
*/
|
||||
@@ -1000,6 +1000,351 @@ class e_form
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic List Form
|
||||
* Search for the following GET variables:
|
||||
* Expected options array format:
|
||||
* <code>
|
||||
* <?php
|
||||
* $options = array(
|
||||
* 'id' => 'myplugin', // unique string used for building element ids, REQUIRED
|
||||
* 'pid' => 'primary_id', // primary field name, REQUIRED
|
||||
* 'url' => '{e_PLUGIN}myplug/admin_config.php', // if not set, e_SELF is used
|
||||
* 'query' => 'mode=main&action=list', // or e_QUERY if not set
|
||||
* 'head_query' => 'mode=main&action=list', // without field, asc and from vars, REQUIRED
|
||||
* 'np_query' => 'mode=main&action=list', // without from var, REQUIRED for next/prev functionality
|
||||
* 'legend' => 'Fieldset Legend', // hidden by default
|
||||
* 'form_pre' => '', // markup to be added before opening form element (e.g. Filter form)
|
||||
* 'form_post' => '', // markup to be added after closing form element
|
||||
* 'fields' => array(...), // see e_admin_ui::$fields
|
||||
* 'fieldpref' => array(...), // see e_admin_ui::$fieldpref
|
||||
* 'table_pre' => '', // markup to be added before opening table element
|
||||
* 'table_post' => '', // markup to be added after closing table element (e.g. Batch actions)
|
||||
* 'fieldset_pre' => '', // markup to be added before opening fieldset element
|
||||
* 'fieldset_post' => '', // markup to be added after closing fieldset element
|
||||
* 'perPage' => 15, // if 0 - no next/prev navigation
|
||||
* 'from' => 0, // current page, default 0
|
||||
* 'field' => 'field_name', //current order field name, default - primary field
|
||||
* 'asc' => 'desc', //current 'order by' rule, default 'asc'
|
||||
* );
|
||||
* $list = new e_admin_tree_model($data);
|
||||
* </code>
|
||||
* @param array $options
|
||||
* @param e_admin_tree_model $list
|
||||
* @return string
|
||||
*/
|
||||
public function listForm($options, $list)
|
||||
{
|
||||
$tp = e107::getParser();
|
||||
$tree = $list->getTree();
|
||||
$total = $list->getTotal();
|
||||
|
||||
$amount = $options['perPage'];
|
||||
$from = vartrue($options['from'], 0);
|
||||
$field = vartrue($options['field'], $options['pid']);
|
||||
$asc = strtoupper(vartrue($options['asc'], 'asc'));
|
||||
$elid = $options['id'];
|
||||
$query = isset($options['query']) ? $options['query'] : e_QUERY ;
|
||||
$url = (isset($options['url']) ? $tp->replaceConstants($options['url'], 'abs') : e_SELF);
|
||||
$formurl = $url.($query ? '?'.$query : '');
|
||||
$fields = $options['fields'];
|
||||
$current_fields = $options['fieldpref'];
|
||||
|
||||
$text .= "
|
||||
".vartrue($options['form_pre'])."
|
||||
<form method='post' action='{$formurl}' id='{$elid}-list-form'>
|
||||
".vartrue($options['fieldset_pre'])."
|
||||
<fieldset id='{$elid}-list'>
|
||||
<legend class='e-hideme'>".$options['legend']."</legend>
|
||||
".vartrue($options['table_pre'])."
|
||||
<table cellpadding='0' cellspacing='0' class='adminlist' id='{$elid}-list-table'>
|
||||
".$this->colGroup($fields, $current_fields)."
|
||||
".$this->thead($fields, $current_fields, $options['head_query'], $options['query'])."
|
||||
<tbody>
|
||||
";
|
||||
|
||||
if(!$tree)
|
||||
{
|
||||
$text .= "
|
||||
<tr>
|
||||
<td colspan='".count($current_fields)."' class='center middle'>".LAN_NO_RECORDS."</td>
|
||||
</tr>
|
||||
";
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($tree as $model)
|
||||
{
|
||||
$text .= $this->trow($fields, $current_fields, $model->getData(), $options['pid']);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$text .= "
|
||||
</tbody>
|
||||
</table>
|
||||
".vartrue($options['table_post'])."
|
||||
";
|
||||
|
||||
|
||||
if($tree && $amount)
|
||||
{
|
||||
$parms = $total.",".$amount.",".$from.",".$url.'?'.($options['np_query'] ? $options['np_query'].'&' : '').'from=[FROM]';
|
||||
$text .= $tp->parseTemplate("{NEXTPREV={$parms}}");
|
||||
}
|
||||
|
||||
$text .= "
|
||||
</fieldset>
|
||||
".vartrue($options['fieldset_post'])."
|
||||
</form>
|
||||
".vartrue($options['form_post'])."
|
||||
";
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic DB Record Management Form.
|
||||
* TODO - lans
|
||||
* Expected arrays format:
|
||||
* <code>
|
||||
* <?php
|
||||
* $forms[0] = array(
|
||||
* '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)
|
||||
* 'fieldsets' => array(
|
||||
* 'general' => array(
|
||||
* 'legend' => 'Fieldset Legend',
|
||||
* 'fields' => array(...), //see e_admin_ui::$fields
|
||||
* 'after_submit_options' => array('action' => 'Label'[,...]), // or true for default redirect options
|
||||
* 'after_submit_default' => 'action_name',
|
||||
* 'triggers' => 'auto', // standard create/update-cancel triggers
|
||||
* //or custom trigger array in format array('sibmit' => array('Title', 'create', '1'), 'cancel') - trigger name - title, action, optional hidden value (in this case named sibmit_value)
|
||||
* ),
|
||||
* 'advanced' => array(
|
||||
* 'legend' => 'Fieldset Legend',
|
||||
* 'fields' => array(...), //see e_admin_ui::$fields
|
||||
* 'after_submit_options' => array('__default' => 'action_name' 'action' => 'Label'[,...]), // or true for default redirect options
|
||||
* 'triggers' => 'auto', // standard create/update-cancel triggers
|
||||
* //or custom trigger array in format array('sibmit' => array('Title', 'create', '1'), 'cancel') - trigger name - title, action, optional hidden value (in this case named sibmit_value)
|
||||
* )
|
||||
* )
|
||||
* );
|
||||
* $models[0] = new e_admin_model($data);
|
||||
* $models[0]->setFieldIdName('primary_id'); // you need to do it if you don't use your own admin model extension
|
||||
* </code>
|
||||
* @param array $forms numerical array
|
||||
* @param array $models numerical array with values instance of e_admin_model
|
||||
* @return string
|
||||
*/
|
||||
function createForm($forms, $models)
|
||||
{
|
||||
$text = '';
|
||||
foreach ($forms as $fid => $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'>
|
||||
";
|
||||
|
||||
foreach ($form['fieldsets'] as $elid => $data)
|
||||
{
|
||||
$elid = $form['id'].'-'.$elid;
|
||||
$text .= "
|
||||
{$data['fieldset_pre']}
|
||||
<fieldset id='{$elid}'>
|
||||
<legend>{$data['legend']}</legend>
|
||||
{$data['table_pre']}
|
||||
<table cellpadding='0' cellspacing='0' class='adminedit'>
|
||||
<colgroup span='2'>
|
||||
<col class='col-label' />
|
||||
<col class='col-control' />
|
||||
</colgroup>
|
||||
<tbody>
|
||||
";
|
||||
|
||||
foreach($data['fields'] as $key => $att)
|
||||
{
|
||||
|
||||
$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>' : '';
|
||||
|
||||
// type null - system (special) fields
|
||||
if($att['type'] !== null && !vartrue($att['noedit']) && $key != $model->getFieldIdName())
|
||||
{
|
||||
$text .= "
|
||||
<tr>
|
||||
<td class='label'>
|
||||
".defset($att['title'], $att['title']).$label."
|
||||
</td>
|
||||
<td class='control'>
|
||||
".$this->renderElement($key, $model->getIfPosted($key), $att)."
|
||||
{$help}
|
||||
</td>
|
||||
</tr>
|
||||
";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$text .= "
|
||||
</tbody>
|
||||
</table>
|
||||
{$data['table_post']}
|
||||
<div class='buttons-bar center'>
|
||||
";
|
||||
// After submit options
|
||||
$defsubmitopt = array('list' => 'go to list', 'create' => 'create another', 'edit' => 'edit current');
|
||||
$submitopt = isset($data['after_submit_options']) ? $data['after_submit_options'] : true;
|
||||
if(true === $submitopt)
|
||||
{
|
||||
$submitopt = $defsubmitopt;
|
||||
}
|
||||
|
||||
if($submitopt)
|
||||
{
|
||||
$selected = isset($data['after_submit_default']) && array_key_exists($data['after_submit_default'], $submitopt) ? $data['after_submit_default'] : '';
|
||||
$text .= '
|
||||
<div class="options">
|
||||
After submit: '.$this->radio_multi('__after_submit_action', $submitopt, $selected, false).'
|
||||
</div>
|
||||
';
|
||||
}
|
||||
|
||||
$triggers = vartrue($data['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 .= $this->admin_button('etrigger_'.$trigger, $tdata[0], $tdata[1]);
|
||||
if(isset($tdata[2]))
|
||||
{
|
||||
$text .= $this->hidden($trigger.'_value', $tdata[2]);
|
||||
}
|
||||
}
|
||||
|
||||
$text .= "
|
||||
</div>
|
||||
</fieldset>
|
||||
{$data['fieldset_post']}
|
||||
";
|
||||
}
|
||||
$text .= "
|
||||
</form>
|
||||
";
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Auto-render Form Element
|
||||
* @param string $key
|
||||
* @param mixed $value
|
||||
* @param array $attributes field attributes including render parameters, element options
|
||||
* @return string
|
||||
*/
|
||||
function renderElement($key, $value, $attributes)
|
||||
{
|
||||
$parms = vartrue($attributes['parms'], array());
|
||||
if(is_string($parms)) parse_str($parms, $parms);
|
||||
|
||||
//FIXME - this block is present in trow(), so make it separate method, use it in both methods
|
||||
switch($attributes['type'])
|
||||
{
|
||||
case 'number':
|
||||
$maxlength = vartrue($parms['maxlength'], 255);
|
||||
unset($parms['maxlength']);
|
||||
if(!vartrue($parms['size'])) $parms['size'] = 15;
|
||||
if(!vartrue($parms['class'])) $parms['class'] = 'tbox number';
|
||||
return $this->text($key, $value, $maxlength, $parms);
|
||||
break;
|
||||
|
||||
case 'url':
|
||||
case 'text':
|
||||
$maxlength = vartrue($parms['maxlength'], 255);
|
||||
unset($parms['maxlength']);
|
||||
return $this->text($key, $value, $maxlength, $parms);
|
||||
break;
|
||||
|
||||
case 'image': //TODO - thumb, image list shortcode, js tooltip...
|
||||
$label = varset($parms['label']);
|
||||
unset($parms['label']);
|
||||
return $this->imagepicker($key, $value, $label, $parms);
|
||||
break;
|
||||
|
||||
case 'icon':
|
||||
$label = varset($parms['label']);
|
||||
$ajax = varset($parms['ajax']) ? true : false;
|
||||
unset($parms['label'], $parms['ajax']);
|
||||
return $this->iconpicker($key, $value, $label, $parms, $ajax);
|
||||
break;
|
||||
|
||||
case 'datestamp':
|
||||
return $this->datepicker($key, $value, $parms);
|
||||
break;
|
||||
|
||||
case 'dropdown':
|
||||
$eloptions = vartrue($parms['dropdown'], array());
|
||||
if(is_string($eloptions)) parse_str($eloptions);
|
||||
unset($parms['dropdown']);
|
||||
return $this->selectbox($name, $eloptions, $value, $parms);
|
||||
break;
|
||||
|
||||
case 'userclass':
|
||||
case 'userclasses':
|
||||
$uc_options = vartrue($parms['userclass'], '');
|
||||
unset($parms['userclass']);
|
||||
$method = $attributes['type'] == 'userclass' ? 'uc_select' : 'uc_checkbox';
|
||||
return $this->$method($key, $value, $uc_options, $parms);
|
||||
break;
|
||||
|
||||
case 'user_name':
|
||||
case 'user_loginname':
|
||||
case 'user_login':
|
||||
case 'user_customtitle':
|
||||
case 'user_email':
|
||||
//user_id expected
|
||||
//$value = get_user_data($value);
|
||||
return $this->user($key, $value, $parms);
|
||||
break;
|
||||
|
||||
case 'boolean':
|
||||
$lenabled = vartrue($parms['enabled'], 'LAN_ENABLED');
|
||||
$ldisabled = vartrue($parms['disabled'], 'LAN_DISABLED');
|
||||
unset($parms['enabled'], $parms['disabled']);
|
||||
return $this->radio_switch($key, $value, defset($lenabled, $lenabled), defset($ldisabled, $ldisabled));
|
||||
break;
|
||||
|
||||
case 'method': // Custom Function
|
||||
return call_user_func_array(array($this, $key), array($value, 'form'));
|
||||
break;
|
||||
|
||||
default:
|
||||
//unknown type
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// The 2 functions below are for demonstration purposes only, and may be moved/modified before release.
|
||||
function filterType($fieldarray)
|
||||
|
@@ -9,8 +9,8 @@
|
||||
* e107 Base Model
|
||||
*
|
||||
* $Source: /cvs_backup/e107_0.8/e107_handlers/model_class.php,v $
|
||||
* $Revision: 1.28 $
|
||||
* $Date: 2009-11-01 19:05:25 $
|
||||
* $Revision: 1.29 $
|
||||
* $Date: 2009-11-02 17:45:29 $
|
||||
* $Author: secretr $
|
||||
*/
|
||||
|
||||
@@ -1993,6 +1993,7 @@ class e_tree_model extends e_model
|
||||
{
|
||||
$sql = e107::getDb();
|
||||
$class_name = $this->getParam('model_class');
|
||||
$this->_total = $sql->total_results = false;
|
||||
if($sql->db_Select_gen($this->getParam('db_query')))
|
||||
{
|
||||
$this->_total = $sql->total_results; //requires SQL_CALC_FOUND_ROWS in query - see db handler
|
||||
@@ -2002,6 +2003,7 @@ class e_tree_model extends e_model
|
||||
$tmp = new $class_name($tmp);
|
||||
$this->setNode($tmp->get($this->getFieldIdName()), $tmp);
|
||||
}
|
||||
// FIXME - test for type of $this->_total to avoid query if table is empty
|
||||
if(!$this->_total && $this->getModelTable())
|
||||
{
|
||||
//SQL_CALC_FOUND_ROWS not found in the query, do one more query
|
||||
|
@@ -9,8 +9,8 @@
|
||||
* Release Plugin Administration UI
|
||||
*
|
||||
* $Source: /cvs_backup/e107_0.8/e107_plugins/release/includes/admin.php,v $
|
||||
* $Revision: 1.2 $
|
||||
* $Date: 2009-11-01 19:05:26 $
|
||||
* $Revision: 1.3 $
|
||||
* $Date: 2009-11-02 17:45:28 $
|
||||
* $Author: secretr $
|
||||
*/
|
||||
|
||||
@@ -68,7 +68,7 @@ class plugin_release_admin_ui extends e_admin_ui
|
||||
protected $pid = "release_id";
|
||||
|
||||
// optional
|
||||
protected $perPage = 20;
|
||||
protected $perPage = 2;
|
||||
|
||||
// default - true
|
||||
protected $batchDelete = true;
|
||||
@@ -87,6 +87,7 @@ class plugin_release_admin_ui extends e_admin_ui
|
||||
'release_date' => array('title'=> LAN_DATE, 'type' => 'datestamp', 'data' => 'int', 'width' => 'auto', 'thclass' => ''),
|
||||
'release_compatibility' => array('title'=> 'compatib', 'type' => 'text', 'data' => 'str', 'width' => '10%', 'thclass' => 'center' ),
|
||||
'release_url' => array('title'=> 'release_url', 'type' => 'url', 'data' => 'str', 'width' => '20%', 'thclass' => 'center', 'batch' => TRUE, 'filter'=>TRUE, 'parms' => 'truncate=30', 'validate' => true, 'help' => 'Enter release URL here', 'error' => 'please, ener valid URL'),
|
||||
'test_list_1' => array('title'=> 'test 1', 'type' => 'boolean', 'data' => 'int', 'width' => '5%', 'thclass' => 'center', 'batch' => TRUE, 'filter'=>TRUE, 'noedit' => true),
|
||||
'options' => array('title'=> LAN_OPTIONS, 'type' => null, 'data' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced'=>TRUE)
|
||||
);
|
||||
|
||||
|
Reference in New Issue
Block a user