summaryrefslogtreecommitdiff
path: root/mulkcms.lisp
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2011-03-15 20:37:46 +0100
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2011-03-15 20:37:46 +0100
commitdbff25d65141a148ea9a9952f80d8618115ebb38 (patch)
tree1167979b854661282d2f1992e03ebf384678cfff /mulkcms.lisp
parent9c5830df0ac1e45b2957d8a984ebec742ed8d3fe (diff)
Use caching for individual article pages.
Diffstat (limited to 'mulkcms.lisp')
-rw-r--r--mulkcms.lisp147
1 files changed, 76 insertions, 71 deletions
diff --git a/mulkcms.lisp b/mulkcms.lisp
index 59c4c32..0861a43 100644
--- a/mulkcms.lisp
+++ b/mulkcms.lisp
@@ -782,73 +782,78 @@
(:view
(lambda ()
(with-db
- (let* ((page-template-name (query "SELECT page_template FROM articles
+ (with-cache (path (query "SELECT max(date)
+ FROM article_revisions
+ WHERE article = $1"
+ article
+ :single))
+ (let* ((page-template-name (query "SELECT page_template FROM articles
JOIN article_types
ON articles.type = article_types.id
WHERE articles.id = $1"
- article
- :single!))
- (article-params (find-article-params article
- characteristics
- t))
- (page-template (template page-template-name))
- (template-params (list :title (getf article-params :title)
- :root *base-uri*
- :site-name *site-name*
- :site-subtitle ""
- :link ""))
- (submission-notice nil))
- (when (assoc "post-comment" params :test #'equal)
- (let* ((name (cdr (assoc "name" params :test #'equal)))
- (website (cdr (assoc "website" params :test #'equal)))
- (email (cdr (assoc "email" params :test #'equal)))
- (body (cdr (assoc "body" params :test #'equal)))
- (article (cdr (assoc "article" params :test #'equal)))
- (revision (cdr (assoc "revision" params :test #'equal)))
- (tkey (cdr (assoc "transaction-key" params :test #'equal)))
- (salt (cdr (assoc "salt" params :test #'equal)))
- (spam-p (if tkey
- (or (null salt)
- (not (hashcash-hash-validp
- (format nil "~A:~A:~A" body tkey salt))))
- (spamp/akismet body name website
- (hunchentoot:real-remote-addr)
- (hunchentoot:user-agent)))))
- (with-transaction ()
- (let ((comment (query "INSERT INTO comments(article, global_id)
+ article
+ :single!))
+ (article-params (find-article-params article
+ characteristics
+ t))
+ (page-template (template page-template-name))
+ (template-params (list :title (getf article-params :title)
+ :root *base-uri*
+ :site-name *site-name*
+ :site-subtitle ""
+ :link ""))
+ (submission-notice nil))
+ (when (assoc "post-comment" params :test #'equal)
+ (let* ((name (cdr (assoc "name" params :test #'equal)))
+ (website (cdr (assoc "website" params :test #'equal)))
+ (email (cdr (assoc "email" params :test #'equal)))
+ (body (cdr (assoc "body" params :test #'equal)))
+ (article (cdr (assoc "article" params :test #'equal)))
+ (revision (cdr (assoc "revision" params :test #'equal)))
+ (tkey (cdr (assoc "transaction-key" params :test #'equal)))
+ (salt (cdr (assoc "salt" params :test #'equal)))
+ (spam-p (if tkey
+ (or (null salt)
+ (not (hashcash-hash-validp
+ (format nil "~A:~A:~A" body tkey salt))))
+ (spamp/akismet body name website
+ (hunchentoot:real-remote-addr)
+ (hunchentoot:user-agent)))))
+ (with-transaction ()
+ (let ((comment (query "INSERT INTO comments(article, global_id)
VALUES ($1, $2)
RETURNING id"
- article
- (format nil "urn:uuid:~A" (make-uuid))
- :single!))
- (author (query "INSERT INTO users(name, status, email, website)
+ article
+ (format nil "urn:uuid:~A" (make-uuid))
+ :single!))
+ (author (query "INSERT INTO users(name, status, email, website)
VALUES ($1, 'visitor', $2, $3)
RETURNING id"
- name
- email
- website
- :single!)))
- (when tkey
- (query "INSERT INTO used_transaction_keys(key) VALUES ($1)"
- tkey
- :none))
- (query "INSERT INTO comment_revisions(comment, content, author, format, status, article_revision, submitter_ip, submitter_user_agent)
+ name
+ email
+ website
+ :single!)))
+ (when tkey
+ (query "INSERT INTO used_transaction_keys(key) VALUES ($1)"
+ tkey
+ :none))
+ (query "INSERT INTO comment_revisions(comment, content, author, format, status, article_revision, submitter_ip, submitter_user_agent)
VALUES ($1, $2, $3, 'text', $4, $5, $6, $7)"
- comment
- body
- author
- (if spam-p
- "pending"
- "spam")
- revision
- (hunchentoot:real-remote-addr)
- (hunchentoot:user-agent)
- :none)
- (setq submission-notice
- (cond
- (spam-p
- (list
- :content "<p><strong>Warning:</strong></p>
+ comment
+ body
+ author
+ (if spam-p
+ "pending"
+ "spam")
+ revision
+ (hunchentoot:real-remote-addr)
+ (hunchentoot:user-agent)
+ :none)
+ (setq submission-notice
+ (cond
+ (spam-p
+ (list
+ :content "<p><strong>Warning:</strong></p>
<p>Your message could not be
verified as non-spam. If
@@ -862,24 +867,24 @@
administrators, who will be
able to manually approve your
comment.</p>"
- :message-type "warning"))
- (t
- (list
- :content "<p><strong>Note:</strong></p>
+ :message-type "warning"))
+ (t
+ (list
+ :content "<p><strong>Note:</strong></p>
<p>Your message has been received and
classified as non-spam. It has thus
been put into the moderation queue and
is now awaiting approval by one of the
site's administrators.</p>"
- :message-type "success-message"))))))))
- (expand-page page-template
- (getf article-params :title)
- (list* :articles (list article-params)
- :info-messages (if submission-notice
- (list submission-notice)
- nil)
- template-params))))))))))
+ :message-type "success-message"))))))))
+ (expand-page page-template
+ (getf article-params :title)
+ (list* :articles (list article-params)
+ :info-messages (if submission-notice
+ (list submission-notice)
+ nil)
+ template-params)))))))))))