From 11d2d30e91758baaa9c6241a86f97ae3dfe52ad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 19 Jan 2018 16:03:06 +0100 Subject: [PATCH] [REM] mail: remove follow / unfollow buttons in notification emails Notification emails contain a link allowing to follow or unfollow documents directly from the notification email. However there are several issues with this button * it require people to login to follow or unfollow documents; * it is not linked to the email; * if the customer does not have a login it is not possible to perform the action; * there is no confirmation step; This commit removes the follow / unfollow button in the notification emails. Indeed as people have the "Access document" button there is only one more click to perform in order to subscribe or unsubscribe. Concerning customers adding a complete control of the follow mechanism would be costly in term of code and access rights checks. We therefore decided to remove this button. It also allows to simplify a bit the notification process as there are less parameters to take into account when grouping recipients. It allows to lessen the number of required template rendering when sending notification emails. --- addons/mail/data/mail_data.xml | 12 ---------- addons/mail/models/mail_thread.py | 37 ++----------------------------- addons/mail/models/res_partner.py | 25 +++++---------------- 3 files changed, 7 insertions(+), 67 deletions(-) diff --git a/addons/mail/data/mail_data.xml b/addons/mail/data/mail_data.xml index ad6f58665c2..c30ba66b37b 100644 --- a/addons/mail/data/mail_data.xml +++ b/addons/mail/data/mail_data.xml @@ -91,18 +91,6 @@ ${ctx['button_access']['title']} % endif - % if ctx.get('has_button_follow'): - % if ctx.get('has_button_access'): - | - % endif - ${ctx['button_follow']['title']} - % elif ctx.get('has_button_unfollow'): - % if ctx.get('has_button_access'): - | - % endif - ${ctx['button_unfollow']['title']} - % endif - % if ctx.get('actions'): % for action in ctx['actions']: | diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index bf43e1c8a4d..4d9ff5f3369 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -652,14 +652,6 @@ class MailThread(models.AbstractModel): * has_button_access: whether to display Access in email. True by default for new groups, False for portal / customer. * button_access: dict with url and title of the button - * has_button_follow: whether to display Follow in email (if recipient is - not currently following the thread). True by default for new groups, - False for portal / customer. - * button_follow: dict with url adn title of the button - * has_button_unfollow: whether to display Unfollow in email (if recipient - is currently following the thread). True by default for new groups, - False for portal / customer. - * button_unfollow: dict with url and title of the button * actions: list of action buttons to display in the notification email. Each action is a dict containing url and title of the button. @@ -672,17 +664,8 @@ class MailThread(models.AbstractModel): def _message_notification_recipients(self, message, recipients): # At this point, all access rights should be ok. We sudo everything to # access rights checks and speedup the computation. - recipients_sudo = recipients.sudo() result = {} - doc_followers = self.env['mail.followers'] - if message.model and message.res_id: - doc_followers = self.env['mail.followers'].sudo().search([ - ('res_model', '=', message.model), - ('res_id', '=', message.res_id), - ('partner_id', 'in', recipients_sudo.ids)]) - partner_followers = doc_followers.mapped('partner_id') - if self._context.get('auto_delete', False): access_link = self._notification_link_helper('view') else: @@ -698,13 +681,9 @@ class MailThread(models.AbstractModel): ('user', lambda partner: bool(partner.user_ids) and not any(user.share for user in partner.user_ids), {}), ('portal', lambda partner: bool(partner.user_ids) and all(user.share for user in partner.user_ids), { 'has_button_access': False, - 'has_button_follow': False, - 'has_button_unfollow': False, }), ('customer', lambda partner: True, { 'has_button_access': False, - 'has_button_follow': False, - 'has_button_unfollow': False, }) ] @@ -715,25 +694,13 @@ class MailThread(models.AbstractModel): group_data.setdefault('button_access', { 'url': access_link, 'title': view_title}) - group_data.setdefault('has_button_follow', True) - group_data.setdefault('button_follow', { - 'url': self._notification_link_helper('follow', model=message.model, res_id=message.res_id), - 'title': _('Follow')}) - group_data.setdefault('has_button_unfollow', True) - group_data.setdefault('button_unfollow', { - 'url': self._notification_link_helper('unfollow', model=message.model, res_id=message.res_id), - 'title': _('Unfollow')}) group_data.setdefault('actions', list()) - group_data.setdefault('followers', self.env['res.partner']) - group_data.setdefault('not_followers', self.env['res.partner']) + group_data.setdefault('recipients', self.env['res.partner']) for recipient in recipients: for group_name, group_func, group_data in groups: if group_func(recipient): - if recipient in partner_followers: - group_data['followers'] |= recipient - else: - group_data['not_followers'] |= recipient + group_data['recipients'] |= recipient break for group_name, group_method, group_data in groups: diff --git a/addons/mail/models/res_partner.py b/addons/mail/models/res_partner.py index 6114adcce7b..77d61185ed0 100644 --- a/addons/mail/models/res_partner.py +++ b/addons/mail/models/res_partner.py @@ -179,29 +179,14 @@ class Partner(models.Model): emails = self.env['mail.mail'] recipients_nbr, recipients_max = 0, 50 for email_type, recipient_template_values in recipients.items(): - if recipient_template_values['followers']: + if recipient_template_values['recipients']: # generate notification email content - template_fol_values = dict(base_template_ctx, **recipient_template_values) # fixme: set button_unfollow to none - template_fol_values['has_button_follow'] = False - template_fol = base_template.with_context(**template_fol_values) + template_ctx = dict(base_template_ctx, **recipient_template_values) # fixme: set button_unfollow to none + template = base_template.with_context(**template_ctx) # generate templates for followers and not followers - fol_values = template_fol.generate_email(message.id, fields=['body_html', 'subject']) + fol_values = template.generate_email(message.id, fields=['body_html', 'subject']) # send email - new_emails, new_recipients_nbr = self._notify_send(fol_values['body'], fol_values['subject'], recipient_template_values['followers'], **base_mail_values) - # update notifications - self._notify_udpate_notifications(new_emails) - - emails |= new_emails - recipients_nbr += new_recipients_nbr - if recipient_template_values['not_followers']: - # generate notification email content - template_not_values = dict(base_template_ctx, **recipient_template_values) # fixme: set button_follow to none - template_not_values['has_button_unfollow'] = False - template_not = base_template.with_context(**template_not_values) - # generate templates for followers and not followers - not_values = template_not.generate_email(message.id, fields=['body_html', 'subject']) - # send email - new_emails, new_recipients_nbr = self._notify_send(not_values['body'], not_values['subject'], recipient_template_values['not_followers'], **base_mail_values) + new_emails, new_recipients_nbr = self._notify_send(fol_values['body'], fol_values['subject'], recipient_template_values['recipients'], **base_mail_values) # update notifications self._notify_udpate_notifications(new_emails)