[WIP] website: snippets: work carousel insert and vomify
[odoo/odoo.git] / addons / website_mail / controllers / main.py
1 # -*- coding: utf-8 -*-
2
3 from openerp import SUPERUSER_ID
4 from openerp.addons.web import http
5 from openerp.addons.web.http import request
6 from openerp.addons.website import website
7 import werkzeug
8 from openerp.tools.translate import _
9 from openerp.tools.safe_eval import safe_eval
10 import simplejson
11
12 _months = {1:_("January"), 2:_("February"), 3:_("March"), 4:_("April"), 5:_("May"), 6:_("June"), 7:_("July"), 8:_("August"), 9:_("September"), 10:_("October"), 11:_("November"), 12:_("December")}
13
14
15 class website_mail(http.Controller):
16
17     @website.route(['/blog/', '/blog/<int:mail_group_id>/', '/blog/<int:mail_group_id>/<int:blog_id>/',
18                 '/blog/page/<int:page>/', '/blog/<int:mail_group_id>/page/<int:page>/', '/blog/<int:mail_group_id>/<int:blog_id>/page/<int:page>/'], type='http', auth="public")
19     def blog(self, mail_group_id=None, blog_id=None, page=0, **post):
20         website = request.registry['website']
21         group_obj = request.registry['mail.group']
22         message_obj = request.registry['mail.message']
23         user_obj = request.registry['res.users']
24
25         values = {
26             'blog_ids': None,
27             'blog_id': None,
28             'nav_list': dict(),
29             'mail_group_id': mail_group_id,
30             'subscribe': post.get('subscribe'),
31             'website': website,
32         }
33
34         if not request.webcontext.is_public_user and mail_group_id:
35             message_follower_ids = group_obj.read(request.cr, request.uid, [mail_group_id], ['message_follower_ids'])[0]['message_follower_ids']
36             parent_id = user_obj.browse(request.cr, SUPERUSER_ID, request.uid).partner_id.id
37             values['subscribe'] = parent_id in message_follower_ids
38
39         domain = mail_group_id and [("res_id", "=", mail_group_id)] or []
40
41         for group in message_obj.read_group(request.cr, request.uid, domain + group_obj.get_domain_public_blog(request.cr, request.uid), ['subject', 'date'], groupby="date", orderby="create_date asc"):
42             year = group['date'].split(" ")[1]
43             if not values['nav_list'].get(year):
44                 values['nav_list'][year] = {'name': year, 'date_count': 0, 'months': []}
45             values['nav_list'][year]['date_count'] += group['date_count']
46             values['nav_list'][year]['months'].append(group)
47
48         if blog_id:
49             values['blog_id'] = message_obj.browse(request.cr, request.uid, blog_id)
50         else:
51             step = 20
52             message_count = len(group_obj.get_public_message_ids(request.cr, request.uid, domain=domain, order="create_date desc"))
53             pager = website.pager(url="/blog/%s/" % mail_group_id, total=message_count, page=page, step=step, scope=7)
54             message_ids = group_obj.get_public_message_ids(request.cr, request.uid, domain=domain, order="create_date desc", limit=step, offset=pager['offset'])
55             values['pager'] = pager
56             values['blog_ids'] = message_obj.browse(request.cr, request.uid, message_ids)
57
58         return request.webcontext.render("website_mail.index", values)
59
60     @website.route(['/blog/nav'], type='http', auth="public")
61     def nav(self, **post):
62         comment_ids = request.registry['mail.group'].get_public_message_ids(request.cr, request.uid, domain=safe_eval(post.get('domain')), order="create_date asc", limit=None)
63         return simplejson.dumps(request.registry['mail.message'].read(request.cr, request.uid, comment_ids, ['website_published', 'subject', 'res_id']))
64
65     @website.route(['/blog/<int:mail_group_id>/<int:blog_id>/post'], type='http', auth="public")
66     def blog_post(self, mail_group_id=None, blog_id=None, **post):
67         url = request.httprequest.host_url
68         if post.get('body'):
69             request.session.body = post.get('body')
70             if request.webcontext.is_public_user:
71                 return '%s/admin#action=redirect&url=%s/blog/%s/%s/post' % (url, url, mail_group_id, blog_id)
72
73         if 'body' in request.session and request.session.body:
74             request.registry['mail.group'].message_post(request.cr, request.uid, mail_group_id,
75                     body=request.session.body,
76                     parent_id=blog_id,
77                     website_published=blog_id and True or False,
78                     type='comment',
79                     subtype='mt_comment',
80                     context={'mail_create_nosubsrequest.cribe': True},
81                 )
82             request.session.body = False
83
84         if post.get('body'):
85             return '%s/blog/%s/%s/' % (url, mail_group_id, blog_id)
86         else:
87             return werkzeug.utils.redirect("/blog/%s/%s/" % (mail_group_id, blog_id))
88
89     @website.route(['/blog/<int:mail_group_id>/new'], type='http', auth="public")
90     def new_blog_post(self, mail_group_id=None, **post):
91         blog_id = request.registry['mail.group'].message_post(request.cr, request.uid, mail_group_id,
92                 body=_("Blog content.<br/>Please edit this content then you can publish this blog."),
93                 subject=_("Blog title"),
94                 website_published=False,
95                 type='comment',
96                 subtype='mt_comment',
97                 context={'mail_create_nosubsrequest.cribe': True},
98             )
99         return werkzeug.utils.redirect("/blog/%s/%s/" % (mail_group_id, blog_id))
100
101     @website.route(['/blog/<int:mail_group_id>/subscribe', '/blog/<int:mail_group_id>/<int:blog_id>/subscribe'], type='http', auth="public")
102     def subscribe(self, mail_group_id=None, blog_id=None, **post):
103         partner_obj = request.registry['res.partner']
104         group_obj = request.registry['mail.group']
105         user_obj = request.registry['res.users']
106
107         if mail_group_id and 'subscribe' in post and (post.get('email') or not request.webcontext.is_public_user):
108             if request.webcontext.is_public_user:
109                 partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))])
110                 if not partner_ids:
111                     partner_ids = [partner_obj.create(request.cr, SUPERUSER_ID, {"email": post.get('email'), "name": "Subscribe: %s" % post.get('email')})]
112             else:
113                 partner_ids = [user_obj.browse(request.cr, request.uid, request.uid).partner_id.id]
114             group_obj.check_access_rule(request.cr, request.uid, [mail_group_id], 'read')
115             group_obj.message_subscribe(request.cr, SUPERUSER_ID, [mail_group_id], partner_ids)
116
117         return self.blog(mail_group_id=mail_group_id, blog_id=blog_id, subscribe=post.get('email'))
118
119     @website.route(['/blog/<int:mail_group_id>/unsubscribe', '/blog/<int:mail_group_id>/<int:blog_id>/unsubscribe'], type='http', auth="public")
120     def unsubscribe(self, mail_group_id=None, blog_id=None, **post):
121         partner_obj = request.registry['res.partner']
122         group_obj = request.registry['mail.group']
123         user_obj = request.registry['res.users']
124
125         if mail_group_id and 'unsubscribe' in post and (post.get('email') or not request.webcontext.is_public_user):
126             if request.webcontext.is_public_user:
127                 partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))])
128             else:
129                 partner_ids = [user_obj.browse(request.cr, request.uid, request.uid).partner_id.id]
130             group_obj.check_access_rule(request.cr, request.uid, [mail_group_id], 'read')
131             group_obj.message_unsubscribe(request.cr, SUPERUSER_ID, [mail_group_id], partner_ids)
132
133         return self.blog(mail_group_id=mail_group_id, blog_id=blog_id, subscribe=None)