summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Ostler <scottbot9000@gmail.com>2010-06-20 05:05:41 -0400
committerScott Ostler <scottbot9000@gmail.com>2010-06-20 05:05:41 -0400
commit5851c64e3056836f907fd0c7833c9ba7c17c4f01 (patch)
treea6e38ae84f6d885dd064d21ce5ca1f585e4b1bd0
parent4e783d4b42907f8b3da08feeaeec102d0ff16248 (diff)
user logs
-rw-r--r--src/site.clj106
-rw-r--r--template/profile.st6
-rw-r--r--template/userlog.st123
3 files changed, 195 insertions, 40 deletions
diff --git a/src/site.clj b/src/site.clj
index 31327b2..5df97b4 100644
--- a/src/site.clj
+++ b/src/site.clj
@@ -400,9 +400,15 @@ FROM users u
and t.message_id = m.message_id and m.is_image = true"
(.toLowerCase nick)]))))
+(defn recently-faved [nick]
+ (do-select ["select distinct(u2.avatar, u2.nick) from users u, tags t, messages m, users u2
+ where lower(u.nick) = ? and u.user_id = t.user_id and t.message_id = m.message_id
+ and m.user_id = u2.user_id order by t.created_on, u2.avatar, u2.nick limit 4"
+ (.toLowerCase nick)]))
+
(defn profile
- ([session profile-nick offset] (profile session profile-nick offset "profile"))
- ([session profile-nick offset template]
+ ([session profile-nick] (profile session profile-nick "profile"))
+ ([session profile-nick template]
(if-let [user-info (fetch-nick profile-nick)]
(let [st (fetch-template template session)
profile-nick (:nick user-info) ; Update to get right casing
@@ -410,36 +416,21 @@ FROM users u
logger (make-time-logger)
is-home (and nick (= nick profile-nick))
has-avatar (non-empty-string? (user-info :avatar))
- offset (maybe-parse-int offset 0)
dump-cnt (count-dumps-posted profile-nick)
fav-from-cnt (count-dumps-user-faved profile-nick)
- score (lookup-score profile-nick)
- dump-offset (* offset *dumps-per-page*)
- raw-dumps (logger tags/fetch-dumps-by-nick
- :nick profile-nick
- :amount (+ 1 *dumps-per-page*)
- :offset dump-offset)
- dumps (map tags/add-favorited-flag (take *dumps-per-page* raw-dumps) (repeat session))
- dumps (map tags/remove-tags-for-output dumps)
- dumps (logger doall (map process-message-for-output dumps))]
+ score (lookup-score profile-nick)]
(do
(.setAttribute st "is_home" is-home)
(doseq [a [:nick :avatar :contact :bio]]
- (let [v (user-info a)]
- (.setAttribute st (name a)
- (if (non-empty-string? v) (escape-html v)))))
- (if (> (count dumps) 0)
- (.setAttribute st "dumps" dumps))
- (if (> (count raw-dumps) *dumps-per-page*)
- (.setAttribute st "next" (inc offset)))
- (.setAttribute st "score" (comma-format score))
- (.setAttribute st "score_ent" (score-to-entity score))
- (.setAttribute st "dump_cnt" (comma-format dump-cnt))
- (.setAttribute st "dumps_user_faved_cnt" (comma-format fav-from-cnt))
- (if (not= offset 0)
- (.setAttribute st "prev" (max (dec offset) 0)))
- (.setAttribute st "debug_log_items" (logger))
- (.toString st)))
+ (let [v (user-info a)]
+ (.setAttribute st (name a)
+ (if (non-empty-string? v) (escape-html v)))))
+ (.setAttribute st "score" (comma-format score))
+ (.setAttribute st "score_ent" (score-to-entity score))
+ (.setAttribute st "dump_cnt" (comma-format dump-cnt))
+ (.setAttribute st "dumps_user_faved_cnt" (comma-format fav-from-cnt))
+ (.setAttribute st "debug_log_items" (logger))
+ (.toString st)))
(resp-error "NO_USER"))))
(defn update-user-db [user-id attr val]
@@ -463,6 +454,47 @@ FROM users u
:else (do (update-user-db user-id attr val)
(resp-success "OK")))))
+;; User log
+
+(defn user-log [session profile-nick offset]
+ (if-let [user-info (fetch-nick profile-nick)]
+ (let [st (fetch-template "userlog" session)
+ profile-nick (:nick user-info) ; Update to get right casing
+ nick (session :nick)
+ logger (make-time-logger)
+ is-home (and nick (= nick profile-nick))
+ has-avatar (non-empty-string? (user-info :avatar))
+ offset (maybe-parse-int offset 0)
+ dump-cnt (count-dumps-posted profile-nick)
+ fav-from-cnt (count-dumps-user-faved profile-nick)
+ score (lookup-score profile-nick)
+ dump-offset (* offset *dumps-per-page*)
+ raw-dumps (logger tags/fetch-dumps-by-nick
+ :nick profile-nick
+ :amount (+ 1 *dumps-per-page*)
+ :offset dump-offset)
+ dumps (map tags/add-favorited-flag (take *dumps-per-page* raw-dumps) (repeat session))
+ dumps (map tags/remove-tags-for-output dumps)
+ dumps (logger doall (map process-message-for-output dumps))]
+ (.setAttribute st "is_home" is-home)
+ (doseq [a [:nick :avatar :contact :bio]]
+ (let [v (user-info a)]
+ (.setAttribute st (name a)
+ (if (non-empty-string? v) (escape-html v)))))
+ (if (> (count dumps) 0)
+ (.setAttribute st "dumps" dumps))
+ (if (> (count raw-dumps) *dumps-per-page*)
+ (.setAttribute st "next" (inc offset)))
+ (.setAttribute st "score" (comma-format score))
+ (.setAttribute st "score_ent" (score-to-entity score))
+ (.setAttribute st "dump_cnt" (comma-format dump-cnt))
+ (.setAttribute st "dumps_user_faved_cnt" (comma-format fav-from-cnt))
+ (if (not= offset 0)
+ (.setAttribute st "prev" (max (dec offset) 0)))
+ (.setAttribute st "debug_log_items" (logger))
+ (.toString st))
+ (resp-error "NO_USER")))
+
;; Directory
(def *per-directory-page* 25)
@@ -1001,12 +1033,12 @@ FROM users u
(GET "http://:sub.dump.fm/log/:offset" (validated-log session (params :sub) (params :offset) params))
(GET "/log" (validated-log session *default-room* "0" params))
(GET "/log/:offset" (validated-log session *default-room* (params :offset) params))
- (GET "/:room/log" (validated-log session (params :room) "0" params))
- (GET "/:room/log/:offset" (validated-log session (params :room) (params :offset) params))
+ (GET "/r/:room/log" (validated-log session (params :room) "0" params))
+ (GET "/r/:room/log/:offset" (validated-log session (params :room) (params :offset) params))
(GET "/favicon.ico" (serve-static "static" "favicon.ico"))
- (GET "/u/:nick" (profile session (params :nick) "0"))
- (GET "/u/:nick/" (profile session (params :nick) "0"))
+ (GET "/u/:nick" (user-log session (params :nick)))
+ (GET "/u/:nick/" (profile session (params :nick)))
(GET "/u/:nick/tag/:tag" (tagged-dumps-by-nick session params (request-url request)))
(GET "/u/:nick/tag/:tag/:offset" (tagged-dumps-by-nick session params (request-url request)))
(GET "/u/:nick/favorites" (favorites session params))
@@ -1014,7 +1046,7 @@ FROM users u
(GET "/json/:nick/favorites" (json-favorites session params))
; have to put this route after favs
- (GET "/u/:nick/:offset" (profile session (params :nick) (params :offset)))
+ (GET "/u/:nick/:offset" (user-log session (params :nick) (params :offset)))
(GET "/p/:nick/:postid" (single-message session (params :nick) (params :postid)))
;; TODO: these shouldn't be GETs
@@ -1046,7 +1078,7 @@ FROM users u
(GET "/mutes" (show-mutes session))
(POST "/mute" (mute! session params))
(POST "/cancel-mute" (handle-cancel-mute! session params))
- (GET "/profile-test/:t" (profile session "ryder" "0" (params :t)))
+ (GET "/profile-test/:t" (profile session "ryder" (params :t)))
(GET "/cmd/ghettosearch/:searchterm" (json-ghetto-search (undecoded-url-piece (request-url request) 2)))
(GET "/search" (serve-template "search_files" session))
@@ -1060,13 +1092,15 @@ FROM users u
(GET "/error/ie" (serve-template "error_ie" session))
;; Put username routes below all others in priority
- (GET "/:nick" (profile session (params :nick) "0"))
- (GET "/:nick/" (profile session (params :nick) "0"))
+ (GET "/:nick" (profile session (params :nick)))
+ (GET "/:nick/" (profile session (params :nick)))
(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 session params))
(GET "/:nick/favorites/:offset" (favorites session params))
- (GET "/:nick/:offset" (profile session (params :nick) (params :offset)))
+ (GET "/:nick/log" (user-log session (params :nick) "0"))
+ (GET "/:nick/log/:offset" (user-log session (params :nick) (params :offset)))
+ (GET "/:nick/:offset" (user-log session (params :nick) (params :offset)))
(GET "/" (landing session))
(ANY "*" (unknown-page)))
diff --git a/template/profile.st b/template/profile.st
index 1abee8e..7bad5cd 100644
--- a/template/profile.st
+++ b/template/profile.st
@@ -27,9 +27,7 @@
<img id="avatarPic" src="/static/img/noinfo.png">
$endif$
-
-
-
+
$if(isadmin)$
<div id="dashadminmute">
<a href="#" onclick="Admin.mute('$nick$'); return false">Mute $nick$!</a>
@@ -79,7 +77,7 @@
<div id="middash">
- <h2><a onclick="alert('Back soon! We promise.'); return false;" href="http://dump.fm/$nick$/log">$dump_cnt$ dumps &#10145;</a></h2>
+ <h2><a href="http://dump.fm/$nick$/log">$dump_cnt$ dumps &#10145;</a></h2>
<hr>
diff --git a/template/userlog.st b/template/userlog.st
new file mode 100644
index 0000000..547772e
--- /dev/null
+++ b/template/userlog.st
@@ -0,0 +1,123 @@
+<html>
+ <head>
+ <title>$nick$'s dump.fm</title>
+ $head()$
+ <link rel="stylesheet" type="text/css" media="screen" href="/static/css/dump.css">
+ <script src="/static/js/jquery.editinplace.1.0.1.packed.js" type="text/javascript"></script>
+ <script src="/static/js/ajaxupload.js"></script>
+ <script>
+ jQuery(document).ready(initProfile);
+ </script>
+
+ </head>
+ <body>
+ $banner()$
+ <div id="dcontent">
+ <div id="messagetabs"></div>
+ <div id="rapper">
+ </div>
+
+ <div id="messagePanep">
+ <div id="userListp"><br> $if(is_home)$<br>$endif$
+ <h2>
+ $if(avatar)$
+ <img id="avatarPic" src="$avatar$"/>
+ $else$<br><br>
+ <img id="avatarPic" src="/static/img/noinfo.png">
+ $endif$
+
+ $nick$ </h2><br>
+ $if(score_ent)$
+ <h8>
+ fav score: $score$
+ <h9>$score_ent$</h9>
+ $endif$</h8>
+ $if(isadmin)$<br><br>
+ <div id="adminmute">
+ <a href="#" onclick="Admin.mute('$nick$'); return false">Mute $nick$!</a><br>
+ </div>
+ $endif$
+
+ <div>dumps posted: $dump_cnt$</div>
+ <div>dumps $nick$ faved: $dumps_user_faved_cnt$</div>
+
+ $if(is_home)$
+ <div id="avatar-editing" style="display: none">
+ <input id="uploadp" value="Upload Icon" type="submit">
+ <img id="spinner" src="/static/img/spinner.gif" style="display: none" />
+ </div>
+ $endif$
+
+ <br> <h3>contact info</h3>
+ $if(contact)$
+ <br><div id="contact" class="linkify">$contact$</div>
+ $else$
+ <div><img id="contact" src="/static/img/noinfo.png"><br><br></div>
+ $endif$
+
+ <br><br><h3>bio</h3>
+ $if(bio)$
+ <br> <div id="bio" class="linkify">$bio$</div>
+ $else$
+ <div><img id="bio" src="/static/img/noinfo.png"><br><br></div>
+ $endif$
+
+
+
+
+ $if(is_home)$
+ <br>
+ <div id="edit-toggle"><a href="#">edit profile</a></div><br><br>
+ $endif$
+
+ <br>
+
+ <a href="http://dump.fm/$nick$/favorites"><h7>$nick$'s <br>Favorite Pix</h7></a>
+
+ <div id="date">
+ <div type="text" id="datepicker"></div></div>
+ </div>
+
+ <div id="favbox" style="display: hidden"></div>
+ <div id="messageList">
+
+ $if(dumps)$ <span class="content">
+ $dumps:{ d | $profile_dump(dump=d)$ }$
+
+
+
+ </span>
+
+
+
+ $else$
+ no dumps
+ $endif$
+ </div>
+
+
+
+ <div id="msgInputDiv">
+ <div id="msginputrapper">
+
+ $if(prev)$
+ <a href="/$nick$/$prev$"><input id="prevbutton" value="<- Prev"></a>
+ $else$
+<input id="prevbutton">
+ $endif$
+
+ $if(next)$
+ <a href="/$nick$/$next$"> <input id="nextbutton" value="Next ->"></a>
+ $else$
+ <input id="nextbutton" value="nomodumps">
+ $endif$
+
+
+ </div>
+ <div id="footerc">
+ $footer()$
+ </div>
+ </div>
+ </div></div></div>
+ </body>
+</html>