1.1 --- a/actions/EventAggregatorSummary.py Thu Mar 26 01:46:07 2009 +0100
1.2 +++ b/actions/EventAggregatorSummary.py Fri Mar 27 01:00:15 2009 +0100
1.3 @@ -4,37 +4,118 @@
1.4
1.5 @copyright: 2008, 2009 by Paul Boddie <paul@boddie.org.uk>
1.6 @copyright: 2000-2004 Juergen Hermann <jh@web.de>,
1.7 - 2005-2008 MoinMoin:ThomasWaldmann.
1.8 + 2005-2008 MoinMoin:ThomasWaldmann,
1.9 + 2007 MoinMoin:ReimarBauer.
1.10 @license: GNU GPL (v2 or later), see COPYING.txt for details.
1.11 """
1.12
1.13 +from MoinMoin.action import ActionBase
1.14 from MoinMoin import config
1.15 import EventAggregatorSupport
1.16
1.17 Dependencies = ['pages']
1.18
1.19 -# Action function.
1.20 +# Action class and supporting functions.
1.21 +
1.22 +class EventAggregatorSummary(ActionBase):
1.23 +
1.24 + "A summary dialogue requesting various parameters."
1.25 +
1.26 + def get_form_html(self, buttons_html):
1.27 + _ = self._
1.28 + request = self.request
1.29 +
1.30 + category_list = []
1.31 +
1.32 + for category_name, category_pagename in \
1.33 + EventAggregatorSupport.getCategoryMapping(
1.34 + EventAggregatorSupport.getCategories(request),
1.35 + request):
1.36 +
1.37 + category_list.append('<option value="%s">%s</option>' % (category_pagename, category_name))
1.38 +
1.39 + d = {
1.40 + "buttons_html" : buttons_html,
1.41 + "category_label" : _("Categories"),
1.42 + "category_list" : "\n".join(category_list),
1.43 + "start_label" : _("Start year and month"),
1.44 + "start_default" : "",
1.45 + "end_label" : _("End year and month"),
1.46 + "end_default" : "",
1.47 + }
1.48
1.49 -def execute(pagename, request):
1.50 + return '''
1.51 +<table>
1.52 + <tr>
1.53 + <td class="label"><label>%(category_label)s</label></td>
1.54 + <td class="content">
1.55 + <select multiple="multiple" name="category">
1.56 + %(category_list)s
1.57 + </select>
1.58 + </td>
1.59 + </tr>
1.60 + <tr>
1.61 + <td class="label"><label>%(start_label)s</label></td>
1.62 + <td class="content">
1.63 + <input name="start" type="text" value="%(start_default)s" size="12" />
1.64 + </td>
1.65 + </tr>
1.66 + <tr>
1.67 + <td class="label"><label>%(end_label)s</label></td>
1.68 + <td class="content">
1.69 + <input name="end" type="text" value="%(end_default)s" size="12" />
1.70 + </td>
1.71 + </tr>
1.72 + <tr>
1.73 + <td></td>
1.74 + <td class="buttons">
1.75 + %(buttons_html)s
1.76 + </td>
1.77 + </tr>
1.78 +</table>
1.79 +''' % d
1.80 +
1.81 + def do_action(self):
1.82 +
1.83 + "Write the iCalendar resource."
1.84 +
1.85 + _ = self._
1.86 +
1.87 + # If no category names exist in the request, an error message is
1.88 + # returned.
1.89 +
1.90 + category_names = self.request.form.get("category", [])
1.91 +
1.92 + if not category_names:
1.93 + return 0, _("No categories specified.")
1.94 +
1.95 + write_resource(self.request)
1.96 + return 1, None
1.97 +
1.98 + def render_success(self, msg, msgtype):
1.99 +
1.100 + """
1.101 + Render neither 'msg' nor 'msgtype' since a resource has already been
1.102 + produced.
1.103 + """
1.104 +
1.105 + pass
1.106 +
1.107 +def write_resource(request):
1.108
1.109 """
1.110 - For the given 'pagename' and 'request', write an iCalendar summary of the
1.111 - event data found in the categories specified via the "category" request
1.112 - parameter, using the "start" and "end" parameters (if specified). Multiple
1.113 - "category" parameters can be specified.
1.114 + For the given 'request', write an iCalendar summary of the event data found
1.115 + in the categories specified via the "category" request parameter, using the
1.116 + "start" and "end" parameters (if specified). Multiple "category" parameters
1.117 + can be specified.
1.118 """
1.119
1.120 category_names = request.form.get("category", [])
1.121
1.122 - if request.form.has_key("start"):
1.123 - calendar_start = EventAggregatorSupport.getMonth(request.form["start"][0])
1.124 - else:
1.125 - calendar_start = None
1.126 + # Otherwise, produce an iCalendar resource.
1.127
1.128 - if request.form.has_key("end"):
1.129 - calendar_end = EventAggregatorSupport.getMonth(request.form["end"][0])
1.130 - else:
1.131 - calendar_end = None
1.132 + calendar_start = EventAggregatorSupport.getFormMonth(request, None, "start")
1.133 + calendar_end = EventAggregatorSupport.getFormMonth(request, None, "end")
1.134
1.135 events, shown_events, all_shown_events, earliest, latest = \
1.136 EventAggregatorSupport.getEvents(request, category_names, calendar_start, calendar_end)
1.137 @@ -49,14 +130,12 @@
1.138
1.139 for event_page, event_details in all_shown_events:
1.140
1.141 - # Get a pretty version of the page name.
1.142 -
1.143 - pretty_pagename = EventAggregatorSupport.getPrettyPageName(event_page)
1.144 + event_summary = EventAggregatorSupport.getEventSummary(event_page, event_details)
1.145
1.146 # Output the event details.
1.147
1.148 request.write("BEGIN:VEVENT\r\n")
1.149 - request.write("SUMMARY:%s\r\n" % pretty_pagename)
1.150 + request.write("SUMMARY:%s\r\n" % event_summary)
1.151 request.write("UID:%s\r\n" % request.getQualifiedURL(event_page.url(request)))
1.152 request.write("URL:%s\r\n" % request.getQualifiedURL(event_page.url(request)))
1.153 request.write("DTSTART;VALUE=DATE:%04d%02d%02d\r\n" % event_details["start"])
1.154 @@ -67,4 +146,9 @@
1.155
1.156 request.write("END:VCALENDAR\r\n")
1.157
1.158 +# Action function.
1.159 +
1.160 +def execute(pagename, request):
1.161 + EventAggregatorSummary(pagename, request).render()
1.162 +
1.163 # vim: tabstop=4 expandtab shiftwidth=4