repman-io/repman

View on GitHub
templates/organization/packages.html.twig

Summary

Maintainability
Test Coverage
{% 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 %}