mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-05-22 22:59:58 +08:00
Added recent pages to home view and made the home content more compact
This commit is contained in:
@ -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
71
app/Repos/EntityRepo.php
Normal 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -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(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -106,6 +106,12 @@ $(function () {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Common jQuery actions
|
||||||
|
$('[data-action="expand-entity-list-details"]').click(function() {
|
||||||
|
$('.entity-list.compact').find('p').slideToggle(240);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -284,3 +284,25 @@ ul.pagination {
|
|||||||
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;
|
||||||
|
}
|
||||||
|
}
|
@ -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"> </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>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
@if(count($entities) > 0)
|
<div class="entity-list @if(isset($size)){{ $size }}@endif">
|
||||||
|
@if(count($entities) > 0)
|
||||||
@foreach($entities as $index => $entity)
|
@foreach($entities as $index => $entity)
|
||||||
@if($entity->isA('page'))
|
@if($entity->isA('page'))
|
||||||
@include('pages/list-item', ['page' => $entity])
|
@include('pages/list-item', ['page' => $entity])
|
||||||
@ -14,8 +15,9 @@
|
|||||||
@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>
|
Reference in New Issue
Block a user