Added recent pages to home view and made the home content more compact

This commit is contained in:
Dan Brown
2016-02-20 12:37:06 +00:00
parent 86fbc9a936
commit bab6fd1f2f
8 changed files with 173 additions and 79 deletions

View File

@ -3,25 +3,21 @@
namespace BookStack\Http\Controllers; namespace BookStack\Http\Controllers;
use Activity; use Activity;
use Illuminate\Http\Request; use BookStack\Repos\EntityRepo;
use BookStack\Http\Requests; use BookStack\Http\Requests;
use BookStack\Repos\BookRepo;
use Views; use Views;
class HomeController extends Controller class HomeController extends Controller
{ {
protected $entityRepo;
protected $activityService;
protected $bookRepo;
/** /**
* HomeController constructor. * 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(); parent::__construct();
} }
@ -33,9 +29,16 @@ class HomeController extends Controller
*/ */
public function index() public function index()
{ {
$activity = Activity::latest(); $activity = Activity::latest(10);
$recents = $this->signedIn ? Views::getUserRecentlyViewed(10, 0) : $this->bookRepo->getLatest(10); $recents = $this->signedIn ? Views::getUserRecentlyViewed(12, 0) : $this->entityRepo->getRecentlyCreatedBooks(10);
return view('home', ['activity' => $activity, 'recents' => $recents]); $recentlyCreatedPages = $this->entityRepo->getRecentlyCreatedPages(5);
$recentlyUpdatedPages = $this->entityRepo->getRecentlyUpdatedPages(5);
return view('home', [
'activity' => $activity,
'recents' => $recents,
'recentlyCreatedPages' => $recentlyCreatedPages,
'recentlyUpdatedPages' => $recentlyUpdatedPages
]);
} }
} }

71
app/Repos/EntityRepo.php Normal file
View File

@ -0,0 +1,71 @@
<?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();
}
}

View File

@ -1,11 +1,7 @@
<?php namespace BookStack\Repos; <?php namespace BookStack\Repos;
use BookStack\Page;
use BookStack\Role; use BookStack\Role;
use BookStack\Services\EntityService;
use BookStack\User; use BookStack\User;
use Carbon\Carbon;
use Setting; use Setting;
class UserRepo class UserRepo
@ -13,19 +9,19 @@ class UserRepo
protected $user; protected $user;
protected $role; protected $role;
protected $entityService; protected $entityRepo;
/** /**
* UserRepo constructor. * UserRepo constructor.
* @param User $user * @param User $user
* @param Role $role * @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->user = $user;
$this->role = $role; $this->role = $role;
$this->entityService = $entityService; $this->entityRepo = $entityRepo;
} }
/** /**
@ -141,11 +137,11 @@ class UserRepo
public function getRecentlyCreated(User $user, $count = 20) public function getRecentlyCreated(User $user, $count = 20)
{ {
return [ 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(), ->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(), ->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() ->take($count)->get()
]; ];
} }
@ -158,9 +154,9 @@ class UserRepo
public function getAssetCounts(User $user) public function getAssetCounts(User $user)
{ {
return [ return [
'pages' => $this->entityService->page->where('created_by', '=', $user->id)->count(), 'pages' => $this->entityRepo->page->where('created_by', '=', $user->id)->count(),
'chapters' => $this->entityService->chapter->where('created_by', '=', $user->id)->count(), 'chapters' => $this->entityRepo->chapter->where('created_by', '=', $user->id)->count(),
'books' => $this->entityService->book->where('created_by', '=', $user->id)->count(), 'books' => $this->entityRepo->book->where('created_by', '=', $user->id)->count(),
]; ];
} }

View File

@ -1,29 +0,0 @@
<?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;
}
}

View File

@ -106,6 +106,12 @@ $(function () {
} }
}); });
// Common jQuery actions
$('[data-action="expand-entity-list-details"]').click(function() {
$('.entity-list.compact').find('p').slideToggle(240);
});
}); });

View File

@ -283,4 +283,26 @@ ul.pagination {
a { a {
color: $primary; 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;
}
} }

View File

@ -2,20 +2,43 @@
@section('content') @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="container" ng-non-bindable>
<div class="row"> <div class="row">
<div class="col-md-7"> <div class="col-sm-4">
@if($signedIn) @if($signedIn)
<h2>My Recently Viewed</h2> <h3>My Recently Viewed</h3>
@else @else
<h2>Recent Books</h2> <h3>Recent Books</h3>
@endif @endif
@include('partials/entity-list', ['entities' => $recents]) @include('partials/entity-list', ['entities' => $recents, 'size' => 'compact'])
</div> </div>
<div class="col-md-4 col-md-offset-1" id="recent-activity"> <div class="col-sm-4">
<div class="margin-top large">&nbsp;</div> <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-sm-4" id="recent-activity">
<h3>Recent Activity</h3> <h3>Recent Activity</h3>
@include('partials/activity-list', ['activity' => $activity]) @include('partials/activity-list', ['activity' => $activity])
</div> </div>

View File

@ -1,21 +1,23 @@
@if(count($entities) > 0) <div class="entity-list @if(isset($size)){{ $size }}@endif">
@foreach($entities as $index => $entity) @if(count($entities) > 0)
@if($entity->isA('page')) @foreach($entities as $index => $entity)
@include('pages/list-item', ['page' => $entity]) @if($entity->isA('page'))
@elseif($entity->isA('book')) @include('pages/list-item', ['page' => $entity])
@include('books/list-item', ['book' => $entity]) @elseif($entity->isA('book'))
@elseif($entity->isA('chapter')) @include('books/list-item', ['book' => $entity])
@include('chapters/list-item', ['chapter' => $entity, 'hidePages' => true]) @elseif($entity->isA('chapter'))
@endif @include('chapters/list-item', ['chapter' => $entity, 'hidePages' => true])
@endif
@if($index !== count($entities) - 1) @if($index !== count($entities) - 1)
<hr> <hr>
@endif @endif
@endforeach @endforeach
@else @else
<p class="text-muted"> <p class="text-muted">
No items available No items available
</p> </p>
@endif @endif
</div>