Modifications pour le document MacroService

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

Depuis 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]
À 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]

Résumé

Détails

Propriétés de la Page
Auteur du document
... ... @@ -1,1 +1,1 @@
1 -xwiki:XWiki.fcharton
1 +XWiki.superadmin
Contenu
... ... @@ -38,67 +38,36 @@
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 -
58 58   #set ($syntax = $services.rendering.resolveSyntax($syntaxId))
59 59   #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
60 60   #set ($data = {})
61 61   #set ($allMacrosExcludedCategories = [])
62 62   #set ($discard = $allMacrosExcludedCategories.add("#maybeTranslate('rendering.macroCategory.Internal' 'Internal')"))
63 63   #set ($discard = $allMacrosExcludedCategories.add("#maybeTranslate('rendering.macroCategory.Deprecated' 'Deprecated')"))
64 64   #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
73 73   #set ($macroList = [])
74 - #set ($installedMacros = [])
75 75   #foreach ($macroDescriptor in $macroDescriptors)
76 - #set ($discard = $installedMacros.add($macroDescriptor.id.id))
77 -
78 78   #set ($macroTranslationKey = "rendering.macro.$macroDescriptor.id")
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
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 + }))
100 100   #end
101 - #set ($macroList = $collectiontool.sort($macroList, 'name'))
70 + #set ($macroList = $resolvedSortTool.sort($macroList, 'name'))
102 102   #set ($discard = $data.put('list', $macroList))
103 103   ## Get macros provided by compatible available extensions
104 104   #set ($macroExtensionsList = [])
... ... @@ -115,13 +115,11 @@
115 115   #set ($macroExtensionsMap = {})
116 116   #foreach ($extension in $extensions)
117 117   ## TODO: move to a proper generic API to check if an extension can be installed by a given user
118 - #set ($extensionInstallAllowed = $services.security.authorization.hasAccess('programming', $xcontext.userReference, $NULL)
87 + #if ($services.security.authorization.hasAccess('programming')
119 119   || (($extension.type == 'xar' || $extension.type == 'webjar')
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))
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')
125 125   #set ($discard = $macroExtensionsList.add({
126 126   'id' : {
127 127   'id' : $extensionComponent.roleHint
... ... @@ -129,17 +129,12 @@
129 129   'name': $extensionComponent.roleHint,
130 130   'description': $extension.summary,
131 131   'defaultCategory': '_notinstalled',
132 - 'categories': [{
133 - 'id' :'_notinstalled',
134 - 'label': $services.localization.render('macroSelector.filter.category.notinstalled')
135 - }],
136 136   'extensionId' : $extension.id.id,
137 137   'extensionVersion' : $extension.id.version.value,
138 138   'extensionType' : $extension.type,
139 139   'extensionRecommended': $extension.recommended,
140 140   'extensionName': $extension.name,
141 - 'extensionSummary': $extension.summary,
142 - 'extensionInstallAllowed': $extensionInstallAllowed
104 + 'extensionSummary': $extension.summary
143 143   }))
144 144   #end
145 145   #end
... ... @@ -150,6 +150,8 @@
150 150  #end
151 151  
152 152  #macro (maybeGetMacroDescriptor $macroIdAsString)
115 + #set ($xmacro = $NULL)
116 + #set ($macroDescriptor = $NULL)
153 153   #set ($macroId = $services.rendering.resolveMacroId($macroIdAsString))
154 154   #if ($macroId)
155 155   #set ($macroDescriptor = $services.rendering.getMacroDescriptor($macroId))
... ... @@ -158,12 +158,41 @@
158 158   #set ($macroId = $services.rendering.resolveMacroId($macroId.id))
159 159   #set ($macroDescriptor = $services.rendering.getMacroDescriptor($macroId))
160 160   #end
161 - #if ($macroDescriptor)
162 - #getMacroDescriptor($macroDescriptor)
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)
163 163   #end
164 164   #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
165 165  #end
166 166  
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 +
167 167  #macro (getMacroDescriptor $macroDescriptor)
168 168   ## Translate the macro name and description.
169 169   #set ($macroTranslationKey = "rendering.macro.$macroDescriptor.id")
... ... @@ -198,6 +198,13 @@
198 198   #set ($parameterDescriptor = $entry.value)
199 199   ## Translate the parameter name and description.
200 200   #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,9 +207,13 @@
207 207   'advanced': $parameterDescriptor.advanced,
208 208   'defaultValue': $parameterDescriptor.defaultValue,
209 209   'type': $parameterDescriptor.displayType,
210 - 'hidden' : $parameterDescriptor.displayHidden,
210 + 'hidden' : $parameterHidden,
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
213 213   #set ($translatedParameterDescriptor.caseInsensitive = $translatedParameterDescriptor.type.isEnum())
214 214   #set ($groupDescriptor = $parameterDescriptor.groupDescriptor)
215 215   #if ($groupDescriptor)
... ... @@ -235,7 +235,10 @@
235 235   #end
236 236   #set ($translatedParameterDescriptor.editTemplate = $translatedParameterDescriptor.editTemplate.trim())
237 237   #fixDescriptorType($translatedParameterDescriptor)
238 - #set ($discard = $data.parameterDescriptorMap.put($entry.key, $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))
239 239   #end
240 240   #if ($groupDescriptorTree.groups)
241 241   #set ($data.groupDescriptorTree = $groupDescriptorTree.groups)