<?php namespace BookStack\Services;
-use Illuminate\Support\Facades\Auth;
use BookStack\Activity;
use BookStack\Entity;
use Session;
{
protected $activity;
protected $user;
+ protected $permissionService;
/**
* ActivityService constructor.
- * @param $activity
+ * @param Activity $activity
+ * @param PermissionService $permissionService
*/
- public function __construct(Activity $activity)
+ public function __construct(Activity $activity, PermissionService $permissionService)
{
$this->activity = $activity;
- $this->user = auth()->user();
+ $this->permissionService = $permissionService;
+ $this->user = user();
}
/**
* Add activity data to database.
* @param Entity $entity
* @param $activityKey
- * @param int $bookId
- * @param bool $extra
+ * @param int $bookId
+ * @param bool $extra
*/
public function add(Entity $entity, $activityKey, $bookId = 0, $extra = false)
{
- $this->activity->user_id = $this->user->id;
- $this->activity->book_id = $bookId;
- $this->activity->key = strtolower($activityKey);
+ $activity = $this->activity->newInstance();
+ $activity->user_id = $this->user->id;
+ $activity->book_id = $bookId;
+ $activity->key = strtolower($activityKey);
if ($extra !== false) {
- $this->activity->extra = $extra;
+ $activity->extra = $extra;
}
- $entity->activity()->save($this->activity);
+ $entity->activity()->save($activity);
$this->setNotification($activityKey);
}
/**
- * Adds a activity history with a message & without binding to a entitiy.
+ * Adds a activity history with a message & without binding to a entity.
* @param $activityKey
- * @param int $bookId
+ * @param int $bookId
* @param bool|false $extra
*/
public function addMessage($activityKey, $bookId = 0, $extra = false)
*/
public function latest($count = 20, $page = 0)
{
- $activityList = $this->activity->orderBy('created_at', 'desc')
- ->skip($count * $page)->take($count)->get();
+ $activityList = $this->permissionService
+ ->filterRestrictedEntityRelations($this->activity, 'activities', 'entity_id', 'entity_type')
+ ->orderBy('created_at', 'desc')->with('user', 'entity')->skip($count * $page)->take($count)->get();
+
return $this->filterSimilar($activityList);
}
/**
- * Gets the latest activity for an entitiy, Filtering out similar
+ * Gets the latest activity for an entity, Filtering out similar
* items to prevent a message activity list.
* @param Entity $entity
- * @param int $count
- * @param int $page
+ * @param int $count
+ * @param int $page
* @return array
*/
- function entityActivity($entity, $count = 20, $page = 0)
+ public function entityActivity($entity, $count = 20, $page = 0)
{
- $activity = $entity->hasMany('BookStack\Activity')->orderBy('created_at', 'desc')
- ->skip($count * $page)->take($count)->get();
+ if ($entity->isA('book')) {
+ $query = $this->activity->where('book_id', '=', $entity->id);
+ } else {
+ $query = $this->activity->where('entity_type', '=', get_class($entity))
+ ->where('entity_id', '=', $entity->id);
+ }
+
+ $activity = $this->permissionService
+ ->filterRestrictedEntityRelations($query, 'activities', 'entity_id', 'entity_type')
+ ->orderBy('created_at', 'desc')->with(['entity', 'user.avatar'])->skip($count * $page)->take($count)->get();
return $this->filterSimilar($activity);
}
/**
- * Filters out similar acitivity.
- * @param Activity[] $activity
+ * Get latest activity for a user, Filtering out similar
+ * items.
+ * @param $user
+ * @param int $count
+ * @param int $page
+ * @return array
+ */
+ public function userActivity($user, $count = 20, $page = 0)
+ {
+ $activityList = $this->permissionService
+ ->filterRestrictedEntityRelations($this->activity, 'activities', 'entity_id', 'entity_type')
+ ->orderBy('created_at', 'desc')->where('user_id', '=', $user->id)->skip($count * $page)->take($count)->get();
+ return $this->filterSimilar($activityList);
+ }
+
+ /**
+ * Filters out similar activity.
+ * @param Activity[] $activities
* @return array
*/
- protected function filterSimilar($activity)
+ protected function filterSimilar($activities)
{
$newActivity = [];
$previousItem = false;
- foreach ($activity as $activityItem) {
+ foreach ($activities as $activityItem) {
if ($previousItem === false) {
$previousItem = $activityItem;
$newActivity[] = $activityItem;
Session::flash('success', $message);
}
}
-
-}
\ No newline at end of file
+}