1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-06 14:46:56 +02:00

Fix for broken inline-editing db query when field 'data' = 'array'.

This commit is contained in:
Cameron
2016-01-03 01:03:08 -08:00
parent be410ae0ea
commit f1113b3a18

View File

@@ -4936,7 +4936,8 @@ class e_admin_ui extends e_admin_controller_ui
*/ */
public function InlineAjaxPage() public function InlineAjaxPage()
{ {
$this->logajax('Field not found'); $this->logajax("Inline Ajax Triggered");
$protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'); $protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0');
if(!vartrue($_POST['name']) || !vartrue($this->fields[$_POST['name']])) if(!vartrue($_POST['name']) || !vartrue($this->fields[$_POST['name']]))
{ {
@@ -4962,14 +4963,16 @@ class e_admin_ui extends e_admin_controller_ui
return; return;
} }
$this->logajax("OK?");
$model = $this->getModel()->load($this->getId()); $model = $this->getModel()->load($this->getId());
$_POST = array(); //reset post $_POST = array(); //reset post
$_POST[$_name] = $_value; // set current field only $_POST[$_name] = $_value; // set current field only
// generic handler - same as regular edit form submit // generic handler - same as regular edit form submit
$this->convertToData($_POST); $this->convertToData($_POST);
$model->setPostedData($_POST, null, false, false) $model->setPostedData($_POST, null, false, false)
->setParam('validateAvailable', true) // new param to control validate of available data only, reset on validate event ->setParam('validateAvailable', true) // new param to control validate of available data only, reset on validate event
->update(true); ->update(true);
@@ -4981,25 +4984,32 @@ class e_admin_ui extends e_admin_controller_ui
header("Status: 400 Bad Request", true, 400); header("Status: 400 Bad Request", true, 400);
$this->logajax("Bad Request"); $this->logajax("Bad Request");
// DEBUG e107::getMessage()->addError('Error test.', $model->getMessageStackName())->addError('Another error test.', $model->getMessageStackName()); // DEBUG e107::getMessage()->addError('Error test.', $model->getMessageStackName())->addError('Another error test.', $model->getMessageStackName());
if(E107_DEBUG_LEVEL) $message = e107::getMessage()->get('debug', $model->getMessageStackName(), true); if(E107_DEBUG_LEVEL) $message = e107::getMessage()->get('debug', $model->getMessageStackName(), true);
else $message = e107::getMessage()->get('error', $model->getMessageStackName(), true); else $message = e107::getMessage()->get('error', $model->getMessageStackName(), true);
if(!empty($message)) echo implode(' ', $message); if(!empty($message)) echo implode(' ', $message);
$this->logajax($message); $this->logajax(implode(' ', $message));
return; return;
} }
//TODO ? afterInline trigger?
$res = $this->_manageSubmit('beforeUpdate', 'afterUpdate', 'onUpdateError', 'edit'); $res = $this->_manageSubmit('beforeUpdate', 'afterUpdate', 'onUpdateError', 'edit');
} }
// Temporary - but useful. :-) // Temporary - but useful. :-)
public function logajax($message) public function logajax($message)
{ {
return; if(e_DEBUG !== true)
{
return;
}
$message = date('r')."\n".$message."\n"; $message = date('r')."\n".$message."\n";
$message .= "\n_POST\n";
$message .= print_r($_POST,true); $message .= print_r($_POST,true);
$message .= "\n_GET\n";
$message .= print_r($_GET,true); $message .= print_r($_GET,true);
$message .= "---------------"; $message .= "---------------";
@@ -5471,6 +5481,7 @@ class e_admin_ui extends e_admin_controller_ui
public function _setModel() public function _setModel()
{ {
// try to create dataFields array if missing // try to create dataFields array if missing
if(!$this->dataFields) if(!$this->dataFields)
{ {
$this->dataFields = array(); $this->dataFields = array();
@@ -5492,12 +5503,22 @@ class e_admin_ui extends e_admin_controller_ui
$att['rule'] = $_parms; $att['rule'] = $_parms;
unset($_parms); unset($_parms);
} }
if($att['data'] == 'array') // FIX for arrays being saved incorrectly with inline editing.
{
$att['data'] = 'set';
}
if(($key !== 'options' && false !== varset($att['data']) && null !== $att['type'] && !vartrue($att['noedit'])) || vartrue($att['forceSave'])) if(($key !== 'options' && false !== varset($att['data']) && null !== $att['type'] && !vartrue($att['noedit'])) || vartrue($att['forceSave']))
{ {
$this->dataFields[$key] = vartrue($att['data'], 'str'); $this->dataFields[$key] = vartrue($att['data'], 'str');
} }
} }
} }
// TODO - do it in one loop, or better - separate method(s) -> convertFields(validate), convertFields(data),... // TODO - do it in one loop, or better - separate method(s) -> convertFields(validate), convertFields(data),...
if(!$this->validationRules) if(!$this->validationRules)
{ {