source: project/release/3/svnwiki-discuss/trunk/svnwiki-discuss.scm @ 13420

Last change on this file since 13420 was 13420, checked in by azul, 11 years ago

Fix edit-form-instructions so it will not claim that there are no comments when there are.

  • Property svn:keywords set to id
File size: 5.7 KB
Line 
1; $id$
2;
3; License: GPL-3
4
5(declare (export))
6(use svnwiki-extensions-support html-stream format-modular stream-ext srfi-40 posix)
7
8(define (discuss-counter env)
9  (let-from-environment env (path-in path path-out-real)
10    (assert (and 'discuss-counter (not (null? (string-split path "/")))))
11    (if (or (is-discuss? path)
12            (string=? (get-props-parents-first "svnwiki:discuss" path-in path "yes") "no"))
13      stream-null
14      (svnwiki-render-bottom-span
15        env
16        (html-stream
17          ((a class "render-bottom-span render-bottom-span-discuss-count"
18              href (make-link-url path-out-real (make-discuss path) #f))
19           (let ((n (count-comments path-in path)))
20             (format (current-error-port) "Count comments in: ~A, ~A~%" path-in path)
21             (discussion-format
22               env
23               (get-props-parents-first
24                 (cond
25                   ((zero? n) "svnwiki:text:discuss:link-zero")
26                   ((= n 1) "svnwiki:text:discuss:link-one")
27                   (else "svnwiki:text:discuss:link-many"))
28                 path-in
29                 path
30                 (cond
31                   ((zero? n) "~I Discussion")
32                   (else "~I Discussion (~N)")))))))))))
33
34(define (is-discuss-level env i)
35  (let-from-environment env (path)
36    (and-let* ((path)
37               (comps (reverse (string-split path "/")))
38               ((> (length comps) i)))
39      (string=? "xsvnwiki-discuss" (list-ref comps i)))))
40
41(when "SVNWIKI_UNITTESTS"
42  (assert (is-discuss-level (environment ((path "xsvnwiki-discuss/foo"))) 1))
43  (assert (is-discuss-level (environment ((path "bar/xsvnwiki-discuss/foo"))) 1))
44  (assert (not (is-discuss-level (environment ((path "bar/foo"))) 1)))
45  (assert (not (is-discuss-level (environment ((path "xsvnwiki-discuss/bar/foo"))) 1)))
46  (assert (not (is-discuss-level (environment ((path #f))) 1))))
47
48(define *comments-separator*
49  (html-stream (hr)))
50
51(define (update-notify env)
52  (when (is-discuss-level env 1)
53    (let-from-environment env (path-in path regenerate-page path-out)
54      (let* ((new-path-output (svnwiki-make-pathname path "index"))
55             (env (environment env ((path-out-real new-path-output))))
56             (path-normal (svnwiki-discuss->normal path)))
57        ; Regenerate its associated page so its counters for the number of posts
58        ; looks right.  In the future that counter should probably be loaded
59        ; dynamically with AJAX.  However, we also need to regenerate it so that
60        ; the emails for the discussion get sent out.
61        (when (and (file-exists? (svnwiki-make-pathname path-in path-normal))
62                   ; This can happen if it was a regular file but it has been
63                   ; turned to a directory (probably with an index file) but the
64                   ; discussion has not been moved.
65                   (not (directory? (svnwiki-make-pathname path-in path-normal))))
66          (regenerate-page path-normal))
67        (svnwiki-report-progress env (svnwiki-translate env "Generating discussion page for: ~A: ~A~%") path new-path-output)
68        (write-file-with-tmp new-path-output "text/html" path-out
69          (svnwiki-render-template
70            env
71            "Discuss: "
72            (stream-append
73              (stream-concatenate
74                (stream-intersperse
75                  (stream-map
76                    (lambda (comment-path)
77                      (svnwiki-report-progress env (svnwiki-translate env "Generating discussion page for: ~A (comment ~A)~%") path comment-path)
78                      (let ((comment-path-full (svnwiki-make-pathname path comment-path)))
79                        (stream-append
80                          (let ((subject (get-props-parents-first "svnwiki:mail:headers:subject" path-in comment-path-full)))
81                            (if (and subject (not (string=? subject "")))
82                              (html-stream (h2 (stream-html-escape subject)))
83                              stream-null))
84                          (render-file-contents
85                            ; TODO: Maybe we need path-original or something like that to get links right?
86                            (environment env ((path comment-path-full)))
87                            path)
88                          ; TODO: Show the date
89                          (html-stream
90                            (p ((span class "author")
91                                (stream-html-escape (get-props-parents-first "svnwiki:mail:headers:from" path-in comment-path-full "Anonymous")))
92                               ", "
93                               ((span class "date")
94                                (seconds->string
95                                  (string->number (car (string-split comment-path ":"))))))))))
96                    (list->stream (sort (directory (svnwiki-repository-path env)) string<?)))
97                  *comments-separator*))
98              (html-stream
99                ((div id "post-comment")
100                 (show-edit-form env))))
101            'view))))))
102
103(define (discuss-render env)
104  (when (is-discuss-level env 2)
105    (let-from-environment env (return)
106      (return (html-stream "TODO: write this code")))))
107
108; TODO: enable
109;(svnwiki-extension-define 'render-file-contents 'discuss discuss-render)
110(svnwiki-extension-define 'render-bottom-span 'discuss-counter discuss-counter)
111(svnwiki-extension-define 'update-notify-recursive 'discuss update-notify)
112
113(define (edit-form-instructions env)
114  (let-from-environment env (path path-in return)
115    (when (and (is-discuss? path)
116               (zero? (count-comments path-in path)))
117      (return (html-stream (p (svnwiki-translate env "No comments have been posted, please add yours.")))))))
118
119(svnwiki-extension-define 'edit-form-instructions 'discuss edit-form-instructions)
Note: See TracBrowser for help on using the repository browser.