summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/website/controllers/main.py37
-rw-r--r--addons/website/data/website_data.xml2
-rw-r--r--addons/website/models/ir_http.py44
-rw-r--r--addons/website/models/website.py84
-rw-r--r--addons/website/tests/test_requests.py2
-rw-r--r--addons/website/views/website_templates.xml40
-rw-r--r--addons/website_blog/controllers/main.py4
-rw-r--r--addons/website_blog/models/website_blog.py2
-rw-r--r--addons/website_crm/controllers/main.py2
-rw-r--r--addons/website_crm_partner_assign/controllers/main.py1
-rw-r--r--addons/website_event/controllers/main.py2
-rw-r--r--addons/website_event_track/controllers/event.py10
-rw-r--r--addons/website_forum/controllers/main.py6
-rw-r--r--addons/website_forum/security/ir.model.access.csv4
-rw-r--r--addons/website_forum_doc/controllers/main.py6
-rw-r--r--addons/website_hr/controllers/main.py2
-rw-r--r--addons/website_mail_group/controllers/main.py2
-rw-r--r--addons/website_quote/controllers/main.py4
18 files changed, 127 insertions, 127 deletions
diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py
index b611496ef14..5068d7d0e74 100644
--- a/addons/website/controllers/main.py
+++ b/addons/website/controllers/main.py
@@ -26,7 +26,7 @@ logger = logging.getLogger(__name__)
# Completely arbitrary limits
MAX_IMAGE_WIDTH, MAX_IMAGE_HEIGHT = IMAGE_LIMITS = (1024, 768)
-
+LOC_PER_SITEMAP = 45000
class Website(openerp.addons.web.controllers.main.Home):
#------------------------------------------------------
@@ -49,7 +49,7 @@ class Website(openerp.addons.web.controllers.main.Home):
# TODO: can't we just put auth=public, ... in web client ?
return super(Website, self).web_login(*args, **kw)
- @http.route('/page/<page:page>', type='http', auth="public", website=True, multilang=True)
+ @http.route('/page/<path:page>', type='http', auth="public", website=True, multilang=True)
def page(self, page, **opt):
values = {
'path': page,
@@ -69,20 +69,34 @@ class Website(openerp.addons.web.controllers.main.Home):
return request.render(page, values)
- @http.route(['/robots.txt'], type='http', auth="public", website=True)
+ @http.route(['/robots.txt'], type='http', auth="public")
def robots(self):
return request.render('website.robots', {'url_root': request.httprequest.url_root}, mimetype='text/plain')
- @http.route('/sitemap', type='http', auth='public', website=True, multilang=True)
- def sitemap(self):
- return request.render('website.sitemap', {
- 'pages': request.website.enumerate_pages()
- })
-
@http.route('/sitemap.xml', type='http', auth="public", website=True)
- def sitemap_xml(self):
+ def sitemap_xml_index(self):
+ pages = list(request.website.enumerate_pages())
+ if len(pages)<=LOC_PER_SITEMAP:
+ return self.__sitemap_xml(pages, 0)
+ # Sitemaps must be split in several smaller files with a sitemap index
+ values = {
+ 'pages': range(len(pages)/LOC_PER_SITEMAP+1),
+ 'url_root': request.httprequest.url_root
+ }
+ headers = {
+ 'Content-Type': 'application/xml;charset=utf-8',
+ }
+ return request.render('website.sitemap_index_xml', values, headers=headers)
+
+ @http.route('/sitemap-<int:page>.xml', type='http', auth="public", website=True)
+ def sitemap_xml(self, page):
+ pages = list(request.website.enumerate_pages())
+ return self.__sitemap_xml(pages, page)
+
+ def __sitemap_xml(self, pages, index=0):
values = {
- 'pages': request.website.enumerate_pages()
+ 'pages': pages[index*LOC_PER_SITEMAP:(index+1)*LOC_PER_SITEMAP],
+ 'url_root': request.httprequest.url_root.rstrip('/')
}
headers = {
'Content-Type': 'application/xml;charset=utf-8',
@@ -450,4 +464,3 @@ class Website(openerp.addons.web.controllers.main.Home):
return res
return request.redirect('/')
-# vim:et:
diff --git a/addons/website/data/website_data.xml b/addons/website/data/website_data.xml
index 4eff1b8a60d..c5254d65c0f 100644
--- a/addons/website/data/website_data.xml
+++ b/addons/website/data/website_data.xml
@@ -15,7 +15,7 @@
<record id="menu_homepage" model="website.menu">
<field name="name">Home</field>
- <field name="url">/</field>
+ <field name="url">/page/homepage</field>
<field name="parent_id" ref="website.main_menu"/>
<field name="sequence" type="int">10</field>
</record>
diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py
index acceed1e718..91b998c76c9 100644
--- a/addons/website/models/ir_http.py
+++ b/addons/website/models/ir_http.py
@@ -171,8 +171,9 @@ class ir_http(orm.AbstractModel):
return super(ir_http, self)._handle_exception(exception)
class ModelConverter(ir.ir_http.ModelConverter):
- def __init__(self, url_map, model=False):
+ def __init__(self, url_map, model=False, domain='[]'):
super(ModelConverter, self).__init__(url_map, model)
+ self.domain = domain
self.regex = r'(?:[A-Za-z0-9-_]+?-)?(\d+)(?=$|/)'
def to_url(self, value):
@@ -184,24 +185,31 @@ class ModelConverter(ir.ir_http.ModelConverter):
return request.registry[self.model].browse(
request.cr, _uid, int(m.group(1)), context=request.context)
- def generate(self, cr, uid, query=None, context=None):
- return request.registry[self.model].name_search(
- cr, uid, name=query or '', context=context)
+ def generate(self, cr, uid, query=None, args=None, context=None):
+ obj = request.registry[self.model]
+ domain = eval( self.domain, (args or {}).copy())
+ if query:
+ domain.append((obj._rec_name, 'ilike', '%'+query+'%'))
+ for record in obj.search_read(cr, uid, domain=domain, fields=['write_date',obj._rec_name], context=context):
+ if record.get(obj._rec_name, False):
+ yield {'loc': (record['id'], record[obj._rec_name])}
class PageConverter(werkzeug.routing.PathConverter):
- """ Only point of this converter is to bundle pages enumeration logic
-
- Sads got: no way to get the view's human-readable name even if one exists
- """
- def generate(self, cr, uid, query=None, context=None):
+ """ Only point of this converter is to bundle pages enumeration logic """
+ def generate(self, cr, uid, query=None, args={}, context=None):
View = request.registry['ir.ui.view']
- views = View.search_read(
- cr, uid, [['page', '=', True]],
- fields=[], order='name', context=context)
- xids = View.get_external_id(
- cr, uid, [view['id'] for view in views], context=context)
-
+ views = View.search_read(cr, uid, [['page', '=', True]],
+ fields=['xml_id','priority','write_date'], order='name', context=context)
for view in views:
- xid = xids[view['id']]
- if xid and (not query or query.lower() in xid.lower()):
- yield xid
+ xid = view['xml_id'].startswith('website.') and view['xml_id'][8:] or view['xml_id']
+ # the 'page/homepage' url is indexed as '/', avoid aving the same page referenced twice
+ # when we will have an url mapping mechanism, replace this by a rule: page/homepage --> /
+ if xid=='homepage': continue
+ if query and query.lower() not in xid.lower():
+ continue
+ record = {'loc': xid}
+ if view['priority'] <> 16:
+ record['__priority'] = min(round(view['priority'] / 32.0,1), 1)
+ if view.get('write_date'):
+ record['__lastmod'] = view['write_date'][:10]
+ yield record
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index 51dda75f516..584dc4b6105 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -296,44 +296,23 @@ class website(osv.osv):
endpoint = rule.endpoint
methods = rule.methods or ['GET']
converters = rule._converters.values()
-
- return (
- 'GET' in methods
+ if not ('GET' in methods
and endpoint.routing['type'] == 'http'
and endpoint.routing['auth'] in ('none', 'public')
and endpoint.routing.get('website', False)
- # preclude combinatorial explosion by only allowing a single converter
- and len(converters) <= 1
- # ensure all converters on the rule are able to generate values for
- # themselves
and all(hasattr(converter, 'generate') for converter in converters)
- ) and self.endpoint_is_enumerable(rule)
-
- def endpoint_is_enumerable(self, rule):
- """ Verifies that it's possible to generate a valid url for the rule's
- endpoint
-
- :type rule: werkzeug.routing.Rule
- :rtype: bool
- """
- spec = inspect.getargspec(rule.endpoint.method)
-
- # if *args bail the fuck out, only dragons can live there
- if spec.varargs:
+ and endpoint.routing.get('website')):
return False
- # remove all arguments with a default value from the list
- defaults_count = len(spec.defaults or []) # spec.defaults can be None
- # a[:-0] ~ a[:0] ~ [] -> replace defaults_count == 0 by None to get
- # a[:None] ~ a
- args = spec.args[:(-defaults_count or None)]
+ # dont't list routes without argument having no default value or converter
+ spec = inspect.getargspec(endpoint.method.original_func)
+
+ # remove self and arguments having a default value
+ defaults_count = len(spec.defaults or [])
+ args = spec.args[1:(-defaults_count or None)]
- # params with defaults were removed, leftover allowed are:
- # * self (technically should be first-parameter-of-instance-method but whatever)
- # * any parameter mapping to a converter
- return all(
- (arg == 'self' or arg in rule._converters)
- for arg in args)
+ # check that all args have a converter
+ return all( (arg in rule._converters) for arg in args)
def enumerate_pages(self, cr, uid, ids, query_string=None, context=None):
""" Available pages in the website/CMS. This is mostly used for links
@@ -357,27 +336,34 @@ class website(osv.osv):
if not self.rule_is_enumerable(rule):
continue
- converters = rule._converters
- filtered = bool(converters)
- if converters:
- # allow single converter as decided by fp, checked by
- # rule_is_enumerable
- [(name, converter)] = converters.items()
- converter_values = converter.generate(
- request.cr, uid, query=query_string, context=context)
- generated = ({k: v} for k, v in itertools.izip(
- itertools.repeat(name), converter_values))
- else:
- # force single iteration for literal urls
- generated = [{}]
-
- for values in generated:
- domain_part, url = rule.build(values, append_unknown=False)
- page = {'name': url, 'url': url}
+ converters = rule._converters or {}
+ values = [{}]
+ convitems = converters.items()
+ # converters with a domain are processed after the other ones
+ gd = lambda x: hasattr(x[1], 'domain') and (x[1].domain <> '[]')
+ convitems.sort(lambda x, y: cmp(gd(x), gd(y)))
+ for (name, converter) in convitems:
+ newval = []
+ for val in values:
+ for v in converter.generate(request.cr, uid, query=query_string, args=val, context=context):
+ newval.append( val.copy() )
+ v[name] = v['loc']
+ del v['loc']
+ newval[-1].update(v)
+ values = newval
+
+ for value in values:
+ domain_part, url = rule.build(value, append_unknown=False)
+ page = {'loc': url}
+ for key,val in value.items():
+ if key.startswith('__'):
+ page[key[2:]] = val
+ if url in ('/sitemap.xml',):
+ continue
if url in url_list:
continue
url_list.append(url)
- if not filtered and query_string and not self.page_matches(cr, uid, page, query_string, context=context):
+ if query_string and not self.page_matches(cr, uid, page, query_string, context=context):
continue
yield page
diff --git a/addons/website/tests/test_requests.py b/addons/website/tests/test_requests.py
index e0309c9ab4b..2a1eea4c877 100644
--- a/addons/website/tests/test_requests.py
+++ b/addons/website/tests/test_requests.py
@@ -96,7 +96,7 @@ class CrawlSuite(unittest2.TestSuite):
# switch registry to test mode, so that requests can be made
registry.enter_test_mode()
- paths = [URL('/'), URL('/sitemap')]
+ paths = [URL('/')]
seen = set(paths)
while paths:
diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml
index de31f13bd66..b9f33ef1c6b 100644
--- a/addons/website/views/website_templates.xml
+++ b/addons/website/views/website_templates.xml
@@ -16,7 +16,7 @@
((submenu.url != '/' and request.httprequest.path.startswith(submenu.url)) or
request.httprequest.path == submenu.url) and 'active'
">
- <a t-att-href="submenu.url" t-ignore="true" t-att-target="'blank' if submenu.new_window else None">
+ <a t-att-href="(website.menu_id.child_id[0] == submenu) and '/' or submenu.url" t-ignore="true" t-att-target="'blank' if submenu.new_window else None">
<span t-field="submenu.name"/>
</a>
</li>
@@ -458,7 +458,6 @@
<div class="well mt32">
<p>This page does not exists, but you can create it as you are administrator of this site.</p>
<a class="btn btn-primary" t-attf-href="/website/add/#{ path }">Create Page</a>
- <span class="text-muted">or</span> <a href="/sitemap">Search a Page</a>
</div>
<div class="text-center text-muted">Edit the content below this line to adapt the default "page not found" page.</div>
</div>
@@ -694,34 +693,33 @@
</template>
<template id="robots">
-# robotstxt.org/
User-agent: *
Sitemap: <t t-esc="url_root"/>sitemap.xml
</template>
-<template id="sitemap" name="Site Map">
- <t t-call="website.layout">
- <ul>
- <li t-foreach="pages" t-as="page">
- <a t-att-href="page['url']"><t t-esc="page['name']"/></a>
- </li>
- </ul>
- </t>
+<template id="sitemap_xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+ <url t-foreach="pages" t-as="page">
+ <loc><t t-esc="url_root"/><t t-esc="page['loc']"/></loc><t t-if="page.get('lastmod', False)">
+ <lastmod t-esc="page['lastmod']"/></t><t t-if="page.get('priority', False)">
+ <priority t-esc="page['priority']"/></t><t t-if="page.get('changefreq', False)">
+ <changefreq t-esc="page['changefreq']"/></t>
+ </url>
+</urlset>
</template>
-<template id="sitemap_xml">
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
- <t t-foreach="pages" t-as="page">
- <url>
- <loc><t t-esc="page['url']"/></loc>
- </url>
- </t>
- </urlset>
+<template id="sitemap_index_xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+ <sitemap t-foreach="pages" t-as="page">
+ <loc><t t-esc="url_root"/>sitemap-<t t-esc="page"/>.xml</loc>
+ </sitemap>
+</sitemapindex>
</template>
+
<!-- Actual pages -->
-<template id="homepage" name="Homepage" page="True">
+<template id="homepage" name="Homepage" page="True" priority="29">
<t t-call="website.layout">
<div id="wrap" class="oe_structure oe_empty"></div>
</t>
@@ -729,7 +727,7 @@ Sitemap: <t t-esc="url_root"/>sitemap.xml
<template id="company_description" name="Company Description">
<address itemscope="itemscope" itemtype="http://schema.org/Organization">
- <!-- TODO widget contact must add itemprop attributes -->
+ <!-- TODO widget contact must add itemprop attributes -->
<div t-field="res_company.partner_id" t-field-options='{
"widget": "contact",
"fields": ["name", "address", "phone", "mobile", "fax", "email"]}'/>
diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py
index e2eac59678e..133a95d0c8a 100644
--- a/addons/website_blog/controllers/main.py
+++ b/addons/website_blog/controllers/main.py
@@ -155,7 +155,7 @@ class WebsiteBlog(http.Controller):
return response
@http.route([
- '/blog/<model("blog.blog"):blog>/post/<model("blog.post"):blog_post>',
+ '''/blog/<model("blog.blog"):blog>/post/<model("blog.post", "[('blog_id','=',blog[0])]"):blog_post>''',
], type='http', auth="public", website=True, multilang=True)
def blog_post(self, blog, blog_post, tag_id=None, page=1, enable_editor=None, **post):
""" Prepare all values to display the blog.
@@ -294,7 +294,7 @@ class WebsiteBlog(http.Controller):
return values
@http.route(['/blogpost/post_discussion'], type='json', auth="public", website=True)
- def post_discussion(self, blog_post_id=0, **post):
+ def post_discussion(self, blog_post_id, **post):
cr, uid, context = request.cr, request.uid, request.context
publish = request.registry['res.users'].has_group(cr, uid, 'base.group_website_publisher')
user = request.registry['res.users'].browse(cr, uid, uid, context=context)
diff --git a/addons/website_blog/models/website_blog.py b/addons/website_blog/models/website_blog.py
index ab96cc5b7f8..37678e94aba 100644
--- a/addons/website_blog/models/website_blog.py
+++ b/addons/website_blog/models/website_blog.py
@@ -16,7 +16,6 @@ class Blog(osv.Model):
_description = 'Blogs'
_inherit = ['mail.thread', 'website.seo.metadata']
_order = 'name'
-
_columns = {
'name': fields.char('Blog Name', required=True),
'subtitle': fields.char('Blog Subtitle'),
@@ -29,7 +28,6 @@ class BlogTag(osv.Model):
_description = 'Blog Tag'
_inherit = ['website.seo.metadata']
_order = 'name'
-
_columns = {
'name': fields.char('Name', required=True),
}
diff --git a/addons/website_crm/controllers/main.py b/addons/website_crm/controllers/main.py
index e3662ef40a0..e7dc2e781f7 100644
--- a/addons/website_crm/controllers/main.py
+++ b/addons/website_crm/controllers/main.py
@@ -16,7 +16,7 @@ class contactus(http.Controller):
)
return url
- @http.route(['/page/website.contactus'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/page/website.contactus', '/page/contactus'], type='http', auth="public", website=True, multilang=True)
def contact(self, **kwargs):
values = {}
for field in ['description', 'partner_name', 'phone', 'contact_name', 'email_from', 'name']:
diff --git a/addons/website_crm_partner_assign/controllers/main.py b/addons/website_crm_partner_assign/controllers/main.py
index 0581c44ba57..bf54968e9ae 100644
--- a/addons/website_crm_partner_assign/controllers/main.py
+++ b/addons/website_crm_partner_assign/controllers/main.py
@@ -105,6 +105,7 @@ class WebsiteCrmPartnerAssign(http.Controller):
}
return request.website.render("website_crm_partner_assign.index", values)
+ # Do not use semantic controller due to SUPERUSER_ID
@http.route(['/partners/<int:partner_id>', '/partners/<partner_name>-<int:partner_id>'], type='http', auth="public", website=True, multilang=True)
def partners_ref(self, partner_id, partner_name='', **post):
values = website_partner.get_partner_template_value(partner_id)
diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py
index aae57e32a93..3e0a0729d92 100644
--- a/addons/website_event/controllers/main.py
+++ b/addons/website_event/controllers/main.py
@@ -169,7 +169,7 @@ class website_event(http.Controller):
return request.website.render("website_event.index", values)
- @http.route(['/event/<model("event.event"):event>/page/<page:page>'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/event/<model("event.event"):event>/page/<path:page>'], type='http', auth="public", website=True, multilang=True)
def event_page(self, event, page, **post):
values = {
'event': event,
diff --git a/addons/website_event_track/controllers/event.py b/addons/website_event_track/controllers/event.py
index 373ade03ad9..712c168e1db 100644
--- a/addons/website_event_track/controllers/event.py
+++ b/addons/website_event_track/controllers/event.py
@@ -31,7 +31,7 @@ from openerp.addons.web import http
from openerp.addons.web.http import request
class website_event(http.Controller):
- @http.route(['/event/<model("event.event"):event>/track/<model("event.track"):track>'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['''/event/<model("event.event"):event>/track/<model("event.track", "[('event_id','=',event[0])]"):track>'''], type='http', auth="public", website=True, multilang=True)
def event_track_view(self, event, track, **post):
track_obj = request.registry.get('event.track')
track = track_obj.browse(request.cr, openerp.SUPERUSER_ID, track.id, context=request.context)
@@ -75,7 +75,7 @@ class website_event(http.Controller):
# TODO: not implemented
- @http.route(['/event/<model("event.event"):event>/agenda'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['''/event/<model("event.event", "[('show_tracks','=',1)]"):event>/agenda'''], type='http', auth="public", website=True, multilang=True)
def event_agenda(self, event, tag=None, **post):
days_tracks = collections.defaultdict(lambda: [])
for track in sorted(event.track_ids, key=lambda x: (x.date, bool(x.location_id))):
@@ -96,8 +96,8 @@ class website_event(http.Controller):
})
@http.route([
- '/event/<model("event.event"):event>/track',
- '/event/<model("event.event"):event>/track/tag/<model("event.track.tag"):tag>'
+ '''/event/<model("event.event", "[('show_tracks','=',1)]"):event>/track''',
+ '''/event/<model("event.event", "[('show_tracks','=',1)]"):event>/track/tag/<model("event.track.tag"):tag>'''
], type='http', auth="public", website=True, multilang=True)
def event_tracks(self, event, tag=None, **post):
searches = {}
@@ -123,7 +123,7 @@ class website_event(http.Controller):
}
return request.website.render("website_event_track.tracks", values)
- @http.route(['/event/<model("event.event"):event>/track_proposal'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['''/event/<model("event.event", "[('show_track_proposal','=',1)]"):event>/track_proposal'''], type='http', auth="public", website=True, multilang=True)
def event_track_proposal(self, event, **post):
values = { 'event': event }
return request.website.render("website_event_track.event_track_proposal", values)
diff --git a/addons/website_forum/controllers/main.py b/addons/website_forum/controllers/main.py
index 8fa7922e518..332cfd4bb41 100644
--- a/addons/website_forum/controllers/main.py
+++ b/addons/website_forum/controllers/main.py
@@ -87,7 +87,7 @@ class WebsiteForum(http.Controller):
@http.route(['/forum/<model("forum.forum"):forum>',
'/forum/<model("forum.forum"):forum>/page/<int:page>',
- '/forum/<model("forum.forum"):forum>/tag/<model("forum.tag"):tag>/questions'
+ '''/forum/<model("forum.forum"):forum>/tag/<model("forum.tag", "[('forum_id','=',forum[0])]"):tag>/questions'''
], type='http', auth="public", website=True, multilang=True)
def questions(self, forum, tag=None, page=1, filters='all', sorting='date', search='', **post):
cr, uid, context = request.cr, request.uid, request.context
@@ -190,7 +190,7 @@ class WebsiteForum(http.Controller):
}, context=context)
return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), new_question_id))
- @http.route(['/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['''/forum/<model("forum.forum"):forum>/question/<model("forum.post", "[('forum_id','=',forum[0])]"):question>'''], type='http', auth="public", website=True, multilang=True)
def question(self, forum, question, **post):
cr, uid, context = request.cr, request.uid, request.context
# increment view counter
@@ -575,7 +575,7 @@ class WebsiteForum(http.Controller):
})
return request.website.render("website_forum.badge", values)
- @http.route(['/forum/<model("forum.forum"):forum>/badge/<model("gamification.badge"):badge>'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['''/forum/<model("forum.forum"):forum>/badge/<model("gamification.badge"):badge>'''], type='http', auth="public", website=True, multilang=True)
def badge_users(self, forum, badge, **kwargs):
user_ids = [badge_user.user_id.id for badge_user in badge.owner_ids]
users = request.registry['res.users'].browse(request.cr, SUPERUSER_ID, user_ids, context=request.context)
diff --git a/addons/website_forum/security/ir.model.access.csv b/addons/website_forum/security/ir.model.access.csv
index f7a0e666ad7..0d00861d65d 100644
--- a/addons/website_forum/security/ir.model.access.csv
+++ b/addons/website_forum/security/ir.model.access.csv
@@ -1,19 +1,15 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_forum_forum,forum.forum,model_forum_forum,,1,0,0,0
access_forum_forum_manager,forum.forum.maanger,model_forum_forum,base.group_erp_manager,1,1,1,1
-
access_forum_post_public,forum.post.public,model_forum_post,base.group_public,1,0,0,0
access_forum_post_portal,forum.post.portal,model_forum_post,base.group_portal,1,1,1,0
access_forum_post_user,forum.post.user,model_forum_post,base.group_user,1,1,1,1
-
access_forum_post_vote_public,forum.post.vote.public,model_forum_post_vote,base.group_public,1,0,0,0
access_forum_post_vote_portal,orum.post.vote.portal,model_forum_post_vote,base.group_portal,1,1,1,0
access_forum_post_vote_user,forum.post.vote.user,model_forum_post_vote,base.group_user,1,1,1,1
-
access_forum_post_reason_public,forum.post.reason.public,model_forum_post_reason,base.group_public,1,0,0,0
access_forum_post_reason_portal,forum.post.reason.portal,model_forum_post_reason,base.group_portal,1,0,0,0
access_forum_post_reason_user,forum.post.reason.user,model_forum_post_reason,base.group_user,1,1,1,1
-
access_forum_tag_public,forum.tag.public,model_forum_tag,base.group_public,1,0,1,0
access_forum_tag_portal,forum.tag.portal,model_forum_tag,base.group_portal,1,0,1,0
access_forum_tag_user,forum.tag.user,model_forum_tag,base.group_user,1,1,1,1
diff --git a/addons/website_forum_doc/controllers/main.py b/addons/website_forum_doc/controllers/main.py
index 4075479af47..f31e41759db 100644
--- a/addons/website_forum_doc/controllers/main.py
+++ b/addons/website_forum_doc/controllers/main.py
@@ -26,7 +26,7 @@ class WebsiteDoc(http.Controller):
}
return request.website.render("website_forum_doc.documentation", value)
- @http.route(['/forum/how-to/<model("forum.documentation.toc"):toc>/<model("forum.post"):post>'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['''/forum/how-to/<model("forum.documentation.toc"):toc>/<model("forum.post", "[('documentation_toc_id','=',toc[0])]"):post>'''], type='http', auth="public", website=True, multilang=True)
def post(self, toc, post, **kwargs):
# TODO: implement a redirect instead of crash
assert post.documentation_toc_id.id == toc.id, "Wrong post!"
@@ -42,7 +42,7 @@ class WebsiteDoc(http.Controller):
def post_toc(self, forum, post, **kwargs):
cr, uid, context, toc_id = request.cr, request.uid, request.context, False
user = request.registry['res.users'].browse(cr, uid, uid, context=context)
- assert user.karma >= 200, 'Not enough karma'
+ assert user.karma >= 200, 'You need 200 karma to promote a post to the documentation'
toc_obj = request.registry['forum.documentation.toc']
obj_ids = toc_obj.search(cr, uid, [], context=context)
tocs = toc_obj.browse(cr, uid, obj_ids, context=context)
@@ -57,7 +57,7 @@ class WebsiteDoc(http.Controller):
def post_toc_ok(self, forum, post_id, toc_id, **kwargs):
cr, uid, context = request.cr, request.uid, request.context
user = request.registry['res.users'].browse(cr, uid, uid, context=context)
- assert user.karma >= 200, 'Not enough karma'
+ assert user.karma >= 200, 'Not enough karma, you need 200 to promote a documentation.'
toc_obj = request.registry['forum.documentation.toc']
stage_ids = toc_obj.search(cr, uid, [], limit=1, context=context)
diff --git a/addons/website_hr/controllers/main.py b/addons/website_hr/controllers/main.py
index 20c865b5b89..d48dde301d7 100644
--- a/addons/website_hr/controllers/main.py
+++ b/addons/website_hr/controllers/main.py
@@ -5,7 +5,7 @@ from openerp.addons.web.http import request
class website_hr(http.Controller):
- @http.route(['/page/website.aboutus'], type='http', auth="public", website=True, multilang=True)
+ @http.route(['/page/website.aboutus', '/page/aboutus'], type='http', auth="public", website=True, multilang=True)
def blog(self, **post):
hr_obj = request.registry['hr.employee']
employee_ids = hr_obj.search(request.cr, request.uid, [('website_published', '=', True)],
diff --git a/addons/website_mail_group/controllers/main.py b/addons/website_mail_group/controllers/main.py
index 628aa874e7f..88eb1a7e9b7 100644
--- a/addons/website_mail_group/controllers/main.py
+++ b/addons/website_mail_group/controllers/main.py
@@ -77,7 +77,7 @@ class MailGroup(http.Controller):
return request.website.render('website_mail_group.group_messages', values)
@http.route([
- "/groups/<model('mail.group'):group>/<model('mail.message'):message>",
+ '''/groups/<model('mail.group'):group>/<model('mail.message', "[('model','=','mail.group'), ('res_id','=',group[0])]"):message>''',
], type='http', auth="public", website=True)
def thread_discussion(self, group, message, mode='thread', date_begin=None, date_end=None, **post):
cr, uid, context = request.cr, request.uid, request.context
diff --git a/addons/website_quote/controllers/main.py b/addons/website_quote/controllers/main.py
index 03ba273ea31..0cc56f29096 100644
--- a/addons/website_quote/controllers/main.py
+++ b/addons/website_quote/controllers/main.py
@@ -59,7 +59,7 @@ class sale_quote(http.Controller):
return request.website.render('website_quote.so_quotation', values)
@http.route(['/quote/accept'], type='json', auth="public", website=True)
- def accept(self, order_id=None, token=None, signer=None, sign=None, **post):
+ def accept(self, order_id, token=None, signer=None, sign=None, **post):
order_obj = request.registry.get('sale.order')
order = order_obj.browse(request.cr, SUPERUSER_ID, order_id)
if token != order.access_token:
@@ -111,7 +111,7 @@ class sale_quote(http.Controller):
return True
@http.route(['/quote/update_line'], type='json', auth="public", website=True)
- def update(self, line_id=None, remove=False, unlink=False, order_id=None, token=None, **post):
+ def update(self, line_id, remove=False, unlink=False, order_id=None, token=None, **post):
order = request.registry.get('sale.order').browse(request.cr, SUPERUSER_ID, int(order_id))
if token != order.access_token:
return request.website.render('website.404')