Voe Umbau mit Joomla-Cron

This commit is contained in:
Thomas Spohr
2026-02-01 12:46:12 +01:00
parent 31af9b27e7
commit 530ff9f3a0
22 changed files with 356 additions and 19 deletions

View File

@@ -6,6 +6,10 @@ use Joomla\CMS\Router\Route;
use Joomla\CMS\Language\Text;
$hasTree = !empty($this->treeHtml);
// ACL-Daten aus der View (für Vorbelegung im Formular)
$viewLevels = method_exists($this, 'getViewLevels') ? (array) $this->getViewLevels() : [];
$aclMap = method_exists($this, 'getFolderAccess') ? (array) $this->getFolderAccess() : [];
?>
<style>
/* Layout */
@@ -75,7 +79,7 @@ $hasTree = !empty($this->treeHtml);
</div>
</div>
<!-- Rechte Seite: Inline-Bearbeitungsformular -->
<!-- Rechte Seite: Inline-Bearbeitung + ACL -->
<div class="eis-edit">
<h4><?php echo Text::_('COM_EIS_EDIT_TITLE') ?: 'Anzeigename bearbeiten'; ?></h4>
@@ -105,11 +109,46 @@ $hasTree = !empty($this->treeHtml);
<?php echo HTMLHelper::_('form.token'); ?>
</form>
<!-- ===== ACL: Zugriff (Top-Level-Ordner) ===== -->
<hr style="margin:1rem 0">
<h4><?php echo Text::_('COM_EIS_ACCESS_TITLE') ?: 'Zugriff (Top-Level-Ordner)'; ?></h4>
<form action="<?php echo Route::_('index.php?option=com_eis&task=display.saveAccess'); ?>"
method="post" id="eis-access-form">
<div class="control-group">
<label for="eis-folder-viewlevel">
<?php echo Text::_('COM_EIS_FIELD_VIEWLEVEL') ?: 'Zugriffsebene'; ?>
</label>
<select name="viewlevel_id" id="eis-folder-viewlevel" class="form-control">
<option value="0">(Öffentlich)</option>
<?php foreach ($viewLevels as $vl): ?>
<option value="<?php echo (int)$vl['id']; ?>">
<?php echo htmlspecialchars($vl['title'], ENT_QUOTES, 'UTF-8'); ?>
</option>
<?php endforeach; ?>
</select>
<div class="form-help">
<?php echo Text::_('COM_EIS_ACCESS_HELP') ?: 'Nur für Ordner der ersten Ebene. Unterordner und Dateien erben die Einstellung.'; ?>
</div>
</div>
<input type="hidden" name="folder_id" id="eis-folder-id" value="">
<?php echo HTMLHelper::_('form.token'); ?>
<div class="mt-2">
<button type="submit" class="btn btn-secondary" id="eis-access-save" disabled>
<?php echo Text::_('JSAVE'); ?>
</button>
</div>
</form>
<!-- ===== /ACL ===== -->
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
(function(){
const tree = document.getElementById('eis-tree');
const form = document.getElementById('eis-rename-form');
const idFld = document.getElementById('eis-id');
@@ -119,10 +158,26 @@ $hasTree = !empty($this->treeHtml);
const btnSave = document.getElementById('eis-save');
const btnClr = document.getElementById('eis-clear-title');
if (!tree || !form) return;
// ACL-Form Elemente
const aclForm = document.getElementById('eis-access-form');
const aclFolderId = document.getElementById('eis-folder-id');
const aclSelect = document.getElementById('eis-folder-viewlevel');
const aclBtn = document.getElementById('eis-access-save');
// PHP-Map folder_id => viewlevel_id an JS übergeben
const ACL_MAP = <?php echo json_encode($aclMap, JSON_UNESCAPED_SLASHES); ?>;
if (!tree) return;
let lastSelected;
// Helper: prüfen, ob li.folder Top-Level ist
function isTopLevelFolder(li){
if (!li) return false;
const parentLi = li.parentElement ? li.parentElement.closest('li.folder') : null;
return !parentLi; // kein übergeordneter <li.folder>
}
// Toggle (Caret) & Auswahl
tree.addEventListener('click', (e) => {
const t = e.target;
@@ -151,22 +206,37 @@ $hasTree = !empty($this->treeHtml);
t.classList.add('is-selected');
lastSelected = t;
// Daten aus data-Attributen (TreeHelper muss sie setzen)
// Daten aus data-Attributen
const id = li.getAttribute('data-id') || '';
const title = li.getAttribute('data-title') || '';
const name = li.getAttribute('data-name') || '';
const size = li.getAttribute('data-size') || ''; // optional
idFld.value = id;
nameFld.value = name;
titleFld.value= title;
sizeOut.textContent = size || '';
// Buttons ermöglichen
btnSave.disabled = !id;
btnClr.disabled = !id;
// ACL-Form: nur bei Top-Level-Ordner aktivieren und vorbelegen
if (li.classList.contains('folder') && isTopLevelFolder(li)) {
aclFolderId.value = id || '';
aclBtn.disabled = !aclFolderId.value;
// vorwählen
const current = (id && ACL_MAP[id]) ? String(ACL_MAP[id]) : '0';
if (aclSelect) {
for (const opt of aclSelect.options) {
opt.selected = (opt.value === current);
}
}
} else {
// kein Top-Level -> ACL-Form deaktivieren
aclFolderId.value = '';
aclBtn.disabled = true;
}
// Fokus ins Titel-Feld
titleFld.focus();
}
@@ -187,7 +257,7 @@ $hasTree = !empty($this->treeHtml);
document.querySelectorAll('.pdf-tree ul').forEach(ul => ul.style.display = 'none');
document.querySelectorAll('.pdf-tree .toggle').forEach(t => t.textContent = '▶');
});
});
})();
</script>
<?php endif; ?>