mirror of
https://github.com/e107inc/e107.git
synced 2025-07-31 20:00:37 +02:00
fix of Admin UI delete issue (very bad) - wrong ID is posted (at least FF 4), id extracted from key now, further investigation is requried.
This commit is contained in:
@@ -1307,10 +1307,10 @@ class e_admin_dispatcher
|
||||
foreach($this->adminMenu as $key => $val)
|
||||
{
|
||||
$tmp = explode('/', trim($key, '/'), 3);
|
||||
|
||||
|
||||
// custom 'selected' check
|
||||
if(isset($val['selected']) && $val['selected']) $selected = $val['selected'] === true ? $key : $val['selected'];
|
||||
|
||||
|
||||
foreach ($val as $k=>$v)
|
||||
{
|
||||
switch($k)
|
||||
@@ -1324,7 +1324,7 @@ class e_admin_dispatcher
|
||||
$k2 = 'link';
|
||||
$v = $tp->replaceConstants($v, 'abs').'?mode='.$tmp[0].'&action='.$tmp[1];
|
||||
break;
|
||||
|
||||
|
||||
case 'uri':
|
||||
$k2 = 'link';
|
||||
$v = $tp->replaceConstants($v, 'abs');
|
||||
@@ -1771,7 +1771,7 @@ class e_admin_controller
|
||||
{
|
||||
$action = $request->getActionName();
|
||||
}
|
||||
|
||||
|
||||
// check for observer
|
||||
$actionName = $this->toMethodName($action, 'page');
|
||||
$ret = '';
|
||||
@@ -1848,7 +1848,7 @@ class e_admin_controller
|
||||
if($mode) $request->setMode($mode);
|
||||
if($action) $request->setAction($action);
|
||||
if(!$path) $path = e_SELF;
|
||||
|
||||
|
||||
$url = $path.'?'.$request->buildQueryString($merge_query, false, $exclude_query);
|
||||
// Transfer all messages to session
|
||||
e107::getMessage()->moveToSession();
|
||||
@@ -1991,7 +1991,7 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
* @var array
|
||||
*/
|
||||
protected $tableJoin = array();
|
||||
|
||||
|
||||
/**
|
||||
* Array of table names and their aliases. (detected from listQry)
|
||||
* db query building
|
||||
@@ -2024,7 +2024,7 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
* @var string SQL order, false to disable order, null is default order
|
||||
*/
|
||||
protected $listOrder = null;
|
||||
|
||||
|
||||
/**
|
||||
* Structure same as TreeModel parameters used for building the load() SQL
|
||||
* @var additional SQL to be applied when auto-building the list query
|
||||
@@ -2359,7 +2359,7 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
$this->_tree_model = $tree_model;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get currently parsed model while in list mode
|
||||
* Model instance is registered by e_form::renderListForm()
|
||||
@@ -2370,7 +2370,7 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
{
|
||||
return e107::getRegistry('core/adminUI/currentListModel');
|
||||
}
|
||||
|
||||
|
||||
public function setListModel($model)
|
||||
{
|
||||
e107::setRegistry('core/adminUI/currentListModel', $model);
|
||||
@@ -2490,7 +2490,7 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
|
||||
//if(empty($selected)) return $this; - allow empty (no selected) submit for custom batch handlers - e.g. Export CSV
|
||||
// requires writeParams['batchNoCheck'] == true!!!
|
||||
|
||||
|
||||
$selected = array_map('intval', $selected);
|
||||
$trigger = $tp->toDB(explode('__', $batch_trigger));
|
||||
|
||||
@@ -2544,7 +2544,7 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
//something like handleListUrlTypeBatch(); for custom handling of 'url_type' field name
|
||||
$method = 'handle'.$this->getRequest()->getActionName().$this->getRequest()->camelize($field).'Batch';
|
||||
if(method_exists($this, $method)) // callback handling
|
||||
@@ -2552,7 +2552,7 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
$this->$method($selected, $value);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
//handleListBatch(); for custom handling of all field names
|
||||
if(empty($selected)) return $this;
|
||||
$method = 'handle'.$this->getRequest()->getActionName().'Batch';
|
||||
@@ -2634,15 +2634,15 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
$value = trim($value) ? e107::getInstance()->ipEncode($value) : '';
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 'dropdown': // TODO - ask Steve if this check is required
|
||||
case 'lanlist':
|
||||
if(is_array($value))
|
||||
{
|
||||
// no sanitize here - data is added to model posted stack
|
||||
// no sanitize here - data is added to model posted stack
|
||||
// and validated & sanitized before sent to db
|
||||
//$value = array_map(array(e107::getParser(), 'toDB'), $value);
|
||||
$value = implode(',', $value);
|
||||
//$value = array_map(array(e107::getParser(), 'toDB'), $value);
|
||||
$value = implode(',', $value);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -2726,7 +2726,7 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
// Build query
|
||||
$qry = $this->_modifyListQry(false, true, 0, 20, $listQry);
|
||||
//file_put_contents(e_LOG.'uiAjaxResponseSQL.log', $qry."\n\n", FILE_APPEND);
|
||||
|
||||
|
||||
// Make query
|
||||
$sql = e107::getDb();
|
||||
if($qry && $sql->db_Select_gen($qry, $debug))
|
||||
@@ -2768,9 +2768,9 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
protected function parseAliases()
|
||||
{
|
||||
if($this->_alias_parsed) return $this; // already parsed!!!
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if($this->getJoinData())
|
||||
{
|
||||
foreach ($this->getJoinData() as $table => $att)
|
||||
@@ -2783,7 +2783,7 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
$att['table'] = $tmp[1];
|
||||
$att['__tablePath'] = $att['alias'].'.';
|
||||
$att['__tableFrom'] = '`#'.$att['table'].'` AS '.$att['alias'];
|
||||
$this->setJoinData($att['alias'], $att);
|
||||
$this->setJoinData($att['alias'], $att);
|
||||
unset($tmp);
|
||||
continue;
|
||||
}
|
||||
@@ -2794,17 +2794,17 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
$this->setJoinData($table, $att);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$this->joinAlias(); // generate Table Aliases from listQry
|
||||
|
||||
|
||||
// check for table & field aliases
|
||||
$fields = array(); // preserve order
|
||||
foreach ($this->fields as $field => $att)
|
||||
{
|
||||
// tableAlias.fieldName.fieldAlias
|
||||
if(strpos($field, '.') !== false) // manually entered alias.
|
||||
if(strpos($field, '.') !== false) // manually entered alias.
|
||||
{
|
||||
$tmp = explode('.', $field, 3);
|
||||
$att['table'] = $tmp[0] ? $tmp[0] : $this->getIfTableAlias(false);
|
||||
@@ -2816,15 +2816,15 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
$att['table'] = $this->getIfTableAlias(false);
|
||||
if(isset($this->joinAlias[$this->table]) && $field !='checkboxes' && $field !='options')
|
||||
{
|
||||
$att['alias'] = $this->joinAlias[$this->table].".".$field;
|
||||
$att['alias'] = $this->joinAlias[$this->table].".".$field;
|
||||
}
|
||||
else
|
||||
{
|
||||
$att['alias'] = "";
|
||||
$att['alias'] = "";
|
||||
}
|
||||
$att['field'] = $field;
|
||||
$fields[$field] = $att;
|
||||
@@ -2865,25 +2865,25 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
/**
|
||||
* Intuitive LEFT JOIN Qry support. (preferred)
|
||||
* Generate array of table names and their alias - auto-detected from listQry;
|
||||
* eg. $listQry = "SELECT m.*, u.user_id,u.user_name FROM #core_media AS m LEFT JOIN #user AS u ON m.media_author = u.user_id";
|
||||
* eg. $listQry = "SELECT m.*, u.user_id,u.user_name FROM #core_media AS m LEFT JOIN #user AS u ON m.media_author = u.user_id";
|
||||
*/
|
||||
protected function joinAlias()
|
||||
{
|
||||
//TODO - editQry
|
||||
// TODO - auto-detect fields that belong to other tables. eg. u.user_id,u.user_name and adjust query to suit.
|
||||
if($this->listQry)
|
||||
// TODO - auto-detect fields that belong to other tables. eg. u.user_id,u.user_name and adjust query to suit.
|
||||
if($this->listQry)
|
||||
{
|
||||
preg_match_all("/`?#([\w-]+)`?\s*(as|AS)\s*([\w-])/im",$this->listQry,$matches);
|
||||
|
||||
|
||||
foreach($matches[1] AS $k=>$v)
|
||||
{
|
||||
if(varset($matches[3][$k]))
|
||||
{
|
||||
$this->joinAlias[$v] = $matches[3][$k]; // array. eg $this->joinAlias['core_media'] = 'm';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -2901,7 +2901,7 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
$tableSFieldsArr = array(); // FROM for main table
|
||||
$tableSJoinArr = array(); // FROM for join tables
|
||||
$filter = array();
|
||||
|
||||
|
||||
$searchQuery = $tp->toDB($request->getQuery('searchquery', ''));
|
||||
$searchFilter = $this->_parseFilterRequest($request->getQuery('filter_options', ''));
|
||||
list($filterField, $filterValue) = $searchFilter;
|
||||
@@ -2936,13 +2936,13 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
if($isfilter)
|
||||
{
|
||||
$filterFrom[] = $var['__tableField'];
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if($isfilter)
|
||||
{
|
||||
if(!$filterFrom) return false;
|
||||
@@ -3006,9 +3006,9 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
{
|
||||
$qry = $listQry ? $listQry : "SELECT SQL_CALC_FOUND_ROWS ".$tableSFields." FROM ".$tableFrom;
|
||||
}
|
||||
|
||||
|
||||
// group field - currently auto-added only if there are joins
|
||||
// TODO - groupField property
|
||||
// TODO - groupField property
|
||||
$groupField = '';
|
||||
if($joins && $this->getPrimaryName())
|
||||
{
|
||||
@@ -3018,11 +3018,11 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
if($raw)
|
||||
{
|
||||
$rawData = array(
|
||||
'joinWhere' => $jwhere,
|
||||
'filter' => $filter,
|
||||
'joinWhere' => $jwhere,
|
||||
'filter' => $filter,
|
||||
'listQrySql' => $this->listQrySql,
|
||||
'filterFrom' => $filterFrom,
|
||||
'search' => $searchQry,
|
||||
'filterFrom' => $filterFrom,
|
||||
'search' => $searchQry,
|
||||
'tableFromName' => $tableFrom,
|
||||
);
|
||||
$rawData['tableFrom'] = $tableSFieldsArr;
|
||||
@@ -3046,7 +3046,7 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
{
|
||||
$searchQry[] = " ( ".implode(" OR ",$filter)." ) ";
|
||||
}
|
||||
|
||||
|
||||
// more user added sql
|
||||
if(isset($this->listQrySql['db_where']) && $this->listQrySql['db_where'])
|
||||
{
|
||||
@@ -3065,7 +3065,7 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
{
|
||||
$qry .= " WHERE ".implode(" AND ", $searchQry);
|
||||
}
|
||||
|
||||
|
||||
// GROUP BY if needed
|
||||
if($groupField)
|
||||
{
|
||||
@@ -3093,10 +3093,10 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
if(false === $forceTo) $forceTo = $this->getPerPage();
|
||||
$qry .= ' LIMIT '.$from.', '.intval($forceTo);
|
||||
}
|
||||
|
||||
// Debug Filter Query.
|
||||
|
||||
// Debug Filter Query.
|
||||
// echo $qry;
|
||||
|
||||
|
||||
return $qry;
|
||||
}
|
||||
|
||||
@@ -3187,44 +3187,44 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
protected $pid;
|
||||
protected $listQry;
|
||||
protected $editQry;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Markup to be auto-inserted before List filter
|
||||
* @var string
|
||||
*/
|
||||
public $preFiliterMarkup = '';
|
||||
|
||||
|
||||
/**
|
||||
* Markup to be auto-inserted after List filter
|
||||
* @var string
|
||||
*/
|
||||
public $postFiliterMarkup = '';
|
||||
|
||||
|
||||
/**
|
||||
* Markup to be auto-inserted at the top of Create form
|
||||
* @var string
|
||||
*/
|
||||
public $headerCreateMarkup = '';
|
||||
|
||||
|
||||
/**
|
||||
* Markup to be auto-inserted at the bottom of Create form
|
||||
* @var string
|
||||
*/
|
||||
public $footerCreateMarkup = '';
|
||||
|
||||
|
||||
/**
|
||||
* Markup to be auto-inserted at the top of Update form
|
||||
* @var string
|
||||
*/
|
||||
public $headerUpdateMarkup = '';
|
||||
|
||||
|
||||
/**
|
||||
* Markup to be auto-inserted at the bottom of Update form
|
||||
* @var string
|
||||
*/
|
||||
public $footerUpdateMarkup = '';
|
||||
|
||||
|
||||
/**
|
||||
* Show confirm screen before (batch/single) delete
|
||||
* @var boolean
|
||||
@@ -3276,14 +3276,14 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
public function ListBatchTrigger($batch_trigger)
|
||||
{
|
||||
$this->setPosted('etrigger_batch', null);
|
||||
|
||||
if($this->getPosted('etrigger_cancel'))
|
||||
{
|
||||
|
||||
if($this->getPosted('etrigger_cancel'))
|
||||
{
|
||||
$this->setPosted(array());
|
||||
return; // always break on cancel!
|
||||
}
|
||||
$this->deleteConfirmScreen = true; // Confirm screen ALWAYS enabled when multi-deleting!
|
||||
|
||||
|
||||
// proceed ONLY if there is no other trigger, except delete confirmation
|
||||
if($batch_trigger && !$this->hasTrigger(array('etrigger_delete_confirm'))) $this->_handleListBatch($batch_trigger);
|
||||
}
|
||||
@@ -3314,7 +3314,7 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
$selected = array_map('intval', explode(',', $this->getPosted('delete_confirm_value')));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// delete one by one - more control, less performance
|
||||
// TODO - pass afterDelete() callback to tree delete method?
|
||||
$set_messages = true;
|
||||
@@ -3397,19 +3397,21 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
*/
|
||||
public function ListDeleteTrigger($posted)
|
||||
{
|
||||
if($this->getPosted('etrigger_cancel'))
|
||||
{
|
||||
if($this->getPosted('etrigger_cancel'))
|
||||
{
|
||||
$this->setPosted(array());
|
||||
return; // always break on cancel!
|
||||
}
|
||||
$id = intval(array_shift($posted));
|
||||
// TODO - investigate - strange post vale of delete triggers, switched to key
|
||||
// for quick fix
|
||||
$id = intval(key($posted));//intval(array_shift($posted));
|
||||
if($this->deleteConfirmScreen && !$this->getPosted('etrigger_delete_confirm'))
|
||||
{
|
||||
// forward data to delete confirm screen
|
||||
$this->setPosted('delete_confirm_value', $id);
|
||||
return; // User confirmation expected
|
||||
}
|
||||
|
||||
|
||||
$this->setTriggersEnabled(false);
|
||||
$data = array();
|
||||
$model = $this->getTreeModel()->getNode($id);
|
||||
@@ -3792,10 +3794,10 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// don't touch it if already exists
|
||||
if($this->_model) return $this;
|
||||
|
||||
|
||||
// default model
|
||||
$this->_model = new e_admin_model();
|
||||
$this->_model->setModelTable($this->table)
|
||||
@@ -3818,7 +3820,7 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
// default tree model
|
||||
$this->_tree_model = new e_admin_tree_model();
|
||||
$this->_tree_model->setModelTable($this->table)
|
||||
->setFieldIdName($this->pid)
|
||||
->getFieldIdName($this->pid)
|
||||
->setMessageStackName('admin_ui_tree_'.$this->table)
|
||||
->setParams(array('model_class' => 'e_admin_model', 'model_message_stack' => 'admin_ui_model_'.$this->table ,'db_query' => $this->listQry));
|
||||
|
||||
@@ -3883,7 +3885,7 @@ class e_admin_form_ui extends e_form
|
||||
$err = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*if($err)
|
||||
{
|
||||
//echo $err;
|
||||
@@ -3922,7 +3924,7 @@ class e_admin_form_ui extends e_form
|
||||
$form_end = vartrue($controller->footerCreateMarkup);
|
||||
}
|
||||
|
||||
|
||||
|
||||
$forms = $models = array();
|
||||
$forms[] = array(
|
||||
'id' => $this->getElementId(),
|
||||
@@ -3993,7 +3995,7 @@ class e_admin_form_ui extends e_form
|
||||
$id = $this->getElementId();
|
||||
$tree = $options = array();
|
||||
$tree[$id] = $controller->getTreeModel();
|
||||
|
||||
|
||||
// if going through confirm screen - no JS confirm
|
||||
$controller->setFieldAttr('options', 'noConfirm', $controller->deleteConfirmScreen);
|
||||
|
||||
@@ -4020,7 +4022,7 @@ class e_admin_form_ui extends e_form
|
||||
);
|
||||
return $this->renderListForm($options, $tree, $ajax);
|
||||
}
|
||||
|
||||
|
||||
public function getConfirmDelete($ids, $ajax = false)
|
||||
{
|
||||
$controller = $this->getController();
|
||||
@@ -4029,9 +4031,9 @@ class e_admin_form_ui extends e_form
|
||||
$forms = array();
|
||||
$id_array = explode(',', $ids);
|
||||
$delcount = count($id_array);
|
||||
|
||||
|
||||
e107::getMessage()->addWarning(sprintf(LAN_UI_DELETE_WARNING, $delcount));
|
||||
|
||||
|
||||
$fieldsets['confirm'] = array(
|
||||
'fieldset_pre' => '', // markup to be added before opening fieldset element
|
||||
'fieldset_post' => '', // markup to be added after closing fieldset element
|
||||
@@ -4041,7 +4043,7 @@ class e_admin_form_ui extends e_form
|
||||
'table_pre' => '', // markup to be added before opening table element
|
||||
'table_post' => '', // markup to be added after closing table element
|
||||
'table_rows' => '', // rows array (<td> tags)
|
||||
'table_body' => '', // string body - used only if rows empty
|
||||
'table_body' => '', // string body - used only if rows empty
|
||||
'pre_triggers' => '',
|
||||
'triggers' => array('hidden' => $this->hidden('etrigger_delete['.$ids.']', $ids), 'delete_confirm' => array(LAN_CONFDELETE, 'submit', $ids), 'cancel' => array(LAN_CANCEL, 'cancel')),
|
||||
);
|
||||
@@ -4049,7 +4051,7 @@ class e_admin_form_ui extends e_form
|
||||
{
|
||||
$fieldsets['confirm']['triggers']['hidden'] = $this->hidden('etrigger_batch', 'delete');
|
||||
}
|
||||
|
||||
|
||||
$forms[$id] = array(
|
||||
'id' => $this->getElementId(), // unique string used for building element ids, REQUIRED
|
||||
'url' => e_SELF, // default
|
||||
@@ -4165,7 +4167,7 @@ class e_admin_form_ui extends e_form
|
||||
".$this->admin_button('e__execute_batch', 'e__execute_batch', 'batch e-hide-if-js', 'Execute', array('id' => false))."
|
||||
</div>
|
||||
";
|
||||
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
@@ -4187,7 +4189,7 @@ class e_admin_form_ui extends e_form
|
||||
$option = array();
|
||||
$parms = vartrue($val['writeParms'], array());
|
||||
if(is_string($parms)) parse_str($parms, $parms);
|
||||
|
||||
|
||||
switch($val['type'])
|
||||
{
|
||||
case 'bool':
|
||||
@@ -4214,10 +4216,10 @@ class e_admin_form_ui extends e_form
|
||||
case 'dropdown': // use the array $parm;
|
||||
if(!is_array(varset($parms['__options']))) parse_str($parms['__options'], $parms['__options']);
|
||||
$opts = $parms['__options'];
|
||||
if(vartrue($opts['multiple']))
|
||||
if(vartrue($opts['multiple']))
|
||||
{
|
||||
// no batch support for multiple, should have some for filters soon
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
unset($parms['__options']); //remove element options if any
|
||||
foreach($parms as $k => $name)
|
||||
@@ -4225,14 +4227,14 @@ class e_admin_form_ui extends e_form
|
||||
$option[$key.'__'.$k] = $name;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 'lanlist': // use the array $parm;
|
||||
if(!is_array(varset($parms['__options']))) parse_str($parms['__options'], $parms['__options']);
|
||||
$opts = $parms['__options'];
|
||||
if(vartrue($opts['multiple']))
|
||||
if(vartrue($opts['multiple']))
|
||||
{
|
||||
// no batch support for multiple, should have some for filters soon
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
$options = e107::getLanguage()->getLanSelectArray();
|
||||
foreach($options as $code => $name)
|
||||
@@ -4259,9 +4261,9 @@ class e_admin_form_ui extends e_form
|
||||
break;
|
||||
|
||||
case 'method':
|
||||
$method = $key;
|
||||
$method = $key;
|
||||
$list = call_user_func_array(array($this, $method), array('', $type, $parms));
|
||||
|
||||
|
||||
if(is_array($list))
|
||||
{
|
||||
//check for single option
|
||||
@@ -4282,9 +4284,9 @@ class e_admin_form_ui extends e_form
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'user': // TODO - User Filter
|
||||
//$option[$key.'__'.$k] = $name;
|
||||
|
||||
case 'user': // TODO - User Filter
|
||||
//$option[$key.'__'.$k] = $name;
|
||||
break;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user