Modifications pour le document MacroService

Modifié par Florent Charton le 2026/03/13 11:04

Depuis la version 1.1
modifié par superadmin
sur 2022/06/20 08:49
Commentaire de modification : Install extension [org.xwiki.contrib:application-ckeditor-ui/1.63.1]
À la version 4.1
modifié par Florent Charton
sur 2025/08/19 15:16
Commentaire de modification : Install extension [org.xwiki.platform:xwiki-platform-ckeditor-ui/17.4.3]

Résumé

Détails

Propriétés de la Page
Auteur du document
... ... @@ -1,1 +1,1 @@
1 -XWiki.superadmin
1 +xwiki:XWiki.fcharton
Contenu
... ... @@ -38,36 +38,67 @@
38 38  ## }
39 39  ## ================================================================
40 40  #macro (getMacroList $syntaxId)
41 +
42 + ## Loads the css resources to display the macros list
43 + ## TODO: Refactor once we add support for loading css files from javascript without velocity.
44 + #if ($xcontext.action == 'get')
45 + #template('display_macros.vm')
46 + #initRequiredSkinExtensions()
47 + #end
48 +
49 + #set ($discard = $xwiki.linkx.use($services.webjars.url('selectize.js', 'css/selectize.bootstrap3.css'),
50 + {'type': 'text/css', 'rel': 'stylesheet'}))
51 + #set ($discard = $xwiki.ssfx.use('uicomponents/suggest/xwiki.selectize.css', true))
52 +
53 + #if ($xcontext.action == 'get')
54 + #getRequiredSkinExtensions($requiredSkinExtensions)
55 + #set ($discard = $response.setHeader('X-XWIKI-HTML-HEAD', $requiredSkinExtensions))
56 + #end
57 +
41 41   #set ($syntax = $services.rendering.resolveSyntax($syntaxId))
42 42   #set ($macroDescriptors = $services.rendering.getMacroDescriptors($syntax))
43 - #if (!$macroDescriptors)
44 - ## Before XWiki 9.7RC1 we had to use APIs that require programming rights.
45 - #set ($macroDescriptors = [])
46 - #try()
47 - #set ($macroManager = $services.component.getInstance('org.xwiki.rendering.macro.MacroManager'))
48 - #foreach ($macroId in $macroManager.getMacroIds($syntax))
49 - #set ($macroDescriptor = $macroManager.getMacro($macroId).descriptor)
50 - #set ($discard = $macroDescriptors.add($macroDescriptor))
51 - #end
52 - #end
53 - #end
54 54   #set ($data = {})
55 55   #set ($allMacrosExcludedCategories = [])
56 56   #set ($discard = $allMacrosExcludedCategories.add("#maybeTranslate('rendering.macroCategory.Internal' 'Internal')"))
57 57   #set ($discard = $allMacrosExcludedCategories.add("#maybeTranslate('rendering.macroCategory.Deprecated' 'Deprecated')"))
58 58   #set ($discard = $data.put('options', { 'allMacrosExcludedCategories' : $allMacrosExcludedCategories }))
65 + ## If the current user do not want to display hidden documents, we initialize the set of hidden default
66 + ## categories.
67 + ## TODO: Make the list of hidden by default categories configurable from the administration (XWIKI-19993).
68 + #if(!$services.user.getProperties().displayHiddenDocuments())
69 + #set ($hiddenCategories = $services.rendering.getHiddenMacroCategories())
70 + #else
71 + #set ($hiddenCategories = [])
72 + #end
59 59   #set ($macroList = [])
74 + #set ($installedMacros = [])
60 60   #foreach ($macroDescriptor in $macroDescriptors)
76 + #set ($discard = $installedMacros.add($macroDescriptor.id.id))
77 +
61 61   #set ($macroTranslationKey = "rendering.macro.$macroDescriptor.id")
62 - #set ($macroCategoryTranslationKey = "rendering.macroCategory.$macroDescriptor.defaultCategory")
63 - #set ($discard = $macroList.add({
64 - 'id': $macroDescriptor.id,
65 - 'name': "#maybeTranslate(""${macroTranslationKey}.name"" $macroDescriptor.name)",
66 - 'description': "#maybeTranslate(""${macroTranslationKey}.description"" $macroDescriptor.description)",
67 - 'defaultCategory': "#maybeTranslate($macroCategoryTranslationKey $macroDescriptor.defaultCategory)"
68 - }))
79 + #set ($categories = [])
80 + #set ($hidden = false)
81 + #foreach ($category in $services.rendering.getMacroCategories($macroDescriptor.id))
82 + #set ($macroCategoryTranslationKey = "rendering.macroCategory.$category")
83 + #set ($hidden = $hidden || $hiddenCategories.contains($category))
84 + #set ($discard = $categories.add({
85 + 'id': $category,
86 + 'label': "#maybeTranslate($macroCategoryTranslationKey $category)"
87 + }))
88 + #end
89 +
90 + #if (!$hidden)
91 + #set ($defaultCategoryTranslation = "rendering.macroCategory.${macroDescriptor.defaultCategory}")
92 + #set ($discard = $macroList.add({
93 + 'id': $macroDescriptor.id,
94 + 'name': "#maybeTranslate(""${macroTranslationKey}.name"" $macroDescriptor.name)",
95 + 'description': "#maybeTranslate(""${macroTranslationKey}.description"" $macroDescriptor.description)",
96 + 'defaultCategory': "#maybeTranslate($defaultCategoryTranslation $macroDescriptor.defaultCategory)",
97 + 'categories': $categories
98 + }))
99 + #end
69 69   #end
70 - #set ($macroList = $resolvedSortTool.sort($macroList, 'name'))
101 + #set ($macroList = $collectiontool.sort($macroList, 'name'))
71 71   #set ($discard = $data.put('list', $macroList))
72 72   ## Get macros provided by compatible available extensions
73 73   #set ($macroExtensionsList = [])
... ... @@ -84,11 +84,13 @@
84 84   #set ($macroExtensionsMap = {})
85 85   #foreach ($extension in $extensions)
86 86   ## TODO: move to a proper generic API to check if an extension can be installed by a given user
87 - #if ($services.security.authorization.hasAccess('programming')
118 + #set ($extensionInstallAllowed = $services.security.authorization.hasAccess('programming', $xcontext.userReference, $NULL)
88 88   || (($extension.type == 'xar' || $extension.type == 'webjar')
89 - && $services.security.authorization.hasAccess('admin', "wiki:$xcontext.database") && $services.extension.isAllowed($extension, "wiki:$xcontext.database")))
90 - #foreach ($extensionComponent in $extension.getComponents())
91 - #if ($extensionComponent.roleType == 'org.xwiki.rendering.macro.Macro')
120 + && $services.security.authorization.hasAccess('admin', $xcontext.userReference, "wiki:$xcontext.database") && $services.extension.isAllowed($extension, "wiki:$xcontext.database")))
121 + #foreach ($extensionComponent in $extension.getComponents())
122 + #if ($extensionComponent.roleType == 'org.xwiki.rendering.macro.Macro')
123 + ## Skip macros identifiers for which a macro is already installed
124 + #if (!$installedMacros.contains($extensionComponent.roleHint))
92 92   #set ($discard = $macroExtensionsList.add({
93 93   'id' : {
94 94   'id' : $extensionComponent.roleHint
... ... @@ -96,12 +96,17 @@
96 96   'name': $extensionComponent.roleHint,
97 97   'description': $extension.summary,
98 98   'defaultCategory': '_notinstalled',
132 + 'categories': [{
133 + 'id' :'_notinstalled',
134 + 'label': $services.localization.render('macroSelector.filter.category.notinstalled')
135 + }],
99 99   'extensionId' : $extension.id.id,
100 100   'extensionVersion' : $extension.id.version.value,
101 101   'extensionType' : $extension.type,
102 102   'extensionRecommended': $extension.recommended,
103 103   'extensionName': $extension.name,
104 - 'extensionSummary': $extension.summary
141 + 'extensionSummary': $extension.summary,
142 + 'extensionInstallAllowed': $extensionInstallAllowed
105 105   }))
106 106   #end
107 107   #end
... ... @@ -112,8 +112,6 @@
112 112  #end
113 113  
114 114  #macro (maybeGetMacroDescriptor $macroIdAsString)
115 - #set ($xmacro = $NULL)
116 - #set ($macroDescriptor = $NULL)
117 117   #set ($macroId = $services.rendering.resolveMacroId($macroIdAsString))
118 118   #if ($macroId)
119 119   #set ($macroDescriptor = $services.rendering.getMacroDescriptor($macroId))
... ... @@ -122,41 +122,12 @@
122 122   #set ($macroId = $services.rendering.resolveMacroId($macroId.id))
123 123   #set ($macroDescriptor = $services.rendering.getMacroDescriptor($macroId))
124 124   #end
125 - #else
126 - ## Either the macro id could not be resolved (unlikely) or we are on an older XWiki instance (before 10.10RC1) where
127 - ## we had to use APIs that require programming rights.
128 - #getMacroWithPR($macroIdAsString)
129 - #if ($xmacro)
130 - #set ($macroDescriptor = $xmacro.descriptor)
161 + #if ($macroDescriptor)
162 + #getMacroDescriptor($macroDescriptor)
131 131   #end
132 132   #end
133 - #if ($macroDescriptor)
134 - #getMacroDescriptor($macroDescriptor)
135 - #if ($xmacro)
136 - ## supportsInlineMode was not exposed on the macro descriptor before XWiki 10.10RC1.
137 - #set ($data.supportsInlineMode = $xmacro.supportsInlineMode())
138 - #end
139 - #end
140 140  #end
141 141  
142 -#macro (getMacroWithPR $macroIdAsString)
143 - #set ($xmacro = $NULL)
144 - #try()
145 - #set ($macroIdFactory = $services.component.getInstance('org.xwiki.rendering.macro.MacroIdFactory'))
146 - #set ($macroId = $macroIdFactory.createMacroId($macroIdAsString))
147 - #set ($macroManager = $services.component.getInstance('org.xwiki.rendering.macro.MacroManager'))
148 - #if ($macroManager.exists($macroId))
149 - #set ($xmacro = $macroManager.getMacro($macroId))
150 - #elseif ($macroId.syntax)
151 - ## Try the macro id without the syntax.
152 - #set ($macroId = $macroIdFactory.createMacroId($macroId.id))
153 - #if ($macroManager.exists($macroId))
154 - #set ($xmacro = $macroManager.getMacro($macroId))
155 - #end
156 - #end
157 - #end
158 -#end
159 -
160 160  #macro (getMacroDescriptor $macroDescriptor)
161 161   ## Translate the macro name and description.
162 162   #set ($macroTranslationKey = "rendering.macro.$macroDescriptor.id")
... ... @@ -191,13 +191,6 @@
191 191   #set ($parameterDescriptor = $entry.value)
192 192   ## Translate the parameter name and description.
193 193   #set ($parameterTranslationKey = "${macroTranslationKey}.parameter.$parameterDescriptor.id")
194 - ## Note: The displayHidden parameter is new in XWiki 12.4RC1 so make sure we set 'hidden' to false if it doesn't
195 - ## exist
196 - #if ("$!parameterDescriptor.displayHidden" != '')
197 - #set ($parameterHidden = $parameterDescriptor.displayHidden)
198 - #else
199 - #set ($parameterHidden = false)
200 - #end
201 201   #set ($translatedParameterDescriptor = {
202 202   'id': $parameterDescriptor.id,
203 203   'name': "#maybeTranslate(""${parameterTranslationKey}.name"" $parameterDescriptor.name)",
... ... @@ -207,13 +207,9 @@
207 207   'advanced': $parameterDescriptor.advanced,
208 208   'defaultValue': $parameterDescriptor.defaultValue,
209 209   'type': $parameterDescriptor.displayType,
210 - 'hidden' : $parameterHidden,
210 + 'hidden' : $parameterDescriptor.displayHidden,
211 211   'index': $foreach.index
212 212   })
213 - #if ("$!translatedParameterDescriptor.type" == '')
214 - ## displayType is not available before XWiki 11.0 so we need to fall back on parameterType.
215 - #set ($translatedParameterDescriptor.type = $parameterDescriptor.parameterType)
216 - #end
217 217   #set ($translatedParameterDescriptor.caseInsensitive = $translatedParameterDescriptor.type.isEnum())
218 218   #set ($groupDescriptor = $parameterDescriptor.groupDescriptor)
219 219   #if ($groupDescriptor)
... ... @@ -239,10 +239,7 @@
239 239   #end
240 240   #set ($translatedParameterDescriptor.editTemplate = $translatedParameterDescriptor.editTemplate.trim())
241 241   #fixDescriptorType($translatedParameterDescriptor)
242 - ## Make sure the key is lowercase (for XWiki <9.0).
243 - ## See XWIKI-13990: Inconsistency between Java-based and Wiki-based rendering macros regarding the parameter
244 - ## descriptor map keys
245 - #set ($discard = $data.parameterDescriptorMap.put($entry.key.toLowerCase(), $translatedParameterDescriptor))
238 + #set ($discard = $data.parameterDescriptorMap.put($entry.key, $translatedParameterDescriptor))
246 246   #end
247 247   #if ($groupDescriptorTree.groups)
248 248   #set ($data.groupDescriptorTree = $groupDescriptorTree.groups)