diff options
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r-- | ishtar_common/views.py | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index f5a58afad..ac4e995d1 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -24,6 +24,7 @@ from jinja2 import TemplateSyntaxError import json import logging import os +import re import unicodedata import urllib.parse @@ -1115,11 +1116,11 @@ organization_merge = merge_action( ) -class IshtarMixin(object): +class IshtarMixin: page_name = "" def get_context_data(self, **kwargs): - context = super(IshtarMixin, self).get_context_data(**kwargs) + context = super().get_context_data(**kwargs) context["page_name"] = self.page_name return context @@ -1149,6 +1150,51 @@ class AdminLoginRequiredMixin(LoginRequiredMixin): return super(AdminLoginRequiredMixin, self).dispatch(request, *args, **kwargs) +class ChangelogView(IshtarMixin, LoginRequiredMixin, TemplateView): + template_name = "ishtar/changelog.html" + page_name = _("Changelog") + current_url = "changelog" + + def update_read_version(self): + if not self.request.user or not hasattr(self.request.user, "ishtaruser") \ + or not self.request.user.ishtaruser: + return + cache_key = f"{settings.PROJECT_SLUG}-news-version" + current_version = cache.get(cache_key) + if not current_version: + return + ishtar_user = models.IshtarUser.objects.get(pk=self.request.user.ishtaruser.pk) + if not ishtar_user.latest_news_version \ + or ishtar_user.latest_news_version != current_version: + ishtar_user.latest_news_version = current_version + ishtar_user.save() + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + changelog_dir = os.path.join( + settings.SHARE_BASE_PATH, + "changelog", + settings.LANGUAGE_CODE.split('-')[0] + ) + if not os.path.exists(changelog_dir): + raise Http404() + page_number = int(kwargs.get("page", 0) or 0) or 1 + if page_number == 1: + self.update_read_version() + changelog_file = os.path.join(changelog_dir, f"changelog_{page_number}.md") + if not os.path.exists(changelog_file): + raise Http404() + with open(changelog_file, "r") as changelog: + context["changelog"] = markdown(changelog.read()) + if page_number > 1: + context["next"] = page_number - 1 + + changelog_file_next = os.path.join(changelog_dir, f"changelog_{page_number + 1}.md") + if os.path.exists(changelog_file_next): + context["previous"] = page_number + 1 + return context + + class ProfileEdit(LoginRequiredMixin, FormView): template_name = "ishtar/forms/profile.html" form_class = forms.ProfilePersonForm |