namespace BookStack\Http\Controllers;
use Activity;
-use Illuminate\Http\Request;
-
+use BookStack\Repos\EntityRepo;
use BookStack\Http\Requests;
-use BookStack\Repos\BookRepo;
use Views;
class HomeController extends Controller
{
-
- protected $activityService;
- protected $bookRepo;
+ protected $entityRepo;
/**
* HomeController constructor.
- * @param BookRepo $bookRepo
+ * @param EntityRepo $entityRepo
*/
- public function __construct(BookRepo $bookRepo)
+ public function __construct(EntityRepo $entityRepo)
{
- $this->bookRepo = $bookRepo;
+ $this->entityRepo = $entityRepo;
parent::__construct();
}
*/
public function index()
{
- $activity = Activity::latest();
- $recents = $this->signedIn ? Views::getUserRecentlyViewed(10, 0) : $this->bookRepo->getLatest(10);
- return view('home', ['activity' => $activity, 'recents' => $recents]);
+ $activity = Activity::latest(10);
+ $recents = $this->signedIn ? Views::getUserRecentlyViewed(12, 0) : $this->entityRepo->getRecentlyCreatedBooks(10);
+ $recentlyCreatedPages = $this->entityRepo->getRecentlyCreatedPages(5);
+ $recentlyUpdatedPages = $this->entityRepo->getRecentlyUpdatedPages(5);
+ return view('home', [
+ 'activity' => $activity,
+ 'recents' => $recents,
+ 'recentlyCreatedPages' => $recentlyCreatedPages,
+ 'recentlyUpdatedPages' => $recentlyUpdatedPages
+ ]);
}
}
--- /dev/null
+<?php namespace BookStack\Repos;
+
+
+use BookStack\Book;
+use BookStack\Chapter;
+use BookStack\Page;
+
+class EntityRepo
+{
+
+ public $book;
+ public $chapter;
+ public $page;
+
+ /**
+ * EntityService constructor.
+ * @param $book
+ * @param $chapter
+ * @param $page
+ */
+ public function __construct(Book $book, Chapter $chapter, Page $page)
+ {
+ $this->book = $book;
+ $this->chapter = $chapter;
+ $this->page = $page;
+ }
+
+ /**
+ * Get the latest books added to the system.
+ * @param $count
+ * @param $page
+ */
+ public function getRecentlyCreatedBooks($count = 20, $page = 0)
+ {
+ return $this->book->orderBy('created_at', 'desc')->skip($page*$count)->take($count)->get();
+ }
+
+ /**
+ * Get the most recently updated books.
+ * @param $count
+ * @param int $page
+ * @return mixed
+ */
+ public function getRecentlyUpdatedBooks($count = 20, $page = 0)
+ {
+ return $this->book->orderBy('updated_at', 'desc')->skip($page*$count)->take($count)->get();
+ }
+
+ /**
+ * Get the latest pages added to the system.
+ * @param $count
+ * @param $page
+ */
+ public function getRecentlyCreatedPages($count = 20, $page = 0)
+ {
+ return $this->page->orderBy('created_at', 'desc')->skip($page*$count)->take($count)->get();
+ }
+
+ /**
+ * Get the most recently updated pages.
+ * @param $count
+ * @param int $page
+ * @return mixed
+ */
+ public function getRecentlyUpdatedPages($count = 20, $page = 0)
+ {
+ return $this->page->orderBy('updated_at', 'desc')->skip($page*$count)->take($count)->get();
+ }
+
+
+}
\ No newline at end of file
<?php namespace BookStack\Repos;
-
-use BookStack\Page;
use BookStack\Role;
-use BookStack\Services\EntityService;
use BookStack\User;
-use Carbon\Carbon;
use Setting;
class UserRepo
protected $user;
protected $role;
- protected $entityService;
+ protected $entityRepo;
/**
* UserRepo constructor.
* @param User $user
* @param Role $role
- * @param EntityService $entityService
+ * @param EntityRepo $entityRepo
*/
- public function __construct(User $user, Role $role, EntityService $entityService)
+ public function __construct(User $user, Role $role, EntityRepo $entityRepo)
{
$this->user = $user;
$this->role = $role;
- $this->entityService = $entityService;
+ $this->entityRepo = $entityRepo;
}
/**
public function getRecentlyCreated(User $user, $count = 20)
{
return [
- 'pages' => $this->entityService->page->where('created_by', '=', $user->id)->orderBy('created_at', 'desc')
+ 'pages' => $this->entityRepo->page->where('created_by', '=', $user->id)->orderBy('created_at', 'desc')
->take($count)->get(),
- 'chapters' => $this->entityService->chapter->where('created_by', '=', $user->id)->orderBy('created_at', 'desc')
+ 'chapters' => $this->entityRepo->chapter->where('created_by', '=', $user->id)->orderBy('created_at', 'desc')
->take($count)->get(),
- 'books' => $this->entityService->book->where('created_by', '=', $user->id)->orderBy('created_at', 'desc')
+ 'books' => $this->entityRepo->book->where('created_by', '=', $user->id)->orderBy('created_at', 'desc')
->take($count)->get()
];
}
public function getAssetCounts(User $user)
{
return [
- 'pages' => $this->entityService->page->where('created_by', '=', $user->id)->count(),
- 'chapters' => $this->entityService->chapter->where('created_by', '=', $user->id)->count(),
- 'books' => $this->entityService->book->where('created_by', '=', $user->id)->count(),
+ 'pages' => $this->entityRepo->page->where('created_by', '=', $user->id)->count(),
+ 'chapters' => $this->entityRepo->chapter->where('created_by', '=', $user->id)->count(),
+ 'books' => $this->entityRepo->book->where('created_by', '=', $user->id)->count(),
];
}
+++ /dev/null
-<?php namespace BookStack\Services;
-
-
-use BookStack\Book;
-use BookStack\Chapter;
-use BookStack\Page;
-
-class EntityService
-{
-
- public $book;
- public $chapter;
- public $page;
-
- /**
- * EntityService constructor.
- * @param $book
- * @param $chapter
- * @param $page
- */
- public function __construct(Book $book, Chapter $chapter, Page $page)
- {
- $this->book = $book;
- $this->chapter = $chapter;
- $this->page = $page;
- }
-
-
-}
\ No newline at end of file
}
});
+ // Common jQuery actions
+ $('[data-action="expand-entity-list-details"]').click(function() {
+ $('.entity-list.compact').find('p').slideToggle(240);
+ });
+
+
});
a {
color: $primary;
}
+}
+
+.entity-list.compact {
+ font-size: 0.6em;
+ > div {
+ padding: $-m 0;
+ }
+ h3, a {
+ line-height: 1.2;
+ }
+ h3 {
+ margin: 0;
+ }
+ p {
+ display: none;
+ font-size: $fs-m * 0.8;
+ padding-top: $-xs;
+ margin: 0;
+ }
+ hr {
+ margin: 0;
+ }
}
\ No newline at end of file
@section('content')
+ <div class="faded-small toolbar">
+ <div class="container">
+ <div class="row">
+ <div class="col-sm-4 faded">
+ <div class="action-buttons text-left">
+ <a data-action="expand-entity-list-details" class="text-primary text-button"><i class="zmdi zmdi-wrap-text"></i>Toggle Details</a>
+ </div>
+ </div>
+ <div class="col-sm-8 faded">
+ <div class="action-buttons">
+
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
<div class="container" ng-non-bindable>
<div class="row">
- <div class="col-md-7">
+ <div class="col-sm-4">
@if($signedIn)
- <h2>My Recently Viewed</h2>
+ <h3>My Recently Viewed</h3>
@else
- <h2>Recent Books</h2>
+ <h3>Recent Books</h3>
@endif
- @include('partials/entity-list', ['entities' => $recents])
+ @include('partials/entity-list', ['entities' => $recents, 'size' => 'compact'])
+ </div>
+
+ <div class="col-sm-4">
+ <h3>Recently Created Pages</h3>
+ @include('partials/entity-list', ['entities' => $recentlyCreatedPages, 'size' => 'compact'])
+ <h3>Recently Updated Pages</h3>
+ @include('partials/entity-list', ['entities' => $recentlyCreatedPages, 'size' => 'compact'])
</div>
- <div class="col-md-4 col-md-offset-1" id="recent-activity">
- <div class="margin-top large"> </div>
+ <div class="col-sm-4" id="recent-activity">
<h3>Recent Activity</h3>
@include('partials/activity-list', ['activity' => $activity])
</div>
-@if(count($entities) > 0)
- @foreach($entities as $index => $entity)
- @if($entity->isA('page'))
- @include('pages/list-item', ['page' => $entity])
- @elseif($entity->isA('book'))
- @include('books/list-item', ['book' => $entity])
- @elseif($entity->isA('chapter'))
- @include('chapters/list-item', ['chapter' => $entity, 'hidePages' => true])
- @endif
+<div class="entity-list @if(isset($size)){{ $size }}@endif">
+ @if(count($entities) > 0)
+ @foreach($entities as $index => $entity)
+ @if($entity->isA('page'))
+ @include('pages/list-item', ['page' => $entity])
+ @elseif($entity->isA('book'))
+ @include('books/list-item', ['book' => $entity])
+ @elseif($entity->isA('chapter'))
+ @include('chapters/list-item', ['chapter' => $entity, 'hidePages' => true])
+ @endif
- @if($index !== count($entities) - 1)
- <hr>
- @endif
+ @if($index !== count($entities) - 1)
+ <hr>
+ @endif
- @endforeach
-@else
- <p class="text-muted">
- No items available
- </p>
-@endif
\ No newline at end of file
+ @endforeach
+ @else
+ <p class="text-muted">
+ No items available
+ </p>
+ @endif
+</div>
\ No newline at end of file