[IMP] clean sitemap, enumerate pages + fixes
[odoo/odoo.git] / addons / website_mail_group / controllers / main.py
1 # -*- coding: utf-8 -*-
2
3 import datetime
4
5 from openerp import tools
6 from openerp.addons.web import http
7 from openerp.addons.website.models.website import slug
8 from openerp.addons.web.http import request
9
10
11 class MailGroup(http.Controller):
12     _thread_per_page = 10
13
14     def _get_archives(self, group_id):
15         MailMessage = request.registry['mail.message']
16         groups = MailMessage.read_group(
17             request.cr, request.uid, [('model', '=', 'mail.group'), ('res_id', '=', group_id)], ['subject', 'date'],
18             groupby="date", orderby="date asc", context=request.context)
19         for group in groups:
20             begin_date = datetime.datetime.strptime(group['__domain'][0][2], tools.DEFAULT_SERVER_DATETIME_FORMAT).date()
21             end_date = datetime.datetime.strptime(group['__domain'][1][2], tools.DEFAULT_SERVER_DATETIME_FORMAT).date()
22             group['date_begin'] = '%s' % datetime.date.strftime(begin_date, tools.DEFAULT_SERVER_DATE_FORMAT)
23             group['date_end'] = '%s' % datetime.date.strftime(end_date, tools.DEFAULT_SERVER_DATE_FORMAT)
24         return groups
25
26     @http.route("/groups", type='http', auth="public", website=True)
27     def view(self, **post):
28         cr, uid, context = request.cr, request.uid, request.context
29         group_obj = request.registry.get('mail.group')
30         group_ids = group_obj.search(cr, uid, [], context=context)
31         values = {'groups': group_obj.browse(cr, uid, group_ids, context)}
32         return request.website.render('website_mail_group.mail_groups', values)
33
34     @http.route(["/groups/subscription/"], type='json', auth="user")
35     def subscription(self, group_id=0, action=False, **post):
36         cr, uid, context = request.cr, request.uid, request.context
37         group_obj = request.registry.get('mail.group')
38         if action:
39             group_obj.message_subscribe_users(cr, uid, [group_id], context=context)
40         else:
41             group_obj.message_unsubscribe_users(cr, uid, [group_id], context=context)
42         return []
43
44     @http.route([
45         "/groups/<model('mail.group'):group>",
46         "/groups/<model('mail.group'):group>/page/<int:page>"
47     ], type='http', auth="public", website=True)
48     def thread_headers(self, group, page=1, mode='thread', date_begin=None, date_end=None, **post):
49         cr, uid, context = request.cr, request.uid, request.context
50         thread_obj = request.registry.get('mail.message')
51
52         domain = [('model', '=', 'mail.group'), ('res_id', '=', group.id)]
53         if mode == 'thread':
54             domain += [('parent_id', '=', False)]
55         if date_begin and date_end:
56             domain += [('date', '>=', date_begin), ('date', '<=', date_end)]
57
58         thread_count = thread_obj.search_count(cr, uid, domain, context=context)
59         pager = request.website.pager(
60             url='/groups/%s' % slug(group),
61             total=thread_count,
62             page=page,
63             step=self._thread_per_page,
64             url_args={'mode': mode, 'date_begin': date_begin or '', 'date_end': date_end or ''},
65         )
66         thread_ids = thread_obj.search(cr, uid, domain, limit=self._thread_per_page, offset=pager['offset'])
67         messages = thread_obj.browse(cr, uid, thread_ids, context)
68         values = {
69             'messages': messages,
70             'group': group,
71             'pager': pager,
72             'mode': mode,
73             'archives': self._get_archives(group.id),
74             'date_begin': date_begin,
75             'date_end': date_end,
76         }
77         return request.website.render('website_mail_group.group_messages', values)
78
79     @http.route([
80         '''/groups/<model('mail.group'):group>/<model('mail.message', "[('model','=','mail.group'), ('res_id','=',group[0])]"):message>''',
81     ], type='http', auth="public", website=True)
82     def thread_discussion(self, group, message, mode='thread', date_begin=None, date_end=None, **post):
83         cr, uid, context = request.cr, request.uid, request.context
84         values = {
85             'message': message,
86             'group': group,
87             'mode': mode,
88             'date_begin': date_begin,
89             'date_end': date_end,
90         }
91         return request.website.render('website_mail_group.group_message', values)