diff options
| -rw-r--r-- | db/0-create.psql | 9 | ||||
| -rw-r--r-- | docs/reserved_nicks.txt | 1 | ||||
| -rw-r--r-- | src/admin.clj | 20 | ||||
| -rw-r--r-- | src/rooms.clj | 23 | ||||
| -rw-r--r-- | src/site.clj | 16 | ||||
| -rw-r--r-- | template/roomlist.st | 53 |
6 files changed, 101 insertions, 21 deletions
diff --git a/db/0-create.psql b/db/0-create.psql index 649d74f..68f9bfd 100644 --- a/db/0-create.psql +++ b/db/0-create.psql @@ -29,10 +29,17 @@ CREATE TABLE rooms ( created_on timestamp NOT NULL DEFAULT now(), admin_only bool NOT NULL DEFAULT false, active bool NOT NULL DEFAULT true, - history_size integer NOT NULL DEFAULT 25 + history_size integer NOT NULL DEFAULT 25, + max_file_size integer NOT NULL DEFAULT 1048576, + max_image_width integer NOT NULL DEFAULT 2000, + max_image_height integer NOT NULL DEFAULT 2000 ); + -- ALTER TABLE rooms ADD COLUMN history_size integer NOT NULL DEFAULT 25; +-- ALTER TABLE rooms ADD COLUMN max_file_size integer NOT NULL DEFAULT 1048576; +-- ALTER TABLE rooms ADD COLUMN max_image_width integer NOT NULL DEFAULT 2000; +-- ALTER TABLE rooms ADD COLUMN max_image_height integer NOT NULL DEFAULT 2000; CREATE TABLE messages ( message_id SERIAL PRIMARY KEY, diff --git a/docs/reserved_nicks.txt b/docs/reserved_nicks.txt index 83be5fd..b11c615 100644 --- a/docs/reserved_nicks.txt +++ b/docs/reserved_nicks.txt @@ -73,6 +73,7 @@ reports reset room rooms +roomlist search shop stickers diff --git a/src/admin.clj b/src/admin.clj index 7c7721e..9dbc65c 100644 --- a/src/admin.clj +++ b/src/admin.clj @@ -4,9 +4,29 @@ (:use compojure email scheduled-agent + rooms user utils)) +;; Rooms + +(defn count-room-users [key] + (if-let [r (rooms/lookup-room key)] + (count @(:users r)) + 0)) + + +(defn show-rooms [session] + (if-vip + (let [rooms (do-select ["SELECT * FROM ROOMS ORDER BY CREATED_ON ASC"]) + st (fetch-template "roomlist" session)] + (.setAttribute st "rooms" (for [r rooms] + (stringify-and-escape + (assoc r + :created_on (format-yyyy-mm-dd (:created_on r)) + :users (count-room-users (:key r)))))) + (.toString st)))) + ;; Muting (def *mute-refresh-period-sec* 60) diff --git a/src/rooms.clj b/src/rooms.clj index 4f7d6c4..e919557 100644 --- a/src/rooms.clj +++ b/src/rooms.clj @@ -1,6 +1,7 @@ (ns rooms (:import java.util.Date) (:use clojure.contrib.str-utils + clojure.contrib.def utils user)) @@ -68,15 +69,18 @@ (do-select [query room-id *dumps-per-page* offset])))) (defn build-room-map-from-db [room-db] - {:admin_only (room-db :admin_only) - :room_id (room-db :room_id) - :key (room-db :key) - :name (room-db :name) - :description (room-db :description) - :history_size (room-db :history_size) - :users (ref {}) - :messages (ref (fetch-messages-by-room (room-db :room_id) false)) - :topic (ref nil) + {:admin_only (room-db :admin_only) + :room_id (room-db :room_id) + :key (room-db :key) + :name (room-db :name) + :description (room-db :description) + :max_file_size (room-db :max_file_size) + :max_image_width (room-db :max_image_width) + :max_image_height (room-db :max_image_height) + :history_size (room-db :history_size) + :users (ref {}) + :messages (ref (fetch-messages-by-room (room-db :room_id) false)) + :topic (ref nil) }) @@ -97,7 +101,6 @@ (defn build-msg [nick content msg-id] (struct message-struct nick content (new Date) msg-id)) - (def message-count-limit 200) (defn add-message [msg room] diff --git a/src/site.clj b/src/site.clj index 30aa90e..560565a 100644 --- a/src/site.clj +++ b/src/site.clj @@ -1096,10 +1096,7 @@ WHERE u.user_id = ANY(?)" ;; Upload
-(def max-upload-dimensions [2000 2000])
(def max-avatar-dimensions [800 800])
-(def max-vip-file-size (mbytes 5)) ; don't be nuts guys
-(def max-file-size (mbytes 1))
(def max-avatar-size (kbytes 500))
(defn is-file-too-big? [f limit]
@@ -1125,12 +1122,10 @@ WHERE u.user_id = ANY(?)" (defn image-url-from-file [dir date file]
(str-join "/" [*server-url* dir date (.getName file)]))
-(defn validate-upload-file [f vip]
- (let [file-limit (if vip
- max-vip-file-size
- max-file-size)]
- (or (is-file-too-big? f file-limit)
- (invalid-image-dimensions? f max-upload-dimensions))))
+(defn validate-upload-file [f room]
+ (or (is-file-too-big? f (:max_file_size room))
+ (invalid-image-dimensions? f [(:max_image_width room)
+ (:max_image_height room)])))
(defn validate-avatar-file [f]
(or (is-file-too-big? f max-avatar-size)
@@ -1145,7 +1140,7 @@ WHERE u.user_id = ANY(?)" ; responses. Therefore, return strings should not be JSON-encoded.
(defn do-upload [session image room]
- (if-let [err (validate-upload-file (image :tempfile) (is-vip? session))]
+ (if-let [err (validate-upload-file (image :tempfile) room)]
(resp-error err)
(let [filename (format-filename (:filename image) (session :nick))
date (today)
@@ -1290,6 +1285,7 @@ WHERE u.user_id = ANY(?)" (GET "/debug" (debug-page session flash))
(POST "/debug" (debug-commmand! session params))
(GET "/mutes" (show-mutes session))
+ (GET "/roomlist" (show-rooms session))
(POST "/mute" (mute! session params))
(POST "/cancel-mute" (handle-cancel-mute! session params))
(GET "/profile-test/:t" (profile session "ryder" (params :t)))
diff --git a/template/roomlist.st b/template/roomlist.st new file mode 100644 index 0000000..6dadf6a --- /dev/null +++ b/template/roomlist.st @@ -0,0 +1,53 @@ +<html>
+ <head>
+ <title>dump.fm rooms</title>
+ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
+ <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.0/jquery-ui.min.js"
+ type="text/javascript"></script>
+ <script src="/static/js/jquery.tablesorter.min.js"
+ type="text/javascript"></script>
+ <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/ui-lightness/jquery-ui.css"
+ <script src="/static/js/admin.js" type="text/javascript"></script>
+ <link rel="stylesheet" type="text/css" href="/static/tsort/style.css">
+ <style>
+ body { font-family: Monaco, "Courier New", Courier, monospace; }
+ </style>
+ <script>
+ jQuery(function() { jQuery('.tablesorter').tablesorter({}); });
+ </script>
+</head>
+ <body>
+ <h1>dump.fm rooms</h1>
+ <table class="tablesorter">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>VIP?</th>
+ <th>Active?</th>
+ <th>Created On</th>
+ <th>Current Users</th>
+ <th>History Size</th>
+ <th>Max Filesize</th>
+ <th>Max Imagesize</th>
+ </tr>
+ </thead>
+ <tbody>
+ $rooms: { r |
+ <tr>
+ <td>$r.key$</td>
+ <td>$r.admin_only$</td>
+ <td>$r.active$</td>
+ <td>$r.created_on$</td>
+ <td>$r.users$</td>
+ <td>$r.history_size$</td>
+ <td>$r.max_file_size$</td>
+ <td>$r.max_image_size_x$x$r.max_image_size_y$</td>
+ </tr>
+ }$
+ </tbody>
+ </table>
+ </body>
+</html>
+
+
+
|
