7979 ),
8080 new GetCollection (
8181 uriTemplate: '/public_courses.{_format} ' ,
82- normalizationContext: ['groups ' => ['course:read ' ]],
82+ normalizationContext: [
83+ 'groups ' => ['course_catalogue:read ' ],
84+ ],
8385 filters: [ExtraFieldFilter::class],
8486 provider: PublicCatalogueCourseStateProvider::class
8587 ),
@@ -115,6 +117,7 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
115117 'session_rel_course:read ' ,
116118 'track_e_exercise:read ' ,
117119 'user_subscriptions:sessions ' ,
120+ 'course_catalogue:read ' ,
118121 ])]
119122 #[ORM \Column(name: 'id ' , type: 'integer ' )]
120123 #[ORM \Id]
@@ -134,6 +137,7 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
134137 'session_rel_course:read ' ,
135138 'track_e_exercise:read ' ,
136139 'user_subscriptions:sessions ' ,
140+ 'course_catalogue:read ' ,
137141 ])]
138142 #[Assert \NotBlank(message: 'A Course requires a title ' )]
139143 #[ORM \Column(name: 'title ' , type: 'string ' , length: 250 , unique: false , nullable: true )]
@@ -143,7 +147,12 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
143147 * The course code.
144148 */
145149 #[ApiProperty(iris: ['http://schema.org/courseCode ' ])]
146- #[Groups(['course:read ' , 'user:write ' , 'course_rel_user:read ' ])]
150+ #[Groups([
151+ 'course:read ' ,
152+ 'user:write ' ,
153+ 'course_rel_user:read ' ,
154+ 'course_catalogue:read ' ,
155+ ])]
147156 #[Assert \NotBlank]
148157 #[Assert \Length(max: 40 , maxMessage: 'Code cannot be longer than {{ limit }} characters ' )]
149158 #[Gedmo \Slug(fields: ['title ' ], updatable: false , style: 'upper ' , unique: true , separator: '' )]
@@ -254,12 +263,20 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
254263 #[ORM \Column(name: 'directory ' , type: 'string ' , length: 40 , unique: false , nullable: true )]
255264 protected ?string $ directory = null ;
256265
257- #[Groups(['course:read ' , 'session:read ' ])]
266+ #[Groups([
267+ 'course:read ' ,
268+ 'session:read ' ,
269+ 'course_catalogue:read ' ,
270+ ])]
258271 #[Assert \NotBlank]
259272 #[ORM \Column(name: 'course_language ' , type: 'string ' , length: 20 , unique: false , nullable: false )]
260273 protected string $ courseLanguage ;
261274
262- #[Groups(['course:read ' , 'course_rel_user:read ' ])]
275+ #[Groups([
276+ 'course:read ' ,
277+ 'course_rel_user:read ' ,
278+ 'course_catalogue:read ' ,
279+ ])]
263280 #[ORM \Column(name: 'description ' , type: 'text ' , unique: false , nullable: true )]
264281 protected ?string $ description ;
265282
@@ -270,15 +287,25 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
270287 /**
271288 * @var Collection<int, CourseCategory>
272289 */
273- #[Groups(['course:read ' , 'course:write ' , 'course_rel_user:read ' , 'session:read ' ])]
290+ #[Groups([
291+ 'course:read ' ,
292+ 'course:write ' ,
293+ 'course_rel_user:read ' ,
294+ 'session:read ' ,
295+ 'course_catalogue:read ' ,
296+ ])]
274297 #[ORM \JoinTable(name: 'course_rel_category ' )]
275298 #[ORM \JoinColumn(name: 'course_id ' , referencedColumnName: 'id ' )]
276299 #[ORM \InverseJoinColumn(name: 'course_category_id ' , referencedColumnName: 'id ' )]
277300 #[ORM \ManyToMany(targetEntity: CourseCategory::class, inversedBy: 'courses ' )]
278301 protected Collection $ categories ;
279302
280303 #[Assert \NotBlank]
281- #[Groups(['course:read ' , 'course:write ' ])]
304+ #[Groups([
305+ 'course:read ' ,
306+ 'course:write ' ,
307+ 'course_catalogue:read ' ,
308+ ])]
282309 #[ORM \Column(name: 'visibility ' , type: 'integer ' , unique: false , nullable: false )]
283310 protected int $ visibility ;
284311
@@ -323,12 +350,18 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
323350 protected ?DateTime $ expirationDate = null ;
324351
325352 #[Assert \NotNull]
326- #[Groups(['course:read ' ])]
353+ #[Groups([
354+ 'course:read ' ,
355+ 'course_catalogue:read ' ,
356+ ])]
327357 #[ORM \Column(name: 'subscribe ' , type: 'boolean ' , unique: false , nullable: false )]
328358 protected bool $ subscribe ;
329359
330360 #[Assert \NotNull]
331- #[Groups(['course:read ' ])]
361+ #[Groups([
362+ 'course:read ' ,
363+ 'course_catalogue:read ' ,
364+ ])]
332365 #[ORM \Column(name: 'unsubscribe ' , type: 'boolean ' , unique: false , nullable: false )]
333366 protected bool $ unsubscribe ;
334367
@@ -360,15 +393,26 @@ class Course extends AbstractResource implements ResourceInterface, ResourceWith
360393 #[ORM \Column(type: 'integer ' , nullable: true )]
361394 private ?int $ duration = null ;
362395
363- #[Groups(['course:read ' , 'course:write ' ])]
396+ #[Groups([
397+ 'course:read ' ,
398+ 'course:write ' ,
399+ 'course_catalogue:read ' ,
400+ ])]
364401 #[ORM \Column(name: 'popularity ' , type: 'integer ' , nullable: false , options: ['default ' => 0 ])]
365402 protected int $ popularity = 0 ;
366403
367- #[Groups(['course:read ' ])]
404+ #[Groups([
405+ 'course:read ' ,
406+ 'course_catalogue:read ' ,
407+ ])]
368408 public bool $ subscribed = false ;
369409
370410 #[SerializedName('allowSelfSignup ' )]
371- #[Groups(['course:read ' , 'session:read ' ])]
411+ #[Groups([
412+ 'course:read ' ,
413+ 'session:read ' ,
414+ 'course_catalogue:read ' ,
415+ ])]
372416 public function getAllowSelfSignup (): bool
373417 {
374418 return self ::REGISTERED !== $ this ->visibility ;
@@ -589,7 +633,10 @@ public function hasUserAsTeacher(User $user): bool
589633 * @return Collection<int, CourseRelUser>
590634 */
591635 #[SerializedName('teachers ' )]
592- #[Groups(['course:read ' ])]
636+ #[Groups([
637+ 'course:read ' ,
638+ 'course_catalogue:read ' ,
639+ ])]
593640 public function getTeachersSubscriptions (): Collection
594641 {
595642 $ teacherSubscriptions = new ArrayCollection ();
0 commit comments