templates/organization/packages.html.twig
{% extends "base.html.twig" %}
{% block header_btn %}
{% if is_granted('ROLE_ORGANIZATION_OWNER', organization) %}
<a href="{{ url('organization_package_new', {"organization":organization.alias}) }}" class="btn btn-success">
{% include 'svg/plus-square.svg' %} Add package
</a>
{% endif %}
{% endblock %}
{% block header %} {{ organization.name }} packages:{% endblock %}
{% block content %}
<div class="markdown">
<table class="table">
<thead>
<tr>
<td colspan="7">
<form action="{{ path('organization_packages', {organization: organization.alias}) }}" method="get" class="form-inline">
<label for="package-search" class="mr-2">Search:</label>
<input type="search" id="package-search" name="search" value="{{ filter.searchTerm }}" class="form-control" />
<label class="ml-auto text-right">
Show
<input type="number" name="limit" value="{{ filter.limit }}" class="form-control w-25 mx-2" min="1" />
entries
</label>
<button class="btn btn-outline-primary btn-sm">Filter</button>
</form>
</td>
</tr>
<tr>
<th>Name {% include 'component/sort.html.twig' with {column: 'name'} %}</th>
<th>Latest version {% include 'component/sort.html.twig' with {column: 'version'} %}</th>
<th>Released {% include 'component/sort.html.twig' with {column: 'date'} %}</th>
<th>Description</th>
{% if is_granted('ROLE_ORGANIZATION_MEMBER', organization) %}
<th>Webhook</th>
<th>Security</th>
<th></th>
{% endif %}
</tr>
</thead>
<tbody>
{% for package in packages %}
<tr>
<td>
{% if package.name %}
<strong>
<a href="{{ path('organization_package_details', {organization: organization.alias, package: package.id}) }}">
{{ package.name }}
</a>
</strong><br />
<small class="font-italic" style="font-size: 0.7em"><a href="{{ package.url }}" target="_blank" rel="nofollow noopener noreferrer">
{{ package.url }}
</a></small><br />
<small class="font-italic" style="font-size: 0.7em" data-toggle="tooltip" title="{{ package.lastSyncAt|date_time }} ({{ gmt_offset() }})">synced: {{ package.lastSyncAt|date_time|time_diff }}</small>
{% elseif package.lastSyncError is null %}
Synchronizing from <a href="{{ package.url }}" target="_blank" rel="nofollow noopener noreferrer">
{{ package.url }}
</a>
<div class="progress progress-sm">
<div class="progress-bar progress-bar-indeterminate"></div>
</div>
{% endif %}
</td>
<td>{{ package.latestReleasedVersion }}</td>
<td>
{% if package.latestReleaseDate %}
<span data-toggle="tooltip" title="{{ package.latestReleaseDate|date_time_utc }} ({{ gmt_offset() }})">{{ package.latestReleaseDate|date_time_utc|time_diff }}</span>
{% endif %}
</td>
<td>
{% if package.lastSyncError %}
<div class="badge bg-danger">Synchronization error</div>
<small class="font-italic" style="font-size: 0.7em" data-toggle="tooltip" title="{{ package.lastSyncAt|date_time }} ({{ gmt_offset() }})">{{ package.lastSyncAt|date_time|time_diff }}</small>
<div class="highlight p-3 font-monospace" style="font-size: 0.6em;">
{{ package.lastSyncError | nl2br }}
</div>
{% else %}
{{ package.description }}
{% endif %}
</td>
{% if is_granted('ROLE_ORGANIZATION_MEMBER', organization) %}
<td class="text-center">
{% if package.webhookCreatedAt is not empty %}
<span class="font-weight-bold" data-toggle="tooltip" title="{{ package.webhookCreatedAt | date_time }} ({{ gmt_offset() }})">
created
</span>
{% else %}
<small>N/A</small>
{% endif %}
</td>
<td class="text-center">
{% if package.isEnabledSecurityScan %}
{% if package.isSynchronizedSuccessfully %}
<a
href="{{ path('organization_package_scan_results', {organization: organization.alias, package: package.id}) }}"
data-content="{% apply escape %}{% include 'organization/package/scanResultContent.html.twig' with {'result': package.lastScanResultContent, 'simple': true} %}{% endapply %}"
data-data-toggle="tooltip" title="{{ package.scanResultDate|date_time|time_diff }}"
data-toggle="scan-result-popover"
>
{% if package.isScanResultOk %}
<span class="badge badge-success">{{ package.scanResultStatus }}</span>
{% elseif package.isScanResultPending or package.isScanResultNotAvailable %}
<span class="badge badge-warning">{{ package.scanResultStatus }}</span>
{% else %}
<span class="badge badge-danger">{{ package.scanResultStatus }}</span>
{% endif %}
</a>
{% endif %}
{% else %}
<span class="badge badge-info">Disabled</span>
{% endif %}
</td>
<td>
{% include 'component/packageActions.html.twig' %}
</td>
{% endif %}
</tr>
{% else %}
<tr>
<td colspan="7" class="text-center">No packages found</td>
</tr>
{% endfor %}
</tbody>
</table>
{% include 'component/pagination.html.twig' with {'path_name': 'organization_packages', 'path_params': {'organization': organization.alias}} %}
</div>
{% endblock %}
{% block javascripts %}
<script>
(function() {
$('[data-toggle="scan-result-popover"]').popover({
trigger: 'hover',
placement: 'left',
html: true
});
})();
</script>
{% endblock %}