-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathextend.php
More file actions
74 lines (62 loc) · 3.12 KB
/
extend.php
File metadata and controls
74 lines (62 loc) · 3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
use Flarum\Extend;
use Flarum\Post\Event\Saving;
use Flarum\Post\Event\Posted;
use Flarum\Api\Serializer\PostSerializer;
use Flarum\Api\Serializer\ForumSerializer;
use Flarum\Extension\ExtensionManager;
use Flarum\Settings\SettingsRepositoryInterface;
use SyntaxOutlaw\Threadify\Listener\SavePostParentId;
use SyntaxOutlaw\Threadify\Listener\SavePostToThreadifyTable;
use SyntaxOutlaw\Threadify\Api\Controller\ListDiscussionThreadsController;
return [
// Frontend assets
(new Extend\Frontend('forum'))
->js(__DIR__ . '/js/dist/forum.js')
->css(__DIR__ . '/resources/less/forum.less'),
(new Extend\Frontend('admin'))
->js(__DIR__ . '/js/dist/admin.js'),
// API Routes
(new Extend\Routes('api'))
->get('/discussions/{id}/threads', 'discussions.threads', ListDiscussionThreadsController::class)
->get('/threadify/admin/settings', 'threadify.admin.settings', SyntaxOutlaw\Threadify\Api\Controller\GetThreadifySettingsController::class)
->post('/threadify/admin/rebuild-parent-ids', 'threadify.admin.rebuild-parent-ids', SyntaxOutlaw\Threadify\Api\Controller\RebuildParentIdsController::class),
// Event listeners
(new Extend\Event())
->listen(Saving::class, SavePostParentId::class)
->listen(Posted::class, SavePostToThreadifyTable::class),
// Expose extension settings to the forum frontend via ForumSerializer
(new Extend\ApiSerializer(ForumSerializer::class))
->attributes(function ($serializer, $forum, $request) {
$settings = resolve(SettingsRepositoryInterface::class);
/** @var ExtensionManager $extensions */
$extensions = resolve(ExtensionManager::class);
$mode = $settings->get('syntaxoutlaw-threadify.mode', 'default');
$tagsEnabled = $extensions->isEnabled('flarum-tags');
// Support multiple tags: syntaxoutlaw-threadify.tags (JSON array) or fallback to single tag
$tagsJson = $settings->get('syntaxoutlaw-threadify.tags');
if ($tagsJson !== null && $tagsJson !== '') {
$tagsList = json_decode($tagsJson, true);
$threadifyTags = is_array($tagsList) ? $tagsList : ['threadify'];
} else {
$single = $settings->get('syntaxoutlaw-threadify.tag', 'threadify');
$threadifyTags = $single ? [$single] : ['threadify'];
}
return [
'threadifyMode' => $mode ?: 'default',
'threadifyTag' => $threadifyTags[0] ?? 'threadify', // backward compat
'threadifyTags' => $threadifyTags,
'threadifyTagsEnabled' => $tagsEnabled,
];
}),
// API serialization
(new Extend\ApiSerializer(PostSerializer::class))
->attributes(function ($serializer, $post, $request) {
$attributes = [];
// Add parent_id to the API response (still needed for backward compatibility)
if (isset($post->parent_id)) {
$attributes['parent_id'] = $post->parent_id;
}
return $attributes;
}),
];