1919use OCP \Files \Node ;
2020use OCP \Files \NotFoundException ;
2121use OCP \Files \Template \BeforeGetTemplatesEvent ;
22+ use OCP \Files \Template \Field ;
2223use OCP \Files \Template \FileCreatedFromTemplateEvent ;
2324use OCP \Files \Template \ICustomTemplateProvider ;
2425use OCP \Files \Template \ITemplateManager ;
@@ -125,6 +126,19 @@ public function listTemplates(): array {
125126 }, $ this ->listCreators ()));
126127 }
127128
129+ public function listTemplateFields (int $ fileId ): array {
130+ foreach ($ this ->listCreators () as $ creator ) {
131+ $ fields = $ this ->getTemplateFields ($ creator , $ fileId );
132+ if (empty ($ fields )) {
133+ continue ;
134+ }
135+
136+ return $ fields ;
137+ }
138+
139+ return [];
140+ }
141+
128142 /**
129143 * @param string $filePath
130144 * @param string $templateId
@@ -187,6 +201,20 @@ private function getTemplateFolder(): Folder {
187201 * @return list<Template>
188202 */
189203 private function getTemplateFiles (TemplateFileCreator $ type ): array {
204+ $ templates = array_merge (
205+ $ this ->getProviderTemplates ($ type ),
206+ $ this ->getUserTemplates ($ type )
207+ );
208+
209+ $ this ->eventDispatcher ->dispatchTyped (new BeforeGetTemplatesEvent ($ templates , false ));
210+
211+ return $ templates ;
212+ }
213+
214+ /**
215+ * @return list<Template>
216+ */
217+ private function getProviderTemplates (TemplateFileCreator $ type ): array {
190218 $ templates = [];
191219 foreach ($ this ->getRegisteredProviders () as $ provider ) {
192220 foreach ($ type ->getMimetypes () as $ mimetype ) {
@@ -195,11 +223,22 @@ private function getTemplateFiles(TemplateFileCreator $type): array {
195223 }
196224 }
197225 }
226+
227+ return $ templates ;
228+ }
229+
230+ /**
231+ * @return list<Template>
232+ */
233+ private function getUserTemplates (TemplateFileCreator $ type ): array {
234+ $ templates = [];
235+
198236 try {
199237 $ userTemplateFolder = $ this ->getTemplateFolder ();
200238 } catch (\Exception $ e ) {
201239 return $ templates ;
202240 }
241+
203242 foreach ($ type ->getMimetypes () as $ mimetype ) {
204243 foreach ($ userTemplateFolder ->searchByMime ($ mimetype ) as $ templateFile ) {
205244 $ template = new Template (
@@ -212,11 +251,33 @@ private function getTemplateFiles(TemplateFileCreator $type): array {
212251 }
213252 }
214253
215- $ this ->eventDispatcher ->dispatchTyped (new BeforeGetTemplatesEvent ($ templates ));
216-
217254 return $ templates ;
218255 }
219256
257+ /*
258+ * @return list<Field>
259+ */
260+ private function getTemplateFields (TemplateFileCreator $ type , int $ fileId ): array {
261+ $ providerTemplates = $ this ->getProviderTemplates ($ type );
262+ $ userTemplates = $ this ->getUserTemplates ($ type );
263+
264+ $ matchedTemplates = array_filter (
265+ array_merge ($ providerTemplates , $ userTemplates ),
266+ function (Template $ template ) use ($ fileId ) {
267+ return $ template ->jsonSerialize ()['fileid ' ] === $ fileId ;
268+ });
269+
270+ if (empty ($ matchedTemplates )) {
271+ return [];
272+ }
273+
274+ $ this ->eventDispatcher ->dispatchTyped (new BeforeGetTemplatesEvent ($ matchedTemplates , true ));
275+
276+ return array_values (array_map (function (Template $ template ) {
277+ return $ template ->jsonSerialize ()['fields ' ] ?? [];
278+ }, $ matchedTemplates ));
279+ }
280+
220281 /**
221282 * @param Node|File $file
222283 * @return array
0 commit comments