<?php namespace BookStack\Actions;
-use BookStack\Actions\Activity;
use BookStack\Auth\Permissions\PermissionService;
+use BookStack\Entities\Book;
use BookStack\Entities\Entity;
-use Session;
class ActivityService
{
/**
* ActivityService constructor.
- * @param \BookStack\Actions\Activity $activity
+ * @param Activity $activity
* @param PermissionService $permissionService
*/
public function __construct(Activity $activity, PermissionService $permissionService)
/**
* Add activity data to database.
- * @param Entity $entity
- * @param $activityKey
+ * @param \BookStack\Entities\Entity $entity
+ * @param string $activityKey
* @param int $bookId
- * @param bool $extra
*/
- public function add(Entity $entity, $activityKey, $bookId = 0, $extra = false)
+ public function add(Entity $entity, string $activityKey, int $bookId = null)
{
- $activity = $this->activity->newInstance();
- $activity->user_id = $this->user->id;
- $activity->book_id = $bookId;
- $activity->key = strtolower($activityKey);
- if ($extra !== false) {
- $activity->extra = $extra;
- }
+ $activity = $this->newActivityForUser($activityKey, $bookId);
$entity->activity()->save($activity);
$this->setNotification($activityKey);
}
/**
- * Adds a activity history with a message & without binding to a entity.
- * @param $activityKey
+ * Adds a activity history with a message, without binding to a entity.
+ * @param string $activityKey
+ * @param string $message
* @param int $bookId
- * @param bool|false $extra
*/
- public function addMessage($activityKey, $bookId = 0, $extra = false)
+ public function addMessage(string $activityKey, string $message, int $bookId = null)
{
- $this->activity->user_id = $this->user->id;
- $this->activity->book_id = $bookId;
- $this->activity->key = strtolower($activityKey);
- if ($extra !== false) {
- $this->activity->extra = $extra;
- }
- $this->activity->save();
+ $this->newActivityForUser($activityKey, $bookId)->forceFill([
+ 'extra' => $message
+ ])->save();
+
$this->setNotification($activityKey);
}
+ /**
+ * Get a new activity instance for the current user.
+ * @param string $key
+ * @param int|null $bookId
+ * @return Activity
+ */
+ protected function newActivityForUser(string $key, int $bookId = null)
+ {
+ return $this->activity->newInstance()->forceFill([
+ 'key' => strtolower($key),
+ 'user_id' => $this->user->id,
+ 'book_id' => $bookId ?? 0,
+ ]);
+ }
/**
* Removes the entity attachment from each of its activities
* and instead uses the 'extra' field with the entities name.
* Used when an entity is deleted.
- * @param Entity $entity
+ * @param \BookStack\Entities\Entity $entity
* @return mixed
*/
public function removeEntity(Entity $entity)
{
+ // TODO - Rewrite to db query.
$activities = $entity->activity;
foreach ($activities as $activity) {
$activity->extra = $entity->name;
{
$activityList = $this->permissionService
->filterRestrictedEntityRelations($this->activity, 'activities', 'entity_id', 'entity_type')
- ->orderBy('created_at', 'desc')->with('user', 'entity')->skip($count * $page)->take($count)->get();
+ ->orderBy('created_at', 'desc')
+ ->with('user', 'entity')
+ ->skip($count * $page)
+ ->take($count)
+ ->get();
return $this->filterSimilar($activityList);
}
/**
* Gets the latest activity for an entity, Filtering out similar
* items to prevent a message activity list.
- * @param Entity $entity
+ * @param \BookStack\Entities\Entity $entity
* @param int $count
* @param int $page
* @return array
*/
- public function entityActivity($entity, $count = 20, $page = 0)
+ public function entityActivity($entity, $count = 20, $page = 1)
{
if ($entity->isA('book')) {
$query = $this->activity->where('book_id', '=', $entity->id);
} else {
- $query = $this->activity->where('entity_type', '=', get_class($entity))
+ $query = $this->activity->where('entity_type', '=', $entity->getMorphClass())
->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();
+ ->orderBy('created_at', 'desc')
+ ->with(['entity', 'user.avatar'])
+ ->skip($count * ($page - 1))
+ ->take($count)
+ ->get();
return $this->filterSimilar($activity);
}
$notificationTextKey = 'activities.' . $activityKey . '_notification';
if (trans()->has($notificationTextKey)) {
$message = trans($notificationTextKey);
- Session::flash('success', $message);
+ session()->flash('success', $message);
}
}
}