comparison mod_http_muc_log/mod_http_muc_log.lua @ 5653:62c6e17a5e9d

Merge
author Stephen Paul Weber <singpolyma@singpolyma.net>
date Mon, 18 Sep 2023 08:24:19 -0500
parents b681948a01f1
children c20b77e5e032
comparison
equal deleted inserted replaced
5652:eade7ff9f52c 5653:62c6e17a5e9d
126 126
127 local lazy = module:get_option_boolean(module.name .. "_lazy_calendar", true); 127 local lazy = module:get_option_boolean(module.name .. "_lazy_calendar", true);
128 128
129 local presence_logged = module:get_option_boolean("muc_log_presences", false); 129 local presence_logged = module:get_option_boolean("muc_log_presences", false);
130 130
131 local function hide_presence(request) 131 local function show_presence(request) --> boolean|nil
132 -- boolean -> yes or no
133 -- nil -> dunno
132 if not presence_logged then 134 if not presence_logged then
133 return false; 135 -- No presence stored, skip
136 return nil;
134 end 137 end
135 if request.url.query then 138 if request.url.query then
136 local data = httplib.formdecode(request.url.query); 139 local data = httplib.formdecode(request.url.query);
137 if data then 140 if type(data) == "table" then
138 return data.p == "h" 141 if data.p == "s" or data.p == "h" then
139 end 142 return data.p == "s";
140 end 143 end
141 return false; 144 end
145 end
146 end
147
148 local function presence_with(request)
149 local show = show_presence(request);
150 if show == true then
151 return nil; -- no filter, everything
152 elseif show == false or show == nil then
153 -- only messages
154 return "message<groupchat";
155 end
156 end
157
158 local function presence_query(request) -- > ?p=[sh]
159 local show = show_presence(request);
160 if show == true then
161 return { p = "s" }
162 elseif show == false then
163 return { p = "h" }
164 else
165 return nil;
166 end
142 end 167 end
143 168
144 local function get_dates(room) --> { integer, ... } 169 local function get_dates(room) --> { integer, ... }
145 local date_list = archive.dates and archive:dates(room); 170 local date_list = archive.dates and archive:dates(room);
146 if date_list then 171 if date_list then
252 return render(template, { 277 return render(template, {
253 static = "../@static"; 278 static = "../@static";
254 room = room_obj._data; 279 room = room_obj._data;
255 jid = room_obj.jid; 280 jid = room_obj.jid;
256 jid_node = jid_split(room_obj.jid); 281 jid_node = jid_split(room_obj.jid);
257 hide_presence = hide_presence(request); 282 q = presence_query(request);
283 show_presence = show_presence(request);
258 presence_available = presence_logged; 284 presence_available = presence_logged;
259 dates = date_list; 285 dates = date_list;
260 links = { 286 links = {
261 { href = "../", rel = "up", text = "Room list" }, 287 { href = "../", rel = "up", text = "Room list" },
262 { href = "latest", rel = "last", text = "Latest" }, 288 { href = "latest", rel = "last", text = "Latest" },
266 292
267 -- Produce the chat log view 293 -- Produce the chat log view
268 local function logs_page(event, path) 294 local function logs_page(event, path)
269 local request, response = event.request, event.response; 295 local request, response = event.request, event.response;
270 296
271 local room, date = path:match("^([^/]+)/([^/]*)/?$"); 297 -- /room --> 303 /room/
272 if not room then 298 -- /room/ --> calendar view
299 -- /room/yyyy-mm-dd --> logs view
300 -- /room/yyyy-mm-dd/* --> 404
301 local room, date = path:match("^([^/]+)/([^/]*)$");
302 if not room and not path:find"/" then
273 response.headers.location = url.build({ path = path .. "/" }); 303 response.headers.location = url.build({ path = path .. "/" });
274 return 303; 304 return 303;
305 elseif not room then
306 return 404;
275 end 307 end
276 room = nodeprep(room); 308 room = nodeprep(room);
277 if not room then 309 if not room then
278 return 400; 310 return 400;
279 elseif date == "" then 311 elseif date == "" then
298 330
299 local logs, i = {}, 1; 331 local logs, i = {}, 1;
300 local iter, err = archive:find(room, { 332 local iter, err = archive:find(room, {
301 ["start"] = day_start; 333 ["start"] = day_start;
302 ["end"] = day_start + 86399; 334 ["end"] = day_start + 86399;
303 ["with"] = hide_presence(request) and "message<groupchat" or nil; 335 ["with"] = presence_with(request);
304 }); 336 });
305 if not iter then 337 if not iter then
306 module:log("warn", "Could not search archive: %s", err or "no error"); 338 module:log("warn", "Could not search archive: %s", err or "no error");
307 return 500; 339 return 500;
308 end 340 end
473 static = "../@static"; 505 static = "../@static";
474 date = date; 506 date = date;
475 room = room_obj._data; 507 room = room_obj._data;
476 jid = room_obj.jid; 508 jid = room_obj.jid;
477 jid_node = jid_split(room_obj.jid); 509 jid_node = jid_split(room_obj.jid);
478 hide_presence = hide_presence(request); 510 q = presence_query(request);
511 show_presence = show_presence(request);
479 presence_available = presence_logged; 512 presence_available = presence_logged;
480 lang = room_obj.get_language and room_obj:get_language(); 513 lang = room_obj.get_language and room_obj:get_language();
481 lines = logs; 514 lines = logs;
482 links = links; 515 links = links;
483 dates = {}; -- COMPAT util.interpolation {nil|func#...} bug 516 dates = {}; -- COMPAT util.interpolation {nil|func#...} bug
522 response.headers.content_type = "text/html; charset=utf-8"; 555 response.headers.content_type = "text/html; charset=utf-8";
523 return render(template, { 556 return render(template, {
524 static = "./@static"; 557 static = "./@static";
525 title = module:get_option_string("name", "Prosody Chatrooms"); 558 title = module:get_option_string("name", "Prosody Chatrooms");
526 jid = module.host; 559 jid = module.host;
527 hide_presence = hide_presence(request); 560 q = presence_query(request);
561 show_presence = show_presence(request);
528 presence_available = presence_logged; 562 presence_available = presence_logged;
529 rooms = room_list; 563 rooms = room_list;
530 dates = {}; -- COMPAT util.interpolation {nil|func#...} bug 564 dates = {}; -- COMPAT util.interpolation {nil|func#...} bug
531 }); 565 });
532 end 566 end