[MERGE] rating, website_slides: apply various rating / slides fixes
See sub commits for more details. Task ID 2058595 PR #36281 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
@@ -114,7 +114,7 @@
|
||||
<field name="activity_category" invisible="1" />
|
||||
<field name="res_model" invisible="1"/>
|
||||
<field name="res_model_id" invisible="1"/>
|
||||
<field name="res_id" invisible="1"/>
|
||||
<field name="res_id" invisible="1" widget="integer"/>
|
||||
<field name="force_next" invisible="1"/>
|
||||
<field name="previous_activity_type_id"/>
|
||||
<field name="has_recommended_activities"/>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Followers">
|
||||
<field name="res_model"/>
|
||||
<field name="res_id"/>
|
||||
<field name="res_id" widget="integer"/>
|
||||
<field name="partner_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -28,7 +28,7 @@
|
||||
<field name="partner_id"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="res_id"/>
|
||||
<field name="res_id" widget="integer"/>
|
||||
<field name="subtype_ids" widget="many2many_tags"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<field name="subject"/>
|
||||
<field name="author_id"/>
|
||||
<field name="model"/>
|
||||
<field name="res_id"/>
|
||||
<field name="res_id" widget="integer"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -37,7 +37,7 @@
|
||||
<group>
|
||||
<field name="parent_id"/>
|
||||
<field name="model"/>
|
||||
<field name="res_id"/>
|
||||
<field name="res_id" widget="integer"/>
|
||||
<field name="message_type"/>
|
||||
<field name="subtype_id"/>
|
||||
<field name="moderation_status"/>
|
||||
|
||||
@@ -10,11 +10,13 @@ class MailThread(models.AbstractModel):
|
||||
@api.returns('mail.message', lambda value: value.id)
|
||||
def message_post(self, **kwargs):
|
||||
rating_value = kwargs.pop('rating_value', False)
|
||||
rating_feedback = kwargs.pop('rating_feedback', False)
|
||||
message = super(MailThread, self).message_post(**kwargs)
|
||||
if rating_value:
|
||||
ir_model = self.env['ir.model'].sudo().search([('model', '=', self._name)])
|
||||
self.env['rating.rating'].create({
|
||||
'rating': float(rating_value) if rating_value is not None else False,
|
||||
'feedback': rating_feedback,
|
||||
'res_model_id': ir_model.id,
|
||||
'res_id': self.id,
|
||||
'message_id': message.id,
|
||||
|
||||
@@ -13,7 +13,6 @@ RATING_LIMIT_MIN = 1
|
||||
|
||||
|
||||
class Rating(models.Model):
|
||||
|
||||
_name = "rating.rating"
|
||||
_description = "Rating"
|
||||
_order = 'write_date desc'
|
||||
@@ -50,7 +49,10 @@ class Rating(models.Model):
|
||||
('highly_dissatisfied', 'Highly dissatisfied'),
|
||||
('no_rating', 'No Rating yet')], string='Rating', store=True, compute='_compute_rating_text', readonly=True)
|
||||
feedback = fields.Text('Comment', help="Reason of the rating")
|
||||
message_id = fields.Many2one('mail.message', string="Linked message", help="Associated message when posting a review. Mainly used in website addons.", index=True)
|
||||
message_id = fields.Many2one(
|
||||
'mail.message', string="Linked message",
|
||||
index=True, ondelete='cascade',
|
||||
help="Associated message when posting a review. Mainly used in website addons.")
|
||||
access_token = fields.Char('Security Token', default=_default_access_token, help="Access token to set the rating of the value")
|
||||
consumed = fields.Boolean(string="Filled Rating", help="Enabled if the rating has been filled.")
|
||||
|
||||
|
||||
@@ -2,3 +2,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_rating_user,rating.rating.user,rating.model_rating_rating,base.group_user,1,1,1,0
|
||||
access_rating_public,rating.rating.public,rating.model_rating_rating,base.group_public,1,1,1,0
|
||||
access_rating_portal,rating.rating.portal,rating.model_rating_rating,base.group_portal,1,1,1,0
|
||||
rating_rating_access_system,rating.rating.access.system,rating.model_rating_rating,base.group_system,1,1,1,1
|
||||
|
||||
|
@@ -11,9 +11,15 @@ class PortalChatter(PortalChatter):
|
||||
|
||||
def _portal_post_filter_params(self):
|
||||
fields = super(PortalChatter, self)._portal_post_filter_params()
|
||||
fields.append('rating_value')
|
||||
fields += ['rating_value', 'rating_feedback']
|
||||
return fields
|
||||
|
||||
@http.route()
|
||||
def portal_chatter_post(self, res_model, res_id, message, redirect=None, attachment_ids='', attachment_tokens='', **kwargs):
|
||||
if kwargs.get('rating_value'):
|
||||
kwargs['rating_feedback'] = kwargs.pop('rating_feedback', message)
|
||||
return super(PortalChatter, self).portal_chatter_post(res_model, res_id, message, redirect=redirect, attachment_ids=attachment_ids, attachment_tokens=attachment_tokens, **kwargs)
|
||||
|
||||
@http.route()
|
||||
def portal_chatter_init(self, res_model, res_id, domain=False, limit=False, **kwargs):
|
||||
result = super(PortalChatter, self).portal_chatter_init(res_model, res_id, domain=domain, limit=limit, **kwargs)
|
||||
|
||||
@@ -211,7 +211,11 @@ class Channel(models.Model):
|
||||
@api.depends('slide_ids.slide_type', 'slide_ids.is_published', 'slide_ids.completion_time',
|
||||
'slide_ids.likes', 'slide_ids.dislikes', 'slide_ids.total_views', 'slide_ids.is_category', 'slide_ids.active')
|
||||
def _compute_slides_statistics(self):
|
||||
result = dict((cid, dict(total_views=0, total_votes=0, total_time=0)) for cid in self.ids)
|
||||
default_vals = dict(total_views=0, total_votes=0, total_time=0, total_slides=0)
|
||||
keys = ['nbr_%s' % slide_type for slide_type in self.env['slide.slide']._fields['slide_type'].get_values(self.env)]
|
||||
default_vals.update(dict((key, 0) for key in keys))
|
||||
|
||||
result = dict((cid, dict(default_vals)) for cid in self.ids)
|
||||
read_group_res = self.env['slide.slide'].read_group(
|
||||
[('active', '=', True), ('is_published', '=', True), ('channel_id', 'in', self.ids), ('is_category', '=', False)],
|
||||
['channel_id', 'slide_type', 'likes', 'dislikes', 'total_views', 'completion_time'],
|
||||
@@ -229,7 +233,7 @@ class Channel(models.Model):
|
||||
result[cid].update(cdata)
|
||||
|
||||
for record in self:
|
||||
record.update(result.get(record.id, {}))
|
||||
record.update(result.get(record.id, default_vals))
|
||||
|
||||
def _compute_slides_statistics_type(self, read_group_res):
|
||||
""" Compute statistics based on all existing slide types """
|
||||
|
||||
@@ -197,6 +197,8 @@ class Slide(models.Model):
|
||||
Lists are manually sorted because when adding a new browse record order
|
||||
will not be correct as the added slide would actually end up at the
|
||||
first place no matter its sequence."""
|
||||
self.category_id = False # initialize whatever the state
|
||||
|
||||
channel_slides = {}
|
||||
for slide in self:
|
||||
if slide.channel_id.id not in channel_slides:
|
||||
|
||||
@@ -95,7 +95,7 @@ odoo.define('website_slides.quiz', function (require) {
|
||||
} else if (alert_code === 'public_user') {
|
||||
message = _t("You must be logged to submit the quiz.");
|
||||
}
|
||||
this.$('.o_wslides_js_lesson_quiz_error span').html(message);
|
||||
this.$('.o_wslides_js_lesson_quiz_error span:first').html(message);
|
||||
this.$('.o_wslides_js_lesson_quiz_error').removeClass('d-none');
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user