summaryrefslogtreecommitdiff
path: root/src/mulk/benki/wiki.clj
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2011-11-20 16:17:57 +0100
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2011-11-20 16:17:57 +0100
commit9b1d5e260aab6f691fa3e2b39704334364a53fa3 (patch)
tree182133694cdef3eabac1d6bcb3346d44459f276d /src/mulk/benki/wiki.clj
parentbbb70dee15c88612ddc35565af6b2b9940357e8d (diff)
Make Wiki editable.
Diffstat (limited to 'src/mulk/benki/wiki.clj')
-rw-r--r--src/mulk/benki/wiki.clj68
1 files changed, 44 insertions, 24 deletions
diff --git a/src/mulk/benki/wiki.clj b/src/mulk/benki/wiki.clj
index 9615f0b..45b3270 100644
--- a/src/mulk/benki/wiki.clj
+++ b/src/mulk/benki/wiki.clj
@@ -4,35 +4,55 @@
(:use [clojure repl pprint]
[clojure.contrib error-kit]
[hiccup core page-helpers]
- [mulk.benki util]
+ [mulk.benki util db]
[clojure.core.match.core
:only [match]]
- [ring.util.response
- :only [redirect]]
- clojureql.core
- [clojure.java.jdbc
- :only [transaction]]
- noir.core))
+ [clojureql core predicates]
+ noir.core)
+ (:require [noir.session :as session]
+ [noir.response :as response]
+ [clojure.java.jdbc :as sql]))
-(def page_revisions (table :page_revisions))
-(def pages (table :pages))
+(def page_revisions (table :wiki_page_revisions))
+(def pages (table :wiki_pages))
(defpage "/wiki" []
- (redirect (resolve-uri "/wiki/Home")))
+ (response/redirect (resolve-uri "/wiki/Home")))
-(defpage "/wiki/:id" {id :id, revision-id :revision}
- (let [page (-> pages
- (select (if (number? id)
- (where (= :id id))
- (where (= :title id)))))
- revisions (-> page_revisions
- (join page (where (= :pages.id :page_revisions.page)))
- ;;(project [:page_revisions.*])
- (project page_revisions))
- revision (if revision-id
- (select revisions (where (= :id revision-id)))
- (first (sort revisions [:published#desc])))]
- (layout (fmt nil "~A — Benki~@[/~A~] " id revision-id)
- [:pre (prn-str revision)])))
+(defpage "/wiki/:title" {title :title, revision-id :revision}
+ (let [revisions (-> page_revisions
+ (select (where (=* :title title)))
+ (select (where (if revision-id
+ (=* :id revision-id)
+ (=* 0 0)))))
+ revision (with-dbt (first @revisions))]
+ (layout (fmt nil "~A — Benki~@[/~A~] " title revision-id)
+ (if revision
+ [:div#wiki-page-content (:content revision)]
+ [:div#wiki-page-content [:p "This page does not exist yet."]])
+ [:hr]
+ [:div#wiki-page-footer {:style "text-align: right"}
+ [:a {:href (link :wiki title :edit)} "Edit"
+ ]])))
+
+(defn insert-empty-page []
+ (sql/with-query-results results ["insert into wiki_pages default values returning *"]
+ (first (into () results))))
+
+(defpage [:post "/wiki/:title"] {title :title, content :content}
+ (with-dbt
+ (let [revisions (-> page_revisions
+ (select (where (=* :title title))))
+ revision (first @revisions)
+ page (:page revision)]
+ (println "For page: " title " (id " page "); got content: " content)
+ (if-let [user (Integer. (session/get :user))]
+ (let [page-id (if page page (:id (insert-empty-page)))]
+ (sql/insert-values
+ :wiki_page_revisions
+ [:page :title :content :author :format]
+ [page-id title content user "html5"])
+ {:stetus 200, :headers {}, :body ""})
+ {:status 403, :headers {}, :body ""}))))