Debian:WiLiKi:Patches

[->English][トップ][編集][編集履歴][一覧][最近の更新]


パッチについて

主に wiliki-experimental パッケージに入っている修正の説明です。 通常 www.keshi.org では常に最新の wiliki-experimental パッケージを インストールしてテストしてます。

以下のようにすれば Subversion を使って sid 版との差分を取ることができますので、参考にしてください。

% svn diff http://www.keshi.org/svn/repos/WiLiKi/unstable http://www.keshi.org/svn/repos/WiLiKi/experimental 

WikiName 変更

WikiName の変更が簡単にできないことについて苦情がよく出るので、 編集ページに WikiName のフォームを加えて変更できるようにしてみました。

CGI パラメータや関数の引数に newpagename を加え、 cmd-commit-edit で pagename と newpagename が異なる場合に rename と見なして古い WikiName を削除します。 新しい WikiName がすでに存在する場合はエラーにしています。 また新しい WikiName が空文字列の場合は空ページの場合と同様に削除します。

Index: src/wiliki.scm
===================================================================
--- src/wiliki.scm (.../unstable)       (revision 16)
+++ src/wiliki.scm (.../experimental)   (revision 16)
@@ -618,7 +618,7 @@
   (cons "Status: 302 Moved\n"
         (cgi-header :location (url "~a" key))))
 
-(define (conflict-page page pagename content donttouch)
+(define (conflict-page page pagename newpagename content donttouch)
   (format-page
    (string-append (title-of (wiliki))": "($$ "Update Conflict"))
    `(,($$ "<p>It seems that somebody has updated this page while you're editing.  The most recent content is shown below.</p>")
@@ -626,7 +626,7 @@
      ,(colored-box (html:pre (html-escape-string (content-of page))))
      ,(html:hr)
      ,($$ "<p>The following shows what you are about to submit.  Please re-edit the content and submit again.</p>")
-     ,(edit-form #t pagename content (mtime-of page) donttouch)
+     ,(edit-form #t pagename newpagename content (mtime-of page) donttouch)
      )
    :show-edit? #f))
 
@@ -653,7 +653,7 @@
           :show-edit? #f))
         ))
 
-(define (edit-form preview? pagename content mtime donttouch)
+(define (edit-form preview? pagename newpagename content mtime donttouch)
   (define (buttons)
     (if preview?
         `(,(html:input :type "submit" :name "preview" :value ($$ "Preview"))
@@ -669,6 +669,8 @@
    :method "POST" :action (cgi-name-of (wiliki))
    (buttons) (donttouch-checkbox)
    (html:br)
+   (html:input :type "text" :name "newpagename" :value newpagename :size 80)
+   (html:br)
    (html:input :type "hidden" :name "c" :value "c")
    (html:input :type "hidden" :name "p" :value pagename)
    (html:input :type "hidden" :name "l" :value (lang))
@@ -727,11 +729,11 @@
     (errorf "Can't edit the page ~s: the database is read-only" pagename))
   (let ((page (wdb-get (db) pagename #t)))
     (format-page pagename
-                 (edit-form #t pagename
+                 (edit-form #t pagename pagename
                             (content-of page) (mtime-of page) #f)
                  :show-edit? #f)))
 
-(define (cmd-preview pagename content mtime donttouch)
+(define (cmd-preview pagename newpagename content mtime donttouch)
   (let ((page (wdb-get (db) pagename #t)))
     (if (or (not (mtime-of page)) (eqv? (mtime-of page) mtime))
         (format-page
@@ -740,18 +742,24 @@
                                            :key pagename
                                            :content content)))
            ,(html:hr)
-           ,(edit-form #f pagename content mtime donttouch))
+           ,(edit-form #f pagename newpagename content mtime donttouch))
          :show-edit? #f)
-        (conflict-page page pagename content donttouch)
+        (conflict-page page pagename newpagename content donttouch)
         )))
 
-(define (cmd-commit-edit pagename content mtime donttouch)
+(define (cmd-commit-edit pagename newpagename content mtime donttouch)
   (unless (editable? (wiliki))
     (errorf "Can't edit the page ~s: the database is read-only" pagename))
-  (let ((p   (wdb-get (db) pagename #t))
-        (now (sys-time)))
+  (let ((p     (wdb-get (db) pagename #t))
+        (now   (sys-time))
+       (movep (not (string=? pagename newpagename))))
+    (if (#/\s/ newpagename)
+       (errorf "Can't rename to ~s: invalid WikiName" newpagename))
+    (if (and movep (wdb-exists? (db) newpagename))
+       (errorf "Can't rename to ~s: already exists" newpagename))
     (if (or (not (mtime-of p)) (eqv? (mtime-of p) mtime))
-        (if (string-every #[\s] content)
+        (if (or (string-every #[\s] content)
+               (string-every #[\s] newpagename))
             (begin
               (set! (content-of p) "")
               (wdb-delete! (db) pagename)
@@ -759,9 +767,10 @@
             (begin
               (set! (mtime-of p) now)
               (set! (content-of p) (expand-writer-macros content))
-              (wdb-put! (db) pagename p :donttouch donttouch)
-              (redirect-page pagename)))
-        (conflict-page p pagename content donttouch)
+              (wdb-put! (db) newpagename p :donttouch donttouch)
+             (if movep (wdb-delete! (db) pagename))
+              (redirect-page newpagename)))
+        (conflict-page p pagename newpagename content donttouch)
         )
     ))
 
@@ -852,6 +861,8 @@
                   cmd-commit-edit
                   cmd-preview)
               pagename
+             (cgi-get-parameter "newpagename" param
+                                :default pagename :convert cv-in)
               (cgi-get-parameter "content" param :convert cv-in)
               (cgi-get-parameter "mtime" param
                                  :convert x->integer

最終更新 : 2003/04/06 05:49:20 JST