Storage of page history implemented

This commit is contained in:
Dirk Alders 2024-10-09 16:25:24 +02:00
parent 4b231c0b39
commit dee48093be
3 changed files with 45 additions and 10 deletions

View File

@ -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."))

View File

@ -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)
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):

View File

@ -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)