$book = $this->bookRepo->getBySlug($bookSlug);
$page = $this->pageRepo->getBySlug($pageSlug, $book->id);
$revision = $this->pageRepo->getRevisionById($revisionId);
-
- $next = $revision->getNext() ?: $page;
- $diff = (new Htmldiff)->diff($revision->html, $next->html);
$page->fill($revision->toArray());
$this->setPageTitle('Page Revision For ' . $page->getShortName());
+ return view('pages/revision', [
+ 'page' => $page,
+ 'book' => $book,
+ ]);
+ }
+
+ /**
+ * Shows the changes of a single revision
+ * @param string $bookSlug
+ * @param string $pageSlug
+ * @param int $revisionId
+ * @return \Illuminate\View\View
+ */
+ public function showRevisionChanges($bookSlug, $pageSlug, $revisionId)
+ {
+ $book = $this->bookRepo->getBySlug($bookSlug);
+ $page = $this->pageRepo->getBySlug($pageSlug, $book->id);
+ $revision = $this->pageRepo->getRevisionById($revisionId);
+
+ $prev = $revision->getPrevious();
+ $prevContent = ($prev === null) ? '' : $prev->html;
+ $diff = (new Htmldiff)->diff($prevContent, $revision->html);
+
+ $page->fill($revision->toArray());
+ $this->setPageTitle('Page Revision For ' . $page->getShortName());
+
return view('pages/revision', [
'page' => $page,
'book' => $book,
/**
* Get the url for this revision.
+ * @param null|string $path
* @return string
*/
- public function getUrl()
+ public function getUrl($path = null)
{
- return $this->page->getUrl() . '/revisions/' . $this->id;
+ $url = $this->page->getUrl() . '/revisions/' . $this->id;
+ if ($path) return $url . '/' . trim($path, '/');
+ return $url;
}
/**
- * Get previous revision
- * @return \BookStack\PageRevision
+ * Get the previous revision for the same page if existing
+ * @return \BookStack\PageRevision|null
*/
public function getPrevious()
{
- if ($id = PageRevision::where('id', '<', $this->id)->max('id')) {
- return PageRevision::find($id);
+ if ($id = static::where('page_id', '=', $this->page_id)->where('id', '<', $this->id)->max('id')) {
+ return static::find($id);
}
+ return null;
}
- /**
- * Get next revision
- * @return \BookStack\PageRevision
- */
- public function getNext()
- {
- if ($id = PageRevision::where('id', '>', $this->id)->min('id')) {
- return PageRevision::find($id);
- }
- }
}
/**
* Gets a single revision via it's id.
* @param $id
- * @return mixed
+ * @return PageRevision
*/
public function getRevisionById($id)
{
<table class="table">
<tr>
- <th width="25%">Name</th>
- <th colspan="2" width="10%">Created By</th>
+ <th width="23%">Name</th>
+ <th colspan="2" width="8%">Created By</th>
<th width="15%">Revision Date</th>
<th width="25%">Changelog</th>
- <th width="15%">Actions</th>
+ <th width="20%">Actions</th>
</tr>
@foreach($page->revisions as $index => $revision)
<tr>
<td> @if($revision->createdBy) {{ $revision->createdBy->name }} @else Deleted User @endif</td>
<td><small>{{ $revision->created_at->format('jS F, Y H:i:s') }} <br> ({{ $revision->created_at->diffForHumans() }})</small></td>
<td>{{ $revision->summary }}</td>
- @if ($index !== 0)
- <td>
+ <td>
+ <a href="{{ $revision->getUrl('changes') }}" target="_blank">Changes</a>
+ <span class="text-muted"> | </span>
+
+ @if ($index === 0)
+ <a target="_blank" href="{{ $page->getUrl() }}"><i>Current Version</i></a>
+ @else
<a href="{{ $revision->getUrl() }}" target="_blank">Preview</a>
<span class="text-muted"> | </span>
- <a href="{{ $revision->getUrl() }}/restore">Restore</a>
- </td>
- @else
- <td><a target="_blank" href="{{ $page->getUrl() }}"><i>Current Version</i></a></td>
- @endif
+ <a href="{{ $revision->getUrl('restore') }}" target="_blank">Restore</a>
+ @endif
+ </td>
</tr>
@endforeach
</table>
// Revisions
Route::get('/{bookSlug}/page/{pageSlug}/revisions', 'PageController@showRevisions');
Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}', 'PageController@showRevision');
+ Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}/changes', 'PageController@showRevisionChanges');
Route::get('/{bookSlug}/page/{pageSlug}/revisions/{revId}/restore', 'PageController@restoreRevision');
// Chapters