diff options
| -rw-r--r-- | addons/project/controllers/rating.py | 2 | ||||
| -rw-r--r-- | addons/website/controllers/main.py | 4 | ||||
| -rw-r--r-- | addons/website/models/website.py | 10 | ||||
| -rw-r--r-- | addons/website_blog/controllers/main.py | 10 | ||||
| -rw-r--r-- | addons/website_event/controllers/main.py | 8 | ||||
| -rw-r--r-- | addons/website_event_track/controllers/main.py | 12 | ||||
| -rw-r--r-- | addons/website_forum/controllers/main.py | 7 | ||||
| -rw-r--r-- | addons/website_hr_recruitment/controllers/main.py | 4 | ||||
| -rw-r--r-- | addons/website_livechat/controllers/main.py | 5 | ||||
| -rw-r--r-- | addons/website_mail_channel/controllers/main.py | 6 | ||||
| -rw-r--r-- | addons/website_membership/controllers/main.py | 2 | ||||
| -rw-r--r-- | addons/website_profile/controllers/main.py | 4 | ||||
| -rw-r--r-- | addons/website_sale/controllers/main.py | 5 | ||||
| -rw-r--r-- | addons/website_slides/controllers/main.py | 6 |
14 files changed, 46 insertions, 39 deletions
diff --git a/addons/project/controllers/rating.py b/addons/project/controllers/rating.py index b3af39a3d68..d910d88f367 100644 --- a/addons/project/controllers/rating.py +++ b/addons/project/controllers/rating.py @@ -9,7 +9,7 @@ from odoo.http import request class RatingProject(http.Controller): - @http.route(['/project/rating'], type='http', auth="public", website=True) + @http.route(['/project/rating'], type='http', auth="public", website=True, sitemap=True) def index(self, **kw): projects = request.env['project.project'].sudo().search([('rating_status', '!=', 'no'), ('portal_show_rating', '=', True)]) values = {'projects': projects} diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 32bee3fb203..d8368512d7a 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -65,7 +65,7 @@ class QueryURL(object): class Website(Home): - @http.route('/', type='http', auth="public", website=True) + @http.route('/', type='http', auth="public", website=True, sitemap=True) def index(self, **kw): homepage = request.website.homepage_id if homepage and (homepage.sudo().is_visible or request.env.user.has_group('base.group_user')) and homepage.url != '/': @@ -197,7 +197,7 @@ class Website(Home): return request.make_response(content, [('Content-Type', mimetype)]) - @http.route('/website/info', type='http', auth="public", website=True) + @http.route('/website/info', type='http', auth="public", website=True, sitemap=True) def website_info(self, **kwargs): try: request.website.get_template('website.website_info').name diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 73e4e657b56..21ea95069b3 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -704,7 +704,7 @@ class Website(models.Model): sitemap_endpoint_done = set() for rule in router.iter_rules(): - if 'sitemap' in rule.endpoint.routing: + if 'sitemap' in rule.endpoint.routing and rule.endpoint.routing['sitemap'] is not True: if rule.endpoint in sitemap_endpoint_done: continue sitemap_endpoint_done.add(rule.endpoint) @@ -719,6 +719,10 @@ class Website(models.Model): if not self.rule_is_enumerable(rule): continue + if 'sitemap' not in rule.endpoint.routing: + logger.warning('No Sitemap value provided for controller %s (%s)' % + (rule.endpoint.method, ','.join(rule.endpoint.routing['routes']))) + converters = rule._converters or {} if query_string and not converters and (query_string not in rule.build([{}], append_unknown=False)[1]): continue @@ -730,6 +734,9 @@ class Website(models.Model): key=lambda x: (hasattr(x[1], 'domain') and (x[1].domain != '[]'), rule._trace.index((True, x[0])))) for (i, (name, converter)) in enumerate(convitems): + if 'website_id' in self.env[converter.model]._fields and (not converter.domain or converter.domain == '[]'): + converter.domain = "[('website_id', 'in', (False, current_website_id))]" + newval = [] for val in values: query = i == len(convitems) - 1 and query_string @@ -738,6 +745,7 @@ class Website(models.Model): query = sitemap_qs2dom(query, r, self.env[converter.model]._rec_name) if query == FALSE_DOMAIN: continue + for value_dict in converter.generate(uid=self.env.uid, dom=query, args=val): newval.append(val.copy()) value_dict[name] = value_dict['loc'] diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py index f13ce97eccb..ec9be13a109 100644 --- a/addons/website_blog/controllers/main.py +++ b/addons/website_blog/controllers/main.py @@ -138,11 +138,11 @@ class WebsiteBlog(http.Controller): '/blog/page/<int:page>', '/blog/tag/<string:tag>', '/blog/tag/<string:tag>/page/<int:page>', - '''/blog/<model("blog.blog", "[('website_id', 'in', (False, current_website_id))]"):blog>''', + '''/blog/<model("blog.blog"):blog>''', '''/blog/<model("blog.blog"):blog>/page/<int:page>''', '''/blog/<model("blog.blog"):blog>/tag/<string:tag>''', '''/blog/<model("blog.blog"):blog>/tag/<string:tag>/page/<int:page>''', - ], type='http', auth="public", website=True) + ], type='http', auth="public", website=True, sitemap=True) def blog(self, blog=None, tag=None, page=1, **opt): Blog = request.env['blog.blog'] if blog and not blog.can_access_from_current_website(): @@ -166,7 +166,7 @@ class WebsiteBlog(http.Controller): return request.render("website_blog.blog_post_short", values) - @http.route(['''/blog/<model("blog.blog", "[('website_id', 'in', (False, current_website_id))]"):blog>/feed'''], type='http', auth="public", website=True) + @http.route(['''/blog/<model("blog.blog"):blog>/feed'''], type='http', auth="public", website=True, sitemap=True) def blog_feed(self, blog, limit='15', **kwargs): v = {} v['blog'] = blog @@ -177,8 +177,8 @@ class WebsiteBlog(http.Controller): return r @http.route([ - '''/blog/<model("blog.blog", "[('website_id', 'in', (False, current_website_id))]"):blog>/post/<model("blog.post", "[('blog_id','=',blog[0])]"):blog_post>''', - ], type='http', auth="public", website=True) + '''/blog/<model("blog.blog"):blog>/post/<model("blog.post", "[('blog_id','=',blog[0])]"):blog_post>''', + ], type='http', auth="public", website=True, sitemap=True) def blog_post(self, blog, blog_post, tag_id=None, page=1, enable_editor=None, **post): """ Prepare all values to display the blog. diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index 20031a67781..d5348aa7a4a 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -156,7 +156,7 @@ class WebsiteEventController(http.Controller): return request.render("website_event.index", values) - @http.route(['''/event/<model("event.event", "[('website_id', 'in', (False, current_website_id))]"):event>/page/<path:page>'''], type='http', auth="public", website=True, sitemap=False) + @http.route(['''/event/<model("event.event"):event>/page/<path:page>'''], type='http', auth="public", website=True, sitemap=False) def event_page(self, event, page, **post): if not event.can_access_from_current_website(): raise werkzeug.exceptions.NotFound() @@ -180,7 +180,7 @@ class WebsiteEventController(http.Controller): return request.render(page, values) - @http.route(['''/event/<model("event.event", "[('website_id', 'in', (False, current_website_id))]"):event>'''], type='http', auth="public", website=True) + @http.route(['''/event/<model("event.event"):event>'''], type='http', auth="public", website=True, sitemap=True) def event(self, event, **post): if not event.can_access_from_current_website(): raise werkzeug.exceptions.NotFound() @@ -193,7 +193,7 @@ class WebsiteEventController(http.Controller): target_url += '?enable_editor=1' return request.redirect(target_url) - @http.route(['''/event/<model("event.event", "[('website_id', 'in', (False, current_website_id))]"):event>/register'''], type='http', auth="public", website=True, sitemap=False) + @http.route(['''/event/<model("event.event"):event>/register'''], type='http', auth="public", website=True, sitemap=False) def event_register(self, event, **post): if not event.can_access_from_current_website(): raise werkzeug.exceptions.NotFound() @@ -282,7 +282,7 @@ class WebsiteEventController(http.Controller): registration[key] = value return list(registrations.values()) - @http.route(['''/event/<model("event.event", "[('website_id', 'in', (False, current_website_id))]"):event>/registration/confirm'''], type='http', auth="public", methods=['POST'], website=True) + @http.route(['''/event/<model("event.event"):event>/registration/confirm'''], type='http', auth="public", methods=['POST'], website=True) def registration_confirm(self, event, **post): if not event.can_access_from_current_website(): raise werkzeug.exceptions.NotFound() diff --git a/addons/website_event_track/controllers/main.py b/addons/website_event_track/controllers/main.py index fa852cd5b0b..4f475ac7085 100644 --- a/addons/website_event_track/controllers/main.py +++ b/addons/website_event_track/controllers/main.py @@ -14,7 +14,7 @@ from odoo.tools import html_escape as escape, html2plaintext class WebsiteEventTrackController(http.Controller): - @http.route(['''/event/<model("event.event", "[('website_id', 'in', (False, current_website_id))]"):event>/track/<model("event.track", "[('event_id','=',event[0])]"):track>'''], type='http', auth="public", website=True) + @http.route(['''/event/<model("event.event"):event>/track/<model("event.track", "[('event_id','=',event[0])]"):track>'''], type='http', auth="public", website=True, sitemap=True) def event_track_view(self, event, track, **post): if not event.can_access_from_current_website(): raise NotFound() @@ -70,7 +70,7 @@ class WebsiteEventTrackController(http.Controller): 'dates': dates } - @http.route(['''/event/<model("event.event", "[('website_id', 'in', (False, current_website_id))]"):event>/agenda'''], type='http', auth="public", website=True, sitemap=False) + @http.route(['''/event/<model("event.event"):event>/agenda'''], type='http', auth="public", website=True, sitemap=False) def event_agenda(self, event, tag=None, **post): if not event.can_access_from_current_website(): raise NotFound() @@ -98,8 +98,8 @@ class WebsiteEventTrackController(http.Controller): }) @http.route([ - '''/event/<model("event.event", "[('website_id', 'in', (False, current_website_id))]"):event>/track''', - '''/event/<model("event.event", "[('website_id', 'in', (False, current_website_id))]"):event>/track/tag/<model("event.track.tag"):tag>''' + '''/event/<model("event.event"):event>/track''', + '''/event/<model("event.event"):event>/track/tag/<model("event.track.tag"):tag>''' ], type='http', auth="public", website=True, sitemap=False) def event_tracks(self, event, tag=None, **post): if not event.can_access_from_current_website() or (tag and tag.color == 0): @@ -123,14 +123,14 @@ class WebsiteEventTrackController(http.Controller): } return request.render("website_event_track.tracks", values) - @http.route(['''/event/<model("event.event", "[('website_id', 'in', (False, current_website_id))]"):event>/track_proposal'''], type='http', auth="public", website=True, sitemap=False) + @http.route(['''/event/<model("event.event"):event>/track_proposal'''], type='http', auth="public", website=True, sitemap=False) def event_track_proposal(self, event, **post): if not event.can_access_from_current_website(): raise NotFound() return request.render("website_event_track.event_track_proposal", {'event': event}) - @http.route(['''/event/<model("event.event", "[('website_id', 'in', (False, current_website_id))]"):event>/track_proposal/post'''], type='http', auth="public", methods=['POST'], website=True) + @http.route(['''/event/<model("event.event"):event>/track_proposal/post'''], type='http', auth="public", methods=['POST'], website=True) def event_track_proposal_post(self, event, **post): if not event.can_access_from_current_website(): raise NotFound() diff --git a/addons/website_forum/controllers/main.py b/addons/website_forum/controllers/main.py index cd647d394bc..fd44edb48a5 100644 --- a/addons/website_forum/controllers/main.py +++ b/addons/website_forum/controllers/main.py @@ -39,7 +39,7 @@ class WebsiteForum(WebsiteProfile): # Forum # -------------------------------------------------- - @http.route(['/forum'], type='http', auth="public", website=True) + @http.route(['/forum'], type='http', auth="public", website=True, sitemap=True) def forum(self, **kwargs): domain = request.website.website_domain() forums = request.env['forum.forum'].search(domain) @@ -148,7 +148,7 @@ class WebsiteForum(WebsiteProfile): }) return request.render("website_forum.forum_index", values) - @http.route(['''/forum/<model("forum.forum", "[('website_id', 'in', (False, current_website_id))]"):forum>/faq'''], type='http', auth="public", website=True) + @http.route(['''/forum/<model("forum.forum"):forum>/faq'''], type='http', auth="public", website=True, sitemap=True) def forum_faq(self, forum, **post): values = self._prepare_user_values(forum=forum, searches=dict(), header={'is_guidelines': True}, **post) return request.render("website_forum.faq", values) @@ -201,7 +201,8 @@ class WebsiteForum(WebsiteProfile): except IOError: return False - @http.route(['''/forum/<model("forum.forum", "[('website_id', 'in', (False, current_website_id))]"):forum>/question/<model("forum.post", "[('forum_id','=',forum[0]),('parent_id','=',False),('can_view', '=', True)]"):question>'''], type='http', auth="public", website=True) + @http.route(['''/forum/<model("forum.forum"):forum>/question/<model("forum.post", "[('forum_id','=',forum[0]),('parent_id','=',False),('can_view', '=', True)]"):question>'''], + type='http', auth="public", website=True, sitemap=True) def question(self, forum, question, **post): if not forum.active: return request.render("website_forum.header", {'forum': forum}) diff --git a/addons/website_hr_recruitment/controllers/main.py b/addons/website_hr_recruitment/controllers/main.py index b68c1b240ce..c22920316d7 100644 --- a/addons/website_hr_recruitment/controllers/main.py +++ b/addons/website_hr_recruitment/controllers/main.py @@ -80,7 +80,7 @@ class WebsiteHrRecruitment(http.Controller): }) return request.redirect("/jobs/detail/%s?enable_editor=1" % slug(job)) - @http.route('''/jobs/detail/<model("hr.job", "[('website_id', 'in', (False, current_website_id))]"):job>''', type='http', auth="public", website=True) + @http.route('''/jobs/detail/<model("hr.job"):job>''', type='http', auth="public", website=True, sitemap=True) def jobs_detail(self, job, **kwargs): if not job.can_access_from_current_website(): raise NotFound() @@ -90,7 +90,7 @@ class WebsiteHrRecruitment(http.Controller): 'main_object': job, }) - @http.route('''/jobs/apply/<model("hr.job", "[('website_id', 'in', (False, current_website_id))]"):job>''', type='http', auth="public", website=True) + @http.route('''/jobs/apply/<model("hr.job"):job>''', type='http', auth="public", website=True, sitemap=True) def jobs_apply(self, job, **kwargs): if not job.can_access_from_current_website(): raise NotFound() diff --git a/addons/website_livechat/controllers/main.py b/addons/website_livechat/controllers/main.py index 989d817d2ef..60dd538fc20 100644 --- a/addons/website_livechat/controllers/main.py +++ b/addons/website_livechat/controllers/main.py @@ -7,7 +7,7 @@ from odoo.http import request class WebsiteLivechat(http.Controller): - @http.route('/livechat', type='http', auth="public", website=True) + @http.route('/livechat', type='http', auth="public", website=True, sitemap=True) def channel_list(self, **kw): # display the list of the channel channels = request.env['im_livechat.channel'].search([('website_published', '=', True)]) @@ -16,8 +16,7 @@ class WebsiteLivechat(http.Controller): } return request.render('website_livechat.channel_list_page', values) - - @http.route('/livechat/channel/<model("im_livechat.channel"):channel>', type='http', auth='public', website=True) + @http.route('/livechat/channel/<model("im_livechat.channel"):channel>', type='http', auth='public', website=True, sitemap=True) def channel_rating(self, channel, **kw): # get the last 100 ratings and the repartition per grade domain = [ diff --git a/addons/website_mail_channel/controllers/main.py b/addons/website_mail_channel/controllers/main.py index 8865fd517b1..c51fc8de585 100644 --- a/addons/website_mail_channel/controllers/main.py +++ b/addons/website_mail_channel/controllers/main.py @@ -38,7 +38,7 @@ class MailGroup(http.Controller): .date() # may be unnecessary? .strftime(tools.DEFAULT_SERVER_DATE_FORMAT)) - @http.route("/groups", type='http', auth="public", website=True) + @http.route("/groups", type='http', auth="public", website=True, sitemap=True) def view(self, **post): groups = request.env['mail.channel'].search([('alias_id.alias_name', '!=', False)]) @@ -122,7 +122,7 @@ class MailGroup(http.Controller): @http.route([ '''/groups/<model('mail.channel', "[('channel_type', '=', 'channel')]"):group>''', '''/groups/<model('mail.channel'):group>/page/<int:page>''' - ], type='http', auth="public", website=True) + ], type='http', auth="public", website=True, sitemap=True) def thread_headers(self, group, page=1, mode='thread', date_begin=None, date_end=None, **post): if group.channel_type != 'channel': raise werkzeug.exceptions.NotFound() @@ -157,7 +157,7 @@ class MailGroup(http.Controller): @http.route([ '''/groups/<model('mail.channel', "[('channel_type', '=', 'channel')]"):group>/<model('mail.message', "[('model','=','mail.channel'), ('res_id','=',group[0])]"):message>''', - ], type='http', auth="public", website=True) + ], type='http', auth="public", website=True, sitemap=True) def thread_discussion(self, group, message, mode='thread', date_begin=None, date_end=None, **post): if group.channel_type != 'channel': raise werkzeug.exceptions.NotFound() diff --git a/addons/website_membership/controllers/main.py b/addons/website_membership/controllers/main.py index 98f55eac68d..d9e8cbdd757 100644 --- a/addons/website_membership/controllers/main.py +++ b/addons/website_membership/controllers/main.py @@ -29,7 +29,7 @@ class WebsiteMembership(http.Controller): '/members/association/<membership_id>/country/<int:country_id>', '/members/association/<membership_id>/country/<country_name>-<int:country_id>/page/<int:page>', '/members/association/<membership_id>/country/<int:country_id>/page/<int:page>', - ], type='http', auth="public", website=True) + ], type='http', auth="public", website=True, sitemap=True) def members(self, membership_id=None, country_name=None, country_id=0, page=1, **post): Product = request.env['product.product'] Country = request.env['res.country'] diff --git a/addons/website_profile/controllers/main.py b/addons/website_profile/controllers/main.py index 8db95836b9f..eef5d1d4dc8 100644 --- a/addons/website_profile/controllers/main.py +++ b/addons/website_profile/controllers/main.py @@ -168,7 +168,7 @@ class WebsiteProfile(http.Controller): domain = expression.AND([[('challenge_ids.category', '=', kwargs.get('badge_category'))], domain]) return domain - @http.route('/profile/ranks_badges', type='http', auth="public", website=True) + @http.route('/profile/ranks_badges', type='http', auth="public", website=True, sitemap=True) def view_ranks_badges(self, **kwargs): ranks = [] if 'badge_category' not in kwargs: @@ -204,7 +204,7 @@ class WebsiteProfile(http.Controller): return user_values @http.route(['/profile/users', - '/profile/users/page/<int:page>'], type='http', auth="public", website=True) + '/profile/users/page/<int:page>'], type='http', auth="public", website=True, sitemap=True) def view_all_users_page(self, page=1, **searches): User = request.env['res.users'] dom = [('karma', '>', 1), ('website_published', '=', True)] diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 91542537232..faeb1b314d7 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -302,7 +302,7 @@ class WebsiteSale(http.Controller): values['main_object'] = category return request.render("website_sale.products", values) - @http.route(['/shop/product/<model("product.template"):product>'], type='http', auth="public", website=True) + @http.route(['/shop/product/<model("product.template"):product>'], type='http', auth="public", website=True, sitemap=True) def product(self, product, category='', search='', **kwargs): if not product.can_access_from_current_website(): raise NotFound() @@ -1000,8 +1000,7 @@ class WebsiteSale(http.Controller): PaymentProcessing.remove_payment_transaction(tx) return request.redirect('/shop/confirmation') - - @http.route(['/shop/terms'], type='http', auth="public", website=True) + @http.route(['/shop/terms'], type='http', auth="public", website=True, sitemap=True) def terms(self, **kw): return request.render("website_sale.terms") diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py index eba4df3ca4d..e937cff43f8 100644 --- a/addons/website_slides/controllers/main.py +++ b/addons/website_slides/controllers/main.py @@ -234,7 +234,7 @@ class WebsiteSlides(WebsiteProfile): # SLIDE.CHANNEL MAIN / SEARCH # -------------------------------------------------- - @http.route('/slides', type='http', auth="public", website=True) + @http.route('/slides', type='http', auth="public", website=True, sitemap=True) def slides_channel_home(self, **post): """ Home page for eLearning platform. Is mainly a container page, does not allow search / filter. """ domain = request.website.website_domain() @@ -279,7 +279,7 @@ class WebsiteSlides(WebsiteProfile): return request.render('website_slides.courses_home', values) - @http.route('/slides/all', type='http', auth="public", website=True) + @http.route('/slides/all', type='http', auth="public", website=True, sitemap=True) def slides_channel_all(self, slide_type=None, my=False, **post): """ Home page displaying a list of courses displayed according to some criterion and search terms. @@ -539,7 +539,7 @@ class WebsiteSlides(WebsiteProfile): # SLIDE.SLIDE MAIN / SEARCH # -------------------------------------------------- - @http.route('''/slides/slide/<model("slide.slide", "[('website_id', 'in', (False, current_website_id))]"):slide>''', type='http', auth="public", website=True) + @http.route('''/slides/slide/<model("slide.slide"):slide>''', type='http', auth="public", website=True, sitemap=True) def slide_view(self, slide, **kwargs): if not slide.channel_id.can_access_from_current_website() or not slide.active: raise werkzeug.exceptions.NotFound() |
