Skip to content

Commit 52bd230

Browse files
committed
Catalogue: Add course_catalogue:read group to entities to get course info
1 parent 737d51e commit 52bd230

5 files changed

Lines changed: 109 additions & 18 deletions

File tree

src/CoreBundle/Entity/AbstractResource.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ abstract class AbstractResource
5757
'session_rel_user:read',
5858
'session_rel_course_rel_user:read',
5959
'user_subscriptions:sessions',
60+
'course_catalogue:read'
6061
])]
6162
public ?string $illustrationUrl = null;
6263

src/CoreBundle/Entity/Course.php

Lines changed: 59 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@
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();

src/CoreBundle/Entity/CourseCategory.php

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@
6868
)]
6969
class CourseCategory implements Stringable
7070
{
71-
#[Groups(['course_category:read', 'course:read'])]
71+
#[Groups([
72+
'course_category:read',
73+
'course:read',
74+
'course_catalogue:read',
75+
])]
7276
#[ORM\Column(name: 'id', type: 'integer')]
7377
#[ORM\Id]
7478
#[ORM\GeneratedValue]
@@ -80,11 +84,21 @@ class CourseCategory implements Stringable
8084
#[ORM\OneToMany(mappedBy: 'parent', targetEntity: self::class)]
8185
protected Collection $children;
8286
#[Assert\NotBlank]
83-
#[Groups(['course_category:read', 'course_category:write', 'course:read', 'session:read'])]
87+
#[Groups([
88+
'course_category:read',
89+
'course_category:write',
90+
'course:read',
91+
'session:read',
92+
'course_catalogue:read',
93+
])]
8494
#[ORM\Column(name: 'title', type: 'text', nullable: false)]
8595
protected string $title;
8696
#[Assert\NotBlank]
87-
#[Groups(['course_category:read', 'course_category:write', 'course:read'])]
97+
#[Groups([
98+
'course_category:read',
99+
'course_category:write',
100+
'course:read',
101+
])]
88102
#[ORM\Column(name: 'code', type: 'string', length: 40, nullable: false)]
89103
protected string $code;
90104
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]

src/CoreBundle/Entity/CourseRelUser.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,12 @@ class CourseRelUser implements Stringable
6969
#[ORM\GeneratedValue]
7070
protected ?int $id = null;
7171

72-
#[Groups(['course:read', 'user:read', 'course_rel_user:read'])]
72+
#[Groups([
73+
'course:read',
74+
'user:read',
75+
'course_rel_user:read',
76+
'course_catalogue:read',
77+
])]
7378
#[MaxDepth(1)]
7479
#[ORM\ManyToOne(targetEntity: User::class, cascade: ['persist'], inversedBy: 'courses')]
7580
#[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id', onDelete: 'CASCADE')]

src/CoreBundle/Entity/User.php

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
217217
'user_rel_user:read',
218218
'social_post:read',
219219
'user_subscriptions:sessions',
220+
'course_catalogue:read',
220221
])]
221222
public ?string $illustrationUrl = null;
222223

@@ -228,6 +229,7 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
228229
'message:read',
229230
'user_rel_user:read',
230231
'session:item:read',
232+
'course_catalogue:read',
231233
])]
232234
#[ORM\Column(name: 'id', type: 'integer')]
233235
#[ORM\Id]
@@ -250,6 +252,7 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
250252
'track_e_exercise:read',
251253
'user_subscriptions:sessions',
252254
'student_publication_rel_user:read',
255+
'course_catalogue:read',
253256
])]
254257
#[ORM\Column(name: 'username', type: 'string', length: 100, unique: true)]
255258
protected string $username;
@@ -258,11 +261,31 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
258261
protected ?string $apiToken = null;
259262

260263
#[ApiProperty(iris: ['http://schema.org/name'])]
261-
#[Groups(['user:read', 'user:write', 'resource_node:read', 'user_json:read', 'track_e_exercise:read', 'user_rel_user:read', 'user_subscriptions:sessions', 'student_publication_rel_user:read'])]
264+
#[Groups([
265+
'user:read',
266+
'user:write',
267+
'resource_node:read',
268+
'user_json:read',
269+
'track_e_exercise:read',
270+
'user_rel_user:read',
271+
'user_subscriptions:sessions',
272+
'student_publication_rel_user:read',
273+
'course_catalogue:read',
274+
])]
262275
#[ORM\Column(name: 'firstname', type: 'string', length: 64, nullable: true)]
263276
protected ?string $firstname = null;
264277

265-
#[Groups(['user:read', 'user:write', 'resource_node:read', 'user_json:read', 'track_e_exercise:read', 'user_rel_user:read', 'user_subscriptions:sessions', 'student_publication_rel_user:read'])]
278+
#[Groups([
279+
'user:read',
280+
'user:write',
281+
'resource_node:read',
282+
'user_json:read',
283+
'track_e_exercise:read',
284+
'user_rel_user:read',
285+
'user_subscriptions:sessions',
286+
'student_publication_rel_user:read',
287+
'course_catalogue:read',
288+
])]
266289
#[ORM\Column(name: 'lastname', type: 'string', length: 64, nullable: true)]
267290
protected ?string $lastname = null;
268291

@@ -775,6 +798,7 @@ class User implements UserInterface, EquatableInterface, ResourceInterface, Reso
775798
'student_publication_rel_user:read',
776799
'student_publication:read',
777800
'student_publication_comment:read',
801+
'course_catalogue:read',
778802
])]
779803
protected string $fullName;
780804

0 commit comments

Comments
 (0)