public function scopeLatestEdit($query, PageVersion $upToVersion) { $query->select("{$this->table}.*")->addSelect("{$this->table}.slotname as slotname")->join('page_versions as v1', "{$this->table}.page_vid", '=', 'v1.id')->leftJoin("{$this->table} as c2", function ($query) use($upToVersion) { $query->on("{$this->table}.id", '<', 'c2.id')->on("{$this->table}.slotname", '=', 'c2.slotname')->on('c2.page_vid', '<=', DB::raw("'{$upToVersion->getId()}'")); })->leftJoin('page_versions as v2', function ($query) use($upToVersion) { $query->on('c2.page_vid', '=', 'v2.id')->on('v1.page_id', '=', 'v2.page_id'); })->whereNull('c2.id'); return $query; }
/** * Compare two versions. * * @param PageVersion $new * @param PageVersion $old * * @return Diff\BaseChange */ public function compare(PageVersion $new, PageVersion $old) { if ($new->getRestoredVersionId()) { return new Diff\RestoredVersion($new, $old); } if ($new->isContentChange()) { return new Diff\ChunkChange($new, $old); } if ($new->getTemplateId() !== $old->getTemplateId()) { return new Diff\TemplateChange($new, $old); } if (strcmp($new->getTitle(), $old->getTitle()) !== 0) { return new Diff\TitleChange($new, $old); } if ($new->isPendingApproval() && !$old->isPendingApproval()) { return new Diff\ApprovalRequest($new, $old); } if ($new->isEmbargoed($new->getEditedTime())) { if (!$old->isEmbargoed($old->getEditedTime())) { return new Diff\Embargoed($new, $old); } if ($new->getEmbargoedUntil()->getTimestamp() !== $old->getEmbargoedUntil()->getTimestamp()) { return new Diff\EmbargoChanged($new, $old); } } if ($new->isPublished($new->getEditedTime())) { if (!$old->isPublished($old->getEditedTime())) { return new Diff\Published($new, $old); } } }
/** * Mark the version as being restored from another. * * @param PageVersionInterface $version * * @return $this */ public function setRestoredFrom(PageVersionInterface $version) { $this->{self::ATTR_RESTORED_FROM} = $version->getId(); return $this; }
public function findOne($type, $slotname, PageVersion $version) { $class = 'BoomCMS\\Database\\Models\\Chunk\\' . ucfirst($type); return $version->getId() ? $class::getSingleChunk($version, $slotname)->first() : null; }
/** * Get the cache key for given chunk parameters. * * @param type $type * @param type $slotname * @param PageVersion $version * * @return string */ public function getCacheKey($type, $slotname, PageVersion $version) { return md5("{$type}-{$slotname}-{$version->getId()}"); }
public function scopeGetSingleChunk(Builder $query, PageVersion $version, $slotname) { return $query->withRelations()->where('slotname', '=', $slotname)->where('page_vid', '<=', $version->getId())->where('page_id', '=', $version->getPageId())->orderBy('page_vid', 'desc'); }