[ADD] Added website osv object + refactoring
[odoo/odoo.git] / addons / website_mail / controllers / main.py
1 # -*- coding: utf-8 -*-
2
3 from openerp.addons.web import http
4 from openerp.addons.web.http import request
5 import werkzeug
6 from openerp.tools.translate import _
7 from openerp.tools.safe_eval import safe_eval
8 import simplejson
9
10 _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")}
11
12
13 class website_mail(http.Controller):
14
15     @http.route(['/blog', '/blog/<int:mail_group_id>', '/blog/<int:mail_group_id>/<int:blog_id>'], type='http', auth="public")
16     def blog(self, mail_group_id=None, blog_id=None, **post):
17         website = request.registry['website']
18         group_obj = request.registry['mail.group']
19         message_obj = request.registry['mail.message']
20
21         values = website.get_rendering_context({
22             'blog_ids': None,
23             'blog_id': None,
24             'nav_list': dict(),
25             'prev_date': None,
26             'next_date': None,
27             'mail_group_id': mail_group_id,
28         })
29         domain = mail_group_id and [("res_id", "=", mail_group_id)] or []
30
31         for group in message_obj.read_group(request.cr, request.uid, domain + group_obj.get_public_blog(request.cr, request.uid), ['subject', 'date'], groupby="date", orderby="create_date asc"):
32             year = group['date'].split(" ")[1]
33             if not values['nav_list'].get(year):
34                 values['nav_list'][year] = {'name': year, 'date_count': 0, 'months': []}
35             values['nav_list'][year]['date_count'] += group['date_count']
36             values['nav_list'][year]['months'].append(group)
37
38         if post.get('date'):
39             ids = group_obj.get_public_message_ids(request.cr, request.uid, domain=domain + [("date", ">", post.get('date'))], order="create_date asc", limit=10)
40             if ids:
41                 values['prev_date'] = message_obj.browse(request.cr, request.uid, ids.pop()).date
42             domain += [("date", "<=", post.get('date'))]
43
44         message_ids = group_obj.get_public_message_ids(request.cr, request.uid, domain=domain, order="create_date desc", limit=11)
45         if message_ids:
46             values['blog_ids'] = message_obj.browse(request.cr, request.uid, message_ids)
47             if len(message_ids) > 10:
48                 values['next_date'] = values['blog_ids'].pop().date
49
50         if blog_id:
51             values['blog_id'] = message_obj.browse(request.cr, request.uid, blog_id)
52
53         return website.render("website_mail.index", values)
54
55     @http.route(['/blog/nav'], type='http', auth="public")
56     def nav(self, **post):
57         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)
58         return simplejson.dumps(request.registry['mail.message'].read(request.cr, request.uid, comment_ids, ['website_published', 'subject', 'res_id']))
59
60     @http.route(['/blog/publish'], type='http', auth="public")
61     def publish(self, **post):
62         message_id = int(post['id'])
63         message_obj = request.registry['mail.message']
64
65         blog = message_obj.browse(request.cr, request.uid, message_id)
66         message_obj.write(request.cr, request.uid, [message_id], {'website_published': not blog.website_published})
67         blog = message_obj.browse(request.cr, request.uid, message_id)
68
69         return blog.website_published and "1" or "0"
70
71     @http.route(['/blog/<int:mail_group_id>/<int:blog_id>/post'], type='http', auth="public")
72     def blog_post(self, mail_group_id=None, blog_id=None, **post):
73         url = request.httprequest.host_url
74         if post.get('body'):
75             request.session.body = post.get('body')
76             if not request.uid != request.public_uid:
77                 return '%s/admin#action=redirect&url=%s/blog/%s/%s/post' % (url, url, mail_group_id, blog_id)
78
79         if 'body' in request.session and request.session.body:
80             request.registry['mail.group'].message_post(request.cr, request.uid, mail_group_id,
81                     body=request.session.body,
82                     parent_id=blog_id,
83                     website_published=blog_id and True or False,
84                     type='comment',
85                     subtype='mt_comment',
86                     context={'mail_create_nosubsrequest.cribe': True},
87                 )
88             request.session.body = False
89
90         if post.get('body'):
91             return '%s/blog/%s/%s' % (url, mail_group_id, blog_id)
92         else:
93             return werkzeug.utils.redirect("/blog/%s/%s" % (mail_group_id, blog_id))
94
95     @http.route(['/blog/<int:mail_group_id>/new'], type='http', auth="public")
96     def new_blog_post(self, mail_group_id=None, **post):
97         blog_id = request.registry['mail.group'].message_post(request.cr, request.uid, mail_group_id,
98                 body=_("Blog content.<br/>Please edit this content then you can publish this blog."),
99                 subject=_("Blog title"),
100                 website_published=False,
101                 type='comment',
102                 subtype='mt_comment',
103                 context={'mail_create_nosubsrequest.cribe': True},
104             )
105         return werkzeug.utils.redirect("/blog/%s/%s" % (mail_group_id, blog_id))