Files
server/opt/psa/admin/application/smb/views/scripts/service/index.phtml
2026-01-07 20:52:11 +01:00

296 lines
13 KiB
PHTML

<?php
// Copyright 1999-2025. WebPros International GmbH. All rights reserved.
?>
<form id="serviceRemovalForm" action="<?php echo $this->baseUrl('/service/delete' . $this->domainIdParam);?>" method="POST">
<input type="hidden" id="ids" name="ids[]" value="" />
<input type="hidden" id="service_removal_forgery_protection_token" name="forgery_protection_token" value="" />
</form>
<script type="text/javascript">
//<![CDATA[
Jsw.namespace('Smb.Views.Apps');
Smb.Views.Apps.startUpdate = function(packageId) {
Jsw.redirectPost(
'/app-update/update' +
'/resourceId/' + '<?php echo $this->service['resourceId'] . $this->domainIdParam ?>' +
(packageId ? '/packageId/' + packageId : '')
);
};
Smb.Views.Apps.removeService = function (resourceId, rootService) {
Jsw.messageBox.show({
type: Jsw.messageBox.TYPE_YESNO,
subtype: Jsw.messageBox.SUBTYPE_DELETE,
text: rootService
? <?php echo $this->jsLmsg('buttonUninstallApplicationConfirmationTitle')?>
: <?php echo $this->jsLmsg('buttonUninstallServiceConfirmationTitle')?>,
onYesClick: function () {
var form = document.getElementById('serviceRemovalForm');
form.querySelector('#service_removal_forgery_protection_token').value = document.getElementById('forgery_protection_token').content;
form.querySelector('#ids').value = resourceId;
form.submit();
},
});
};
Jsw.onReady(function() {
var getToolsPanel = function() {
var tools = [
<?php if ($this->service['rootService']): ?>
{
componentType: 'Jsw.SmallButton',
title: <?php echo $this->jsLmsg('buttonDetailedApplicationInfo') ?>,
addCls: 'sb-app-info',
href: '/service/info/resourceId/' + '<?php echo $this->service['resourceId']; ?>' + '<?php echo $this->domainIdParam?>'
},
<?php endif; ?>
{
componentType: 'Jsw.SmallButton',
title: <?php echo $this->jsLmsg('buttonChangeSettings') ?>,
addCls: 'sb-app-configure',
href: '/service/configure/resourceId/' + '<?php echo $this->service['resourceId']; ?>' + '<?php echo $this->domainIdParam?>'
},
{
componentType: 'Jsw.SmallButton',
title: <?php echo $this->jsLmsg('buttonUninstallApplication') ?>,
addCls: 'sb-app-delete',
handler: function(event) {
Smb.Views.Apps.removeService(
<?php echo $this->jsEscape($this->service['resourceId']); ?>,
<?php echo ($this->service['rootService'] ? 'true' : 'false') ?>
);
}
}
];
return tools;
};
var firstColumnItems = (function() {
var firstColumnItems = [];
<?php if ($this->generalInfo): ?>
var sectionGeneralFields = [];
<?php if (array_key_exists('installationUrl', $this->generalInfo)): ?>
sectionGeneralFields.push({
componentType: 'Jsw.form.DisplayField',
fieldLabel: <?php echo $this->jsLmsg('installedAt'); ?>,
value: <?php echo $this->jsEscape($this->generalInfo['installationUrl']); ?>
});
<?php endif; ?>
<?php if (array_key_exists('users', $this->generalInfo) && 0 < count($this->generalInfo['users'])): ?>
<?php if (1 === count($this->generalInfo['users'])): ?>
<?php $currentUser = current($this->generalInfo['users']); ?>
sectionGeneralFields.push({
componentType: 'Jsw.form.DisplayField',
fieldLabel: <?php echo $this->jsLmsg('userName'); ?>,
value: '<a href="' + Jsw.prepareUrl('/user/edit/id/' + <?php echo $this->jsEscape($currentUser->id); ?>)
+ '">'
+ <?php echo $this->jsEscape($currentUser->contactName); ?>
+ '</a>'
});
<?php else: ?>
sectionGeneralFields.push({
componentType: 'Jsw.form.DisplayField',
fieldLabel: <?php echo $this->jsLmsg('users'); ?>,
value: <?php echo $this->jsEscape(count($this->generalInfo['users'])); ?>
});
<?php endif; ?>
<?php endif; ?>
<?php if (array_key_exists('forceUpdates', $this->generalInfo)): ?>
sectionGeneralFields.push({
componentType: 'Jsw.form.DisplayField',
fieldLabel: <?php echo $this->jsLmsg('forceUpdates'); ?>,
value: '<img src="<?php echo $this->skinUrl('/icons/16/plesk/' . ($this->generalInfo['forceUpdates'] ? 'on.png' : 'subscription-status-suspended.png')) ?>"> '
+ <?php echo ($this->generalInfo['forceUpdates']) ? $this->jsLmsg('forceUpdatesOn') : $this->jsLmsg('forceUpdatesOff'); ?>
<?php if ($this->automaticUpdatesSettingChangeable): ?>
+ ' <a data-method="post" href="' + Jsw.prepareUrl('/service/updates'
+ <?php if ($this->generalInfo['forceUpdates']): ?> '/enable/0' <?php else: ?> '/enable/1' <?php endif; ?>
+ '/resourceId/' + <?php echo $this->jsEscape($this->service['resourceId']); ?>
+ <?php echo $this->jsEscape($this->domainIdParam); ?>)
+ '">' + <?php echo ($this->generalInfo['forceUpdates'])
? $this->jsLmsg('stopAutomaticUpdates') : $this->jsLmsg('allowAutomaticUpdates') ?>
+ '</a>'
<?php endif; ?>
});
<?php endif; ?>
firstColumnItems.push({
componentType: 'Jsw.Panel',
'title': <?php echo $this->jsLmsg('generalSectionTitle') ?>,
cls: 'form-box',
items: sectionGeneralFields
});
<?php endif; ?>
<?php if ($this->settingsInfo): ?>
var sectionSettingsFields = [];
<?php foreach ($this->settingsInfo as $setting): ?>
sectionSettingsFields.push({
componentType: 'Jsw.form.DisplayField',
fieldLabel: <?php echo $this->jsEscape($setting['label']); ?>,
value:
<?php if (is_array($setting['value'])): ?>
<?php
$value = '';
foreach ($setting['value'] as $val) {
if ('' !== $value) {
$value .= '<br>';
}
$value .= Plesk_Base_Utils_String::safeForJs($this->escape($val));
}
?>
'<?php echo $value; ?>'
<?php elseif ($setting['bool']): ?>
<?php echo $this->jsHtml($this->switchState('true' == $setting['value'])); ?>
<?php elseif (isset($setting['password']) && $setting['password']): ?>
'<span id="applicationAdminPasswordText__<?php echo $setting['id'] ?>" style="display:none;">' + <?php echo $this->jsEscape($setting['value']); ?> + '</span>'
+ ' <a href="#" id="applicationAdminPasswordToggle__<?php echo $setting['id'] ?>" class="toggler application-password-toggle">'
+ <?php echo $this->jsLmsg('showPassword') ?>
+ '</a>'
<?php else: ?>
<?php echo $this->jsEscape($setting['value']); ?>
<?php endif; ?>
});
<?php endforeach; ?>
firstColumnItems.push({
componentType: 'Jsw.Panel',
'title': <?php echo $this->jsLmsg('settingsSectionTitle') ?>,
cls: 'form-box',
items: sectionSettingsFields
});
<?php endif; ?>
return firstColumnItems;
}());
var secondColumnItems = (function() {
var secondColumnItems = [];
<?php if ($this->servicesInfo): ?>
var sectionServices = [];
<?php foreach ($this->servicesInfo as $service): ?>
<?php if ($service['singular']): ?>
sectionServices.push({
componentType: 'Jsw.Hint',
hint:
'<div class="form-row"><div class="field-name">' +
<?php echo $this->jsEscape($service['name']); ?> +
'</div><div class="field-value">' +
<?php echo $this->jsHtml($this->accessState(0 < $service['count'])); ?>
<?php if (0 < $service['count']): ?>
<?php if ($service['configurable']): ?>
+ ' <a href="' + Jsw.prepareUrl('/service/configure/resourceId/'
+ <?php echo $this->jsEscape($service['resourceId']); ?>)
+ '">[' + <?php echo $this->jsLmsg('serviceConfigure') ?> + ']</a>'
<?php endif; ?>
+ ' <a href="#" onClick="Smb.Views.Apps.removeService(\''
+ <?php echo $this->jsEscape($service['resourceId']); ?> + '\', false)">'
+ '[' + <?php echo $this->jsLmsg('serviceUninstall') ?> + ']</a>'
<?php else: ?>
+ ' <a href="' + Jsw.prepareUrl('/service/install/resourceId/'
+ <?php echo $this->jsEscape($this->service['resourceId']); ?> + '/metaId/'
+ <?php echo $this->jsEscape($service['metaId']); ?>)
+ '">[' + <?php echo $this->jsLmsg('serviceInstall') ?> + ']</a>'
<?php endif; ?>
+ '</div></div>'
});
<?php endif; ?>
<?php endforeach; ?>
if (sectionServices.length) {
secondColumnItems.push({
componentType: 'Jsw.Panel',
'title': <?php echo $this->jsLmsg('servicesSectionTitle') ?>,
cls: 'form-box',
items: sectionServices
});
}
<?php endif; ?>
<?php foreach ($this->entryPoints as $entryPoint): ?>
var sectionEntryPointUrls = [];
<?php foreach ($entryPoint['urls'] as $url): ?>
sectionEntryPointUrls.push({
componentType: 'Jsw.Hint',
hint: '<a href="' + Jsw.prepareUrl(<?php echo $this->jsEscape($url['href']); ?>) + '" target="_blank">'
+ <?php echo $this->jsEscape($url['description']); ?>
+ '</a>'
});
<?php endforeach; ?>
<?php if (0 == count($entryPoint['urls'])): ?>
sectionEntryPointUrls.push({
componentType: 'Jsw.Hint',
hint: <?php echo $this->jsLmsg('noEntryPointsHint'); ?>
});
<?php endif; ?>
secondColumnItems.push({
componentType: 'Jsw.Panel',
'title': <?php echo $this->jsEscape($entryPoint['label']) ?>,
cls: 'form-box',
items: sectionEntryPointUrls
});
<?php endforeach; ?>
return secondColumnItems;
}());
new Jsw.Container({
renderTo: 'main',
items: [
new Jsw.Hint({
hint: <?php echo $this->jsEscape($this->pageHint); ?>
}),
new Jsw.SmallTools({
operations: getToolsPanel()
}),
new Jsw.layout.TwoColumns({
items: [
new Jsw.Container({
items: firstColumnItems
}),
new Jsw.Container({
items: secondColumnItems
})
]
})
<?php foreach ($this->servicesInfo as $service):
if ($service['singular']) {
continue;
}
$getSubserviceInstancesList = $this->getSubserviceInstancesList;
echo ', ' . $this->partial('service/index/subservice.phtml', array(
'subserviceInstancesList' => $getSubserviceInstancesList($this->service['resourceId'], $service['metaId']),
'registryResourceId' => $this->service['resourceId'],
'apsMetaId' => $service['metaId'],
'serviceName' => $service['name'],
));
endforeach; ?>
]
});
document.querySelectorAll('.application-password-toggle').forEach(function (element) {
// use POST method for links with data-method="post"
element.addEventListener('click', function (event) {
event.stopPropagation();
event.preventDefault();
var elementId = event.target.id.split("__");
var txtElement = document.getElementById('applicationAdminPasswordText__' + elementId[1]);
if (txtElement.style.display !== 'none') {
txtElement.style.display = 'none';
event.target.innerHTML = <?php echo $this->jsLmsg('showPassword') ?>;
} else {
txtElement.style.display = ''
event.target.innerHTML = <?php echo $this->jsLmsg('hidePassword') ?>;
}
});
});
});
//]]>
</script>