diff --git a/app/Http/Controllers/Admin/EditContent.php b/app/Http/Controllers/Admin/EditContent.php index 31c5f4ee..ed5f9dbc 100644 --- a/app/Http/Controllers/Admin/EditContent.php +++ b/app/Http/Controllers/Admin/EditContent.php @@ -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 = []; diff --git a/app/Models/Content.php b/app/Models/Content.php index 70fa0972..ee83c568 100644 --- a/app/Models/Content.php +++ b/app/Models/Content.php @@ -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 - $this->$fieldDB = $request[$fieldRequest]; + 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];