Exemplo n.º 1
0
 /**
  * @param \Flarum\Core\Notification[] $notifications
  */
 private function loadSubjectDiscussions(array $notifications)
 {
     $ids = [];
     foreach ($notifications as $notification) {
         if ($notification->subject && $notification->subject->discussion_id) {
             $ids[] = $notification->subject->discussion_id;
         }
     }
     $discussions = Discussion::find(array_unique($ids));
     foreach ($notifications as $notification) {
         if ($notification->subject && $notification->subject->discussion_id) {
             $notification->subject->setRelation('discussion', $discussions->find($notification->subject->discussion_id));
         }
     }
 }
Exemplo n.º 2
0
 /**
  * Get the position within a discussion where a post with a certain number
  * is. If the post with that number does not exist, the index of the
  * closest post to it will be returned.
  *
  * @param int $discussionId
  * @param int $number
  * @param \Flarum\Core\User|null $actor
  * @return int
  */
 public function getIndexForNumber($discussionId, $number, User $actor = null)
 {
     $query = Discussion::find($discussionId)->postsVisibleTo($actor)->where('time', '<', function ($query) use($discussionId, $number) {
         $query->select('time')->from('posts')->where('discussion_id', $discussionId)->whereNotNull('number')->take(1)->orderByRaw('ABS(CAST(number AS SIGNED) - ' . (int) $number . ')');
     });
     return $query->count();
 }
 /**
  * Refreshes count and last Post for the discussion.
  *
  * @param Discussion $discussion
  */
 protected function refreshDiscussion(Discussion $discussion)
 {
     $discussion->refreshLastPost();
     $discussion->refreshCommentsCount();
     $discussion->refreshParticipantsCount();
     // Persist the new statistics.
     $discussion->save();
     return Discussion::find($discussion->id);
 }