From 3f9113c475746f155b3f1c32e3bb851461537edb Mon Sep 17 00:00:00 2001 From: aroberts-fox Date: Thu, 5 Dec 2024 13:34:24 -0500 Subject: [PATCH] Adding a not joined view for communities list --- app/main/routes.py | 59 +++++++++++++++++++++++++++++ app/templates/list_communities.html | 4 +- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/app/main/routes.py b/app/main/routes.py index 96b8616c..2356b3cf 100644 --- a/app/main/routes.py +++ b/app/main/routes.py @@ -329,6 +329,65 @@ def list_subscribed_communities(): menu_topics=menu_topics(), site=g.site) +@bp.route('/communities/notsubscribed', methods=['GET']) +def list_not_subscribed_communities(): + verification_warning() + search_param = request.args.get('search', '') + topic_id = int(request.args.get('topic_id', 0)) + language_id = int(request.args.get('language_id', 0)) + page = request.args.get('page', 1, type=int) + low_bandwidth = request.cookies.get('low_bandwidth', '0') == '1' + sort_by = request.args.get('sort_by', 'post_reply_count desc') + topics = Topic.query.order_by(Topic.name).all() + languages = Language.query.order_by(Language.name).all() + if current_user.is_authenticated: + # get all communities + all_communities = Community.query.filter_by(banned=False) + # get the user's joined communities + joined_communities = Community.query.filter_by(banned=False).join(CommunityMember).filter(CommunityMember.user_id == current_user.id) + # get the joined community ids list + joined_ids = [] + for jc in joined_communities: + joined_ids.append(jc.id) + # filter out the joined communities from all communities + communities = all_communities.filter(Community.id.not_in(joined_ids)) + + if search_param == '': + pass + else: + communities = communities.filter(or_(Community.title.ilike(f"%{search_param}%"), Community.ap_id.ilike(f"%{search_param}%"))) + + if topic_id != 0: + communities = communities.filter_by(topic_id=topic_id) + + if language_id != 0: + communities = communities.join(community_language).filter(community_language.c.language_id == language_id) + + banned_from = communities_banned_from(current_user.id) + if banned_from: + communities = communities.filter(Community.id.not_in(banned_from)) + + communities = communities.order_by(text('community.' + sort_by)) + + # Pagination + communities = communities.paginate(page=page, per_page=250 if current_user.is_authenticated and not low_bandwidth else 50, + error_out=False) + next_url = url_for('main.list_communities', page=communities.next_num, sort_by=sort_by, language_id=language_id) if communities.has_next else None + prev_url = url_for('main.list_communities', page=communities.prev_num, sort_by=sort_by, language_id=language_id) if communities.has_prev and page != 1 else None + + else: + communities = [] + next_url = None + prev_url = None + + return render_template('list_communities.html', communities=communities, search=search_param, title=_('Not Joined Communities'), + SUBSCRIPTION_PENDING=SUBSCRIPTION_PENDING, SUBSCRIPTION_MEMBER=SUBSCRIPTION_MEMBER, + SUBSCRIPTION_OWNER=SUBSCRIPTION_OWNER, SUBSCRIPTION_MODERATOR=SUBSCRIPTION_MODERATOR, + next_url=next_url, prev_url=prev_url, + topics=topics, languages=languages, topic_id=topic_id, language_id=language_id, sort_by=sort_by, + low_bandwidth=low_bandwidth, moderating_communities=moderating_communities(current_user.get_id()), + menu_topics=menu_topics(), site=g.site) + @bp.route('/modlog', methods=['GET']) def modlog(): page = request.args.get('page', 1, type=int) diff --git a/app/templates/list_communities.html b/app/templates/list_communities.html index 3a27fab6..6ae9f83a 100644 --- a/app/templates/list_communities.html +++ b/app/templates/list_communities.html @@ -19,7 +19,9 @@ {{ _('Joined') }} - + + {{ _('Not Joined') }} +