Thibault Delavallée (OpenERP) has proposed merging
lp:~openerp-dev/openobject-addons/trunk-openchatter-mail_vote-part-4-atp into
lp:openobject-addons.
Requested reviews:
Thibault Delavallée (OpenERP) (tde-openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-openchatter-mail_vote-part-4-atp/+merge/123098
Hello,
Add vote system (Like or unlike document comments)
Thanks
--
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-openchatter-mail_vote-part-4-atp/+merge/123098
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-addons/trunk-openchatter-mail_vote-part-4-atp.
=== modified file 'mail/__init__.py'
--- mail/__init__.py 2012-08-17 11:19:36 +0000
+++ mail/__init__.py 2012-09-06 14:39:23 +0000
@@ -25,6 +25,7 @@
import mail_mail
import mail_thread
import mail_group
+import mail_vote
import res_partner
import res_users
import report
=== modified file 'mail/mail_message.py'
--- mail/mail_message.py 2012-09-05 23:49:19 +0000
+++ mail/mail_message.py 2012-09-06 14:39:23 +0000
@@ -124,6 +124,8 @@
'unread': fields.function(_get_unread, fnct_search=_search_unread,
type='boolean', string='Unread',
help='Functional field to search for unread messages linked to uid'),
+ 'vote_ids': fields.one2many('mail.vote', 'msg_id', 'Votes'),
+
}
def _needaction_domain_get(self, cr, uid, context=None):
@@ -140,6 +142,25 @@
'author_id': lambda self, cr, uid, ctx={}: self._get_default_author(cr, uid, ctx),
'body': '',
}
+
+ #---------------------------------------------------
+ #Mail Vote system (Like or Unlike comments
+ #-----------------------------------------------------
+ def vote_toggle(self, cr, uid, ids, context=None):
+ '''
+ Toggles when Comment is liked or unlike.
+ create vote entries if current user like comment..
+ '''
+ vote_pool = self.pool.get('mail.vote')
+ new_vote_id = False
+ for message in self.browse(cr, uid, ids, context):
+ voters_ids = [x.id for x in message.vote_ids if x.user_id.id == uid]
+ if not voters_ids:
+ new_vote_id = vote_pool.create(cr, uid, {'msg_id': message.id, 'user_id': uid}, context=context)
+ else:
+ vote_pool.unlink(cr, uid, voters_ids, context=context)
+ return True
+
#------------------------------------------------------
# Message loading for web interface
=== modified file 'mail/mail_thread.py'
--- mail/mail_thread.py 2012-09-05 16:01:45 +0000
+++ mail/mail_thread.py 2012-09-06 14:39:23 +0000
@@ -176,7 +176,7 @@
#------------------------------------------------------
# Automatic subscription when creating
#------------------------------------------------------
-
+
def create(self, cr, uid, vals, context=None):
""" Override to subscribe the current user. """
thread_id = super(mail_thread, self).create(cr, uid, vals, context=context)
=== added file 'mail/mail_vote.py'
--- mail/mail_vote.py 1970-01-01 00:00:00 +0000
+++ mail/mail_vote.py 2012-09-06 14:39:23 +0000
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2012-Today OpenERP SA (<http://www.openerp.com>).
+#
+# 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 <http://www.gnu.org/licenses/>
+#
+##############################################################################
+
+from osv import osv, fields
+from tools.translate import _
+
+class mail_vote(osv.Model):
+ '''
+ Mail vote feature allow users to like and unlike particular message or Document's message comment.
+ It counts the number of votes per document.
+ '''
+ _name = 'mail.vote'
+ _description = 'Mail Vote'
+ _columns = {
+ 'msg_id': fields.many2one('mail.message', 'Message', required=True),
+ 'user_id': fields.many2one('res.users', 'User', required=True),
+ }
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
=== modified file 'mail/security/ir.model.access.csv'
--- mail/security/ir.model.access.csv 2012-08-13 19:38:41 +0000
+++ mail/security/ir.model.access.csv 2012-09-06 14:39:23 +0000
@@ -7,3 +7,4 @@
access_mail_group,mail.group,model_mail_group,base.group_user,1,1,1,1
access_mail_alias_user,mail.alias,model_mail_alias,base.group_user,1,1,1,0
access_mail_alias_system,mail.alias,model_mail_alias,base.group_system,1,1,1,1
+access_mail_vote,mail.vote,model_mail_vote,base.group_user,1,1,1,1
=== modified file 'mail/static/src/css/mail.css'
--- mail/static/src/css/mail.css 2012-09-03 15:20:25 +0000
+++ mail/static/src/css/mail.css 2012-09-06 14:39:23 +0000
@@ -260,6 +260,35 @@
display: none;
}
+/*--------------------------------------------------------------*/
+/* Mail Vote System (Like or Unlike Comment)
+/*--------------------------------------------------------------*/
+
+.oe_mail_vote_image{
+ height='12px';
+ width='16px';
+}
+
+button.oe_mail_msg_vote_like{
+ height:21px;
+ width: 30px;
+ padding: 1px;
+ background: #8A89BA;
+ margin-top: -4px;
+}
+
+button.oe_mail_msg_vote_like:hover{
+ background: #8A89BA;
+}
+
+button.oe_mail_msg_vote_like span {
+ color: white;
+}
+
+span.oe_mail_vote_string{
+ color: #807FB4;
+}
+
/* ------------------------------------------------------------ */
/* mail.compose.message form view & OpenERP hacks
/* ------------------------------------------------------------ */
=== added file 'mail/static/src/img/vote.gif'
Binary files mail/static/src/img/vote.gif 1970-01-01 00:00:00 +0000 and mail/static/src/img/vote.gif 2012-09-06 14:39:23 +0000 differ
=== modified file 'mail/static/src/js/mail.js'
--- mail/static/src/js/mail.js 2012-09-03 15:20:25 +0000
+++ mail/static/src/js/mail.js 2012-09-06 14:39:23 +0000
@@ -266,6 +266,53 @@
return display_done && compose_done;
},
+ //Mail vote Functionality...
+ add_vote_event: function(element){
+ self = this;
+ vote_img = element.find('.oe_mail_msg_vote_like');
+ if (vote_img)
+ vote_img.click(function(){
+ self.subscribe_vote($(this).attr('data-id'));
+ });
+ return
+ },
+
+ find_parent_element: function(name, message_id){
+ parent_element = false;
+ _.each($(name), function(element){
+ if ($(element).attr("data-id") == message_id){
+ parent_element = element;
+ }
+ });
+ return parent_element;
+ },
+
+ render_vote: function(message_id){
+ var self = this;
+ var mail_vote = new session.web.DataSetSearch(self, 'mail.vote', self.session.context, [['msg_id','=',parseInt(message_id)]]);
+ mail_vote.read_slice(['user_id']).then(function(result){
+ vote_count = result.length;
+ is_vote_liked = false;
+ _.each(result, function(vote){
+ if (self.session.uid == vote.user_id[0]){
+ is_vote_liked = true;
+ }
+ });
+ parent_element = self.find_parent_element(".oe_mail_msg_vote", message_id);
+ vote_element = session.web.qweb.render('VoteDisplay', {'msg_id': message_id, 'vote_count': vote_count, 'is_vote_liked': is_vote_liked});
+ $(parent_element).html(vote_element);
+ self.add_vote_event($(parent_element));
+ });
+ },
+
+ subscribe_vote: function(message_id){
+ var self = this;
+ this.mail_message = new session.web.DataSet(this, 'mail.message');
+ return this.mail_message.call('vote_toggle', [[parseInt(message_id)]]).then(function(result){
+ self.render_vote(message_id);
+ });
+ },
+
/** Customize the display
* - show_header_compose: show the composition form in the header */
do_customize_display: function() {
@@ -399,6 +446,8 @@
var self = this;
var _expendable = false;
_(records).each(function (record) {
+ //Render Votes.
+ self.render_vote(record.id);
if (record.type == 'expandable') {
_expendable = true;
self.update_fetch_more(true);
=== modified file 'mail/static/src/xml/mail.xml'
--- mail/static/src/xml/mail.xml 2012-09-05 16:31:35 +0000
+++ mail/static/src/xml/mail.xml 2012-09-06 14:39:23 +0000
@@ -92,6 +92,25 @@
</div>
</ul>
+ <!-- Vote system (Like or Unlike -->
+ <t t-name="VoteDisplay">
+ <t t-if='vote_count'>
+ <span class="oe_left oe_mail_vote_string">Votes :<t t-esc="vote_count"/></span>
+ </t>
+ <li>
+ <t t-if="!is_vote_liked">
+ <button class="oe_mail_msg_vote_like" t-att-data-id="msg_id" title="Click to Vote.">
+ <span>+1</span>
+ </button>
+ </t>
+ <t t-if="is_vote_liked">
+ <button class="oe_mail_msg_vote_like" t-att-data-id="msg_id" title="Click to Unvote." style="background:#DC5F59; padding:1px">
+ <span>-1</span>
+ </button>
+ </t>
+ </li>
+ </t>
+
<!-- default layout -->
<li t-name="mail.thread.message" class="oe_mail oe_mail_thread_msg">
<div t-attf-class="oe_mail_msg_#{record.type} oe_semantic_html_override">
@@ -129,6 +148,7 @@
<li t-if="record.subject & params.thread_level > 0"><a t-attf-href="#model=#{params.res_model}&id=#{params.res_id}"><t t-raw="record.record_name"/></a></li>
<li><a t-attf-href="#model=res.partner&id=#{record.author_id[0]}"><t t-raw="record.author_id[1]"/></a></li>
<li><span t-att-title="record.date"><t t-raw="record.timerelative"/></span></li>
+ <li> <span t-att-data-id="record.id" class="oe_mail_msg_vote"></span> </li>
<li t-if="display['show_reply']"><a href="#" class="oe_mail_msg_reply">Reply</a></li>
<!-- uncomment when merging vote
<li><a href="#">Like</a></li>
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp