Изменения документа VelocityMacros
Редактировал(а) Dmitriy Rybakov 20.06.2025 04:46
От версии 2.1
отредактировано Dmitriy Rybakov
на 20.06.2025 04:46
на 20.06.2025 04:46
Изменить комментарий:
Install extension [com.xwiki.licensing:application-licensing-licensor-ui/1.29]
К версии 1.1
отредактировано Alexey Semenihin
на 27.05.2025 04:10
на 27.05.2025 04:10
Изменить комментарий:
Install extension [com.xwiki.licensing:application-licensing-licensor-ui/1.25]
Сводка
-
Свойства страницы (2 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Автор документа
-
... ... @@ -1,1 +1,1 @@ 1 -xwiki:XWiki. rybakovds1 +xwiki:XWiki.semenihinaa - Содержимое
-
... ... @@ -17,15 +17,51 @@ 17 17 18 18 #macro (getVisiblePaidExtensions) 19 19 #getPaidExtensions 20 - #set ($mandatoryExtensions = $services.licensing.licensor.getLicensedExtensionManager().getMandatoryLicensedExtensions()) 21 21 #set ($visiblePaidExtensions = $collectiontool.set) 22 22 #foreach ($paidExtension in $paidExtensions) 23 - #if ($mandatoryExtensions.contains($paidExtension.getId())) 22 + ## Filter out the paid extensions that are dependencies of other paid extensions (because the license of a paid 23 + ## extension should cover its paid dependencies). 24 + #isRequiredBy($paidExtension $paidExtensions) 25 + #if (!$isRequiredBy) 24 24 #set ($discard = $visiblePaidExtensions.add($paidExtension)) 25 25 #end 26 26 #end 27 27 #end 28 28 31 +#macro (isRequiredBy $installedExtension $extensions) 32 + #set ($isRequiredBy = false) 33 + #set ($backwardDependencies = $collectiontool.queue) 34 + #addBackwardDependencies($installedExtension $backwardDependencies) 35 + ## We can't iterate the queue while modifying it and we can't write a "while" loop in Velocity so we're forced to 36 + ## rely on a range loop (limiting the number of backward dependencies that we analyze). 37 + #foreach ($i in [0..1000]) 38 + #set ($backwardDependency = $backwardDependencies.poll()) 39 + #if ($backwardDependency) 40 + #if ($extensions.contains($backwardDependency)) 41 + #set ($isRequiredBy = true) 42 + #break 43 + #else 44 + #addBackwardDependencies($backwardDependency $backwardDependencies) 45 + #end 46 + #else 47 + #break 48 + #end 49 + #end 50 +#end 51 + 52 +#macro (addBackwardDependencies $installedExtension $backwardDependencies) 53 + #set ($backwardDependenciesSet = $collectiontool.set) 54 + #set ($discard = $backwardDependenciesSet.addAll($backwardDependencies)) 55 + #set ($backwardDependenciesByNamespace = $services.extension.installed.getBackwardDependencies($installedExtension.id)) 56 + #foreach ($backwardDependenciesOnNamespace in $backwardDependenciesByNamespace.values()) 57 + #foreach ($backwardDependency in $backwardDependenciesOnNamespace) 58 + #if ($backwardDependenciesSet.add($backwardDependency)) 59 + #set ($discard = $backwardDependencies.add($backwardDependency)) 60 + #end 61 + #end 62 + #end 63 +#end 64 + 29 29 #macro (getLicensesAdminSectionURL) 30 30 ## We target the main wiki explicitly because licenses are managed globally. 31 31 #if ($xwiki.exists($services.model.createDocumentReference($xcontext.mainWikiName, 'XWiki', 'ConfigurableClass'))) ... ... @@ -121,16 +121,6 @@ 121 121 </div> 122 122 #end 123 123 124 -#macro(feedbackButton $extension) 125 - #set ($licensingConfigDoc = $xwiki.getDocument('Licenses.Code.LicensingConfig')) 126 - #set ($jsonData = { 127 - 'featureId': $extension.id.id, 128 - 'extensionVersion': $extension.id.version.toString(), 129 - 'storeFeedbackURL': $licensingConfigDoc.storeFeedbackURL 130 - }) 131 - #licenseButton('' 'primary' 'comment' 'feedback' $jsonData) 132 -#end 133 - 134 134 #macro (getLicenseActions $license $extension $actions) 135 135 ## Use the JSON format in order to be parsable in JavaScript. 136 136 #set ($jsonData = { ... ... @@ -163,72 +163,7 @@ 163 163 </div> 164 164 <div class="row"> 165 165 #autoUpgradeButton($extension.id.id) 166 - #feedbackButton($extension) 167 167 </div> 168 168 </div> 169 169 #end 170 - 171 -#macro(webmecanikForm $webmecanikID) 172 - <div class="webmecanikForm"> 173 - <input type="hidden" name="webmecanikID" value="${webmecanikID}"> 174 - ## This is the recommended way for automatically inserting a form from Webmecanik using Mautic. 175 - <script type="text/javascript" src="\/\/news.xwiki.com/form/generate.js?id=${webmecanikID}"></script> 176 - </div> 177 -#end 178 - 179 -#macro(feedbackForm) 180 -{{html clean="false" wiki="true"}} 181 - <div class="modal fade" id="feedbackFormModal" tabindex="-1" role="dialog" aria-labelledby="feedbackFormModal-label"> 182 - <div class="modal-dialog" role="document"> 183 - <div class="modal-content"> 184 - <div class="modal-header"> 185 - <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 186 - <span aria-hidden="true">×</span> 187 - </button> 188 - <div class="modal-title" id="feedbackFormModal-label"> 189 - $escapetool.xml($services.localization.render('licensor.feedbackLicense.title')) 190 - </div> 191 - </div> 192 - <div class="modal-body"> 193 - ## This is the Pro Apps feedback form ID from Webmecanik. 194 - #set ($webmecanikID = '89') 195 - #webmecanikForm($webmecanikID) 196 - </div> 197 - </div> 198 - </div> 199 - </div> 200 -{{/html}} 201 -#end 202 - 203 -#macro(installedAsDependency) 204 -{{html clean="false" wiki="true"}} 205 - <div class="modal fade" id="installed-as-dependency" tabindex="-1" role="dialog" aria-labelledby="installed-as-dependency-label"> 206 - <div class="modal-dialog" role="document"> 207 - <div class="modal-content"> 208 - <div class="modal-header"> 209 - <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 210 - <span aria-hidden="true">×</span> 211 - </button> 212 - <div class="modal-title" id="installed-as-dependency-label"> 213 - $escapetool.xml($services.localization.render('licensor.installedAsDependency.modal.title')) 214 - </div> 215 - </div> 216 - <div class="modal-body"> 217 - $escapetool.xml($services.localization.render('licensor.installedAsDependency.modal.description')) 218 - <ul class="parent-extensions"></ul> 219 - $escapetool.xml($services.localization.render('licensor.installedAsDependency.modal.question')) 220 - </div> 221 - <div class="modal-footer"> 222 - <button type="button" class="btn btn-default" data-dismiss="modal"> 223 - $escapetool.xml($services.localization.render('cancel')) 224 - </button> 225 - <button type="button" class="btn btn-primary"> 226 - $escapetool.xml($services.localization.render('licensor.installedAsDependency.modal.confirm')) 227 - </button> 228 - </div> 229 - </div> 230 - </div> 231 - </div> 232 -{{/html}} 233 -#end 234 234 {{/velocity}}