diff options
| author | Scott Ostler <scottbot9000@gmail.com> | 2010-06-20 05:05:41 -0400 |
|---|---|---|
| committer | Scott Ostler <scottbot9000@gmail.com> | 2010-06-20 05:05:41 -0400 |
| commit | 5851c64e3056836f907fd0c7833c9ba7c17c4f01 (patch) | |
| tree | a6e38ae84f6d885dd064d21ce5ca1f585e4b1bd0 | |
| parent | 4e783d4b42907f8b3da08feeaeec102d0ff16248 (diff) | |
user logs
| -rw-r--r-- | src/site.clj | 106 | ||||
| -rw-r--r-- | template/profile.st | 6 | ||||
| -rw-r--r-- | template/userlog.st | 123 |
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 ➡</a></h2> + <h2><a href="http://dump.fm/$nick$/log">$dump_cnt$ dumps ➡</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> |
