91 lines
5.0 KiB
HTML
Executable File
91 lines
5.0 KiB
HTML
Executable File
{% extends 'base.html' %}
|
|
{% block content %}
|
|
<div class="toolbar">
|
|
<div>
|
|
<h1>{{ t('software_packages.title') }}</h1>
|
|
<p class="muted">{{ t('software_packages.subtitle') }}</p>
|
|
</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">
|
|
<thead>
|
|
<tr>
|
|
<th>{{ t('software.package') }}</th>
|
|
<th>{{ t('setup_analyzer.version') }}</th>
|
|
<th>{{ t('setup_analyzer.manufacturer') }}</th>
|
|
<th>{{ t('setup_analyzer.architecture') }}</th>
|
|
<th>{{ t('software_packages.installer_type') }}</th>
|
|
<th>{{ t('software_packages.storage') }}</th>
|
|
<th>{{ t('software_packages.status') }}</th>
|
|
<th>{{ t('jobs.actions') }}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for row in package_rows %}
|
|
{% set package = row.package %}
|
|
{% set manifest = row.manifest %}
|
|
<tr>
|
|
<td><a href="/software/packages/{{ package.id }}"><strong>{{ package.name }}</strong></a></td>
|
|
<td>{{ manifest.version or '—' }}</td>
|
|
<td>{{ manifest.vendor or '—' }}</td>
|
|
<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" 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>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
{% endblock %}
|