Skip to content

Commit

Permalink
[MIG][11.0] website_canonical_url
Browse files Browse the repository at this point in the history
  • Loading branch information
simahawk committed May 11, 2018
1 parent 1ae0479 commit e65fa8e
Show file tree
Hide file tree
Showing 10 changed files with 46 additions and 29 deletions.
1 change: 0 additions & 1 deletion website_canonical_url/__init__.py
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright initOS GmbH 2016
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

Expand Down
3 changes: 1 addition & 2 deletions website_canonical_url/__manifest__.py
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright initOS GmbH 2016
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

Expand All @@ -9,7 +8,7 @@
"Camptocamp, Odoo Community Association (OCA)",
'website': "https://github.com/OCA/website",
'category': 'Website',
'version': '10.0.1.0.0',
'version': '11.0.1.0.0',
'license': 'AGPL-3',
'depends': [
'website',
Expand Down
20 changes: 17 additions & 3 deletions website_canonical_url/demo/pages.xml
Expand Up @@ -4,15 +4,29 @@
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>

<template id="canonical_demo"
page="True"
<template id="canonical_demo_view"
name="Canonical URL and pager demo">
<t t-call="website.layout">
<!-- Add a fake pager to test the rel=prev/next links -->
<t t-set="pager"
t-value="website.pager(request.httprequest.path, 100, 2, url_args=request.httprequest.args)"/>
t-value="website.pager(request.httprequest.path, 100, 2, url_args=request.httprequest.args)"/>
<h1>Check source code to see pager and canonical URL.</h1>
</t>
</template>

<record id="canonical_demo_page" model="website.page">
<field name="website_published">True</field>
<field name="url">/canonical-demo</field>
<field name="view_id" ref="canonical_demo_view" />
</record>

<record id="canonical_demo_menu" model="website.menu">
<field name="name">Canonical URL demo</field>
<field name="url">/canonical-demo</field>
<field name="parent_id" ref="website.main_menu" />
<field name="sequence" type="int">50</field>
<field name="website_id" ref="website.default_website"/>
<field name="page_id" ref="canonical_demo_page" />
</record>

</odoo>
1 change: 0 additions & 1 deletion website_canonical_url/models/__init__.py
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright initOS GmbH 2016
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

Expand Down
3 changes: 1 addition & 2 deletions website_canonical_url/models/res_config.py
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Simone Orsi <simone.orsi@camptocamp.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

Expand All @@ -7,6 +6,6 @@

class WebsiteConfigSettings(models.TransientModel):

_inherit = 'website.config.settings'
_inherit = 'res.config.settings'

canonical_domain = fields.Char(related='website_id.canonical_domain')
6 changes: 1 addition & 5 deletions website_canonical_url/models/website.py
@@ -1,11 +1,10 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Simone Orsi <simone.orsi@camptocamp.com>
# Copyright initOS GmbH 2016
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import models, api, fields, exceptions, _
from odoo.http import request
from urlparse import urlparse, urljoin
from urllib.parse import urlparse, urljoin


class Website(models.Model):
Expand Down Expand Up @@ -57,13 +56,10 @@ def _get_canonical_relative_url(self, req=None):
return canonical_url

def _is_root_page(self, url, lang_path=''):
# TODO v11: `/page` does not exist anymore
first_part = '/page/'
if lang_path:
# usually URLs in menu item do not contain lang
url = url.replace(lang_path, '/')
return (
url.startswith(first_part) and
self.menu_id.child_id and
self.menu_id.child_id[0].url == url
)
1 change: 0 additions & 1 deletion website_canonical_url/tests/__init__.py
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Simone Orsi <simone.orsi@camptocamp.com>
# Copyright 2016 Jairo Llopis <jairo.llopis@tecnativa.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
Expand Down
9 changes: 4 additions & 5 deletions website_canonical_url/tests/test_tags.py
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Simone Orsi <simone.orsi@camptocamp.com>
# Copyright 2016 Jairo Llopis <jairo.llopis@tecnativa.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
Expand All @@ -22,17 +21,17 @@ def setUp(self):
self._reload_page()
self.website = self.env['website'].browse(1)
self.domain = self.website._get_canonical_domain()
self.path = "/page/website_canonical_url.canonical_demo"
self.path = "/canonical-demo"
self.url_absolute = self.domain + self.path
self.qstring = "?ultimate_answer=42"
self.url_full = "%s%s" % (self.url_absolute, self.qstring)
self.url_data = self.url_open(self.url_full)
self.doc = document_fromstring(self.url_data.read())
self.doc = document_fromstring(self.url_data.content)

def _reload_page(self):
# if you run tests more than once (locally for instance)
# sp if you update the page we make sure is reloaded.
self.env.ref('website_canonical_url.canonical_demo').unlink()
# if you update the page we make sure is reloaded.
self.env.ref('website_canonical_url.canonical_demo_view').unlink()
load_xml(self.cr, 'website_canonical_url', 'demo/pages.xml')

def test_canonical(self):
Expand Down
9 changes: 8 additions & 1 deletion website_canonical_url/tests/test_url.py
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Simone Orsi <simone.orsi@camptocamp.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

Expand Down Expand Up @@ -71,6 +70,8 @@ def test_canonical_relative_url_default_lang_no_match(self):
)

def test_canonical_relative_url_home_special_case(self):
# set page url on 1st menu item
self.website.menu_id.child_id[0].url = '/page/homepage'
req = FakeRequest(self.website, '/page/homepage?foo=baz', lang='it_IT')
self.website.default_lang_id = self.env.ref('base.lang_it')
self.assertEqual(
Expand All @@ -79,6 +80,8 @@ def test_canonical_relative_url_home_special_case(self):
)

def test_canonical_relative_url_home_special_case_lang_no_match(self):
# set page url on 1st menu item
self.website.menu_id.child_id[0].url = '/page/homepage'
req = FakeRequest(self.website, '/en_US/page/homepage?foo=baz')
self.website.default_lang_id = self.env.ref('base.lang_it')
self.assertEqual(
Expand All @@ -104,6 +107,8 @@ def test_canonical_url_default_lang_no_match(self):
)

def test_canonical_url_home_special_case(self):
# set page url on 1st menu item
self.website.menu_id.child_id[0].url = '/page/homepage'
self.website.canonical_domain = 'https://oh.yeah'
req = FakeRequest(self.website, '/page/homepage?foo=baz')
self.assertEqual(
Expand All @@ -112,6 +117,8 @@ def test_canonical_url_home_special_case(self):
)

def test_canonical_url_home_special_case_no_match(self):
# set page url on 1st menu item
self.website.menu_id.child_id[0].url = '/page/homepage'
self.website.canonical_domain = 'https://oh.yeah'
req = FakeRequest(
self.website, '/it_IT/page/homepage?foo=baz', lang='it_IT')
Expand Down
22 changes: 14 additions & 8 deletions website_canonical_url/views/website_views.xml
Expand Up @@ -2,21 +2,27 @@
<odoo>

<record id="view_website_form" model="ir.ui.view">
<field name="name">website canonical form</field>
<field name="name">website canonical url form</field>
<field name="model">website</field>
<field name="inherit_id" ref="website.view_website_form" />
<field name="arch" type="xml">
<field name="domain" position="after">
<field name="canonical_domain" placeholder="https://mydomain.com" /></field>
<field name="canonical_domain" placeholder="https://mydomain.com" />
</field>
</field>
</record>
<record id="view_website_config_settings" model="ir.ui.view">
<field name="name">website settings canonical form</field>
<field name="model">website.config.settings</field>
<field name="inherit_id" ref="website.view_website_config_settings" />

<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">website settings canonical url form</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="website.res_config_settings_view_form" />
<field name="arch" type="xml">
<field name="website_name" position="after">
<field name="canonical_domain" placeholder="https://mydomain.com" /></field>
<xpath expr="//field[@name='website_name']/.." position="after">
<div class="row">
<label class="col-md-3 o_light_label" string="Canonical domain" />
<field name="canonical_domain" placeholder="https://mydomain.com" />
</div>
</xpath>
</field>
</record>

Expand Down

0 comments on commit e65fa8e

Please sign in to comment.