Merge pull request #902 from nabinhait/hotfix

[Fix] rebuild page name on change of obj name
This commit is contained in:
Nabin Hait 2014-10-30 18:15:07 +05:30
commit 620c80d8b2

View file

@ -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()