Merged objcl into the main informatimago repository.
[com-informatimago:com-informatimago.git] / cl-posix / cliki / versions.lisp
1 (in-package :cliki)
2
3 (defun version-open-p (cliki page version user)
4   (and (eql version (Car (page-versions page)))
5        (> (file-write-date (page-pathname page :version version))
6           (- (get-universal-time) (* 5 60)))
7        (destructuring-bind (date title user- descr)
8            (find-recent-change  cliki (page-title page))
9          (declare (ignore date title descr))
10          (string= user user-))))
11
12 (defmethod check-page-save-allowed ((cliki cliki-instance) page version user)
13   (unless
14       (or (not (page-versions page))
15           (version-open-p cliki page version user)
16           (= version (1+ (car (page-versions page)))))
17     (signal 'cliki-page-save-rejected
18             :client-message
19             "Simultaneous edit: a newer version of this page already exists")))
20
21 (defun can-save-as-version-p (cliki page version user)
22   (handler-case 
23       (progn (check-page-save-allowed cliki page version user) t)
24     (cliki-page-save-rejected () nil)))
25
26
27