def write(self, vals): if 'cover_properties' not in vals: return super().write(vals) cover_properties = json_safe.loads(vals['cover_properties']) resize_classes = cover_properties.get('resize_class', '').split() classes = [ 'o_half_screen_height', 'o_full_screen_height', 'cover_auto' ] if not set(resize_classes).isdisjoint(classes): # Updating cover properties and the given 'resize_class' set is # valid, normal write. return super().write(vals) # If we do not receive a valid resize_class via the cover_properties, we # keep the original one (prevents updates on list displays from # destroying resize_class). copy_vals = dict(vals) for item in self: old_cover_properties = json_safe.loads(item.cover_properties) cover_properties['resize_class'] = old_cover_properties.get( 'resize_class', classes[0]) copy_vals['cover_properties'] = json_safe.dumps(cover_properties) super(WebsiteCoverPropertiesMixin, item).write(copy_vals) return True
def _get_custom_rendering_context_values(self, donation_options=None, donation_descriptions=None, is_donation=False, **kwargs): rendering_context = super()._get_custom_rendering_context_values( **kwargs) if is_donation: user_sudo = request.env.user logged_in = not user_sudo._is_public() # If the user is logged in, take their partner rather than the partner set in the params. # This is something that we want, since security rules are based on the partner, and created # tokens should not be assigned to the public user. This should have no impact on the # transaction itself besides making reconciliation possibly more difficult (e.g. The # transaction and invoice partners are different). partner_sudo = user_sudo.partner_id partner_details = {} countries = request.env['res.country'] if logged_in: partner_details = { 'name': partner_sudo.name, 'email': partner_sudo.email, 'country_id': partner_sudo.country_id.id, } countries = request.env['res.country'].sudo().search([]) descriptions = request.httprequest.form.getlist( 'donation_descriptions') donation_options = json_safe.loads( donation_options) if donation_options else {} donation_amounts = json_safe.loads( donation_options.get('donationAmounts', '[]')) rendering_context.update({ 'is_donation': True, 'partner': partner_sudo, 'transaction_route': '/donation/transaction/%s' % donation_options.get('minimumAmount', 0), 'partner_details': partner_details, 'error': {}, 'countries': countries, 'donation_options': donation_options, 'donation_amounts': donation_amounts, 'donation_descriptions': descriptions, }) return rendering_context
def _get_background(self, height=None, width=None): self.ensure_one() properties = json_safe.loads(self.cover_properties) img = properties.get('background-image', "none") if img.startswith('url(/web/image/'): suffix = "" if height is not None: suffix += "&height=%s" % height if width is not None: suffix += "&width=%s" % width if suffix: suffix = '?' not in img and "?%s" % suffix or suffix img = img[:-1] + suffix + ')' return img
def _default_website_meta(self): res = super(BlogPost, self)._default_website_meta() res['default_opengraph']['og:description'] = res['default_twitter'][ 'twitter:description'] = self.subtitle res['default_opengraph']['og:type'] = 'article' res['default_opengraph']['article:published_time'] = self.post_date res['default_opengraph']['article:modified_time'] = self.write_date res['default_opengraph']['article:tag'] = self.tag_ids.mapped('name') # background-image might contain single quotes eg `url('/my/url')` res['default_opengraph']['og:image'] = res['default_twitter'][ 'twitter:image'] = json_scriptsafe.loads( self.cover_properties).get('background-image', 'none')[4:-1].strip("'") res['default_opengraph']['og:title'] = res['default_twitter'][ 'twitter:title'] = self.name res['default_meta_description'] = self.subtitle return res
def button_confirm(self): if self.carrier_id.is_mondialrelay: if not self.mondialrelay_last_selected: raise ValidationError(_('Please, choose a Parcel Point')) data = json_safe.loads(self.mondialrelay_last_selected) partner_shipping = self.order_id.partner_id._mondialrelay_search_or_create( { 'id': data['id'], 'name': data['name'], 'street': data['street'], 'street2': data['street2'], 'zip': data['zip'], 'city': data['city'], 'country_code': data['country'][:2].lower(), }) if partner_shipping != self.order_id.partner_shipping_id: self.order_id.partner_shipping_id = partner_shipping return super().button_confirm()