From 023db7a7644f97fbcfdb94f14c7af0b9dc4ecaea Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 30 Oct 2014 17:13:23 +0530 Subject: [PATCH] [Fix] rebuild page name on change of obj name --- frappe/website/website_generator.py | 40 +++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/frappe/website/website_generator.py b/frappe/website/website_generator.py index e143233e85..5b200b7052 100644 --- a/frappe/website/website_generator.py +++ b/frappe/website/website_generator.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import frappe +from frappe.utils import now from frappe.model.document import Document from frappe.model.naming import append_number_if_name_exists from frappe.website.utils import cleanup_page_name, get_home_page @@ -22,9 +23,16 @@ class WebsiteGenerator(Document): def validate(self): self.set_parent_website_route() - if self.website_published() and self.meta.get_field("page_name") and not self.page_name: - self.page_name = self.get_page_name() - self.update_routes_of_descendants() + + if self.meta.get_field("page_name") and not self.get("__islocal"): + current_route = self.get_route() + current_page_name = self.page_name + + self.page_name = self.make_page_name() + + # page name changed, rename everything + if current_page_name and current_page_name != self.page_name: + self.update_routes_of_descendants(current_route) def on_update(self): clear_cache(self.get_route()) @@ -32,9 +40,6 @@ class WebsiteGenerator(Document): frappe.add_version(self) def get_route(self, doc = None): - if not self.website_published(): - return None - self.get_page_name() return make_route(self) @@ -47,11 +52,14 @@ class WebsiteGenerator(Document): def get_or_make_page_name(self): page_name = self.get("page_name") if not page_name: - page_name = cleanup_page_name(self.get(self.page_title_field)) + page_name = self.make_page_name() self.set("page_name", page_name) return page_name + def make_page_name(self): + return cleanup_page_name(self.get(self.page_title_field)) + def before_rename(self, oldname, name, merge): self._local = self.get_route() self.clear_cache() @@ -84,10 +92,20 @@ class WebsiteGenerator(Document): old_route = frappe.get_doc(self.doctype, self.name).get_route() if old_route and old_route != self.get_route(): - frappe.db.sql("""update `tab{0}` set - parent_website_route = replace(parent_website_route, %s, %s) - where parent_website_route like %s""".format(self.doctype), - (old_route, self.get_route(), old_route + "%")) + # clear cache of old routes + old_routes = frappe.get_all(self.doctype, fields=["parent_website_route", "page_name"], + filters={"parent_website_route": ("like", old_route + "%")}) + + if old_routes: + for old_route in old_routes: + clear_cache(old_route) + + frappe.db.sql("""update `tab{0}` set + parent_website_route = replace(parent_website_route, %s, %s), + modified = %s + modified_by = %s + where parent_website_route like %s""".format(self.doctype), + (old_route, self.get_route(), now(), frappe.session.user, old_route + "%")) def get_website_route(self): route = frappe._dict()