Skip to content

Commit

Permalink
[ADD]website_rewrite_absolute_url: Module to add absolute url redirects
Browse files Browse the repository at this point in the history
  • Loading branch information
matteonext committed Jul 21, 2023
1 parent db98c3b commit 5e8c205
Show file tree
Hide file tree
Showing 10 changed files with 80 additions and 0 deletions.
6 changes: 6 additions & 0 deletions setup/website_rewrite_absolute_url/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
3 changes: 3 additions & 0 deletions website_rewrite_absolute_url/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from . import models
14 changes: 14 additions & 0 deletions website_rewrite_absolute_url/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

{
'name': 'Rewrite rules with absolute url',
'version': '16.0.1.0.0',
'category': 'base',
'summary': 'Rewrite rules with absolute url',
'author': 'Nextev, Odoo Community Association (OCA)',
"website": "https://github.com/OCA/website",
'license': 'AGPL-3',
'depends': ['website'],
'data': ['views/website_rewrite.xml'],
'installable': True
}
1 change: 1 addition & 0 deletions website_rewrite_absolute_url/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import website_rewrite
36 changes: 36 additions & 0 deletions website_rewrite_absolute_url/models/website_rewrite.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import re
import werkzeug

from odoo import models, fields, api, _
from odoo.exceptions import ValidationError


class WebsiteRewrite(models.Model):
_inherit = 'website.rewrite'

absolute_url = fields.Boolean("Is absolute url")

@api.constrains('url_to', 'url_from', 'redirect_type')
def _check_url_to(self):
for rewrite in self:
if rewrite.redirect_type in ['301', '302', '308']:
if not rewrite.url_to:
raise ValidationError(_('"URL to" can not be empty.'))
elif not rewrite.absolute_url and not rewrite.url_to.startswith('/'):
raise ValidationError(_('"URL to" must start with a leading slash.'))
for param in re.findall('/<.*?>', rewrite.url_from):
if param not in rewrite.url_to:
raise ValidationError(_('"URL to" must contain parameter %s used in "URL from".') % param)
for param in re.findall('/<.*?>', rewrite.url_to):
if param not in rewrite.url_from:
raise ValidationError(_('"URL to" cannot contain parameter %s which is not used in "URL from".') % param)
try:
converters = self.env['ir.http']._get_converters()
routing_map = werkzeug.routing.Map(strict_slashes=False, converters=converters)
if not rewrite.absolute_url:
rule = werkzeug.routing.Rule(rewrite.url_to)
routing_map.add(rule)
else:
routing_map.bind(rewrite.url_to)
except ValueError as e:
raise ValidationError(_('"URL to" is invalid: %s') % e)
1 change: 1 addition & 0 deletions website_rewrite_absolute_url/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* Nextev <https://www.nextev.it>
1 change: 1 addition & 0 deletions website_rewrite_absolute_url/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This module allows to add absolute url redirects.
3 changes: 3 additions & 0 deletions website_rewrite_absolute_url/readme/USAGE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Website > Configuration >  Redirects

To add an absolute url redirect first check "Is absolute url" and then add it on "Url to"
14 changes: 14 additions & 0 deletions website_rewrite_absolute_url/views/website_rewrite.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="rewrite_absolute_url" model="ir.ui.view">
<field name="name">rewrite.absolute.url</field>
<field name="model">website.rewrite</field>
<field name="inherit_id" ref="website.view_website_rewrite_form"/>
<field name="arch" type="xml">
<field name="url_to" position="after">
<field name="absolute_url"/>
</field>
</field>
</record>

</odoo>

0 comments on commit 5e8c205

Please sign in to comment.