Skip to content

Commit

Permalink
WIP - Add timeline
Browse files Browse the repository at this point in the history
  • Loading branch information
danon committed Oct 4, 2023
1 parent f245c94 commit 654bc76
Show file tree
Hide file tree
Showing 11 changed files with 247 additions and 205 deletions.
2 changes: 1 addition & 1 deletion app/Http/Controllers/HomeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ private function getActivities(): array
{
$this->activity->pushCriteria(new OnlyThoseForumsWithAccess($this->auth));
$this->activity->pushCriteria(new SkipHiddenCategories($this->userId));
return ActivityResource::collection($this->activity->latest(20))
return ActivityResource::collection($this->activity->latest(30))
->toArray($this->request);
}

Expand Down
11 changes: 11 additions & 0 deletions app/Http/Resources/ActivityResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public function toArray($request): array
'headline' => $this->headline(),
'user_id' => $this->user_id,
'object' => $this->objectType(),
'type' => $this->objectType(),
'icon' => $this->icon(),
'user' => ['photo' => $this->user_id ? $this->user->photo : '']
];
}
Expand All @@ -47,6 +49,15 @@ private function objectType(): string
return [Post::class => 'post', Comment::class => 'comment'][$this->content_type];
}

private function icon(): string
{
$icons = [
Comment::class => 'far fa-comment',
Post::class => 'fas fa-quote-right',
];
return $icons[$this->content_type];
}

public function headline(): string
{
return trans("activity.headline.{$this->objectType()}", [
Expand Down
30 changes: 20 additions & 10 deletions app/Listeners/ActivitySubscriber.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,27 +29,34 @@ public function onPostSaved(PostSaved $event)
'user_id' => $event->post->user_id,
'forum_id' => $event->post->forum_id,
'topic_id' => $event->post->topic_id,
'excerpt' => excerpt($event->post->html),
'excerpt' => excerpt($event->post->html, 120),
'user_name' => $event->post->user_name
]);
}

public function onPostDeleted(PostWasDeleted $event)
public function onPostDeleted(PostWasDeleted $event): void
{
$this->activity->where('content_id', $event->post['id'])->where('content_type', Post::class)->delete();
$this->activity
->where('content_id', $event->post['id'])
->where('content_type', Post::class)
->delete();
}

public function onTopicDeleted(TopicDeleted $event)
public function onTopicDeleted(TopicDeleted $event): void
{
$this->activity->where('topic_id', $event->topic['id'])->delete();
$this->activity
->where('topic_id', $event->topic['id'])
->delete();
}

public function onTopicMoved(TopicMoved $event)
public function onTopicMoved(TopicMoved $event): void
{
$this->activity->where('topic_id', $event->topic['id'])->update(['forum_id' => $event->topic['forum_id']]);
$this->activity
->where('topic_id', $event->topic['id'])
->update(['forum_id' => $event->topic['forum_id']]);
}

public function onCommentSaved(CommentSaved $event)
public function onCommentSaved(CommentSaved $event): void
{
// post was removed?
if (!$event->comment->post) {
Expand All @@ -67,9 +74,12 @@ public function onCommentSaved(CommentSaved $event)
]);
}

public function onCommentDeleted(CommentDeleted $event)
public function onCommentDeleted(CommentDeleted $event): void
{
$this->activity->where('content_id', $event->comment['id'])->where('content_type', Post\Comment::class)->delete();
$this->activity
->where('content_id', $event->comment['id'])
->where('content_type', Post\Comment::class)
->delete();
}

public function subscribe(Dispatcher $dispatcher): void
Expand Down
13 changes: 2 additions & 11 deletions app/Repositories/Contracts/ActivityRepositoryInterface.php
Original file line number Diff line number Diff line change
@@ -1,18 +1,9 @@
<?php

namespace Coyote\Repositories\Contracts;

use Coyote\Activity;
use Illuminate\Database\Eloquent;

/**
* @method firstOrNew(array $attributes)
* @method updateOrCreate(array $attributes, array $values = [])
*/
interface ActivityRepositoryInterface extends RepositoryInterface
{
/**
* @param int $limit
* @return Activity[]
*/
public function latest(int $limit);
public function latest(int $limit): Eloquent\Collection;
}
37 changes: 13 additions & 24 deletions app/Repositories/Eloquent/ActivityRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,26 @@

use Coyote\Activity;
use Coyote\Repositories\Contracts\ActivityRepositoryInterface;
use Illuminate\Database\Eloquent;

class ActivityRepository extends Repository implements ActivityRepositoryInterface
{
/**
* @return string
*/
public function model()
public function model(): string
{
return Activity::class;
}

/**
* @inheritdoc
*/
public function latest(int $limit)
public function latest(int $limit): Eloquent\Collection
{
return $this->applyCriteria(function () use ($limit) {
return $this
->model
->select()
->join('forums', 'forums.id', '=', 'forum_id')
->with(['content', 'forum'])
->with(['topic' => function ($builder) {
return $builder->withTrashed();
}])
->with(['user' => function ($builder) {
return $builder->withTrashed();
}])
->latest()
->limit($limit)
->get();
});
return $this->applyCriteria(fn() => $this
->model
->select()
->join('forums', 'forums.id', '=', 'forum_id')
->with(['content', 'forum'])
->with(['topic' => fn($builder) => $builder->withTrashed()])
->with(['user' => fn($builder) => $builder->withTrashed()])
->latest()
->limit($limit)
->get());
}
}
5 changes: 1 addition & 4 deletions resources/js/pages/homepage.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import PerfectScrollbar from 'perfect-scrollbar';
import Vue from "vue";
import VueNotifications from "vue-notification";
import VueMicroblog from "../components/microblog/microblog";
import store from "../store";
import {mapGetters} from "vuex";
import axios from 'axios';
import { default as LiveMixin } from './microblog/live';
import {default as LiveMixin} from './microblog/live';
import VueModals from "@/plugins/modals";
import VuePaste from '@/plugins/paste';

Expand Down Expand Up @@ -39,8 +38,6 @@ function switchReputationTab(index) {
}

(function () {
new PerfectScrollbar(document.getElementById('stream'));

let tabs = document.querySelectorAll('#forum-tabs .nav-link');

for (let i = 0; i < tabs.length; i++) {
Expand Down
4 changes: 2 additions & 2 deletions resources/lang/pl/activity.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

return [
'headline' => [
'post' => ':user dodał post w :topic',
'comment' => ':user dodał komentarz w :topic',
'post' => ':user dodał <b>post</b> w :topic',
'comment' => ':user dodał <b>komentarz</b> w :topic',
]
];
24 changes: 12 additions & 12 deletions resources/sass/helpers/_sprites.scss
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
$sprites: (
'logo-php': "/img/sprites-4c0d3e0f0fbb5883.svg#sprite-logo-php-fragment",
'logo-java': "/img/sprites-4c0d3e0f0fbb5883.svg#sprite-logo-java-fragment",
'logo-javascript': "/img/sprites-4c0d3e0f0fbb5883.svg#sprite-logo-javascript-fragment",
'logo-cpp': "/img/sprites-4c0d3e0f0fbb5883.svg#sprite-logo-cpp-fragment",
'logo-csharp': "/img/sprites-4c0d3e0f0fbb5883.svg#sprite-logo-csharp-fragment",
'logo-css': "/img/sprites-4c0d3e0f0fbb5883.svg#sprite-logo-css-fragment",
'logo-android': "/img/sprites-4c0d3e0f0fbb5883.svg#sprite-logo-android-fragment",
'logo-lazarus': "/img/sprites-4c0d3e0f0fbb5883.svg#sprite-logo-lazarus-fragment",
'logo-postgresql': "/img/sprites-4c0d3e0f0fbb5883.svg#sprite-logo-postgresql-fragment",
'logo-rust': "/img/sprites-4c0d3e0f0fbb5883.svg#sprite-logo-rust-fragment",
'logo-go': "/img/sprites-4c0d3e0f0fbb5883.svg#sprite-logo-go-fragment",
'logo-unity': "/img/sprites-4c0d3e0f0fbb5883.svg#sprite-logo-unity-fragment"
'logo-php': "/img/sprites-3e9aacb8140a6312.svg#sprite-logo-php-fragment",
'logo-java': "/img/sprites-3e9aacb8140a6312.svg#sprite-logo-java-fragment",
'logo-javascript': "/img/sprites-3e9aacb8140a6312.svg#sprite-logo-javascript-fragment",
'logo-cpp': "/img/sprites-3e9aacb8140a6312.svg#sprite-logo-cpp-fragment",
'logo-csharp': "/img/sprites-3e9aacb8140a6312.svg#sprite-logo-csharp-fragment",
'logo-css': "/img/sprites-3e9aacb8140a6312.svg#sprite-logo-css-fragment",
'logo-android': "/img/sprites-3e9aacb8140a6312.svg#sprite-logo-android-fragment",
'logo-lazarus': "/img/sprites-3e9aacb8140a6312.svg#sprite-logo-lazarus-fragment",
'logo-postgresql': "/img/sprites-3e9aacb8140a6312.svg#sprite-logo-postgresql-fragment",
'logo-rust': "/img/sprites-3e9aacb8140a6312.svg#sprite-logo-rust-fragment",
'logo-go': "/img/sprites-3e9aacb8140a6312.svg#sprite-logo-go-fragment",
'logo-unity': "/img/sprites-3e9aacb8140a6312.svg#sprite-logo-unity-fragment"
);

$sizes: (
Expand Down
Loading

0 comments on commit 654bc76

Please sign in to comment.