def path_page(self, seo_url, **kwargs): """Handle SEO urls for ir.ui.views. ToDo: Add additional check for field seo_url_parent. Otherwise it is possible to use invalid url structures. For example: if you have two pages 'study-1' and 'study-2' with the same seo_url_level and different seo_url_parent you can use '/ecommerce/study-1/how-to-do-it-right' and '/ecommerce/study-2/how-to-do-it-right' to call the page 'how-to-do-it-right'. """ env = request.env(context=request.context) seo_url_parts = [ s.encode('utf8') for s in seo_url.split('/') if s != '' ] views = env['ir.ui.view'].search([('seo_url', 'in', seo_url_parts)], order='seo_url_level ASC') page = 'website.404' if len(seo_url_parts) == len(views): seo_url_check = [v.seo_url.encode('utf8') for v in views] current_view = views[-1] if (seo_url_parts == seo_url_check and (current_view.seo_url_level + 1) == len(views)): page = current_view.xml_id if page == 'website.404': url = self.look_for_redirect_url(seo_url, **kwargs) if url: return request.redirect(url, code=301) if page == 'website.404' and request.website.is_publisher(): page = 'website.page_404' return request.render(page, {})
def path_page(self, seo_url, **kwargs): """Handle SEO urls for ir.ui.views.""" env = request.env(context=request.context) seo_url_parts = kwargs.get('seo_url_parts', False) if not seo_url_parts: seo_url_parts = [ s.encode('utf8') for s in seo_url.split('/') if s != '' ] page = 'website.404' views = env['ir.ui.view'].search([('seo_url', 'in', seo_url_parts)], order='seo_url_level ASC') # check for valid SEO url structure of ir.ui.views if len(seo_url_parts) == len(views): seo_url_check = [v.seo_url.encode('utf8') for v in views] seo_url_check = [] seo_url_parent_id = False for v in views: if not seo_url_parent_id or v.seo_url_parent and \ seo_url_parent_id == v.seo_url_parent.id: seo_url_parent_id = v.id seo_url_check.append(v.seo_url.encode('utf8')) current_view = views[-1] if (seo_url_parts == seo_url_check and (current_view.seo_url_level + 1) == len(views)): page = current_view.xml_id if page == 'website.404' and request.website.is_publisher(): page = 'website.page_404' return request.render(page, {})
def path_page(self, seo_url, **post): pages = ['website.404', 'website.page_404'] response = super(Website, self).path_page(seo_url, **post) if response.template not in pages: return request.website.render(response.template) env = request.env(context=request.context) seo_url_parts = [s.encode('utf8') for s in seo_url.split('/') if s != ''] seo_url_blog = seo_url_parts.pop(0) blogs = env['blog.blog'].search([('seo_url', '=', seo_url_blog)]) if blogs: blog_instance = WebsiteBlog() if seo_url_parts: tags = env['blog.tag'].search([('seo_url', '=', seo_url_parts[0])]) if tags: return blog_instance.blog(blogs[0], tag=tags[0],**post) else: blog_posts = env['blog.post'].search([ ('blog_id', 'in', [x.id for x in blogs]), ('seo_url', '=', seo_url_parts[0]) ]) if blog_posts: return blog_instance.blog_post(blog_posts[0].blog_id, blog_posts[0], **post) else: return blog_instance.blog(blogs[0], **post) page = pages[0] if env.user.login != 'public': page = pages[1] return request.render(page, {})
def look_for_redirect_url(self, seo_url, **kwargs): env = request.env(context=request.context) if not seo_url.startswith('/'): seo_url = '/' + seo_url lang = env.context.get('lang', False) if not lang: lang = request.website.default_lang_code lang = env['res.lang'].get_code_from_alias(lang) domain = [('url', '=', seo_url), ('lang', '=', lang)] data = env['website.seo.redirect'].search(domain) if data: model, rid = data[0].resource.split(',') resource = env[model].browse(int(rid)) return resource.get_seo_path()[0]
def user_avatar(self, user_id=0, **post): status, headers, content = binary_content( model='res.users', id=user_id, field='image', default_mimetype='image/png', env=request.env(user=openerp.SUPERUSER_ID)) if status == 304: return werkzeug.wrappers.Response(status=304) image_base64 = base64.b64decode(content) headers.append(('Content-Length', len(image_base64))) response = request.make_response(image_base64, headers) response.status = str(status) return response
def user_avatar(self, user_id=0, **post): status, headers, content = binary_content( model="res.users", id=user_id, field="image", default_mimetype="image/png", env=request.env(user=openerp.SUPERUSER_ID), ) if status == 304: return werkzeug.wrappers.Response(status=304) image_base64 = base64.b64decode(content) headers.append(("Content-Length", len(image_base64))) response = request.make_response(image_base64, headers) response.status = str(status) return response
def user_avatar(self, user_id=0, **post): status, headers, content = binary_content( model='res.users', id=user_id, field='image_medium', default_mimetype='image/png', env=request.env(user=openerp.SUPERUSER_ID)) if not content: img_path = openerp.modules.get_module_resource( 'web', 'static/src/img', 'placeholder.png') with open(img_path, 'rb') as f: image = f.read() content = image.encode('base64') if status == 304: return werkzeug.wrappers.Response(status=304) image_base64 = base64.b64decode(content) headers.append(('Content-Length', len(image_base64))) response = request.make_response(image_base64, headers) response.status = str(status) return response
def user_avatar(self, user_id=0, **post): status, headers, content = binary_content( model="res.users", id=user_id, field="image", default_mimetype="image/png", env=request.env(user=openerp.SUPERUSER_ID), ) if not content: img_path = openerp.modules.get_module_resource("web", "static/src/img", "placeholder.png") with open(img_path, "rb") as f: image = f.read() content = image.encode("base64") if status == 304: return werkzeug.wrappers.Response(status=304) image_base64 = base64.b64decode(content) headers.append(("Content-Length", len(image_base64))) response = request.make_response(image_base64, headers) response.status = str(status) return response
def blog(self, blog=None, tag=None, page=1, **opt): """Update blog url and pager of original blog function with SEO url.""" # - request.env.context contains always "'lang': u'en_US'" regardless # of the used frontend language which results in not found non english # blogs, so we update request.env.context with request.context env = request.env(context=request.context) blog_post_obj = env['blog.post'] date_end = opt.get('date_end') response = super(WebsiteBlog, self).blog(blog=blog, tag=tag, page=page, **opt) values = response.qcontext blog_url = QueryURL('', ['blog', 'tag'], blog=blog, tag=tag, date_begin=values['date'], date_end=date_end) domain = [] if blog: domain += [('blog_id', '=', blog.id)] if tag: domain += [('tag_ids', 'in', tag.id)] if values['date'] and date_end: domain += [("create_date", ">=", values['date']), ("create_date", "<=", date_end)] blog_posts = blog_post_obj.search(domain, order="create_date desc") pager = request.website.pager( url=blog_url(), total=len(blog_posts), page=page, step=self._blog_post_per_page, ) values.update({ 'blog_url': blog_url, 'pager': pager, 'main_object': tag or blog }) return request.website.render(response.template, values)
def user_avatar(self, user_id=0, **post): status, headers, content = binary_content(model='res.users', id=user_id, field='image', default_mimetype='image/png', env=request.env(user=openerp.SUPERUSER_ID)) if not content: img_path = openerp.modules.get_module_resource('web', 'static/src/img', 'placeholder.png') with open(img_path, 'rb') as f: image = f.read() content = image.encode('base64') if status == 304: return werkzeug.wrappers.Response(status=304) image_base64 = base64.b64decode(content) headers.append(('Content-Length', len(image_base64))) response = request.make_response(image_base64, headers) response.status = str(status) return response