roundabout,
created on Monday, 29 July 2024, 09:16:19 (1722244579),
received on Wednesday, 31 July 2024, 06:54:52 (1722408892)
Author identity: vlad <vlad.muntoiu@gmail.com>
b29f7c6dfec57a459d953d0cdecb23fbbc67ab3f
app.py
@@ -927,9 +927,6 @@ def repository_forum(username, repository):
repository) is not None): flask.abort(403) if not os.path.exists(server_repo_location):return flask.render_template("errors/not-found.html"), 404repo = git.Repo(server_repo_location) repo_data = Repo.query.filter_by(route=f"/{username}/{repository}").first() user = User.query.filter_by(username=flask.session.get("username")).first()
@@ -951,6 +948,64 @@ def repository_forum(username, repository):
) @repositories.route("/<username>/<repository>/forum/search") def repository_forum_search(username, repository): server_repo_location = os.path.join(config.REPOS_PATH, username, repository) if not os.path.exists(server_repo_location): flask.abort(404) if not (get_visibility(username, repository) or get_permission_level( flask.session.get("username"), username, repository) is not None): flask.abort(403) repo_data = Repo.query.filter_by(route=f"/{username}/{repository}").first() user = User.query.filter_by(username=flask.session.get("username")).first() relationships = RepoAccess.query.filter_by(repo=repo_data) user_relationship = RepoAccess.query.filter_by(repo=repo_data, user=user).first() query = flask.request.args.get("q") page_number = flask.request.args.get("page", 1, type=int) if flask.session.get("username"): default_page_length = db.session.get(User, flask.session.get("username")).default_page_length else: default_page_length = 16 page_length = flask.request.args.get("per_page", default_page_length, type=int) results = Post.query.filter(Post.repo == repo_data).filter(Post.subject.ilike(f"%{query}%") | Post.message.ilike(f"%{query}%")).order_by(Post.last_updated.desc()).paginate(page=page_number, per_page=page_length) if results.has_next: next_page = results.next_num else: next_page = None if results.has_prev: prev_page = results.prev_num else: prev_page = None return flask.render_template( "repo-forum-search.html", username=username, repository=repository, repo_data=repo_data, relationships=relationships, user_relationship=user_relationship, query=query, results=results, Post=Post, remote=f"http{'s' if config.suggest_https else ''}://{config.BASE_DOMAIN}/git/{username}/{repository}", is_favourite=get_favourite(flask.session.get("username"), username, repository), default_branch=repo_data.default_branch, page_number=page_number, page_length=page_length, next_page=next_page, prev_page=prev_page, num_pages=results.pages ) @repositories.route("/<username>/<repository>/forum/topic/<int:id>") def repository_forum_topic(username, repository, id): server_repo_location = os.path.join(config.REPOS_PATH, username, repository)
templates/repository/repo-forum-search.html
@@ -0,0 +1,36 @@
{% extends "repo.html" %} {% set active_page = "forum" %} {% block title %} {% trans username=username, repository=repository %}Forum of {{ username }}/{{ repository }}{% endtrans %} {% endblock %} {% block content %} <x-vbox> <x-frame style="--width: 896px;" class="flexible-space"> <x-vbox> <form class="vbox"> <input type="text" name="q" placeholder="{% trans %}Search...{% endtrans %}" value="{{ query }}"> </form> {% for post in results %} <article class="card card-horizontal"> {% if post.state == 0 %} <div class="card-top state-label" style="background: var(--color-done); color: var(--color-done-text);"> {% trans %}done{% endtrans %} </div> {% elif post.state == 1 %} <div class="card-top state-label" style="background: var(--color-pending); color: var(--color-pending-text);"> {% trans %}active{% endtrans %} </div> {% endif %} <section class="card-main"> <a href="/{{ username }}/{{ repository }}/forum/{{ post.number }}"><h2>{{ post.subject }}</h2></a> <p class="post-details"><a href="/{{ post.owner.username }}" class="post-author">{{ post.owner.username }}</a> • {{ post.date | strftime("%A, %e %B %Y, %H:%M:%S") }}</p> <p>{{ post.html | safe }}</p> </section> </article> {% endfor %} </x-vbox> {% include "pagination.html" %} </x-frame> </x-vbox> {% endblock %}