Änderungen von Dokument Licensed Extensions
Zuletzt geändert von xwikiadmin am 2025/07/14 15:59
Von Version 4.1
bearbeitet von xwikiadmin
am 2025/07/14 15:59
am 2025/07/14 15:59
Änderungskommentar:
Install extension [com.xwiki.licensing:application-licensing-licensor-ui/1.29]
Auf Version 1.1
bearbeitet von xwikiadmin
am 2022/04/27 15:47
am 2022/04/27 15:47
Änderungskommentar:
Copied from templateostfalia:Licenses.WebHome
Zusammenfassung
-
Seiteneigenschaften (1 geändert, 0 hinzugefügt, 0 gelöscht)
-
Objekte (3 geändert, 0 hinzugefügt, 0 gelöscht)
Details
- Seiteneigenschaften
-
- Inhalt
-
... ... @@ -6,14 +6,11 @@ 6 6 <fieldset class="header"> 7 7 <legend>$services.localization.render('licensor.licenseManager.heading')</legend> 8 8 $services.localization.render('licensor.licenseManager.hint') 9 - <div class="required-by-hint"> 10 - $services.icon.renderHTML('warning') : $services.localization.render('licensor.licenseManager.installedAsDependency.hint') 11 - </div 12 12 </fieldset> 13 13 {{/html}} 14 14 #set ($columns = ['name', 'version', 'status', 'support', 'userLimit', 'wiki', 'actions']) 15 15 #set ($columnsProperties = { 16 - 'name': {'filterable': false, 'sortable': false, 'link': 'auto' , 'html': true},13 + 'name': {'filterable': false, 'sortable': false, 'link': 'auto'}, 17 17 'version': {'filterable': false, 'sortable': false}, 18 18 'status': {'filterable': false, 'sortable': false, 'html': true}, 19 19 'support': {'filterable': false, 'sortable': false}, ... ... @@ -24,7 +24,7 @@ 24 24 #set ($options = { 25 25 'resultPage':'Licenses.Code.LicenseJSON', 26 26 'translationPrefix' : 'licensor.', 27 - 'extraParams': "&show TopLevelExtensions=$!escapetool.url($request.showTopLevelExtensions)"24 + 'extraParams': "&showAllPaidExtensions=$!escapetool.url($request.showAllPaidExtensions)" 28 28 }) 29 29 #livetable('licenseManager' $columns $columnsProperties $options) 30 30 {{html clean="false"}} ... ... @@ -73,7 +73,5 @@ 73 73 #displayOwnerDetailsForm 74 74 #displayLicensesLiveTable 75 75 #displayAddLicenseForm 76 - #feedbackForm 77 - #installedAsDependency 78 78 #end 79 79 {{/velocity}}
- XWiki.ConfigurableClass[0]
-
- Code zum Ausführen
-
... ... @@ -1,1 +1,0 @@ 1 -{{include reference="Licenses.WebHome" /}} - Anzeigen in der Kategorie
-
... ... @@ -1,1 +1,0 @@ 1 -extensionmanager - Anzeigen in Sektion
-
... ... @@ -1,1 +1,0 @@ 1 -Licenses - Bereich (Scope)
-
... ... @@ -1,1 +1,0 @@ 1 -WIKI - Reihenfolge der Sektionen
-
... ... @@ -1,1 +1,0 @@ 1 -600
- XWiki.JavaScriptExtension[0]
-
- Code
-
... ... @@ -1,11 +1,4 @@ 1 -define('auto-update-button', { 2 - prefix: 'licensor.moreActions.autoUpgrade.', 3 - keys: [ 4 - 'allow', 5 - 'prevent' 6 - ] 7 -}); 8 -define('licensor', ['jquery', 'xwiki-meta', 'xwiki-l10n!auto-update-button'], function($, xwikiMeta, l10n) { 1 +define('licensor', ['jquery', 'xwiki-meta'], function($, xwikiMeta) { 9 9 return { 10 10 addLicense: function(data) { 11 11 return $.post( ... ... @@ -65,7 +65,7 @@ 65 65 }; 66 66 }); 67 67 68 -require(['jquery', 'licensor', 'xwiki-meta', 'xwiki- l10n!auto-update-button', 'xwiki-events-bridge', 'bootstrap'], function ($, licensor, xwikiMeta, l10n) {61 +require(['jquery', 'licensor', 'xwiki-meta', 'xwiki-events-bridge', 'bootstrap'], function ($, licensor, xwikiMeta) { 69 69 // 70 70 // Owner Details Form 71 71 // ... ... @@ -131,7 +131,7 @@ 131 131 // Remove "Extend Trial" buttons from livetable, if the trial licenses limits were reached. 132 132 var updateLivetableButtons = function() { 133 133 var instanceId = $('#instanceId').val(); 134 - $('.licenseActions . licenseButton-extendTrial').each(function() {127 + $('.licenseActions .btn-primary').each(function() { 135 135 // Compute the key to check in the localStorage. 136 136 var buttonData = JSON.parse($(this).attr('data-button')); 137 137 var featureId = buttonData.featureId; ... ... @@ -146,13 +146,13 @@ 146 146 147 147 // An extensionId could have multiple rows in the livetable if is installed on multiple subwikis, but the allowlist 148 148 // is applied to all namespaces. 149 - var updateExtensionOfOtherWikis = function(extensionId, is AutoUpgrade) {142 + var updateExtensionOfOtherWikis = function(extensionId, isChecked) { 150 150 var similarExtensions = $("input[name='extensionId'][value='" + extensionId + "']"); 151 151 similarExtensions.each(function() { 152 - var autoUpgradeButton= $(this).siblings('.licenseButton-autoUpgrade');153 - autoUpgradeButton.find('.action-icon').toggleClass('isAutoUpgrade',isAutoUpgrade);154 - vartranslationKey= isAutoUpgrade ? 'prevent': 'allow';155 - autoUpgradeButton.prop('title', l10n.get(translationKey));145 + var checkbox = $(this).siblings("input[type='checkbox']"); 146 + if (checkbox.prop('checked') != isChecked) { 147 + checkbox.prop('checked', isChecked); 148 + } 156 156 }); 157 157 }; 158 158 ... ... @@ -159,7 +159,7 @@ 159 159 // xwiki:livetable:displayComplete might be triggered before the code from this jsx is executed. In this case, the 160 160 // livetable is also loaded before, because it is using Prototype.js which is loading before the page loads. 161 161 // Make sure that the livetable is loaded by checking for a row with some data. 162 - if ($('#licenseManager-display td.type'). length> 0) {155 + if ($('#licenseManager-display td.type').size() > 0) { 163 163 updateLivetableButtons(); 164 164 } 165 165 $(document).on('xwiki:livetable:displayComplete', updateLivetableButtons); ... ... @@ -208,10 +208,18 @@ 208 208 }); 209 209 }; 210 210 211 - // Trigger Get Trial / Extend trial or Buy license actions. 212 - var triggerLicenseAction = function(buttonData) { 204 + // Manages the license buttons from the licenses livetable. If a trial is requested, it is automatically generated 205 + // and installed, else the user is redirected to a page to buy a license. 206 + $('#licenseManager').on('click', '.licenseButton', function() { 213 213 var ownerDetailsForm = $('#ownerDetails'); 214 - let ownerDetails = ownerDetailsForm.serializeArray(); 208 + if (!validateOwnerDetails(ownerDetailsForm)) { 209 + return; 210 + } 211 + // Update the owner details. 212 + var ownerDetails = ownerDetailsForm.serializeArray(); 213 + licensor.updateOwnerDetails(ownerDetails); 214 + // Get the data from the license button. 215 + var buttonData = JSON.parse($(this).attr('data-button')); 215 215 if (buttonData.licenseType === 'TRIAL') { 216 216 ownerDetails.push.apply(ownerDetails, $.map(buttonData, function(value, name) { 217 217 return {name: name, value: value}; ... ... @@ -224,35 +224,6 @@ 224 224 ownerDetailsForm.append(extraFields).submit(); 225 225 extraFields.remove(); 226 226 }; 227 - }; 228 - 229 - // Manages the license buttons from the licenses livetable. If a trial is requested, it is automatically generated 230 - // and installed, else the user is redirected to a page to buy a license. 231 - $('#licenseManager').on('click', '.licenseButton', function(e) { 232 - e.preventDefault(); 233 - var ownerDetailsForm = $('#ownerDetails'); 234 - if (!validateOwnerDetails(ownerDetailsForm)) { 235 - return; 236 - } 237 - // Update the owner details. 238 - var ownerDetails = ownerDetailsForm.serializeArray(); 239 - licensor.updateOwnerDetails(ownerDetails); 240 - // Get data from the license button. 241 - var buttonData = JSON.parse($(this).attr('data-button')); 242 - // If this extension was installed as dependency, ask for a confirmation before continuing this action, since it 243 - // would be better for the user to get a license for the top level licensed extension. 244 - const requiredByInfo = $($($(this).parents('td.actions')[0]).siblings('td.name')[0]).find('.required-by-info'); 245 - if (requiredByInfo.size() > 0) { 246 - const parentExtensionNode = $('#installed-as-dependency').find('.parent-extensions'); 247 - parentExtensionNode.empty(); 248 - requiredByInfo.data('parent-extensions').split(',').forEach((extension) => { 249 - parentExtensionNode.append("<li>"+ extension.trim() + "</li>"); 250 - }); 251 - $('#installed-as-dependency').data('buttonData', buttonData); 252 - $('#installed-as-dependency').modal('show'); 253 - } else { 254 - triggerLicenseAction(buttonData); 255 - } 256 256 }); 257 257 258 258 // Show a popover on the "Check for Updates" button to let the user know what to do after he pays for the license. ... ... @@ -273,7 +273,7 @@ 273 273 updateLicensesButton.focus().popover('show'); 274 274 }); 275 275 276 - $('#updateLicenses'). on('click',function() {248 + $('#updateLicenses').click(function() { 277 277 var updateButton = $(this); 278 278 updateButton.prop('disabled', true); 279 279 // Show a notification message. ... ... @@ -286,18 +286,13 @@ 286 286 }); 287 287 }); 288 288 289 - $(document).on('click', '.licenseButton-autoUpgrade', function(e) { 290 - e.preventDefault(); 291 - var autoUpgradeButton = $(this); 292 - var autoUpgradeForm = autoUpgradeButton.closest('form').serializeArray(); 261 + $(document).on('click', 'input[name=autoUpgrade]', function() { 262 + var autoUpgradeForm = $(this).parent('form').serializeArray(); 293 293 licensor.modifyAutoUpgradesAllowList(autoUpgradeForm).success(function(data) { 294 - autoUpgradeButton.find('.action-icon').toggleClass('isAutoUpgrade', data.isAutoUpgrade); 295 295 if(data.isAutoUpgrade) { 296 - autoUpgradeButton.prop('title', l10n.get('prevent')); 297 297 new XWiki.widgets.Notification( 298 298 $jsontool.serialize($services.localization.render('licensor.moreActions.autoUpgrade.added')), 'done'); 299 299 } else { 300 - autoUpgradeButton.prop('title', l10n.get('allow')); 301 301 new XWiki.widgets.Notification( 302 302 $jsontool.serialize($services.localization.render('licensor.moreActions.autoUpgrade.removed')), 'done'); 303 303 } ... ... @@ -305,51 +305,8 @@ 305 305 }); 306 306 }); 307 307 308 - $(document).on('click', '.licenseButton-feedback', function(e) { 309 - // Get the data needed in the form. 310 - const buttonData = JSON.parse($(this).attr('data-button')); 311 - const ownerDetails = {}; 312 - $('#ownerDetails').serializeArray().map(x => ownerDetails[x.name] = x.value); 313 - if (typeof MauticSDK !== 'undefined') { 314 - // Make sure no messages or errors remained from the previous submit. 315 - const formName = $('#feedbackFormModal').find('.webmecanikForm form').attr('data-mautic-form'); 316 - MauticSDK.getValidator(formName).clearErrors(); 317 - MauticSDK.getValidator(formName).setMessage('', 'message'); 318 - // Prefill values. 319 - const fieldPrefix = '#mauticform_input_' + formName + '_'; 320 - $(fieldPrefix + 'email').val(ownerDetails['email']); 321 - const instanceId = $(fieldPrefix + 'instance_id'); 322 - instanceId.val(ownerDetails['instanceId']); 323 - const featureId = $(fieldPrefix + 'name_of_the_app'); 324 - featureId.val(buttonData['featureId']); 325 - 326 - // Show the feedback form modal. 327 - $('#feedbackFormModal').modal('show'); 328 - } else { 329 - const params = $.param({ 330 - 'email': ownerDetails['email'], 331 - 'instanceId': ownerDetails['instanceId'], 332 - 'featureId': buttonData['featureId'] 333 - }); 334 - 335 - const feedbackURL = buttonData['storeFeedbackURL'] + '?' + params; 336 - window.open(feedbackURL, '_blank').focus(); 337 - } 338 - }); 339 - 340 - // Continue license action after user confirmation. 341 - $(document).on('click', '#installed-as-dependency .btn-primary', function(e) { 342 - e.preventDefault(); 343 - triggerLicenseAction($('#installed-as-dependency').data('buttonData')); 344 - }); 345 - 346 - $(document).on('hide.bs.modal', '#installed-as-dependency', function() { 347 - $('#installed-as-dependency').removeData('buttonData'); 348 - $('#installed-as-dependency').find('.parent-extensions').empty(); 349 - }); 350 - 351 351 // Set the documentation links to open in new tab. 352 352 $('#licenseManager-display td.name a').each(function() { 353 - $(this).attr('target', '_blank') ;277 + $(this).attr('target', '_blank') 354 354 }); 355 355 });
- XWiki.StyleSheetExtension[0]
-
- Code
-
... ... @@ -6,31 +6,17 @@ 6 6 margin-top: .7em; 7 7 } 8 8 9 +/* Duplicate some rules from style.css for input[type='email']. 10 + Should be removed when https://jira.xwiki.org/browse/XWIKI-13803 is implemented.*/ 11 +.xform input[type="email"] { 12 + width: 100%; 13 + padding: 6px 12px; 14 + border: 1px solid #ccc; 15 + border-radius: 4px; 16 +} 17 + 9 9 /* .dropleft to be used after moving to Bootstrap 4 */ 10 10 .dropdown-left { 11 11 right: 0; 12 12 left: auto; 13 13 } 14 - 15 -#licenseManager-display .required-by-info:hover { 16 - color: @gray; 17 -} 18 - 19 -.required-by-hint { 20 - padding-top: 2%; 21 -} 22 - 23 -#installed-as-dependency .parent-extensions li { 24 - padding-top: 1%; 25 - font-weight: bold; 26 -} 27 - 28 -.licenseButton-paid .action-icon, .licenseButton-extendPaid .action-icon, .isAutoUpgrade { 29 - color: @brand-success; 30 -} 31 -.licenseButton-trial .action-icon, .licenseButton-extendTrial .action-icon { 32 - color: @link-color; 33 -} 34 -.webmecanikForm input[type=text], .webmecanikForm input[type=email] { 35 - width: 100%; 36 -} - Content Type
-
... ... @@ -1,1 +1,1 @@ 1 - LESS1 +CSS - Inhalt parsen
-
... ... @@ -1,1 +1,1 @@ 1 - Ja1 +Nein