software package profiles implemeted, job deletion optimized

This commit is contained in:
2026-09-26 13:07:23 +02:00
parent 87a5041162
commit 7d314057e4
54 changed files with 3492 additions and 342 deletions
+42 -2
View File
@@ -7,10 +7,35 @@
</div>
<div class="setup-analyzer-actions">
<a class="button" href="/software/setup-analyzer">{{ t('software_packages.new_from_analyzer') }}</a>
<a class="button button-secondary" href="/software/setup-analyzer/profiles">{{ t('setup_profiles.manage') }}</a>
<a class="button button-secondary" href="/software">{{ t('setup_analyzer.back_to_software') }}</a>
</div>
</div>
<section class="panel software-package-import-panel">
<h2>{{ t('software_packages.import_title') }}</h2>
<p class="muted">{{ t('software_packages.import_help') }}</p>
<form method="post" action="/software/packages/import" enctype="multipart/form-data" class="software-package-import-form">
<label for="software-package-import-file">{{ t('software_packages.import_file') }}</label>
<div class="localized-file-picker" data-file-picker>
<input class="localized-file-picker-input" id="software-package-import-file" type="file" name="package_file" accept=".ampkg,.zip" required data-file-picker-input>
<button class="button button-secondary localized-file-picker-button" type="button" data-file-picker-button aria-controls="software-package-import-file">{{ t('common.choose_file') }}</button>
<span class="localized-file-picker-name" data-file-picker-name data-empty-text="{{ t('common.no_file_selected') }}" aria-live="polite">{{ t('common.no_file_selected') }}</span>
</div>
<div class="software-package-import-options">
<label class="checkbox-label">
<input type="checkbox" name="confirm_scripts" value="1" required>
<span>{{ t('software_packages.import_script_warning') }}</span>
</label>
<label class="checkbox-label">
<input type="checkbox" name="import_profile" value="1">
<span>{{ t('software_packages.import_profile') }}</span>
</label>
</div>
<button class="button" type="submit">{{ t('software_packages.import_button') }}</button>
</form>
</section>
<section class="panel">
<div class="table-scroll management-table-scroll">
<table class="data-table" data-storage-key="software-packages">
@@ -37,8 +62,23 @@
<td>{{ manifest.architecture or '—' }}</td>
<td>{{ manifest.installer_type or '—' }}</td>
<td>{{ human_size(row.storage_size) }}</td>
<td>{% if row.storage_error %}<span class="job-status job-status-failed">{{ t('software_packages.storage_error') }}</span>{% elif package.enabled %}<span class="job-status job-status-success">{{ t('software_packages.enabled') }}</span>{% else %}<span class="job-status">{{ t('software_packages.disabled') }}</span>{% endif %}</td>
<td><a class="button button-secondary button-small" href="/software/packages/{{ package.id }}">{{ t('software.open') }}</a></td>
<td>{% if row.storage_error %}<span class="job-status job-status-failed" title="{{ row.storage_error }}">{{ t('software_packages.storage_error') }}</span>{% elif package.enabled %}<span class="job-status job-status-success">{{ t('software_packages.enabled') }}</span>{% else %}<span class="job-status">{{ t('software_packages.disabled') }}</span>{% endif %}</td>
<td>
{% if row.job_count %}
{% set delete_confirm_text = t('software_packages.delete_confirm_with_jobs', package=package.name, count=row.job_count) %}
{% else %}
{% set delete_confirm_text = t('software_packages.delete_confirm', package=package.name) %}
{% endif %}
<div class="software-package-row-actions">
<a class="button button-secondary button-small" href="/software/packages/{{ package.id }}">{{ t('software.open') }}</a>
{% if not row.storage_error %}<a class="button button-secondary button-small" href="/software/packages/{{ package.id }}/export">{{ t('software_packages.export_button') }}</a>{% endif %}
<form class="inline-form" method="post" action="/software/packages/{{ package.id }}/delete" onsubmit="return confirm({{ delete_confirm_text|tojson }});">
<input type="hidden" name="return_to" value="overview">
{% if row.job_count %}<input type="hidden" name="delete_jobs" value="1">{% endif %}
<button class="button button-danger button-small" type="submit">{{ t('software_packages.delete_button_short') }}</button>
</form>
</div>
</td>
</tr>
{% else %}
<tr><td colspan="8">{{ t('software_packages.none') }}</td></tr>