FEATURE: force history to save even module_settings fields

This commit is contained in:
Michal Kváček
2016-04-01 20:47:55 +02:00
parent 3f03af7e03
commit 811f2162c9
2 changed files with 47 additions and 9 deletions
+12 -2
View File
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin;
use App\Enumerations\ContentStatuses;
use App\Enumerations\ModulesHandlerToId;
use App\Http\Requests\EditContentRequest;
use App\Http\Requests\Request;
use App\Models\Content;
use App\Models\ContentHistory;
use App\Models\File;
@@ -111,7 +112,8 @@ class EditContent extends Controller
];
// save new values with history
list($revision, $changedColumns) = $page->updateWithHistory($fields, $this->getFields($request, $fields));
$data = self::getFields($request, $fields);
list($revision, $changedColumns) = $page->updateWithHistory($fields, $data);
$changedColumns += call_user_func_array([$page->module_handler, 'edit'], [&$page, $request, $revision]);
@@ -275,7 +277,15 @@ class EditContent extends Controller
]));
}
private function getFields(EditContentRequest $request, $fields)
/**
* Convert object of all request data into array of only wanted fields
*
* @param Request $request
* @param $fields
*
* @return array
*/
public static function getFields(Request $request, $fields)
{
$requestData = [];
+34 -6
View File
@@ -14,10 +14,13 @@ class Content extends Model
public $timestamps = true;
protected $fillable = [
'user_id',
'parent_id',
'module_handler',
'published_from',
'published_to',
'title_photo',
'template',
'is_homepage',
'title',
'url',
'meta_keywords',
@@ -152,15 +155,31 @@ class Content extends Model
foreach ($fields as $fieldDB => $fieldRequest) {
// ignore non-existing fields
if ((!isset($this->$fieldDB) && !is_null($this->$fieldDB)) || (!isset($request[$fieldRequest]) && !is_null($request[$fieldRequest]))) {
if (!isset($request[$fieldRequest]) && !is_null($request[$fieldRequest])) {
continue;
}
// remove any whitespaces around real content
if (!is_null($request[$fieldRequest]))
$request[$fieldRequest] = trim($request[$fieldRequest]);
// if module settings is still JSON, decode it to normal stdClass
if (is_string($this->module_settings)) {
$this->module_settings = json_decode($this->module_settings);
}
if (trim($this->$fieldDB) != $request[$fieldRequest]) {
// are we editing common settings, or module-specific settings?
if (!in_array($fieldDB, $this->fillable)) {
// this field is not part of "core" content - probably it will be module settings
$commonField = false;
$fieldValue = $this->module_settings->$fieldDB;
} else {
$commonField = true;
$fieldValue = $this->$fieldDB;
}
// remove any whitespaces around real content
if (!is_null($request[$fieldRequest])) {
$request[$fieldRequest] = trim($request[$fieldRequest]);
}
if (trim($fieldValue) != $request[$fieldRequest]) {
// setup history object
$history = [
@@ -168,7 +187,7 @@ class Content extends Model
'content_id' => $this->id,
'edit_batch' => $revisionId,
'column' => $fieldRequest,
'old_value' => $this->$fieldDB,
'old_value' => $fieldValue,
'new_value' => $request[$fieldRequest]
];
@@ -176,12 +195,21 @@ class Content extends Model
ContentHistory::create($history);
// save change into database
if ($commonField) {
$this->$fieldDB = $request[$fieldRequest];
} else {
$this->module_settings->$fieldDB = $request[$fieldRequest];
}
$changed++;
}
}
// make JSON from stdClass
if (!is_string($this->module_settings)) {
$this->module_settings = json_encode($this->module_settings);
}
$this->save();
return [$revisionId, $changed];