44
55use Filament \Contracts \Plugin ;
66use Filament \Panel ;
7+ use Filament \Resources \Resource ;
8+ use InvalidArgumentException ;
79use Tapp \FilamentFormBuilder \FilamentFormBuilderPlugin ;
810use Tapp \FilamentLms \Pages \CreateRubric ;
911use Tapp \FilamentLms \Pages \Reporting ;
@@ -27,22 +29,7 @@ public function getId(): string
2729
2830 public function register (Panel $ panel ): void
2931 {
30- $ resources = [
31- CourseResource::class,
32- LessonResource::class,
33- StepResource::class,
34- VideoResource::class,
35- DocumentResource::class,
36- LinkResource::class,
37- TestResource::class,
38- ImageResource::class,
39- ];
40-
41- if (config ('filament-lms.credits_enabled ' , false )) {
42- $ resources [] = CreditCategoryResource::class;
43- }
44-
45- $ panel ->resources ($ resources );
32+ $ panel ->resources (self ::registeredResourceClasses ());
4633
4734 $ panel ->pages ([
4835 Reporting::class,
@@ -68,4 +55,53 @@ public static function get(): static
6855 {
6956 return filament (app (static ::class)->getId ());
7057 }
58+
59+ /**
60+ * Filament resource classes registered by this plugin, after merging `filament-lms.resources` overrides.
61+ *
62+ * @return list<class-string<resource>>
63+ */
64+ public static function registeredResourceClasses (): array
65+ {
66+ $ defaults = [
67+ 'CourseResource ' => CourseResource::class,
68+ 'LessonResource ' => LessonResource::class,
69+ 'StepResource ' => StepResource::class,
70+ 'VideoResource ' => VideoResource::class,
71+ 'DocumentResource ' => DocumentResource::class,
72+ 'LinkResource ' => LinkResource::class,
73+ 'TestResource ' => TestResource::class,
74+ 'ImageResource ' => ImageResource::class,
75+ 'CreditCategoryResource ' => CreditCategoryResource::class,
76+ ];
77+
78+ /** @var array<string, mixed> $overrides */
79+ $ overrides = config ('filament-lms.resources ' , []);
80+
81+ $ classes = [];
82+
83+ foreach ($ defaults as $ key => $ defaultClass ) {
84+ if ($ key === 'CreditCategoryResource ' && ! config ('filament-lms.credits_enabled ' , false )) {
85+ continue ;
86+ }
87+
88+ $ class = array_key_exists ($ key , $ overrides ) ? $ overrides [$ key ] : $ defaultClass ;
89+
90+ if (! is_string ($ class ) || $ class === '' ) {
91+ throw new InvalidArgumentException ("filament-lms.resources. {$ key } must be a non-empty class-string. " );
92+ }
93+
94+ if (! class_exists ($ class )) {
95+ throw new InvalidArgumentException ("filament-lms.resources. {$ key } class [ {$ class }] does not exist. " );
96+ }
97+
98+ if (! is_subclass_of ($ class , Resource::class)) {
99+ throw new InvalidArgumentException ("filament-lms.resources. {$ key } class [ {$ class }] must extend " .Resource::class.'. ' );
100+ }
101+
102+ $ classes [] = $ class ;
103+ }
104+
105+ return $ classes ;
106+ }
71107}
0 commit comments