From 97a6372937bace64d037af58afb04ab5945befd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 20 Mar 2014 10:09:31 +0100 Subject: [PATCH 1/5] [CLEAN] website_mail: use already-existing template for subscription instead of copy-and-pasting everything. Please re-use existing things -_-. bzr revid: tde@openerp.com-20140320090931-r17typzrvvsx03ay --- .../views/website_mail_group.xml | 37 +------------------ 1 file changed, 2 insertions(+), 35 deletions(-) diff --git a/addons/website_mail_group/views/website_mail_group.xml b/addons/website_mail_group/views/website_mail_group.xml index fb18ee9f3fd..d1e1fbde024 100644 --- a/addons/website_mail_group/views/website_mail_group.xml +++ b/addons/website_mail_group/views/website_mail_group.xml @@ -18,22 +18,7 @@
- -
- - - unsubscribe - subscribe - - -
+
@@ -136,25 +121,7 @@ Join this mailing list to follow or participate to this discussion.
:

- -
-
- - - unsubscribe - subscribe - - -
-
- + From 2bc87a67ebf282aa33b6164fc832ce5f6b3ca241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 20 Mar 2014 16:08:55 +0100 Subject: [PATCH 2/5] [IMP] mail_group: as they are now mailing list, avoid having automatic creation message, this is quite ugly. bzr revid: tde@openerp.com-20140320150855-a0ich2zgzn320wj0 --- addons/mail/mail_group.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index 5a9f8751f2d..4ae47a96774 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -126,7 +126,7 @@ class mail_group(osv.Model): vals['menu_id'] = menu_id # Create group and alias - create_context = dict(context, alias_model_name=self._name, alias_parent_model_name=self._name) + create_context = dict(context, alias_model_name=self._name, alias_parent_model_name=self._name, mail_create_nolog=True) mail_group_id = super(mail_group, self).create(cr, uid, vals, context=create_context) group = self.browse(cr, uid, mail_group_id, context=context) self.pool.get('mail.alias').write(cr, uid, [group.alias_id.id], {"alias_force_thread_id": mail_group_id, 'alias_parent_thread_id': mail_group_id}, context) From 6af6575efb9738438dd40f53ad153eb426b8269a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 20 Mar 2014 16:10:04 +0100 Subject: [PATCH 3/5] [IMP] website_mail: added not stored function field on mail.message that is a short description of the message, either the subject if present, of the beginning of the plain-text version of the body. Used whenever messages 'subject' for all messages is necessary. bzr revid: tde@openerp.com-20140320151004-qq57s9r8qcpue0rs --- addons/website_mail/models/mail_message.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/addons/website_mail/models/mail_message.py b/addons/website_mail/models/mail_message.py index 12c35f3e83f..a376d391a33 100644 --- a/addons/website_mail/models/mail_message.py +++ b/addons/website_mail/models/mail_message.py @@ -19,6 +19,7 @@ # ############################################################################## +from openerp.tools import html2plaintext from openerp.tools.translate import _ from openerp.osv import osv, fields @@ -26,7 +27,21 @@ from openerp.osv import osv, fields class MailMessage(osv.Model): _inherit = 'mail.message' + def _get_description_short(self, cr, uid, ids, name, arg, context=None): + res = dict.fromkeys(ids, False) + for message in self.browse(cr, uid, ids, context=context): + if message.subject: + res[message.id] = message.subject + else: + plaintext_ct = html2plaintext(message.body) + res[message.id] = plaintext_ct + '%s' % (' [...]' if len(plaintext_ct) >= 20 else '') + return res + _columns = { + 'description': fields.function( + _get_description_short, type='char', + help='Message description: either the subject, or the beginning of the body' + ), 'website_published': fields.boolean( 'Published', help="Visible on the website as a comment" ), From 50ca5202a0e9722c131079774138125e47d3a396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 20 Mar 2014 16:11:14 +0100 Subject: [PATCH 4/5] [REF] website_mail_group: refactored controllers and views - now using post arguments instead of hardcoded path items like mode; - unfucked the date archives that was basically now working; - keep user choices through the navigation (mode, dates); - various small fixes in the views bzr revid: tde@openerp.com-20140320151114-1mmk9x48i1lwc6qv --- addons/website_mail_group/controllers/main.py | 78 +++++++++---------- .../views/website_mail_group.xml | 36 ++++++--- 2 files changed, 63 insertions(+), 51 deletions(-) diff --git a/addons/website_mail_group/controllers/main.py b/addons/website_mail_group/controllers/main.py index fe133434abc..2ec32f40f01 100644 --- a/addons/website_mail_group/controllers/main.py +++ b/addons/website_mail_group/controllers/main.py @@ -1,34 +1,29 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2013-Today OpenERP SA (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +import datetime + +from openerp import tools from openerp.addons.web import http +from openerp.addons.website.models.website import slug from openerp.addons.web.http import request class MailGroup(http.Controller): - _thread_per_page = 10 + _thread_per_page = 2 - @http.route([ - "/groups", - ], type='http', auth="public", website=True) + def _get_archives(self, group_id): + MailMessage = request.registry['mail.message'] + groups = MailMessage.read_group( + request.cr, request.uid, [('model', '=', 'mail.group'), ('res_id', '=', group_id)], ['subject', 'date'], + groupby="date", orderby="date asc", context=request.context) + for group in groups: + begin_date = datetime.datetime.strptime(group['__domain'][0][2], tools.DEFAULT_SERVER_DATETIME_FORMAT).date() + end_date = datetime.datetime.strptime(group['__domain'][1][2], tools.DEFAULT_SERVER_DATETIME_FORMAT).date() + group['date_begin'] = '%s' % datetime.date.strftime(begin_date, tools.DEFAULT_SERVER_DATE_FORMAT) + group['date_end'] = '%s' % datetime.date.strftime(end_date, tools.DEFAULT_SERVER_DATE_FORMAT) + return groups + + @http.route("/groups", type='http', auth="public", website=True) def view(self, **post): cr, uid, context = request.cr, request.uid, request.context group_obj = request.registry.get('mail.group') @@ -37,7 +32,7 @@ class MailGroup(http.Controller): return request.website.render('website_mail_group.mail_groups', values) @http.route(["/groups/subscription/"], type='json', auth="user") - def subscription(self, group_id=0, action=False ,**post): + def subscription(self, group_id=0, action=False, **post): cr, uid, context = request.cr, request.uid, request.context group_obj = request.registry.get('mail.group') if action: @@ -47,45 +42,50 @@ class MailGroup(http.Controller): return [] @http.route([ - "/groups//", - "/groups///page/" + "/groups/", + "/groups//page//" ], type='http', auth="public", website=True) - def thread(self, group, mode='thread', page=1, **post): + def thread_headers(self, group, page=1, mode='thread', date_begin=None, date_end=None, **post): cr, uid, context = request.cr, request.uid, request.context - thread_obj = request.registry.get('mail.message') - domain = [('model','=','mail.group'), ('res_id','=',group.id)] - if mode=='thread': - domain.append(('parent_id','=',False)) + + domain = [('model', '=', 'mail.group'), ('res_id', '=', group.id)] + if mode == 'thread': + domain += [('parent_id', '=', False)] + if date_begin and date_end: + domain += [('date', '>=', date_begin), ('date', '<=', date_end)] + thread_count = thread_obj.search_count(cr, uid, domain, context=context) pager = request.website.pager( - url='/groups/%s/%s/' % (group.id, mode), + url='/groups/%s/' % slug(group), total=thread_count, page=page, step=self._thread_per_page, + url_args={'mode': mode, 'date_begin': date_begin or '', 'date_end': date_end or ''}, ) thread_ids = thread_obj.search(cr, uid, domain, limit=self._thread_per_page, offset=pager['offset']) - messages = thread_obj.browse(cr, uid, thread_ids, context) - for m in messages: - print m.subject values = { 'messages': messages, 'group': group, 'pager': pager, - 'mode': mode + 'mode': mode, + 'archives': self._get_archives(group.id), + 'date_begin': date_begin, + 'date_end': date_end, } return request.website.render('website_mail_group.group_messages', values) @http.route([ - "/groups//message/", + "/groups//", ], type='http', auth="public", website=True) - def get_thread(self, group, message, mode='thread', page=1, **post): + def thread_discussion(self, group, message, mode='thread', date_begin=None, date_end=None, **post): cr, uid, context = request.cr, request.uid, request.context values = { 'message': message, 'group': group, 'mode': mode, - 'page': page, + 'date_begin': date_begin, + 'date_end': date_end, } return request.website.render('website_mail_group.group_message', values) diff --git a/addons/website_mail_group/views/website_mail_group.xml b/addons/website_mail_group/views/website_mail_group.xml index d1e1fbde024..33af5c0c58d 100644 --- a/addons/website_mail_group/views/website_mail_group.xml +++ b/addons/website_mail_group/views/website_mail_group.xml @@ -16,7 +16,7 @@
- +
@@ -48,10 +48,20 @@
@@ -71,7 +81,7 @@