[IMP] website_mail : widgetize the Frontend Chatter. Prepare to include rating feature with posting mail.message
This commit is contained in:
@@ -150,6 +150,7 @@ class WebsiteMail(http.Controller):
|
||||
try:
|
||||
msg = _message_post_helper(res_model, res_id, message, **kw)
|
||||
data = {
|
||||
'id': msg.id,
|
||||
'body': msg.body,
|
||||
'date': msg.date,
|
||||
'author': msg.author_id.name,
|
||||
@@ -162,5 +163,5 @@ class WebsiteMail(http.Controller):
|
||||
@http.route(['/website_mail/post/post'], type='http', method=['POST'], auth='public', website=True)
|
||||
def chatter_post(self, res_model='', res_id=None, message='', redirect=None, **kw):
|
||||
res_id = int(res_id)
|
||||
_message_post_helper(res_model, res_id, message, **kw)
|
||||
return request.redirect(request.httprequest.referrer)
|
||||
message = _message_post_helper(res_model, res_id, message, **kw)
|
||||
return request.redirect(request.httprequest.referrer + "#message-%s" % (message.id,))
|
||||
|
||||
@@ -1,49 +1,78 @@
|
||||
odoo.define('website_mail_post', function(require) {
|
||||
odoo.define('website_mail.thread', function(require) {
|
||||
'use strict';
|
||||
require('website.website');
|
||||
|
||||
var web_editor_base = require('web_editor.base')
|
||||
var qweb = require('qweb');
|
||||
var ajax = require('web.ajax');
|
||||
var Widget = require('web.Widget');
|
||||
|
||||
// load qweb template
|
||||
ajax.loadXML('/website_mail/static/src/xml/chatter_message.xml', qweb);
|
||||
|
||||
if(!$('.o_website_chatter_json').length) {
|
||||
return $.Deferred().reject("DOM doesn't contain '.o_website_chatter_json'");
|
||||
}
|
||||
/**
|
||||
* Widget WebsiteMailThread
|
||||
*
|
||||
* Widget sending message to the server, using json request. Used to not refresh all
|
||||
* the page. Its DOM already exists on the page (The class of root element is
|
||||
* '.o_website_mail_thread').
|
||||
*/
|
||||
var WebsiteMailThread = Widget.extend({
|
||||
events:{
|
||||
"click .o_website_chatter_json": "on_click",
|
||||
},
|
||||
on_click: function(e){
|
||||
var self = this;
|
||||
e.preventDefault();
|
||||
|
||||
$('.o_website_chatter_json').on('click', function(ev) {
|
||||
ev.preventDefault();
|
||||
var $button = $(this);
|
||||
var $form = $(this).parents().find('.o_website_chatter_form');
|
||||
var action = $form.attr('action');
|
||||
var data = getFormData($form);
|
||||
data.message = data.message.replace(/\n/g,"<br/>");
|
||||
if (data.message) {
|
||||
$button.attr('disabled', true);
|
||||
var button_bk = $button.html();
|
||||
$button.prepend('<i class="fa fa-refresh fa-spin"></i> ');
|
||||
ajax.jsonRpc(action, 'call', data).then(function (result) {
|
||||
if (result) {
|
||||
$('.o_website_chatter_error').fadeOut();
|
||||
var msg = qweb.render('website_mail.thread_message', result);
|
||||
var elem = $(msg).hide().prependTo($('.o_website_comments'));
|
||||
elem.slideToggle();
|
||||
$form.find('textarea').val('');
|
||||
} else {
|
||||
$('o_website_chatter_error').fadeIn();
|
||||
}
|
||||
$button.html(button_bk);
|
||||
$button.attr('disabled', false);
|
||||
});
|
||||
}
|
||||
var $button = this.$(e.currentTarget);
|
||||
var $form = this.$('.o_website_chatter_form');
|
||||
var $error = this.$('.o_website_chatter_error');
|
||||
var action = $form.attr('action');
|
||||
var data = this._get_form_data($form);
|
||||
|
||||
function getFormData($form){
|
||||
data.message = data.message.replace(/\n/g,"<br/>");
|
||||
if (data.message) {
|
||||
// make the 'send' button loading
|
||||
$button.attr('disabled', true);
|
||||
var button_bk = $button.html();
|
||||
$button.prepend('<i class="fa fa-refresh fa-spin"></i> ');
|
||||
// post message, shw/hide error message and empty textarea
|
||||
ajax.jsonRpc(action, 'call', data).then(function (result) {
|
||||
if (result) {
|
||||
$error.fadeOut();
|
||||
self.prepend_message(result);
|
||||
$form.find('textarea').val('');
|
||||
} else {
|
||||
$error.fadeIn();
|
||||
}
|
||||
$button.html(button_bk);
|
||||
$button.attr('disabled', false);
|
||||
});
|
||||
}
|
||||
},
|
||||
prepend_message: function(message_data){
|
||||
var msg = qweb.render('website_mail.thread_message', message_data);
|
||||
var elem = $(msg).hide().prependTo(this.$('.o_website_comments'));
|
||||
elem.slideToggle();
|
||||
return elem;
|
||||
},
|
||||
_get_form_data: function($form){
|
||||
var unindexed_array = $form.serializeArray();
|
||||
var indexed_array = {};
|
||||
|
||||
$.map(unindexed_array, function(n, i){
|
||||
indexed_array[n.name] = n.value;
|
||||
});
|
||||
|
||||
return indexed_array;
|
||||
},
|
||||
});
|
||||
|
||||
web_editor_base.ready().then(function(){
|
||||
if($('.o_website_mail_thread').length) {
|
||||
var mail_thread = new WebsiteMailThread($('body')).setElement($('.o_website_mail_thread'));
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
WebsiteMailThread: WebsiteMailThread,
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<templates id="template" xml:space="preserve">
|
||||
<t t-name="website_mail.thread_message">
|
||||
<li class="media">
|
||||
<li class="media" t-att-id="'message-' + id">
|
||||
<div class="media-body">
|
||||
<img class="media-object pull-left" t-att-src="image_url" style="width: 50px; margin-right: 10px;"/>
|
||||
<div class="media-body">
|
||||
|
||||
@@ -36,10 +36,10 @@
|
||||
:token_field string (optional): name of the field that contains the token on the object (default to 'token')
|
||||
:sha_in string (optional): if you use the shasign to allow commenting by non-logged user, you need to set it in this variable using the
|
||||
object_shasign function defined in the main controller of website_portal
|
||||
:sha_time string (optional): timestamp of the shasign generation
|
||||
:sha_time string (optional): timestamp of the shasign generation
|
||||
:chatter_mode string: 'json' or 'post' depending on what kind of request you want
|
||||
-->
|
||||
<section id="discussion" class="hidden-print oe_website_portal">
|
||||
<section id="discussion" class="hidden-print oe_website_portal o_website_mail_thread">
|
||||
<section class="mb32 css_editable_mode_hidden hidden-print">
|
||||
<form class="o_website_chatter_form" t-attf-action="/website_mail/post/#{chatter_mode}" method="POST" t-if="website.env.user != request.env['ir.model.data'].xmlid_to_object('base.public_user') or token or sha_in">
|
||||
<img class="img pull-left img-circle" t-attf-src="/web/image/res.partner/#{user_id.partner_id.id}/image_small/50x50" style="width: 50px; margin-right: 10px;"/>
|
||||
@@ -62,7 +62,7 @@
|
||||
<ul class="media-list o_website_comments">
|
||||
<t t-foreach="object.message_ids" t-as="message">
|
||||
<t t-if="message.website_published or website.env.user.sudo(website.env.user.id).has_group('base.group_website_publisher')">
|
||||
<li class="media" t-if="message.message_type == 'comment'">
|
||||
<li class="media" t-if="message.message_type == 'comment'" t-att-id="'message-%s' % message.id">
|
||||
<div class="media-body">
|
||||
<img class="media-object pull-left img-circle" t-att-src="website.image_url(message.author_id, 'image_small')" style="width: 50px; margin-right: 10px;"/>
|
||||
<div class="media-body">
|
||||
|
||||
Reference in New Issue
Block a user