from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse from django.views import View from ...core.utils import format_plaintext_for_html from ..models import Rank from ..pages import users_list from ..permissions import allow_browse_users_list from ..viewmodels import ActivePosters, RankUsers class ListView(View): def get(self, request, *args, **kwargs): allow_browse_users_list(request.user_acl) context_data = self.get_context_data(request, *args, **kwargs) sections = users_list.get_sections(request) context_data["pages"] = sections request.frontend_context["USERS_LISTS"] = [] for page in sections: page["reversed_link"] = reverse(page["link"]) request.frontend_context["USERS_LISTS"].append( {"name": str(page["name"]), "component": page["component"]} ) active_rank = context_data.get("rank") for rank in Rank.objects.filter(is_tab=True).order_by("order"): context_data["pages"].append( { "name": rank.name, "reversed_link": reverse( "misago:users-rank", kwargs={"slug": rank.slug} ), "is_active": active_rank.pk == rank.pk if active_rank else None, } ) if rank.description: description = { "plain": rank.description, "html": format_plaintext_for_html(rank.description), } else: description = None request.frontend_context["USERS_LISTS"].append( { "id": rank.pk, "name": rank.name, "slug": rank.slug, "css_class": rank.css_class, "description": description, "component": "rank", } ) active_section = list(filter(lambda x: x["is_active"], sections))[0] context_data["active_section"] = active_section return render(request, self.template_name, context_data) def get_context_data(self, request, *args, **kwargs): return {} def landing(request): allow_browse_users_list(request.user_acl) return redirect(users_list.get_default_link()) class ActivePostersView(ListView): template_name = "misago/userslists/active_posters.html" def get_context_data(self, request, *args, **kwargs): model = ActivePosters(request) request.frontend_context["USERS"] = model.get_frontend_context() return model.get_template_context() class RankUsersView(ListView): template_name = "misago/userslists/rank.html" def get_context_data(self, request, slug, page=0): rank = get_object_or_404(Rank.objects.filter(is_tab=True), slug=slug) users = RankUsers(request, rank, page) request.frontend_context["USERS"] = users.get_frontend_context() context = {"rank": rank} context.update(users.get_template_context()) return context