From 1fd0be696cf74dd73697d507a7bc7b7db18a1ffd Mon Sep 17 00:00:00 2001 From: Scott Ostler Date: Fri, 2 Jul 2010 11:33:14 -0400 Subject: Add /nick/popular --- src/site.clj | 39 +++++++++++++++++++++++++++++++++++++- template/fame_dump.st | 19 ++++--------------- template/log_dump.st | 23 +++++------------------ template/popular.st | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ template/popular_dump.st | 15 +++++++++++++++ template/profile_dump.st | 2 +- template/userlog.st | 2 -- 7 files changed, 112 insertions(+), 37 deletions(-) create mode 100644 template/popular.st create mode 100644 template/popular_dump.st diff --git a/src/site.clj b/src/site.clj index 91f982e..94abd6c 100644 --- a/src/site.clj +++ b/src/site.clj @@ -62,7 +62,7 @@ ;; http://snippets.dzone.com/posts/show/6995 (def url-regex #"(?i)^((http\:\/\/|https\:\/\/|ftp\:\/\/)|(www\.))+(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$") -(def pic-regex #"(?i)\.(jpg|jpeg|png|gif|bmp|svg)(\?|$)") +(def pic-regex #"(?i)\.(jpg|jpeg|png|gif|bmp|svg)(\?|&|$)") (defn is-image? [word] (and (re-find url-regex word) @@ -536,6 +536,42 @@ FROM users u (.toString st)) (resp-error "NO_USER"))) +;; Who faved me + +(def popular-dumps-qry " +select u.nick, u.avatar, r.key, m.message_id, m.content, m.created_on, count(*) as count, + array_agg(u2.nick) as user_nicks, + array_agg(u2.avatar) as user_avs +from users u, messages m, rooms r, tags t, users u2 +where lower(u.nick) = lower(?) +and u.user_id = m.user_id and m.message_id = t.message_id +and m.room_id = r.room_id and m.is_image = true and r.admin_only = false +and lower(t.tag) = 'favorite' and t.user_id != u.user_id +and t.user_id = u2.user_id +group by u.nick, u.avatar, r.key, m.message_id, m.content, m.created_on +order by count desc limit 20 offset 0") + +(defn get-popular-dumps [nick] + (for [d (do-select [popular-dumps-qry nick])] + (assoc d + :favers (map (fn [n a] {:nick n :avatar a}) + (.getArray (:user_nicks d)) + (.getArray (:user_avs d))) + :user_nicks nil :user_avs nil))) + +(defn popular [session profile-nick] + (if-let [user-info (fetch-nick profile-nick)] + (let [st (fetch-template "popular" session) + profile-nick (:nick user-info) + raw-dumps (get-popular-dumps profile-nick) + dumps (map process-message-for-output raw-dumps)] + (println raw-dumps) + (.setAttribute st "nick" profile-nick) + (.setAttribute st "mini_profile" (build-mini-profile user-info)) + (.setAttribute st "dumps" dumps) + (.toString st)) + (resp-error "NO_USER"))) + ;; Directory (def *per-directory-page* 25) @@ -1149,6 +1185,7 @@ FROM users u (GET "/:nick/tag/:tag/:offset" (tagged-dumps-by-nick session params (request-url request))) (GET "/:nick/favorites" (favorites session params)) (GET "/:nick/favorites/:offset" (favorites session params)) + (GET "/:nick/popular" (popular session (params :nick))) (GET "/:nick/favs" (favorites session params)) (GET "/:nick/favs/:offset" (favorites session params)) (GET "/:nick/log" (user-log session (params :nick) "0")) diff --git a/template/fame_dump.st b/template/fame_dump.st index 05cc9fe..9403696 100644 --- a/template/fame_dump.st +++ b/template/fame_dump.st @@ -4,21 +4,10 @@ $else$
$endif$ -$dump.created_on$ -- by $dump.nick$ -
-$if(dump.avatar)$ - -$else$ - -$endif$ -
   $dump.count$ - + +$dump.created_on$ -- by $dump.nick$ +   $dump.count$ +
$dump.content$

$share_buttons()$ diff --git a/template/log_dump.st b/template/log_dump.st index f594cea..17e6adc 100644 --- a/template/log_dump.st +++ b/template/log_dump.st @@ -4,22 +4,9 @@ $else$
$endif$ -$dump.created_on$ -- by $dump.nick$ -
-$if(dump.avatar)$ - -$else$ - -$endif$ -
- -
$dump.content$
-
+ +$dump.created_on$ -- by $dump.nick$ +
$dump.content$
+
$share_buttons()$ -
+
diff --git a/template/popular.st b/template/popular.st new file mode 100644 index 0000000..21edcc1 --- /dev/null +++ b/template/popular.st @@ -0,0 +1,49 @@ + + + $nick$'s dump.fm -- popular + $head()$ + + + + + + + $banner()$ +
+ + +
+ $mini_profile$ +
+ $if(dumps)$ + $dumps:{ d | $popular_dump(dump=d)$ }$ + + $else$ + no dumps + $endif$ +
+ +
+
+ $if(prev)$ + + $else$ + + $endif$ + + $if(next)$ + + $else$ + + $endif$ +
+
+ $footer()$ +
+
+
+
+ + diff --git a/template/popular_dump.st b/template/popular_dump.st new file mode 100644 index 0000000..508bc4a --- /dev/null +++ b/template/popular_dump.st @@ -0,0 +1,15 @@ +
+ +
+$dump.created_on$ -- in $dump.key$ +   $dump.count$ +
+ + +
$dump.content$
+
+
+$dump.favers: { f | $f.nick$   }$ +
+$share_buttons()$ +
diff --git a/template/profile_dump.st b/template/profile_dump.st index b101a08..2e9a259 100644 --- a/template/profile_dump.st +++ b/template/profile_dump.st @@ -2,7 +2,7 @@
$dump.created_on$ -- in $dump.key$
- +
$if(dump.avatar)$ diff --git a/template/userlog.st b/template/userlog.st index ee01b09..5c925fd 100644 --- a/template/userlog.st +++ b/template/userlog.st @@ -2,8 +2,6 @@ $nick$'s dump.fm $head()$ - -