Annotate

mod_http_muc_log/mod_http_muc_log.lua @ 3736:3784bbcbb8ff

mod_log_json: Prettify JSON for readability
author Kim Alvefur <zash@zash.se>
date Sun, 03 Nov 2019 14:47:00 +0100
parent 3722:bdbbf11eac0c
child 3749:cb61f0e06de3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
1 local mt = require"util.multitable";
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 local datetime = require"util.datetime";
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 local jid_split = require"util.jid".split;
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local nodeprep = require"util.encodings".stringprep.nodeprep;
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 local it = require"util.iterators";
1581
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
6 local url = require"socket.url";
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
7 local os_time, os_date = os.time, os.date;
3485
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
8 local httplib = require "util.http";
1750
3b839db88412 mod_http_muc_log: Template engine thing moved into util.interpolation
Kim Alvefur <zash@zash.se>
parents: 1671
diff changeset
9 local render = require"util.interpolation".new("%b{}", require"util.stanza".xml_escape);
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10
1571
eed7db9f3157 mod_mam_muc, mod_http_muc_log: Change store name from 'archive2' to 'muc_log' to distinguish it from personal MAM archives. Old data will require migration.
Kim Alvefur <zash@zash.se>
parents: 1564
diff changeset
11 local archive = module:open_store("muc_log", "archive");
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 -- Support both old and new MUC code
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 local mod_muc = module:depends"muc";
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 local rooms = rawget(mod_muc, "rooms");
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 local each_room = rawget(mod_muc, "each_room") or function() return it.values(rooms); end;
1554
8059b7cdaf17 mod_http_muc_log: Make MUC local code identical to mod_mam_muc
Kim Alvefur <zash@zash.se>
parents: 1553
diff changeset
17 local new_muc = not rooms;
8059b7cdaf17 mod_http_muc_log: Make MUC local code identical to mod_mam_muc
Kim Alvefur <zash@zash.se>
parents: 1553
diff changeset
18 if new_muc then
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 rooms = module:shared"muc/rooms";
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 end
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 local get_room_from_jid = rawget(mod_muc, "get_room_from_jid") or
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 function (jid)
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 return rooms[jid];
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 end
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 local function get_room(name)
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 local jid = name .. '@' .. module.host;
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 return get_room_from_jid(jid);
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 end
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30
3582
444e2306c99a mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents: 3578
diff changeset
31 local use_oob = module:get_option_boolean(module.name .. "_show_images", false);
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 module:depends"http";
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33
1654
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
34 local template;
1582
8e282eb0c70c mod_http_muc_log: Split out template into a configurable file.
Kim Alvefur <zash@zash.se>
parents: 1581
diff changeset
35 do
3063
a9fa98e28697 mod_http_muc_log: Use separate variable for filename and file handle
Kim Alvefur <zash@zash.se>
parents: 3062
diff changeset
36 local template_filename = module:get_option_string(module.name .. "_template", module.name .. ".html");
3066
cefc375d0929 mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents: 3064
diff changeset
37 local template_file, err = module:load_resource(template_filename);
cefc375d0929 mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents: 3064
diff changeset
38 if template_file then
cefc375d0929 mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents: 3064
diff changeset
39 template, err = template_file:read("*a");
cefc375d0929 mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents: 3064
diff changeset
40 template_file:close();
cefc375d0929 mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents: 3064
diff changeset
41 end
cefc375d0929 mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents: 3064
diff changeset
42 if not template then
cefc375d0929 mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents: 3064
diff changeset
43 module:log("error", "Error loading template: %s", err);
3486
887ce59cf396 mod_http_muc_log: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents: 3485
diff changeset
44 template = render("<h1>mod_{module} could not read the template</h1>\
887ce59cf396 mod_http_muc_log: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents: 3485
diff changeset
45 <p>Tried to open <b>{filename}</b></p>\
887ce59cf396 mod_http_muc_log: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents: 3485
diff changeset
46 <pre>{error}</pre>",
3066
cefc375d0929 mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents: 3064
diff changeset
47 { module = module.name, filename = template_filename, error = err });
cefc375d0929 mod_http_muc_log: Handle errors while loading template file in a more graceful manner
Kim Alvefur <zash@zash.se>
parents: 3064
diff changeset
48 end
1582
8e282eb0c70c mod_http_muc_log: Split out template into a configurable file.
Kim Alvefur <zash@zash.se>
parents: 1581
diff changeset
49 end
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50
1654
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
51 -- local base_url = module:http_url() .. '/'; -- TODO: Generate links in a smart way
1581
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
52 local get_link do
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
53 local link, path = { path = '/' }, { "", "", is_directory = true };
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
54 function get_link(room, date)
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
55 path[1], path[2] = room, date;
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
56 path.is_directory = not date;
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
57 link.path = url.build_path(path);
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
58 return url.build(link);
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
59 end
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
60 end
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61
3593
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
62 local function get_absolute_link(room, date)
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
63 local link = url.parse(module:http_url());
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
64 local path = url.parse_path(link.path);
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
65 if room then
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
66 table.insert(path, room);
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
67 if date then
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
68 table.insert(path, date)
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
69 path.is_directory = false;
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
70 else
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
71 path.is_directory = true;
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
72 end
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
73 end
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
74 link.path = url.build_path(path)
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
75 return url.build(link)
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
76 end
0b670831ace3 mod_http_muc_log: Correctly build absolute URLs
Kim Alvefur <zash@zash.se>
parents: 3592
diff changeset
77
3059
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
78 -- Whether room can be joined by anyone
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
79 local function open_room(room) -- : boolean
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
80 if type(room) == "string" then
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
81 room = get_room(room);
3061
25eecbb195d9 mod_http_muc_log: Add comment about argument to policy function
Kim Alvefur <zash@zash.se>
parents: 3060
diff changeset
82 -- assumed to be a room object otherwise
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
83 end
3057
f69a2e97d912 mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents: 2846
diff changeset
84 if not room then
f69a2e97d912 mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents: 2846
diff changeset
85 return nil;
f69a2e97d912 mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents: 2846
diff changeset
86 end
f69a2e97d912 mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents: 2846
diff changeset
87
3059
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
88 if (room.get_members_only or room.is_members_only)(room) then
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
89 return false;
3057
f69a2e97d912 mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents: 2846
diff changeset
90 end
f69a2e97d912 mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents: 2846
diff changeset
91
3059
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
92 if room:get_password() then
3057
f69a2e97d912 mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents: 2846
diff changeset
93 return false;
f69a2e97d912 mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents: 2846
diff changeset
94 end
f69a2e97d912 mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents: 2846
diff changeset
95
f69a2e97d912 mod_http_muc_log: Improve readability of policy function
Kim Alvefur <zash@zash.se>
parents: 2846
diff changeset
96 return true;
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
97 end
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
98
3596
6e529f53b3c3 mod_http_muc_log: Allow specifying the default view
Kim Alvefur <zash@zash.se>
parents: 3595
diff changeset
99 -- Can be set to "latest"
6e529f53b3c3 mod_http_muc_log: Allow specifying the default view
Kim Alvefur <zash@zash.se>
parents: 3595
diff changeset
100 local default_view = module:get_option_string(module.name .. "_default_view", nil);
6e529f53b3c3 mod_http_muc_log: Allow specifying the default view
Kim Alvefur <zash@zash.se>
parents: 3595
diff changeset
101
3064
ce61f1826f1f mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents: 3063
diff changeset
102 module:hook("muc-disco#info", function (event)
ce61f1826f1f mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents: 3063
diff changeset
103 local room = event.room;
ce61f1826f1f mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents: 3063
diff changeset
104 if open_room(room) then
ce61f1826f1f mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents: 3063
diff changeset
105 table.insert(event.form, { name = "muc#roominfo_logs", type="text-single" });
3596
6e529f53b3c3 mod_http_muc_log: Allow specifying the default view
Kim Alvefur <zash@zash.se>
parents: 3595
diff changeset
106 event.formdata["muc#roominfo_logs"] = get_absolute_link(jid_split(event.room.jid), default_view);
3064
ce61f1826f1f mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents: 3063
diff changeset
107 end
ce61f1826f1f mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents: 3063
diff changeset
108 end);
ce61f1826f1f mod_http_muc_log: Include URL in disco#info for public rooms
Kim Alvefur <zash@zash.se>
parents: 3063
diff changeset
109
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
110 local function sort_Y(a,b) return a.year > b.year end
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
111 local function sort_m(a,b) return a.n > b.n end
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
112
2590
63dd3e525f13 mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents: 2236
diff changeset
113 -- Time zone hack?
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
114 local t_diff = os_time(os_date("*t")) - os_time(os_date("!*t"));
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
115 local function time(t)
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
116 return os_time(t) + t_diff;
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
117 end
2836
52a7c0f6aea1 mod_http_muc_log: Add a function for rounding timestamps down to midnight
Kim Alvefur <zash@zash.se>
parents: 2826
diff changeset
118 local function date_floor(t)
52a7c0f6aea1 mod_http_muc_log: Add a function for rounding timestamps down to midnight
Kim Alvefur <zash@zash.se>
parents: 2826
diff changeset
119 return t - t % 86400;
52a7c0f6aea1 mod_http_muc_log: Add a function for rounding timestamps down to midnight
Kim Alvefur <zash@zash.se>
parents: 2826
diff changeset
120 end
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
121
2590
63dd3e525f13 mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents: 2236
diff changeset
122 -- Fetch one item
1654
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
123 local function find_once(room, query, retval)
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
124 if query then query.limit = 1; else query = { limit = 1 }; end
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
125 local iter, err = archive:find(room, query);
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
126 if not iter then return iter, err; end
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
127 if retval then
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
128 return select(retval, iter());
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
129 end
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
130 return iter();
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
131 end
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
132
2826
ed26608920d4 mod_http_muc_log: Switch to an inaccurate but O(1) method of producing the calendar view
Kim Alvefur <zash@zash.se>
parents: 2763
diff changeset
133 local lazy = module:get_option_boolean(module.name .. "_lazy_calendar", true);
ed26608920d4 mod_http_muc_log: Switch to an inaccurate but O(1) method of producing the calendar view
Kim Alvefur <zash@zash.se>
parents: 2763
diff changeset
134
3597
da7ec4ed6ddf mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents: 3596
diff changeset
135 local presence_logged = module:get_option_boolean("muc_log_presences", false);
da7ec4ed6ddf mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents: 3596
diff changeset
136
3485
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
137 local function hide_presence(request)
3597
da7ec4ed6ddf mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents: 3596
diff changeset
138 if not presence_logged then
da7ec4ed6ddf mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents: 3596
diff changeset
139 return false;
da7ec4ed6ddf mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents: 3596
diff changeset
140 end
3485
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
141 if request.url.query then
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
142 local data = httplib.formdecode(request.url.query);
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
143 if data then
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
144 return data.p == "h"
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
145 end
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
146 end
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
147 return false;
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
148 end
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
149
2590
63dd3e525f13 mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents: 2236
diff changeset
150 -- Produce the calendar view
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
151 local function years_page(event, path)
3485
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
152 local request, response = event.request, event.response;
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
153
1552
81b3599c02fb mod_http_muc_log: Have URL of date list page end with a slash
Kim Alvefur <zash@zash.se>
parents: 1550
diff changeset
154 local room = nodeprep(path:match("^(.*)/$"));
3059
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
155 local is_open = open_room(room);
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
156 if is_open == nil then
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
157 return -- implicit 404
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
158 elseif is_open == false then
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
159 return 403;
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
160 end
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
161
2590
63dd3e525f13 mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents: 2236
diff changeset
162 -- Collect each date that has messages
63dd3e525f13 mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents: 2236
diff changeset
163 -- convert it to a year / month / day tree
1832
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
164 local date_list = archive.dates and archive:dates(room);
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
165 local dates = mt.new();
1832
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
166 if date_list then
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
167 for _, date in ipairs(date_list) do
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
168 local when = datetime.parse(date.."T00:00:00Z");
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
169 local t = os_date("!*t", when);
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
170 dates:set(t.year, t.month, t.day, when);
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
171 end
2826
ed26608920d4 mod_http_muc_log: Switch to an inaccurate but O(1) method of producing the calendar view
Kim Alvefur <zash@zash.se>
parents: 2763
diff changeset
172 elseif lazy then
ed26608920d4 mod_http_muc_log: Switch to an inaccurate but O(1) method of producing the calendar view
Kim Alvefur <zash@zash.se>
parents: 2763
diff changeset
173 -- Lazy with many false positives
ed26608920d4 mod_http_muc_log: Switch to an inaccurate but O(1) method of producing the calendar view
Kim Alvefur <zash@zash.se>
parents: 2763
diff changeset
174 local first_day = find_once(room, nil, 3);
ed26608920d4 mod_http_muc_log: Switch to an inaccurate but O(1) method of producing the calendar view
Kim Alvefur <zash@zash.se>
parents: 2763
diff changeset
175 local last_day = find_once(room, { reverse = true }, 3);
2839
7738d7158dd0 mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents: 2838
diff changeset
176 if first_day and last_day then
7738d7158dd0 mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents: 2838
diff changeset
177 first_day = date_floor(first_day);
7738d7158dd0 mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents: 2838
diff changeset
178 last_day = date_floor(last_day);
7738d7158dd0 mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents: 2838
diff changeset
179 for when = first_day, last_day, 86400 do
7738d7158dd0 mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents: 2838
diff changeset
180 local t = os_date("!*t", when);
7738d7158dd0 mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents: 2838
diff changeset
181 dates:set(t.year, t.month, t.day, when);
7738d7158dd0 mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents: 2838
diff changeset
182 end
7738d7158dd0 mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents: 2838
diff changeset
183 else
7738d7158dd0 mod_http_muc_log: Return a 404 page if there are no messages to derive a time span from
Kim Alvefur <zash@zash.se>
parents: 2838
diff changeset
184 return; -- 404
2826
ed26608920d4 mod_http_muc_log: Switch to an inaccurate but O(1) method of producing the calendar view
Kim Alvefur <zash@zash.se>
parents: 2763
diff changeset
185 end
1832
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
186 else
2590
63dd3e525f13 mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents: 2236
diff changeset
187 -- Collect date the hard way
1832
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
188 module:log("debug", "Find all dates with messages");
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
189 local next_day;
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
190 repeat
2235
c5ee48e27d01 mod_http_muc_log: Link to next day with content, regardless of type (simplifes)
Kim Alvefur <zash@zash.se>
parents: 1832
diff changeset
191 local when = find_once(room, { start = next_day; }, 3);
1832
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
192 if not when then break; end
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
193 local t = os_date("!*t", when);
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
194 dates:set(t.year, t.month, t.day, when );
2836
52a7c0f6aea1 mod_http_muc_log: Add a function for rounding timestamps down to midnight
Kim Alvefur <zash@zash.se>
parents: 2826
diff changeset
195 next_day = date_floor(when) + 86400;
1832
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
196 until not next_day;
48125f2c358b mod_http_muc_log: If archive driver provides the dates method, use it
Kim Alvefur <zash@zash.se>
parents: 1750
diff changeset
197 end
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
198
1654
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
199 local years = {};
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
200
2590
63dd3e525f13 mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents: 2236
diff changeset
201 -- Wrangle Y/m/d tree into year / month / week / day tree for calendar view
1654
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
202 for current_year, months_t in pairs(dates.data) do
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
203 local t = { year = current_year, month = 1, day = 1 };
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
204 local months = { };
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
205 local year = { year = current_year, months = months };
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
206 years[#years+1] = year;
1654
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
207 for current_month, days_t in pairs(months_t) do
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
208 t.day = 1;
1654
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
209 t.month = current_month;
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
210 local tmp = os_date("!*t", time(t));
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
211 local days = {};
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
212 local week = { days = days }
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
213 local weeks = { week };
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
214 local month = { year = year.year, month = os_date("!%B", time(t)), n = current_month, weeks = weeks };
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
215 months[#months+1] = month;
1654
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
216 local current_day = 1;
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
217 for _=1, (tmp.wday+5)%7 do
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
218 days[current_day], current_day = {}, current_day+1;
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
219 end
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
220 for i = 1, 31 do
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
221 t.day = i;
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
222 tmp = os_date("!*t", time(t));
1654
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
223 if tmp.month ~= current_month then break end
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
224 if i > 1 and tmp.wday == 2 then
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
225 days = {};
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
226 weeks[#weeks+1] = { days = days };
1654
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
227 current_day = 1;
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
228 end
2685
cd5781ca782d mod_http_muc_log: Remove caching
Kim Alvefur <zash@zash.se>
parents: 2593
diff changeset
229 days[current_day] = {
cd5781ca782d mod_http_muc_log: Remove caching
Kim Alvefur <zash@zash.se>
parents: 2593
diff changeset
230 wday = tmp.wday, day = i, href = days_t[i] and datetime.date(days_t[i])
cd5781ca782d mod_http_muc_log: Remove caching
Kim Alvefur <zash@zash.se>
parents: 2593
diff changeset
231 };
cd5781ca782d mod_http_muc_log: Remove caching
Kim Alvefur <zash@zash.se>
parents: 2593
diff changeset
232 current_day = current_day+1;
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
233 end
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
234 end
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
235 table.sort(year, sort_m);
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
236 end
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
237 table.sort(years, sort_Y);
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
238
2590
63dd3e525f13 mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents: 2236
diff changeset
239 -- Phew, all wrangled, all that's left is rendering it with the template
63dd3e525f13 mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents: 2236
diff changeset
240
1579
9e784ddac236 mod_http_muc_log: Include charset in Content-Type header
Kim Alvefur <zash@zash.se>
parents: 1578
diff changeset
241 response.headers.content_type = "text/html; charset=utf-8";
1581
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
242 return render(template, {
3715
f03a023cd523 mod_http_muc_log: Compose page title from room data
Kim Alvefur <zash@zash.se>
parents: 3714
diff changeset
243 room = get_room(room)._data;
1581
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
244 jid = get_room(room).jid;
3692
96c6d9b0969f mod_http_muc_log: Hide room join link from room listing
Kim Alvefur <zash@zash.se>
parents: 3690
diff changeset
245 jid_node = jid_split(get_room(room).jid);
3485
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
246 hide_presence = hide_presence(request);
3597
da7ec4ed6ddf mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents: 3596
diff changeset
247 presence_available = presence_logged;
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
248 years = years;
1581
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
249 links = {
2840
683a2f25223d mod_http_muc_log: Reword "back" links
Kim Alvefur <zash@zash.se>
parents: 2839
diff changeset
250 { href = "../", rel = "up", text = "Room list" },
3718
cc6f7e2e4a59 mod_http_muc_log: Add arrow to 'latest' link like on other navigation
Kim Alvefur <zash@zash.se>
parents: 3715
diff changeset
251 { href = "latest", rel = "last", text = "Latest" },
1581
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
252 };
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
253 });
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
254 end
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
255
2590
63dd3e525f13 mod_http_muc_log: Add some comments
Kim Alvefur <zash@zash.se>
parents: 2236
diff changeset
256 -- Produce the chat log view
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
257 local function logs_page(event, path)
3485
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
258 local request, response = event.request, event.response;
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
259
3591
3f8383c5a045 mod_http_muc_log: Fix Y10k bug
Kim Alvefur <zash@zash.se>
parents: 3583
diff changeset
260 local room, date = path:match("^([^/]+)/([^/]*)/?$");
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
261 room = nodeprep(room);
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
262 if not room then
3591
3f8383c5a045 mod_http_muc_log: Fix Y10k bug
Kim Alvefur <zash@zash.se>
parents: 3583
diff changeset
263 return 400;
3f8383c5a045 mod_http_muc_log: Fix Y10k bug
Kim Alvefur <zash@zash.se>
parents: 3583
diff changeset
264 elseif date == "" then
1606
2c8b985ebde5 mod_http_muc_log: Switch to a calendar view for selecting dates
Kim Alvefur <zash@zash.se>
parents: 1605
diff changeset
265 return years_page(event, path);
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
266 end
3059
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
267 local is_open = open_room(room);
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
268 if is_open == nil then
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
269 return -- implicit 404
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
270 elseif is_open == false then
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
271 return 403;
14d8f2a9d5f4 mod_http_muc_log: Base read-access on whether anyone would be able to join (like MUC)
Kim Alvefur <zash@zash.se>
parents: 3058
diff changeset
272 end
3592
61a9c087730a mod_http_muc_log: Provide a redirect to 'latest' day with logs (fixes #1360)
Kim Alvefur <zash@zash.se>
parents: 3591
diff changeset
273 if date == "latest" then
61a9c087730a mod_http_muc_log: Provide a redirect to 'latest' day with logs (fixes #1360)
Kim Alvefur <zash@zash.se>
parents: 3591
diff changeset
274 local last_day = find_once(room, { reverse = true }, 3);
3595
00a848ede42d mod_http_muc_log: Preserve ?query part in redirect
Kim Alvefur <zash@zash.se>
parents: 3594
diff changeset
275 response.headers.location = url.build({ path = datetime.date(last_day), query = request.url.query });
3592
61a9c087730a mod_http_muc_log: Provide a redirect to 'latest' day with logs (fixes #1360)
Kim Alvefur <zash@zash.se>
parents: 3591
diff changeset
276 return 303;
61a9c087730a mod_http_muc_log: Provide a redirect to 'latest' day with logs (fixes #1360)
Kim Alvefur <zash@zash.se>
parents: 3591
diff changeset
277 end
2841
462dece0a3c2 mod_http_muc_log: Parse date out of path once
Kim Alvefur <zash@zash.se>
parents: 2840
diff changeset
278 local day_start = datetime.parse(date.."T00:00:00Z");
3591
3f8383c5a045 mod_http_muc_log: Fix Y10k bug
Kim Alvefur <zash@zash.se>
parents: 3583
diff changeset
279 if not day_start then
3f8383c5a045 mod_http_muc_log: Fix Y10k bug
Kim Alvefur <zash@zash.se>
parents: 3583
diff changeset
280 module:log("debug", "Invalid date format: %q", date);
3f8383c5a045 mod_http_muc_log: Fix Y10k bug
Kim Alvefur <zash@zash.se>
parents: 3583
diff changeset
281 return 400;
3f8383c5a045 mod_http_muc_log: Fix Y10k bug
Kim Alvefur <zash@zash.se>
parents: 3583
diff changeset
282 end
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
283
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
284 local logs, i = {}, 1;
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
285 local iter, err = archive:find(room, {
2841
462dece0a3c2 mod_http_muc_log: Parse date out of path once
Kim Alvefur <zash@zash.se>
parents: 2840
diff changeset
286 ["start"] = day_start;
462dece0a3c2 mod_http_muc_log: Parse date out of path once
Kim Alvefur <zash@zash.se>
parents: 2840
diff changeset
287 ["end"] = day_start + 86399;
3485
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
288 ["with"] = hide_presence(request) and "message<groupchat" or nil;
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
289 });
1654
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
290 if not iter then
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
291 module:log("warn", "Could not search archive: %s", err or "no error");
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
292 return 500;
1a6d6221c5f6 mod_http_muc_log: Cleanup [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1625
diff changeset
293 end
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
294
1577
0a6974f2cb55 mod_http_muc_log: Use archive IDs to find next and previous dates that contain messages
Kim Alvefur <zash@zash.se>
parents: 1576
diff changeset
295 local first, last;
1555
2e51f70cd7ea mod_http_muc_log: Make pretty
Kim Alvefur <zash@zash.se>
parents: 1554
diff changeset
296 for key, item, when in iter do
3703
7244ff1d62a8 mod_http_muc_log: Expose xml:lang from each message/body #a11y
Kim Alvefur <zash@zash.se>
parents: 3702
diff changeset
297 local body_tag = item:get_child("body");
7244ff1d62a8 mod_http_muc_log: Expose xml:lang from each message/body #a11y
Kim Alvefur <zash@zash.se>
parents: 3702
diff changeset
298 local body = body_tag and body_tag:get_text();
2591
3e1a85c5194c mod_http_muc_log: Move scope of variables into loop
Kim Alvefur <zash@zash.se>
parents: 2590
diff changeset
299 local subject = item:get_child_text("subject");
3e1a85c5194c mod_http_muc_log: Move scope of variables into loop
Kim Alvefur <zash@zash.se>
parents: 2590
diff changeset
300 local verb = nil;
3703
7244ff1d62a8 mod_http_muc_log: Expose xml:lang from each message/body #a11y
Kim Alvefur <zash@zash.se>
parents: 3702
diff changeset
301 local lang = body_tag and body_tag.attr["xml:lang"] or item.attr["xml:lang"];
1555
2e51f70cd7ea mod_http_muc_log: Make pretty
Kim Alvefur <zash@zash.se>
parents: 1554
diff changeset
302 if subject then
1578
a68ec7a2dc02 mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents: 1577
diff changeset
303 verb, body = "set the topic to", subject;
1555
2e51f70cd7ea mod_http_muc_log: Make pretty
Kim Alvefur <zash@zash.se>
parents: 1554
diff changeset
304 elseif body and body:sub(1,4) == "/me " then
2e51f70cd7ea mod_http_muc_log: Make pretty
Kim Alvefur <zash@zash.se>
parents: 1554
diff changeset
305 verb, body = body:sub(5), nil;
2e51f70cd7ea mod_http_muc_log: Make pretty
Kim Alvefur <zash@zash.se>
parents: 1554
diff changeset
306 elseif item.name == "presence" then
3060
982668000163 mod_http_muc_log: Add a note about changing how presence is treated
Kim Alvefur <zash@zash.se>
parents: 3059
diff changeset
307 -- TODO Distinguish between join and presence update
1555
2e51f70cd7ea mod_http_muc_log: Make pretty
Kim Alvefur <zash@zash.se>
parents: 1554
diff changeset
308 verb = item.attr.type == "unavailable" and "has left" or "has joined";
3703
7244ff1d62a8 mod_http_muc_log: Expose xml:lang from each message/body #a11y
Kim Alvefur <zash@zash.se>
parents: 3702
diff changeset
309 lang = "en";
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
310 end
3582
444e2306c99a mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents: 3578
diff changeset
311 local oob = use_oob and item:get_child("x", "jabber:x:oob");
444e2306c99a mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents: 3578
diff changeset
312 if body or verb or oob then
444e2306c99a mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents: 3578
diff changeset
313 local line = {
1578
a68ec7a2dc02 mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents: 1577
diff changeset
314 key = key;
a68ec7a2dc02 mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents: 1577
diff changeset
315 datetime = datetime.datetime(when);
a68ec7a2dc02 mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents: 1577
diff changeset
316 time = datetime.time(when);
a68ec7a2dc02 mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents: 1577
diff changeset
317 verb = verb;
a68ec7a2dc02 mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents: 1577
diff changeset
318 body = body;
3703
7244ff1d62a8 mod_http_muc_log: Expose xml:lang from each message/body #a11y
Kim Alvefur <zash@zash.se>
parents: 3702
diff changeset
319 lang = lang;
1578
a68ec7a2dc02 mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents: 1577
diff changeset
320 nick = select(3, jid_split(item.attr.from));
a68ec7a2dc02 mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents: 1577
diff changeset
321 st_name = item.name;
a68ec7a2dc02 mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents: 1577
diff changeset
322 st_type = item.attr.type;
3582
444e2306c99a mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents: 3578
diff changeset
323 };
444e2306c99a mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents: 3578
diff changeset
324 if oob then
444e2306c99a mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents: 3578
diff changeset
325 line.oob = {
444e2306c99a mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents: 3578
diff changeset
326 url = oob:get_child_text("url");
444e2306c99a mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents: 3578
diff changeset
327 desc = oob:get_child_text("desc");
444e2306c99a mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents: 3578
diff changeset
328 }
444e2306c99a mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents: 3578
diff changeset
329 end
444e2306c99a mod_http_muc_log: Add option to show OOB images
Kim Alvefur <zash@zash.se>
parents: 3578
diff changeset
330 logs[i], i = line, i + 1;
1578
a68ec7a2dc02 mod_http_muc_log: Show only messages with presentable content
Kim Alvefur <zash@zash.se>
parents: 1577
diff changeset
331 end
1577
0a6974f2cb55 mod_http_muc_log: Use archive IDs to find next and previous dates that contain messages
Kim Alvefur <zash@zash.se>
parents: 1576
diff changeset
332 first = first or key;
0a6974f2cb55 mod_http_muc_log: Use archive IDs to find next and previous dates that contain messages
Kim Alvefur <zash@zash.se>
parents: 1576
diff changeset
333 last = key;
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
334 end
2846
7eb23a4e7fde mod_http_muc_log: Generate empty pages in lazy mode, so that one can navigate past quiet days
Kim Alvefur <zash@zash.se>
parents: 2845
diff changeset
335 if i == 1 and not lazy then return end -- No items
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
336
2236
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
337 local next_when, prev_when = "", "";
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
338 local date_list = archive.dates and archive:dates(room);
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
339 if date_list then
2592
fb1987d4ac62 mod_http_muc_log: Rename loop variable to avoid name clash
Kim Alvefur <zash@zash.se>
parents: 2591
diff changeset
340 for j = 1, #date_list do
fb1987d4ac62 mod_http_muc_log: Rename loop variable to avoid name clash
Kim Alvefur <zash@zash.se>
parents: 2591
diff changeset
341 if date_list[j] == date then
fb1987d4ac62 mod_http_muc_log: Rename loop variable to avoid name clash
Kim Alvefur <zash@zash.se>
parents: 2591
diff changeset
342 next_when = date_list[j+1] or "";
fb1987d4ac62 mod_http_muc_log: Rename loop variable to avoid name clash
Kim Alvefur <zash@zash.se>
parents: 2591
diff changeset
343 prev_when = date_list[j-1] or "";
2236
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
344 break;
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
345 end
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
346 end
2844
9fac07bba402 mod_http_muc_log: Lazy nex/prev link generation
Kim Alvefur <zash@zash.se>
parents: 2843
diff changeset
347 elseif lazy then
9fac07bba402 mod_http_muc_log: Lazy nex/prev link generation
Kim Alvefur <zash@zash.se>
parents: 2843
diff changeset
348 next_when = datetime.date(day_start + 86400);
9fac07bba402 mod_http_muc_log: Lazy nex/prev link generation
Kim Alvefur <zash@zash.se>
parents: 2843
diff changeset
349 prev_when = datetime.date(day_start - 86400);
2845
0de6ed2ae9bd mod_http_muc_log: Check that there are timestamps to work with
Kim Alvefur <zash@zash.se>
parents: 2844
diff changeset
350 elseif first and last then
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
351
2236
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
352 module:log("debug", "Find next date with messages");
2593
b61b0ff1c0f9 mod_http_muc_log: Fix prev/next date finding
Kim Alvefur <zash@zash.se>
parents: 2592
diff changeset
353 next_when = find_once(room, { after = last }, 3);
2236
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
354 if next_when then
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
355 next_when = datetime.date(next_when);
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
356 module:log("debug", "Next message: %s", next_when);
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
357 end
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
358
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
359 module:log("debug", "Find prev date with messages");
2593
b61b0ff1c0f9 mod_http_muc_log: Fix prev/next date finding
Kim Alvefur <zash@zash.se>
parents: 2592
diff changeset
360 prev_when = find_once(room, { before = first, reverse = true }, 3);
2236
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
361 if prev_when then
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
362 prev_when = datetime.date(prev_when);
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
363 module:log("debug", "Previous message: %s", prev_when);
86bc6e1d9d4d mod_http_muc_log: Find next and previous date with date index if this is supported by the storage driver
Kim Alvefur <zash@zash.se>
parents: 2235
diff changeset
364 end
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
365 end
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
366
3690
8c0a6d4541d5 mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents: 3597
diff changeset
367 local links = {
8c0a6d4541d5 mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents: 3597
diff changeset
368 { href = "./", rel = "up", text = "Calendar" },
8c0a6d4541d5 mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents: 3597
diff changeset
369 };
8c0a6d4541d5 mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents: 3597
diff changeset
370 if prev_when ~= "" then
8c0a6d4541d5 mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents: 3597
diff changeset
371 table.insert(links, { href = prev_when, rel = "prev", text = prev_when});
8c0a6d4541d5 mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents: 3597
diff changeset
372 end
8c0a6d4541d5 mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents: 3597
diff changeset
373 if next_when ~= "" then
8c0a6d4541d5 mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents: 3597
diff changeset
374 table.insert(links, { href = next_when, rel = "next", text = next_when});
8c0a6d4541d5 mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents: 3597
diff changeset
375 end
8c0a6d4541d5 mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents: 3597
diff changeset
376
1579
9e784ddac236 mod_http_muc_log: Include charset in Content-Type header
Kim Alvefur <zash@zash.se>
parents: 1578
diff changeset
377 response.headers.content_type = "text/html; charset=utf-8";
1581
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
378 return render(template, {
3714
04ff0de40ba9 mod_http_muc_log: Add date metadata to log pages
Kim Alvefur <zash@zash.se>
parents: 3703
diff changeset
379 date = date;
3715
f03a023cd523 mod_http_muc_log: Compose page title from room data
Kim Alvefur <zash@zash.se>
parents: 3714
diff changeset
380 room = get_room(room)._data;
1581
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
381 jid = get_room(room).jid;
3692
96c6d9b0969f mod_http_muc_log: Hide room join link from room listing
Kim Alvefur <zash@zash.se>
parents: 3690
diff changeset
382 jid_node = jid_split(get_room(room).jid);
3485
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
383 hide_presence = hide_presence(request);
3597
da7ec4ed6ddf mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents: 3596
diff changeset
384 presence_available = presence_logged;
3702
caf27826c7b2 mod_http_muc_log: Use configured room language in room title/desc #a11y
Kim Alvefur <zash@zash.se>
parents: 3692
diff changeset
385 lang = get_room(room).get_language and get_room(room):get_language();
1581
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
386 lines = logs;
3690
8c0a6d4541d5 mod_http_muc_log: Wrap navigation in unorderded lists (thanks jonas’)
Kim Alvefur <zash@zash.se>
parents: 3597
diff changeset
387 links = links;
1581
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
388 });
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
389 end
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
390
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
391 local function list_rooms(event)
3485
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
392 local request, response = event.request, event.response;
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
393 local room_list, i = {}, 1;
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
394 for room in each_room() do
3062
37a78e365b46 mod_http_muc_log: Fix inverted logic
Kim Alvefur <zash@zash.se>
parents: 3061
diff changeset
395 if not (room.get_hidden or room.is_hidden)(room) then
1581
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
396 room_list[i], i = {
3578
ea63dc0cc824 mod_http_muc_log: Sort room listing by jid for stable order
Kim Alvefur <zash@zash.se>
parents: 3560
diff changeset
397 jid = room.jid;
3596
6e529f53b3c3 mod_http_muc_log: Allow specifying the default view
Kim Alvefur <zash@zash.se>
parents: 3595
diff changeset
398 href = get_link(jid_split(room.jid), default_view);
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
399 name = room:get_name();
3702
caf27826c7b2 mod_http_muc_log: Use configured room language in room title/desc #a11y
Kim Alvefur <zash@zash.se>
parents: 3692
diff changeset
400 lang = room.get_language and room:get_language();
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
401 description = room:get_description();
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
402 }, i + 1;
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
403 end
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
404 end
1576
91b91052e0e8 mod_http_muc_log: Send a HTML mime type with responses
Kim Alvefur <zash@zash.se>
parents: 1575
diff changeset
405
3578
ea63dc0cc824 mod_http_muc_log: Sort room listing by jid for stable order
Kim Alvefur <zash@zash.se>
parents: 3560
diff changeset
406 table.sort(room_list, function (a, b)
3583
a36412d4fafd mod_http_muc_log: Trim trailing whitespace [luacheck]
Kim Alvefur <zash@zash.se>
parents: 3582
diff changeset
407 return a.jid < b.jid;
3578
ea63dc0cc824 mod_http_muc_log: Sort room listing by jid for stable order
Kim Alvefur <zash@zash.se>
parents: 3560
diff changeset
408 end);
ea63dc0cc824 mod_http_muc_log: Sort room listing by jid for stable order
Kim Alvefur <zash@zash.se>
parents: 3560
diff changeset
409
1581
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
410 response.headers.content_type = "text/html; charset=utf-8";
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
411 return render(template, {
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
412 title = module:get_option_string("name", "Prosody Chatrooms");
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
413 jid = module.host;
3485
181561d0aae5 mod_http_muc_log: Add functionality for hiding joins and parts
Kim Alvefur <zash@zash.se>
parents: 3283
diff changeset
414 hide_presence = hide_presence(request);
3597
da7ec4ed6ddf mod_http_muc_log: Hide join/part controls if they are not stored by mod_muc_mam
Kim Alvefur <zash@zash.se>
parents: 3596
diff changeset
415 presence_available = presence_logged;
1581
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
416 rooms = room_list;
9f6cd252d233 mod_http_muc_log: Revamp template system
Kim Alvefur <zash@zash.se>
parents: 1580
diff changeset
417 });
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
418 end
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
419
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
420 module:provides("http", {
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
421 route = {
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
422 ["GET /"] = list_rooms;
2685
cd5781ca782d mod_http_muc_log: Remove caching
Kim Alvefur <zash@zash.se>
parents: 2593
diff changeset
423 ["GET /*"] = logs_page;
3722
bdbbf11eac0c mod_http_muc_log: Add comment about the routing of years and logs pages
Kim Alvefur <zash@zash.se>
parents: 3718
diff changeset
424 -- mod_http only supports one wildcard so logs_page will dispatch to years_page if the path contains no date
bdbbf11eac0c mod_http_muc_log: Add comment about the routing of years and logs pages
Kim Alvefur <zash@zash.se>
parents: 3718
diff changeset
425 -- thus:
bdbbf11eac0c mod_http_muc_log: Add comment about the routing of years and logs pages
Kim Alvefur <zash@zash.se>
parents: 3718
diff changeset
426 -- GET /room --> years_page (via logs_page)
bdbbf11eac0c mod_http_muc_log: Add comment about the routing of years and logs pages
Kim Alvefur <zash@zash.se>
parents: 3718
diff changeset
427 -- GET /room/yyyy-mm-dd --> logs_page (for real)
1549
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
428 };
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
429 });
f9f8bf82ece7 mod_http_muc_log: MUC log module using new archive API
Kim Alvefur <zash@zash.se>
parents:
diff changeset
430