From 4ee9af5e96dfdf045d13afa3510937f82b06df5c Mon Sep 17 00:00:00 2001 From: dumpfmprod Date: Thu, 30 Sep 2010 21:21:45 -0400 Subject: timb: image altars --- src/site.clj | 36 ++++++++++++++++++++++++++++++++++++ src/tags.clj | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 70 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/site.clj b/src/site.clj index f88afaf..620756d 100644 --- a/src/site.clj +++ b/src/site.clj @@ -847,6 +847,35 @@ WHERE u.user_id = ANY(?)" (log session (lookup-room room-key) offset params) (resp-error "UNKNOWN_ROOM")))) +;; Altars + +(defn altar-log [session params] + (let [id (params :id) + st (fetch-template "altar_log" session) + raw-dumps (tags/fetch-altars :message-id id :amount (+ 1 *dumps-per-page*)) + dumps (map tags/add-favorited-flag (take *dumps-per-page* raw-dumps) (repeat session)) + dumps (map tags/remove-tags-for-output dumps) + dumps (map process-message-for-output dumps)] + (.setAttribute st "dumps" dumps) + (if (> (count raw-dumps) *dumps-per-page*) + (.setAttribute st "next" ((last raw-dumps) :message_id))) + (.toString st))) + +(defn altar-log-by-nick [session params] + (let [id (params :id) + nick (params :nick) + user-id (user-id-from-nick nick) + st (fetch-template "altar_user_log" session) + raw-dumps (tags/fetch-altars :message-id id :amount (+ 1 *dumps-per-page*) :user-id user-id) + dumps (map tags/add-favorited-flag (take *dumps-per-page* raw-dumps) (repeat session)) + dumps (map tags/remove-tags-for-output dumps) + dumps (map process-message-for-output dumps)] + (.setAttribute st "dumps" dumps) + (.setAttribute st "nick" nick) + (if (> (count raw-dumps) *dumps-per-page*) + (.setAttribute st "next" ((last raw-dumps) :message_id))) + (.toString st))) + ;; Tags (defn undecoded-url-piece [url position] @@ -1263,6 +1292,10 @@ WHERE u.user_id = ANY(?)" (POST "/cmd/tag/add" (validated-add-tag session params)) (POST "/cmd/tag/rm" (validated-remove-tag session params)) + (GET "/altars" (altar-log session params)) + (GET "/altars/" (altar-log session params)) + (GET "/altars/:id" (altar-log session params)) + ;; Events (GET "/event" (current-event session)) @@ -1313,6 +1346,9 @@ WHERE u.user_id = ANY(?)" ;; Put username routes below all others in priority (GET "/:nick" (profile session (params :nick))) (GET "/:nick/" (profile session (params :nick))) + (GET "/:nick/altars" (altar-log-by-nick session params)) + (GET "/:nick/altars/" (altar-log-by-nick session params)) + (GET "/:nick/altars/:id" (altar-log-by-nick session params)) (GET "/:nick/tag/:tag" (tagged-dumps-by-nick session params (request-url request))) (GET "/:nick/tag/:tag/:offset" (tagged-dumps-by-nick session params (request-url request))) (GET "/:nick/favorites" (favorites-handler session (params :nick) nil nil)) diff --git a/src/tags.clj b/src/tags.clj index 3abeee9..6354e37 100644 --- a/src/tags.clj +++ b/src/tags.clj @@ -300,12 +300,45 @@ WHERE EXISTS AND r.room_id = m.room_id " (if include-vip "" "AND r.admin_only = false"))) +(defnk fetch-altars-query [:with-tags true :with-message-id false :with-user-id false] (str +" SELECT + m.content, m.message_id, m.created_on, + u.nick, u.avatar, r.key " + (if with-tags ", + array_to_string(ARRAY(SELECT nick || ' ' || tag + FROM tags, users + WHERE message_id = m.message_id AND tags.user_id = users.user_id), ' ') as tags " "") +" FROM (SELECT + message_id + FROM image_altars " + (if (and with-message-id (not with-user-id)) "WHERE message_id < ? " "") ;; todo: fix awful code + (if (and (not with-message-id) with-user-id) "WHERE user_id = ? " "") + (if (and with-message-id with-user-id) "WHERE message_id < ? AND user_id = ? " "") + " ORDER BY message_id DESC + LIMIT ? OFFSET ? + ) as sq, messages m, users u, rooms r + WHERE m.message_id = sq.message_id + AND m.user_id = u.user_id + AND r.room_id = m.room_id " +)) + (defn fetch-dump-by-id [m-id] (let [query (fetch-dump-by-message-id-query)] (let [rows (do-select [query (maybe-parse-int m-id -1)])] (first (map parse-tags-from-row-as-tag-map rows))))) +(defnk fetch-altars [:message-id 0 :user-id 0 :amount *dumps-per-page* :offset 0] + (let [message-id (maybe-parse-int message-id 0) + with-message-id (> message-id 0) + with-user-id (> user-id 0) + query (fetch-altars-query :with-message-id with-message-id :with-user-id with-user-id) + query-vars [amount offset] + query-vars (if with-user-id (concat [user-id] query-vars) query-vars) + query-vars (if with-message-id (concat [message-id] query-vars) query-vars) + rows (do-select (vec (concat [query] query-vars)))] + (map parse-tags-from-row-as-tag-map rows))) + (defnk fetch-dumps-by-room [:room-id 1 :image-only true :amount *dumps-per-page* :offset 0] (let [query (fetch-dumps-by-room-query image-only)] (let [rows (do-select [query room-id amount offset])] @@ -365,4 +398,4 @@ WHERE EXISTS :msg msg :added (new Date)} new-fs (conj cur-favs fav)] - (alter fav-map assoc to-nick new-fs)))) \ No newline at end of file + (alter fav-map assoc to-nick new-fs)))) -- cgit v1.2.3-70-g09d2