@@ -28,10 +28,16 @@ class ExerciseFileLink
2828
2929 /**
3030 * The key (fixed ID) used to identify the file in exercise specification (for simple replacement).
31- * @ORM\Column(type="string")
31+ * @ORM\Column(type="string", length=16 )
3232 */
3333 protected $ key ;
3434
35+ /**
36+ * New name under which the file is downloaded (null means the original name).
37+ * @ORM\Column(type="string", nullable=true)
38+ */
39+ protected $ saveName ;
40+
3541 /**
3642 * Minimal required user role to access the file (null means even non-logged-in users).
3743 * @ORM\Column(type="string", nullable=true)
@@ -56,36 +62,53 @@ class ExerciseFileLink
5662
5763 /**
5864 * Link constructor
59- * @param string $key
65+ * @param string $key used to identify the file in exercise specification (for simple replacement)
6066 * @param ExerciseFile $exerciseFile
61- * @param string|null $requiredRole
6267 * @param Exercise|null $exercise
6368 * @param Assignment|null $assignment
69+ * @param string|null $requiredRole minimal required user role to access the file (null = non-logged-in users)
70+ * @param string|null $saveName new name under which the file is downloaded (null means the original name)
6471 */
6572 private function __construct (
6673 string $ key ,
6774 ExerciseFile $ exerciseFile ,
68- ?string $ requiredRole = null ,
6975 ?Exercise $ exercise = null ,
7076 ?Assignment $ assignment = null ,
77+ ?string $ requiredRole = null ,
78+ ?string $ saveName = null
7179 ) {
7280 $ this ->key = $ key ;
7381 $ this ->requiredRole = $ requiredRole ;
82+ $ this ->saveName = $ saveName ;
7483 $ this ->exerciseFile = $ exerciseFile ;
7584 $ this ->exercise = $ exercise ;
7685 $ this ->assignment = $ assignment ;
7786 $ this ->createdAt = new DateTime ();
7887 }
7988
89+ /**
90+ * Create a link for exercise
91+ * @param string $key
92+ * @param ExerciseFile $exerciseFile
93+ * @param Exercise $exercise
94+ * @param string|null $requiredRole
95+ * @param string|null $saveName
96+ */
8097 public static function createForExercise (
8198 string $ key ,
8299 ExerciseFile $ exerciseFile ,
83- ?string $ requiredRole ,
84- Exercise $ exercise
100+ Exercise $ exercise ,
101+ ?string $ requiredRole = null ,
102+ ?string $ saveName = null
85103 ): self {
86- return new self ($ key , $ exerciseFile , $ requiredRole , $ exercise , null );
104+ return new self ($ key , $ exerciseFile , $ exercise , null , $ requiredRole , $ saveName );
87105 }
88106
107+ /**
108+ * Create a link for assignment by copying an existing link
109+ * @param ExerciseFileLink $link to be copied when assignment is being created
110+ * @param Assignment $assignment the assignment for which the link is being created
111+ */
89112 public static function copyForAssignment (
90113 ExerciseFileLink $ link ,
91114 Assignment $ assignment
@@ -95,7 +118,7 @@ public static function copyForAssignment(
95118 'Can only copy links associated with an exercise of selected assignment. '
96119 );
97120 }
98- return new self ($ link ->key , $ link ->exerciseFile , $ link ->requiredRole , null , $ assignment );
121+ return new self ($ link ->key , $ link ->exerciseFile , null , $ assignment , $ link ->requiredRole , $ link -> saveName );
99122 }
100123
101124 /*
@@ -107,11 +130,31 @@ public function getKey(): string
107130 return $ this ->key ;
108131 }
109132
133+ public function setKey (string $ key ): void
134+ {
135+ $ this ->key = $ key ;
136+ }
137+
110138 public function getRequiredRole (): ?string
111139 {
112140 return $ this ->requiredRole ;
113141 }
114142
143+ public function setRequiredRole (?string $ requiredRole ): void
144+ {
145+ $ this ->requiredRole = $ requiredRole ;
146+ }
147+
148+ public function getSaveName (): ?string
149+ {
150+ return $ this ->saveName ;
151+ }
152+
153+ public function setSaveName (?string $ saveName ): void
154+ {
155+ $ this ->saveName = $ saveName ;
156+ }
157+
115158 public function getExerciseFile (): ExerciseFile
116159 {
117160 return $ this ->exerciseFile ;
0 commit comments