-
+
+
@@ -98,11 +98,11 @@
-
-
-
-
+
+
+
+
|
diff --git a/addons/website_mail/models/mail_message.py b/addons/website_mail/models/mail_message.py
index 1e50611fa00..cff950f2962 100644
--- a/addons/website_mail/models/mail_message.py
+++ b/addons/website_mail/models/mail_message.py
@@ -34,7 +34,7 @@ class MailMessage(osv.Model):
res[message.id] = message.subject
else:
plaintext_ct = html2plaintext(message.body)
- res[message.id] = plaintext_ct + '%s' % (' [...]' if len(plaintext_ct) >= 20 else '')
+ res[message.id] = plaintext_ct[:30] + '%s' % (' [...]' if len(plaintext_ct) >= 30 else '')
return res
_columns = {
diff --git a/addons/website_mail_group/controllers/main.py b/addons/website_mail_group/controllers/main.py
index 88eb1a7e9b7..7320ebc6548 100644
--- a/addons/website_mail_group/controllers/main.py
+++ b/addons/website_mail_group/controllers/main.py
@@ -9,13 +9,14 @@ from openerp.addons.web.http import request
class MailGroup(http.Controller):
- _thread_per_page = 10
+ _thread_per_page = 20
+ _replies_per_page = 10
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)
+ groupby="date", orderby="date desc", 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()
@@ -27,7 +28,7 @@ class MailGroup(http.Controller):
def view(self, **post):
cr, uid, context = request.cr, request.uid, request.context
group_obj = request.registry.get('mail.group')
- group_ids = group_obj.search(cr, uid, [], context=context)
+ group_ids = group_obj.search(cr, uid, [('alias_id', '!=', False), ('alias_id.alias_name', '!=', False)], context=context)
values = {'groups': group_obj.browse(cr, uid, group_ids, context)}
return request.website.render('website_mail_group.mail_groups', values)
@@ -73,6 +74,7 @@ class MailGroup(http.Controller):
'archives': self._get_archives(group.id),
'date_begin': date_begin,
'date_end': date_end,
+ 'replies_per_page': self._replies_per_page,
}
return request.website.render('website_mail_group.group_messages', values)
@@ -81,11 +83,49 @@ class MailGroup(http.Controller):
], type='http', auth="public", website=True)
def thread_discussion(self, group, message, mode='thread', date_begin=None, date_end=None, **post):
cr, uid, context = request.cr, request.uid, request.context
+ Message = request.registry['mail.message']
+ if mode == 'thread':
+ base_domain = [('model', '=', 'mail.group'), ('res_id', '=', group.id), ('parent_id', '=', message.parent_id and message.parent_id.id or False)]
+ else:
+ base_domain = [('model', '=', 'mail.group'), ('res_id', '=', group.id)]
+ next_message = None
+ next_message_ids = Message.search(cr, uid, base_domain + [('date', '<', message.date)], order="date DESC", limit=1, context=context)
+ if next_message_ids:
+ next_message = Message.browse(cr, uid, next_message_ids[0], context=context)
+ prev_message = None
+ prev_message_ids = Message.search(cr, uid, base_domain + [('date', '>', message.date)], order="date ASC", limit=1, context=context)
+ if prev_message_ids:
+ prev_message = Message.browse(cr, uid, prev_message_ids[0], context=context)
values = {
'message': message,
'group': group,
'mode': mode,
+ 'archives': self._get_archives(group.id),
'date_begin': date_begin,
'date_end': date_end,
+ 'replies_per_page': self._replies_per_page,
+ 'next_message': next_message,
+ 'prev_message': prev_message,
}
return request.website.render('website_mail_group.group_message', values)
+
+ @http.route(
+ '''/groups/
//get_replies''',
+ type='json', auth="public", methods=['POST'], website=True)
+ def render_messages(self, group, message, **post):
+ last_displayed_id = post.get('last_displayed_id')
+ if not last_displayed_id:
+ return False
+ Message = request.registry['mail.message']
+ replies_domain = [('id', '<', int(last_displayed_id)), ('parent_id', '=', message.id)]
+ msg_ids = Message.search(request.cr, request.uid, replies_domain, limit=self._replies_per_page, context=request.context)
+ msg_count = Message.search(request.cr, request.uid, replies_domain, count=True, context=request.context)
+ messages = Message.browse(request.cr, request.uid, msg_ids, context=request.context)
+ values = {
+ 'group': group,
+ 'thread_header': message,
+ 'messages': messages,
+ 'msg_more_count': msg_count - self._replies_per_page,
+ 'replies_per_page': self._replies_per_page,
+ }
+ return request.registry['ir.ui.view'].render(request.cr, request.uid, 'website_mail_group.messages_short', values, engine='ir.qweb', context=request.context)
diff --git a/addons/website_mail_group/static/src/css/website_mail_group.css b/addons/website_mail_group/static/src/css/website_mail_group.css
new file mode 100644
index 00000000000..27482ebd203
--- /dev/null
+++ b/addons/website_mail_group/static/src/css/website_mail_group.css
@@ -0,0 +1,12 @@
+.o_mg_avatar {
+ width: 40px;
+ height: 40px;
+}
+
+.o_mg_link_show {
+ display: none;
+}
+
+.o_mg_link_content {
+ display: none;
+}
diff --git a/addons/website_mail_group/static/src/js/website_mail_group.js b/addons/website_mail_group/static/src/js/website_mail_group.js
new file mode 100644
index 00000000000..c9b8ae797ed
--- /dev/null
+++ b/addons/website_mail_group/static/src/js/website_mail_group.js
@@ -0,0 +1,42 @@
+$(document).ready(function () {
+
+ $('.o_mg_link_hide').on('click', function (ev) {
+ ev.preventDefault();
+ var $link = $(ev.currentTarget);
+ var $container = $link.parents('div').first();
+ $container.find('.o_mg_link_hide').first().hide();
+ $container.find('.o_mg_link_show').first().show();
+ $container.find('.o_mg_link_content').first().show();
+ return false;
+ });
+
+ $('.o_mg_link_show').on('click', function (ev) {
+ ev.preventDefault();
+ var $link = $(ev.currentTarget);
+ var $container = $link.parents('div').first();
+ $container.find('.o_mg_link_hide').first().show();
+ $container.find('.o_mg_link_show').first().hide();
+ $container.find('.o_mg_link_content').first().hide();
+ return false;
+ });
+
+ $('body').on('click', 'button.o_mg_read_more', function (ev) {
+ var $link = $(ev.target);
+ return openerp.jsonRpc($link.data('href'), 'call', {
+ 'last_displayed_id': $link.data('msg-id'),
+ }).then(function (data) {
+ if (! data) {
+ return true;
+ }
+ var $thread_container = $link.parents('.o_mg_replies').first().find('ul.media-list');
+ if ($thread_container) {
+ var $last_msg = $thread_container.find('li.media').last();
+ $(data).find('li.media').insertAfter($last_msg);
+ $(data).find('p.well').appendTo($thread_container);
+ }
+ var $show_more = $link.parents('p.well').first();
+ $show_more.remove();
+ return true;
+ });
+ });
+});
\ No newline at end of file
diff --git a/addons/website_mail_group/views/website_mail_group.xml b/addons/website_mail_group/views/website_mail_group.xml
index 87f8755c04a..76edd524753 100644
--- a/addons/website_mail_group/views/website_mail_group.xml
+++ b/addons/website_mail_group/views/website_mail_group.xml
@@ -1,152 +1,240 @@
-
-
-
-
-
- Our Mailing Lists
-
-
-
-
![]()
-
-
-
-
-
-
-
-
-
-
-
-
- List Archive
-
-
-
-
-
-
+
+
+
+
+
+
+
+
Stay in touch with our Community
+
Alone we can do so little, together we can do so much
-
-
-
-
-
-
-
+
+
+
+
![]()
+
+
+
-
-
-
![]()
-
-
-
-
-
- on
-
-
-
-
-
Attachment(s):
-
+
-
-
-
-
+
+ participants
+ messages
-
-
-
-
-
-
-
-
Join the discussion
-
- Join this mailing list to follow or participate to this discussion.
- :
-
+
-
-
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+ mailing list archives
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ mailing list archives
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
diff --git a/openerp/http.py b/openerp/http.py
index c63a795b6a7..c5924b5d15d 100644
--- a/openerp/http.py
+++ b/openerp/http.py
@@ -267,7 +267,7 @@ class WebRequest(object):
"""Called within an except block to allow converting exceptions
to abitrary responses. Anything returned (except None) will
be used as response."""
- raise
+ self._failed = exception # prevent tx commit
def _call_function(self, *args, **kwargs):
request = self
@@ -449,8 +449,8 @@ class JsonRequest(WebRequest):
"""Called within an except block to allow converting exceptions
to abitrary responses. Anything returned (except None) will
be used as response."""
+ super(JsonRequest, self)._handle_exception(exception)
_logger.exception("Exception during JSON request handling.")
- self._failed = exception # prevent tx commit
error = {
'code': 200,
'message': "OpenERP Server Error",
diff --git a/openerp/report/render/rml2pdf/trml2pdf.py b/openerp/report/render/rml2pdf/trml2pdf.py
index 6ce69578a8e..8d6edb88688 100644
--- a/openerp/report/render/rml2pdf/trml2pdf.py
+++ b/openerp/report/render/rml2pdf/trml2pdf.py
@@ -107,7 +107,7 @@ class NumberedCanvas(canvas.Canvas):
self.setFont("Helvetica", 8)
self.drawRightString((self._pagesize[0]-30), (self._pagesize[1]-40),
" %(this)i / %(total)i" % {
- 'this': self._pageNumber+1,
+ 'this': self._pageNumber,
'total': page_count,
}
)
@@ -1007,8 +1007,6 @@ class _rml_template(object):
if story_cnt > 0:
fis.append(platypus.PageBreak())
fis += r.render(node_story)
- # Reset Page Number with new story tag
- fis.append(PageReset())
story_cnt += 1
try:
if self.localcontext and self.localcontext.get('internal_header',False):