where('status', '!=', Content::STATUS_DRAFT); } /** * Getter for homepage content page * * @return Content */ public function getHomepage() { return $this->getPageQuery() ->where('is_homepage', 1) ->first(); } /** * Getter for any page specified by its url. * * @param $url * * @return Content */ public function getByURL($url) { return $this->getPageQuery() ->where('url', $url) ->first(); } /** * Getter for overview of all content pages. * * These content pages may be filtered by using some handler * * @param bool $handler * @param bool $status * @param bool $joinAuthor * * @return */ public function getOverview($handler = false, $status = false, $joinAuthor = false) { $query = DB::table('contents') ->select('contents.*', 'modules.name AS module_name') ->where('contents.status', '<>', self::STATUS_DELETED) ->join('modules', 'modules.handler', '=', 'contents.module_handler') ->orderBy('created_at', 'DESC'); // filter results using handler if ($handler) { $query = $query->where('module_handler', $handler); } // join user email and user name to results when needed if ($joinAuthor) { $query = $query->join('users', 'users.id', '=', 'contents.user_id') ->addSelect('users.name AS author_name') ->addSelect('users.email AS author_email'); } // add filtering by status if (in_array($status, ContentStatuses::getSimple())) { $query = $query->where('contents.status', $status); } return $query; } /** * Updates current model with information about changed columns * * @param array $fields * @param array $request * @param string $revisionId * * @return int number of changed columns */ public function updateWithHistory(array $fields, array $request, $revisionId = null) { if (!$revisionId) { $revisionId = uniqid(); } $changed = 0; foreach ($fields as $fieldDB => $fieldRequest) { // ignore non-existing fields if ((!isset($this->$fieldDB) && !is_null($this->$fieldDB)) || (!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 (trim($this->$fieldDB) != $request[$fieldRequest]) { // setup history object $history = [ 'user_id' => \Auth::user()->id, 'content_id' => $this->id, 'edit_batch' => $revisionId, 'column' => $fieldRequest, 'old_value' => $this->$fieldDB, 'new_value' => $request[$fieldRequest] ]; // save history ContentHistory::create($history); // save change into database $this->$fieldDB = $request[$fieldRequest]; $changed++; } } $this->save(); return [$revisionId, $changed]; } /** * Mark relationship with its historical records * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function history() { return $this->hasMany('App\Models\ContentHistory'); } /** * Mark relationship with users table * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function author() { return $this->belongsTo('App\Models\User', 'user_id'); } }