Esempio n. 1
0
    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, {})
Esempio n. 2
0
    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, {})
Esempio n. 3
0
    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, {})
Esempio n. 4
0
 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]
Esempio n. 5
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
Esempio n. 6
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
Esempio n. 7
0
    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
Esempio n. 8
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 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
Esempio n. 9
0
    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)
Esempio n. 10
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 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