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 @@
@@ -136,25 +121,7 @@
Join this mailing list to follow or participate to this discussion.
:
-
-
-
+
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 @@
- Mailing Lists
-
-
+
@@ -130,16 +140,18 @@
From f9b18d51adf9bbb51378d229dd166287ae3aed5b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?=
Date: Wed, 26 Mar 2014 11:35:15 +0100
Subject: [PATCH 5/5] [FIX] website_mail_group: avoid displaying directly
partner info in templates but use the contact template that display
partner-related data fetched as superuser, to avoid access right issues.
Improved display: author or email-from. Fixed issues in the pager.
bzr revid: tde@openerp.com-20140326103515-uzv6smwh9q6vyni9
---
addons/website_mail_group/controllers/main.py | 6 +++---
.../views/website_mail_group.xml | 21 +++++++++++++++----
2 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/addons/website_mail_group/controllers/main.py b/addons/website_mail_group/controllers/main.py
index 2ec32f40f01..628aa874e7f 100644
--- a/addons/website_mail_group/controllers/main.py
+++ b/addons/website_mail_group/controllers/main.py
@@ -9,7 +9,7 @@ from openerp.addons.web.http import request
class MailGroup(http.Controller):
- _thread_per_page = 2
+ _thread_per_page = 10
def _get_archives(self, group_id):
MailMessage = request.registry['mail.message']
@@ -43,7 +43,7 @@ class MailGroup(http.Controller):
@http.route([
"/groups/",
- "/groups//page//"
+ "/groups//page/"
], type='http', auth="public", website=True)
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
@@ -57,7 +57,7 @@ class MailGroup(http.Controller):
thread_count = thread_obj.search_count(cr, uid, domain, context=context)
pager = request.website.pager(
- url='/groups/%s/' % slug(group),
+ url='/groups/%s' % slug(group),
total=thread_count,
page=page,
step=self._thread_per_page,
diff --git a/addons/website_mail_group/views/website_mail_group.xml b/addons/website_mail_group/views/website_mail_group.xml
index 33af5c0c58d..87f8755c04a 100644
--- a/addons/website_mail_group/views/website_mail_group.xml
+++ b/addons/website_mail_group/views/website_mail_group.xml
@@ -93,7 +93,13 @@
-
+
+
+
+
on
@@ -146,12 +152,19 @@
-
- by on
+
+ by
+
+
+
+
-
+