diff --git a/app/blueprints/packages/__init__.py b/app/blueprints/packages/__init__.py index 9b709c5..80b5280 100644 --- a/app/blueprints/packages/__init__.py +++ b/app/blueprints/packages/__init__.py @@ -46,6 +46,16 @@ def get_package_tabs(user: User, package: Package): "title": "Maintainers", "url": package.getEditMaintainersURL() }, + { + "id": "audit", + "title": "Audit Log", + "url": package.getURL("packages.audit") + }, + { + "id": "share", + "title": "Share and Badges", + "url": package.getURL("packages.share") + }, { "id": "remove", "title": "Remove", diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py index 04f0ca3..3e24c6c 100644 --- a/app/blueprints/packages/packages.py +++ b/app/blueprints/packages/packages.py @@ -518,7 +518,8 @@ def audit(package): query = package.audit_log_entries.order_by(db.desc(AuditLogEntry.created_at)) pagination = query.paginate(page, num, True) - return render_template("admin/audit.html", log=pagination.items, pagination=pagination) + return render_template("packages/audit.html", log=pagination.items, pagination=pagination, + package=package, tabs=get_package_tabs(current_user, package), current_tab="audit") class PackageAliasForm(FlaskForm): @@ -558,3 +559,11 @@ def alias_create_edit(package: Package, alias_id: int = None): return redirect(package.getAliasListURL()) return render_template("packages/alias_create_edit.html", package=package, form=form) + + +@bp.route("/packages///share/") +@login_required +@is_package_page +def share(package): + return render_template("packages/share.html", package=package, + tabs=get_package_tabs(current_user, package), current_tab="share") diff --git a/app/models/packages.py b/app/models/packages.py index ffa2ec1..7bdec7f 100644 --- a/app/models/packages.py +++ b/app/models/packages.py @@ -460,6 +460,9 @@ class Package(db.Model): else: return screenshot.url + def getURL(self, endpoint): + return url_for(endpoint, author=self.author.username, name=self.name) + def getDetailsURL(self, absolute=False): if absolute: from app.utils import abs_url_for @@ -535,8 +538,8 @@ class Package(db.Model): return url_for("packages.remove_self_maintainers", author=self.author.username, name=self.name) - def getReviewURL(self): - return url_for('packages.review', + def getReviewURL(self, external=False): + return url_for('packages.review', _external=external, author=self.author.username, name=self.name) def getAuditLogURL(self): diff --git a/app/templates/macros/releases.html b/app/templates/macros/releases.html index 97a9c21..64d44a3 100644 --- a/app/templates/macros/releases.html +++ b/app/templates/macros/releases.html @@ -1,14 +1,66 @@ +{% macro render_releases_edit(releases, package) %} + {% for rel in releases %} + + {{ rel.title }} + + {% if rel.min_rel and rel.max_rel %} + [MT {{ rel.min_rel.name }}-{{ rel.max_rel.name }}] + {% elif rel.min_rel %} + [MT {{ rel.min_rel.name }}+] + {% elif rel.max_rel %} + [MT ≤{{ rel.max_rel.name }}] + {% endif %} + +
+ + {% if rel.commit_hash %} + [{{ rel.commit_hash | truncate(5, end='') }}] + {% endif %} + + created {{ rel.releaseDate | date }}. + +
+ {% endfor %} +{% endmacro %} + + +{% macro render_releases_download(releases, package) %} + {% for rel in releases %} + {% if rel.approved or package.checkPerm(current_user, "MAKE_RELEASE") or rel.checkPerm(current_user, "APPROVE_RELEASE") %} + + {{ rel.title }} + + {% if rel.min_rel and rel.max_rel %} + [MT {{ rel.min_rel.name }}-{{ rel.max_rel.name }}] + {% elif rel.min_rel %} + [MT {{ rel.min_rel.name }}+] + {% elif rel.max_rel %} + [MT ≤{{ rel.max_rel.name }}] + {% endif %} + +
+ + {% if rel.commit_hash %} + [{{ rel.commit_hash | truncate(5, end='') }}] + {% endif %} + + created {{ rel.releaseDate | date }}. + +
+ {% endif %} + {% endfor %} +{% endmacro %} + + {% macro render_releases(releases, package, current_user) -%} {% for rel in releases %} {% if rel.approved or package.checkPerm(current_user, "MAKE_RELEASE") or rel.checkPerm(current_user, "APPROVE_RELEASE") %} -
  • - {% if package.checkPerm(current_user, "MAKE_RELEASE") or rel.checkPerm(current_user, "APPROVE_RELEASE") %} - Edit - {% if not rel.task_id and not rel.approved and rel.checkPerm(current_user, "APPROVE_RELEASE") %} - / Approve - {% endif %} - +
    + Edit + {% if not rel.task_id and not rel.approved and rel.checkPerm(current_user, "APPROVE_RELEASE") %} + / Approve {% endif %} + {% if not rel.approved %}{% endif %} @@ -16,7 +68,7 @@ {{ rel.title }} - + {% if rel.min_rel and rel.max_rel %} [MT {{ rel.min_rel.name }}-{{ rel.max_rel.name }}] {% elif rel.min_rel %} @@ -42,10 +94,9 @@ {% endif %} {% if not rel.approved %}{% endif %} - -
  • + {% endif %} {% else %} -
  • No releases available.
  • +
    No releases available.
    {% endfor %} {% endmacro %} diff --git a/app/templates/packages/audit.html b/app/templates/packages/audit.html new file mode 100644 index 0000000..97a28eb --- /dev/null +++ b/app/templates/packages/audit.html @@ -0,0 +1,16 @@ +{% extends "packages/package_base.html" %} + +{% block title %} +Audit Log +{% endblock %} + +{% block content %} +

    Audit Log

    + + {% from "macros/pagination.html" import render_pagination %} + {% from "macros/audit_log.html" import render_audit_log %} + + {{ render_pagination(pagination, url_set_query) }} + {{ render_audit_log(log, current_user) }} + {{ render_pagination(pagination, url_set_query) }} +{% endblock %} diff --git a/app/templates/packages/release_edit.html b/app/templates/packages/release_edit.html index 031e9c2..3977e07 100644 --- a/app/templates/packages/release_edit.html +++ b/app/templates/packages/release_edit.html @@ -5,6 +5,8 @@ {% endblock %} {% block content %} +

    {{ self.title() }}

    + {% from "macros/forms.html" import render_field, render_submit_field, render_checkbox_field %}
    {{ form.hidden_tag() }} diff --git a/app/templates/packages/releases_list.html b/app/templates/packages/releases_list.html index 3398a7c..88b4569 100644 --- a/app/templates/packages/releases_list.html +++ b/app/templates/packages/releases_list.html @@ -5,34 +5,40 @@ {% endblock %} {% block content %} -

    - {% if package.update_config %} - - - {{ _("Update settings") }} - - {% elif package.repo %} - - - {{ _("Set up automatic releases") }} - - {% endif %} + {% if package.checkPerm(current_user, "MAKE_RELEASE") %} +

    + {% if package.update_config %} + + + {{ _("Update settings") }} + + {% elif package.repo %} + + + {{ _("Set up automatic releases") }} + + {% endif %} - - - Bulk update - + + + Bulk update + - - - Create - -

    + + + Create + +

    + {% endif %}

    {{ _("Releases") }}

    -
      - {% from "macros/releases.html" import render_releases %} - {{ render_releases(package.releases, package, current_user) }} -
    +
    + {% from "macros/releases.html" import render_releases_edit, render_releases_download %} + {% if package.checkPerm(current_user, "MAKE_RELEASE") %} + {{ render_releases_edit(package.releases, package) }} + {% else %} + {{ render_releases_download(package.releases, package) }} + {% endif %} +
    {% endblock %} diff --git a/app/templates/packages/share.html b/app/templates/packages/share.html new file mode 100644 index 0000000..beb11ea --- /dev/null +++ b/app/templates/packages/share.html @@ -0,0 +1,35 @@ +{% extends "packages/package_base.html" %} + +{% block title %} +Share and Badges +{% endblock %} + +{% block content %} +

    {{ self.title() }}

    + +

    Links

    + +

    + Review link: +

    + +
    {{ package.getReviewURL(external=True) }}
    + +

    Badges

    + +

    + {{ package.makeShield("title") | markdown }} +

    + +

    +

    {{ package.makeShield("title") }}
    +

    + +

    + {{ package.makeShield("downloads") | markdown }} +

    + +

    +

    {{ package.makeShield("downloads") }}
    +

    +{% endblock %} diff --git a/app/templates/packages/view.html b/app/templates/packages/view.html index fc09dfe..88aa62b 100644 --- a/app/templates/packages/view.html +++ b/app/templates/packages/view.html @@ -286,26 +286,6 @@ {% endfor %} {% endif %} - - {% if package.checkPerm(current_user, "EDIT_PACKAGE") %} -

    Badges

    - -

    - {{ package.makeShield("title") | markdown }} -

    - -

    -

    {{ package.makeShield("title") }}
    -

    - -

    - {{ package.makeShield("downloads") | markdown }} -

    - -

    -

    {{ package.makeShield("downloads") }}
    -

    - {% endif %}