4e6edeef85
Universal: Auto Version Bump / Version Bump (push) Successful in 9s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 29s
Platform: moko-platform CI / Gate 1: Code Quality (push) Failing after 47s
Platform: moko-platform CI / Gate 2: Unit Tests (8.1) (push) Has been cancelled
Platform: moko-platform CI / Gate 2: Unit Tests (8.2) (push) Has been cancelled
Platform: moko-platform CI / Gate 2: Unit Tests (8.3) (push) Has been cancelled
Platform: moko-platform CI / Gate 3: Self-Health Check (push) Has been cancelled
Platform: moko-platform CI / Gate 4: Governance (push) Has been cancelled
Platform: moko-platform CI / Gate 5: Template Integrity (push) Has been cancelled
Platform: moko-platform CI / CI Summary (push) Has been cancelled
Replaces 3 separate inline PIN implementations (dashboard, cpanel module, cache module) with shared helper methods. Adds click-to-copy on all PIN badges.
101 lines
3.7 KiB
PHP
101 lines
3.7 KiB
PHP
<?php
|
|
/**
|
|
* MokoSuiteClient Cache & Temp Cleaner — status bar split button
|
|
*
|
|
* 4 buttons: Frontend link | Support PIN | Clear Cache | Clear Temp
|
|
*/
|
|
|
|
defined('_JEXEC') or die;
|
|
|
|
use Joomla\CMS\Session\Session;
|
|
|
|
$token = Session::getFormToken();
|
|
$cacheUrl = 'index.php?option=com_mokosuiteclient&task=display.clearCache&format=json';
|
|
$tempUrl = 'index.php?option=com_mokosuiteclient&task=display.clearTemp&format=json';
|
|
$pinAvailable = $supportPinAvailable ?? false;
|
|
$pin = $supportPin ?? '';
|
|
$frontendUrl = $frontendUrl ?? '';
|
|
?>
|
|
|
|
<div class="header-item">
|
|
<div class="header-item-content d-flex align-items-center gap-0" style="padding:0;">
|
|
<?php if ($frontendUrl): ?>
|
|
<a href="<?php echo htmlspecialchars($frontendUrl); ?>" target="_blank" rel="noopener" class="btn btn-sm btn-outline-success rounded-0 rounded-start border-end-0 d-flex align-items-center gap-1 px-3 py-2" title="Open frontend" style="font-size:0.8rem;">
|
|
<span class="icon-external-link-alt" aria-hidden="true"></span> Site
|
|
</a>
|
|
<?php endif; ?>
|
|
<?php if ($pinAvailable):
|
|
$pinHtml = \Moko\Component\MokoSuiteClient\Administrator\Helper\SupportPinHelper::renderBadge(
|
|
['available' => true, 'pin' => $pin],
|
|
$token, 'cache'
|
|
);
|
|
if (!$frontendUrl) {
|
|
$pinHtml = str_replace('rounded-0 border-end-0', 'rounded-0 rounded-start border-end-0', $pinHtml);
|
|
}
|
|
echo $pinHtml;
|
|
endif; ?>
|
|
<a href="#" class="btn btn-sm btn-outline-primary <?php echo ($pinAvailable || $frontendUrl) ? 'rounded-0 border-end-0' : 'rounded-0 rounded-start border-end-0'; ?> d-flex align-items-center gap-1 px-3 py-2" id="mokosuiteclient-clear-cache" title="Clear all Joomla cache" style="font-size:0.8rem;">
|
|
<span class="icon-bolt" aria-hidden="true" id="mokosuiteclient-cache-icon"></span> Cache
|
|
</a>
|
|
<a href="#" class="btn btn-sm btn-outline-danger rounded-0 rounded-end d-flex align-items-center gap-1 px-3 py-2" id="mokosuiteclient-clear-temp" title="Clear temp directory" style="font-size:0.8rem;">
|
|
<span class="icon-trash" aria-hidden="true" id="mokosuiteclient-temp-icon"></span> Temp
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
function setupCleaner(btnId, iconId, url, token) {
|
|
var btn = document.getElementById(btnId);
|
|
var icon = document.getElementById(iconId);
|
|
if (!btn || !icon) return;
|
|
var origClass = icon.className;
|
|
|
|
btn.addEventListener('click', function(e) {
|
|
e.preventDefault();
|
|
if (btn.dataset.busy) return;
|
|
btn.dataset.busy = '1';
|
|
icon.className = 'icon-spinner icon-spin';
|
|
|
|
var formData = new FormData();
|
|
formData.append(token, '1');
|
|
|
|
fetch(url, {
|
|
method: 'POST',
|
|
headers: {'X-Requested-With': 'XMLHttpRequest'},
|
|
body: formData
|
|
})
|
|
.then(function(r) { return r.json(); })
|
|
.then(function(data) {
|
|
if (data.success) {
|
|
icon.className = 'icon-check';
|
|
icon.style.color = '#198754';
|
|
} else {
|
|
icon.className = 'icon-times';
|
|
icon.style.color = '#dc3545';
|
|
}
|
|
setTimeout(function() {
|
|
icon.className = origClass;
|
|
icon.style.color = '';
|
|
delete btn.dataset.busy;
|
|
}, 2000);
|
|
})
|
|
.catch(function() {
|
|
icon.className = 'icon-times';
|
|
icon.style.color = '#dc3545';
|
|
setTimeout(function() {
|
|
icon.className = origClass;
|
|
icon.style.color = '';
|
|
delete btn.dataset.busy;
|
|
}, 2000);
|
|
});
|
|
});
|
|
}
|
|
|
|
setupCleaner('mokosuiteclient-clear-cache', 'mokosuiteclient-cache-icon', '<?php echo $cacheUrl; ?>', '<?php echo $token; ?>');
|
|
setupCleaner('mokosuiteclient-clear-temp', 'mokosuiteclient-temp-icon', '<?php echo $tempUrl; ?>', '<?php echo $token; ?>');
|
|
|
|
});
|
|
</script>
|
|
<?php echo \Moko\Component\MokoSuiteClient\Administrator\Helper\SupportPinHelper::renderScript(); ?>
|