summaryrefslogtreecommitdiff
path: root/mulkcms.lisp
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2018-05-27 08:46:29 +0200
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2018-05-27 09:20:24 +0200
commitdd0cece91f3b5b083ea910650d7b40d44d887921 (patch)
tree5173058c62aa2dc4658636fdac6eebb726468708 /mulkcms.lisp
parent567f3ebbe6f60a872a57489516855b113315e341 (diff)
Add support for explicit journal keeping in the database.
Diffstat (limited to 'mulkcms.lisp')
-rw-r--r--mulkcms.lisp46
1 files changed, 35 insertions, 11 deletions
diff --git a/mulkcms.lisp b/mulkcms.lisp
index 5adc7a7..062fe8f 100644
--- a/mulkcms.lisp
+++ b/mulkcms.lisp
@@ -573,13 +573,9 @@
(defprepared find-journal-articles
"SELECT article
- FROM article_revisions
- WHERE status IN ('published', 'syndicated')
- GROUP BY article
- HAVING EXISTS (SELECT 1 FROM article_aliases
- WHERE article = article_revisions.article
- AND alias LIKE 'journal/%')
- ORDER BY min(date) DESC"
+ FROM journal_entries
+ WHERE journal = 0
+ ORDER BY index DESC"
:column)
(defun find-journal-archive-request-handler (path full-p
@@ -615,9 +611,9 @@
(mapcar #'paramify-article
(find-all-revisions characteristics
"EXISTS (SELECT 1
- FROM article_aliases
- WHERE article = r.article
- AND alias LIKE 'journal/%')")))
+ FROM journal_entries je
+ WHERE journal = 0
+ AND r.article = je.article)")))
(displayed-revisions (if full-p
revisions
(subseq revisions
@@ -934,6 +930,33 @@
article-id
user-id
(format nil "urn:uuid:~A" (make-uuid))))))
+ (when (assoc "create-journal-entry" params :test #'equal)
+ (with-transaction ()
+ (let* ((article-id
+ (query "INSERT INTO articles(type) VALUES (1) RETURNING id"
+ :single!))
+ (article-revision-id
+ (query "INSERT INTO article_revisions(article, title, content, author, format, status, global_id)
+ VALUES ($1, '', '', $2, 'html', 'draft', $3)
+ RETURNING id"
+ article-id
+ user-id
+ (format nil "urn:uuid:~A" (make-uuid))
+ :single!))
+ (journal-index (query "INSERT INTO journal_entries(journal, index, article)
+ SELECT 0, 1+MAX(index), $1
+ FROM journal_entries
+ WHERE journal = 0
+ RETURNING index"
+ article-id
+ :single!)))
+ (query "INSERT INTO article_aliases(alias, article)
+ VALUES ('journal/' || ($1 :: TEXT), $2)"
+ journal-index
+ article-id)
+ (query "INSERT INTO article_revision_characteristics(revision, characteristic, value)
+ VALUES ($1, 'language', 'de')"
+ article-revision-id))))
(let* ((articles (query "SELECT a.id,
array_agg(DISTINCT
ROW(r.id,
@@ -974,7 +997,8 @@
:branch-title-label "Title"
:characteristics-label "Characteristics"
:date-label "Date"
- :create-button-label "Add article"
+ :create-article-button-label "Add Article"
+ :create-journal-entry-button-label "Add Journal Entry"
:add-alias-label "+"
:articles article-data)))))))))