From dee48093be542db6930d4025fac228d5bdeffcbd Mon Sep 17 00:00:00 2001 From: Dirk Alders Date: Wed, 9 Oct 2024 16:25:24 +0200 Subject: [PATCH] Storage of page history implemented --- pages/messages.py | 10 ++++++++++ pages/page.py | 40 +++++++++++++++++++++++++++++++--------- pages/views.py | 5 ++++- 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/pages/messages.py b/pages/messages.py index be26f79..ce4a5bc 100644 --- a/pages/messages.py +++ b/pages/messages.py @@ -10,3 +10,13 @@ def permission_denied_msg_page(request, rel_path): def unavailable_msg_page(request, rel_path): # TODO: Add translation for this message messages.info(request, _("Unavailable: The Page '%s' is not available. Create it or follow a valid link, please.") % rel_path) + + +def edit_success(request): + # TODO: Add translation for this message + messages.success(request, _('Thanks for editing, page stored.')) + + +def edit_no_change(request): + # TODO: Add translation for this message + messages.info(request, _("Nothing changed, no storage needed.")) diff --git a/pages/page.py b/pages/page.py index 32d12b4..5b00b5b 100644 --- a/pages/page.py +++ b/pages/page.py @@ -7,6 +7,7 @@ import logging from pages import messages, url_page import mycreole import os +import shutil import time from users.models import get_userprofile import zoneinfo @@ -53,6 +54,7 @@ class meta_data(dict): class base_page(object): PAGE_FILE_NAME = 'page' META_FILE_NAME = 'meta.json' + HISTORY_FOLDER_NAME = 'history' SPLITCHAR = ":" def __init__(self, path): @@ -72,17 +74,37 @@ class base_page(object): except FileNotFoundError: self._raw_page_src = "" + def _store_history(self): + history_folder = os.path.join(self._path, self.HISTORY_FOLDER_NAME) + # create folder if needed + fstools.mkdir(history_folder) + # identify last_history number + flist = fstools.filelist(history_folder) + flist.sort() + if flist: + hist_number = int(os.path.basename(flist[-1])[:5]) + 1 + else: + hist_number = 1 + # copy file to history folder + shutil.copy(self.filename, os.path.join(history_folder, "%05d_%s" % (hist_number, self.PAGE_FILE_NAME))) + shutil.copy(self._meta_filename, os.path.join(history_folder, "%05d_%s" % (hist_number, self.META_FILE_NAME))) + def update_page(self, page_txt): from .search import update_item - # - folder = os.path.dirname(self.filename) - if not os.path.exists(folder): - fstools.mkdir(folder) - with open(self.filename, 'w') as fh: - fh.write(page_txt) - update_item(self) - # - self._update_metadata() + if page_txt.replace("\r\n", "\n") != self.raw_page_src: + # Store page history + if self.raw_page_src: + self._store_history() + # save the new page content + fstools.mkdir(os.path.dirname(self.filename)) + with open(self.filename, 'w') as fh: + fh.write(page_txt) + # update search index + update_item(self) + # update metadata + self._update_metadata() + return True + return False @property def filename(self): diff --git a/pages/views.py b/pages/views.py index 244f979..8f176c1 100644 --- a/pages/views.py +++ b/pages/views.py @@ -75,7 +75,10 @@ def edit(request, rel_path): preview = request.POST.get("preview") # if save is not None: - p.update_page(page_txt) + if p.update_page(page_txt): + messages.edit_success(request) + else: + messages.edit_no_change(request) return HttpResponseRedirect(url_page(request, rel_path)) elif preview is not None: form = EditForm(page_data=page_txt)