From 07fa6d1971c813c59d3fb641429027a199edad82 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 20 Aug 2014 11:42:55 +0530 Subject: [PATCH] [route] redesigned --- frappe/__init__.py | 3 - frappe/cli.py | 2 +- frappe/config/website.py | 7 - frappe/core/doctype/comment/comment.py | 8 +- frappe/patches/v4_0/remove_index_sitemap.py | 4 +- .../patches/v4_0/rename_sitemap_to_route.py | 4 +- .../patches/v4_0/website_sitemap_hierarchy.py | 14 +- .../patches/v4_2/refactor_website_routing.py | 1 + frappe/templates/pages/sitemap.py | 2 +- frappe/templates/website_group/settings.py | 9 +- frappe/website/context.py | 4 +- frappe/website/doctype/blog_post/blog_post.py | 4 - .../website/doctype/web_page/test_web_page.py | 21 +-- frappe/website/doctype/web_page/web_page.py | 3 +- .../website/doctype/website_route/__init__.py | 0 .../doctype/website_route/website_route.json | 139 ------------------ .../doctype/website_route/website_route.py | 105 ------------- .../website_settings/website_settings.py | 4 +- .../website/page/sitemap_browser/__init__.py | 0 .../page/sitemap_browser/sitemap_browser.js | 71 --------- .../page/sitemap_browser/sitemap_browser.json | 23 --- .../page/sitemap_browser/sitemap_browser.py | 75 ---------- frappe/website/render.py | 4 +- frappe/website/{sitemap.py => router.py} | 66 +++++---- frappe/website/statics.py | 1 - frappe/website/website_generator.py | 2 +- 26 files changed, 68 insertions(+), 508 deletions(-) delete mode 100644 frappe/website/doctype/website_route/__init__.py delete mode 100644 frappe/website/doctype/website_route/website_route.json delete mode 100644 frappe/website/doctype/website_route/website_route.py delete mode 100644 frappe/website/page/sitemap_browser/__init__.py delete mode 100644 frappe/website/page/sitemap_browser/sitemap_browser.js delete mode 100644 frappe/website/page/sitemap_browser/sitemap_browser.json delete mode 100644 frappe/website/page/sitemap_browser/sitemap_browser.py rename frappe/website/{sitemap.py => router.py} (74%) diff --git a/frappe/__init__.py b/frappe/__init__.py index f9ef3bb4f9..bd86d4af80 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -596,9 +596,6 @@ def get_list(doctype, filters=None, fields=None, or_filters=None, docstatus=None run_query = get_list -def get_website_route(doctype, name): - return db.get_value("Website Route", {"ref_doctype": doctype, "docname": name}) - def add_version(doc): get_doc({ "doctype": "Version", diff --git a/frappe/cli.py b/frappe/cli.py index 8b6991cb57..b42e887a98 100755 --- a/frappe/cli.py +++ b/frappe/cli.py @@ -233,7 +233,7 @@ def setup_utilities(parser): parser.add_argument("--clear_web", default=False, action="store_true", help="Clear website cache") parser.add_argument("--build_website", default=False, action="store_true", - help="Build Website Route") + help="Sync statics and clear cache") parser.add_argument("--sync_statics", default=False, action="store_true", help="Sync files from templates/statics to Web Pages") parser.add_argument("--clear_cache", default=False, action="store_true", diff --git a/frappe/config/website.py b/frappe/config/website.py index 25ef53cb64..556182aa3b 100644 --- a/frappe/config/website.py +++ b/frappe/config/website.py @@ -47,13 +47,6 @@ def get_data(): "name": "Website Settings", "description": _("Setup of top navigation bar, footer and logo."), }, - { - "type": "page", - "name":"sitemap-browser", - "label": _("Sitemap Browser"), - "description": _("View or manage Website Route tree."), - "icon": "icon-sitemap" - }, { "type": "doctype", "name": "Style Settings", diff --git a/frappe/core/doctype/comment/comment.py b/frappe/core/doctype/comment/comment.py index b41744a062..8ccbe720be 100644 --- a/frappe/core/doctype/comment/comment.py +++ b/frappe/core/doctype/comment/comment.py @@ -58,13 +58,7 @@ class Comment(Document): # use sql, so that we do not mess with the timestamp frappe.db.sql("""update `tab%s` set `_comments`=%s where name=%s""" % (self.comment_doctype, "%s", "%s"), (json.dumps(_comments), self.comment_docname)) - - # clear parent cache if route exists: - route = frappe.db.get_value("Website Route", {"ref_doctype": self.comment_doctype, - "docname": self.comment_docname}) - - if route: - clear_cache(route) + clear_cache(route) def on_trash(self): if (self.comment_type or "Comment") != "Comment": diff --git a/frappe/patches/v4_0/remove_index_sitemap.py b/frappe/patches/v4_0/remove_index_sitemap.py index 7f5124813c..00d37eaf2e 100644 --- a/frappe/patches/v4_0/remove_index_sitemap.py +++ b/frappe/patches/v4_0/remove_index_sitemap.py @@ -1,6 +1,4 @@ import frappe def execute(): - if frappe.db.exists("Website Route", "index"): - frappe.delete_doc("Website Route", "index", ignore_permissions=True) - \ No newline at end of file + pass diff --git a/frappe/patches/v4_0/rename_sitemap_to_route.py b/frappe/patches/v4_0/rename_sitemap_to_route.py index a0922874ee..6c83281d03 100644 --- a/frappe/patches/v4_0/rename_sitemap_to_route.py +++ b/frappe/patches/v4_0/rename_sitemap_to_route.py @@ -18,13 +18,13 @@ def execute(): rename_field_if_exists(d, "parent_website_sitemap", "parent_website_route") #frappe.reload_doc("website", "doctype", "website_template") - frappe.reload_doc("website", "doctype", "website_route") + #frappe.reload_doc("website", "doctype", "website_route") frappe.reload_doc("website", "doctype", "website_route_permission") #rename_field_if_exists("Website Route", "website_sitemap_config", "website_template") rename_field_if_exists("Website Route Permission", "website_sitemap", "website_route") - for d in ("blog_category", "blog_post", "web_page", "website_route", "website_group", "post", "user_vote"): + for d in ("blog_category", "blog_post", "web_page", "website_group", "post", "user_vote"): frappe.reload_doc("website", "doctype", d) def rename_field_if_exists(doctype, old_fieldname, new_fieldname): diff --git a/frappe/patches/v4_0/website_sitemap_hierarchy.py b/frappe/patches/v4_0/website_sitemap_hierarchy.py index 2ac591e415..324b13ea4a 100644 --- a/frappe/patches/v4_0/website_sitemap_hierarchy.py +++ b/frappe/patches/v4_0/website_sitemap_hierarchy.py @@ -12,10 +12,10 @@ def execute(): frappe.reload_doc("website", "doctype", "website_settings") - original_home_page = frappe.db.get_value("Website Settings", "Website Settings", "home_page") - - home_page = frappe.db.sql("""select name from `tabWebsite Route` - where (name=%s or docname=%s) and name!='index'""", (original_home_page, original_home_page)) - home_page = home_page[0][0] if home_page else original_home_page - - frappe.db.set_value("Website Settings", "Website Settings", "home_page", home_page) + # original_home_page = frappe.db.get_value("Website Settings", "Website Settings", "home_page") + # + # home_page = frappe.db.sql("""select name from `tabWebsite Route` + # where (name=%s or docname=%s) and name!='index'""", (original_home_page, original_home_page)) + # home_page = home_page[0][0] if home_page else original_home_page + # + # frappe.db.set_value("Website Settings", "Website Settings", "home_page", home_page) diff --git a/frappe/patches/v4_2/refactor_website_routing.py b/frappe/patches/v4_2/refactor_website_routing.py index eed0cedefe..b3ad5c8761 100644 --- a/frappe/patches/v4_2/refactor_website_routing.py +++ b/frappe/patches/v4_2/refactor_website_routing.py @@ -3,4 +3,5 @@ import frappe def execute(): # clear all static web pages frappe.delete_doc("DocType", "Website Route", force=1) + frappe.delete_doc("Page", "sitemap-browser", force=1) frappe.db.sql("drop table `tabWebsite Route`") diff --git a/frappe/templates/pages/sitemap.py b/frappe/templates/pages/sitemap.py index c65c2aff1d..75d8dcd032 100644 --- a/frappe/templates/pages/sitemap.py +++ b/frappe/templates/pages/sitemap.py @@ -6,7 +6,7 @@ from __future__ import unicode_literals import urllib import frappe from frappe.utils import get_request_site_address, get_datetime -from frappe.website.sitemap import get_pages, process_generators +from frappe.website.router import get_pages, process_generators no_cache = 1 no_sitemap = 1 diff --git a/frappe/templates/website_group/settings.py b/frappe/templates/website_group/settings.py index 7ee3349ae6..8c8a649fa0 100644 --- a/frappe/templates/website_group/settings.py +++ b/frappe/templates/website_group/settings.py @@ -67,9 +67,7 @@ def update_permission(group, user, perm, value): # send email if perm=="admin" and int(value): - group_title = frappe.db.get_value("Website Route", pathname, "page_title") - - subject = "You have been made Administrator of Group " + group_title + subject = "You have been made Administrator of Group " + doc.group_title send(recipients=[user], subject= subject, add_unsubscribe_link=False, @@ -95,14 +93,11 @@ def add_website_group(group, new_group, public_read, public_write, group_type="F if not get_access(doc, pathname).get("admin"): raise frappe.PermissionError - parent_website_route = frappe.db.get_value("Website Route", - {"ref_doctype": "Website Group", "docname": group}) - frappe.get_doc({ "doctype": "Website Group", "group_name": group + "-" + new_group, "group_title": new_group, - "parent_website_route": parent_website_route, + "parent_website_group": group, "group_type": group_type, "public_read": int(public_read), "public_write": int(public_write) diff --git a/frappe/website/context.py b/frappe/website/context.py index 4277ea788f..f7251a2ca8 100644 --- a/frappe/website/context.py +++ b/frappe/website/context.py @@ -6,7 +6,7 @@ import frappe from frappe.website.doctype.website_settings.website_settings import get_website_settings from frappe.website.template import render_blocks -from frappe.website.sitemap import get_sitemap_options +from frappe.website.router import get_route_info from frappe.website.utils import can_cache from frappe.website.permissions import get_access @@ -25,7 +25,7 @@ def get_context(path): context = frappe.cache().get_value(cache_key) if not context: - context = get_sitemap_options(path) + context = get_route_info(path) # permission may be required for rendering if context.doc and context.doc.doctype=="Website Group": diff --git a/frappe/website/doctype/blog_post/blog_post.py b/frappe/website/doctype/blog_post/blog_post.py index f68c7d19e0..966e2ba5a4 100644 --- a/frappe/website/doctype/blog_post/blog_post.py +++ b/frappe/website/doctype/blog_post/blog_post.py @@ -36,10 +36,6 @@ class BlogPost(WebsiteGenerator): where ifnull(blogger,'')=tabBlogger.name) where name=%s""", (self.blogger,)) - def get_category_route(self): - return frappe.db.get_value("Website Route", - {"ref_doctype": "Blog Category", "docname": self.blog_category}) - def on_update(self): WebsiteGenerator.on_update(self) clear_cache("writers") diff --git a/frappe/website/doctype/web_page/test_web_page.py b/frappe/website/doctype/web_page/test_web_page.py index 586709510f..3137f69eb6 100644 --- a/frappe/website/doctype/web_page/test_web_page.py +++ b/frappe/website/doctype/web_page/test_web_page.py @@ -1,38 +1,29 @@ from __future__ import unicode_literals import unittest import frappe +from frappe.website.router import resolve_route test_records = frappe.get_test_records('Web Page') class TestWebPage(unittest.TestCase): def setUp(self): frappe.db.sql("delete from `tabWeb Page`") - frappe.db.sql("delete from `tabWebsite Route` where ref_doctype='Web Page'") for t in test_records: frappe.get_doc(t).insert() def test_check_sitemap(self): - self.assertEquals(frappe.db.get_value("Website Route", - {"ref_doctype":"Web Page", "docname": "test-web-page-1"}), "test-web-page-1") - - self.assertEquals(frappe.db.get_value("Website Route", - {"ref_doctype":"Web Page", "docname": "test-web-page-2"}), "test-web-page-1/test-web-page-2") - - self.assertEquals(frappe.db.get_value("Website Route", - {"ref_doctype":"Web Page", "docname": "test-web-page-3"}), "test-web-page-1/test-web-page-3") + resolve_route("test-web-page-1") + resolve_route("test-web-page-1/test-web-page-2") + resolve_route("test-web-page-1/test-web-page-3") def test_check_rename(self): web_page = frappe.get_doc("Web Page", "test-web-page-1") web_page.parent_website_route = "test-web-page-4" web_page.save() - self.assertEquals(frappe.db.get_value("Website Route", - {"ref_doctype":"Web Page", "docname": "test-web-page-2"}), - "test-web-page-4/test-web-page-1/test-web-page-2") + resolve_route("test-web-page-4/test-web-page-1/test-web-page-2") web_page.parent_website_route = "" web_page.save() - self.assertEquals(frappe.db.get_value("Website Route", - {"ref_doctype":"Web Page", "docname": "test-web-page-2"}), - "test-web-page-1/test-web-page-2") + resolve_route("test-web-page-1/test-web-page-2") diff --git a/frappe/website/doctype/web_page/web_page.py b/frappe/website/doctype/web_page/web_page.py index 7b2306b666..8600c9bfe4 100644 --- a/frappe/website/doctype/web_page/web_page.py +++ b/frappe/website/doctype/web_page/web_page.py @@ -5,6 +5,7 @@ from __future__ import unicode_literals import frappe, re, os import requests, requests.exceptions from frappe.website.website_generator import WebsiteGenerator +from frappe.website.router import resolve_route from frappe.website.doctype.website_slideshow.website_slideshow import get_slideshow from frappe.website.utils import find_first_image, get_comment_list from markdown2 import markdown @@ -114,7 +115,7 @@ def check_broken_links(): link = link[1:] # remove leading / link = link.split("#")[0] - if not frappe.db.exists("Website Route", link): + if not resolve_route(link): print p.name + ":" + link cnt += 1 diff --git a/frappe/website/doctype/website_route/__init__.py b/frappe/website/doctype/website_route/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/frappe/website/doctype/website_route/website_route.json b/frappe/website/doctype/website_route/website_route.json deleted file mode 100644 index c9fe904d09..0000000000 --- a/frappe/website/doctype/website_route/website_route.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "allow_rename": 1, - "autoname": "field:page_name", - "creation": "2013-11-18 15:38:40", - "docstatus": 0, - "doctype": "DocType", - "fields": [ - { - "fieldname": "page_or_generator", - "fieldtype": "Select", - "label": "Page or Generator", - "options": "Page\nGenerator", - "permlevel": 0, - "read_only": 1 - }, - { - "fieldname": "page_name", - "fieldtype": "Data", - "label": "Page Name", - "permlevel": 0, - "read_only": 1, - "reqd": 1 - }, - { - "fieldname": "page_title", - "fieldtype": "Data", - "label": "Page Title", - "permlevel": 0, - "read_only": 1 - }, - { - "fieldname": "ref_doctype", - "fieldtype": "Link", - "label": "Ref DocType", - "options": "DocType", - "permlevel": 0, - "reqd": 0 - }, - { - "fieldname": "docname", - "fieldtype": "Dynamic Link", - "label": "Docname", - "options": "ref_doctype", - "permlevel": 0, - "read_only": 1 - }, - { - "fieldname": "lastmod", - "fieldtype": "Data", - "label": "Lastmod", - "permlevel": 0 - }, - { - "fieldname": "template", - "fieldtype": "Read Only", - "label": "Template", - "permlevel": 0 - }, - { - "fieldname": "controller", - "fieldtype": "Read Only", - "label": "Controller", - "options": "", - "permlevel": 0 - }, - { - "fieldname": "parent_website_route", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Parent Website Sitemap", - "options": "Website Route", - "permlevel": 0, - "search_index": 1 - }, - { - "fieldname": "lft", - "fieldtype": "Int", - "hidden": 1, - "label": "lft", - "permlevel": 0, - "read_only": 1, - "search_index": 1 - }, - { - "fieldname": "rgt", - "fieldtype": "Int", - "hidden": 1, - "in_list_view": 0, - "label": "rgt", - "permlevel": 0, - "read_only": 1, - "search_index": 1 - }, - { - "fieldname": "old_parent", - "fieldtype": "Data", - "hidden": 1, - "label": "Old Parent", - "permlevel": 0, - "read_only": 1 - }, - { - "fieldname": "public_read", - "fieldtype": "Check", - "label": "Anyone Can Read", - "permlevel": 0 - }, - { - "fieldname": "public_write", - "fieldtype": "Check", - "label": "Anyone Can Write", - "permlevel": 0 - }, - { - "fieldname": "static_file_timestamp", - "fieldtype": "Data", - "label": "Static File Timestamp", - "permlevel": 0 - } - ], - "idx": 1, - "modified": "2014-06-27 05:04:57.721756", - "modified_by": "Administrator", - "module": "Website", - "name": "Website Route", - "owner": "Administrator", - "permissions": [ - { - "cancel": 0, - "create": 0, - "delete": 1, - "permlevel": 0, - "read": 1, - "report": 1, - "role": "Website Manager", - "write": 1 - } - ] -} \ No newline at end of file diff --git a/frappe/website/doctype/website_route/website_route.py b/frappe/website/doctype/website_route/website_route.py deleted file mode 100644 index 2ca8381c74..0000000000 --- a/frappe/website/doctype/website_route/website_route.py +++ /dev/null @@ -1,105 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# MIT License. See license.txt - -from __future__ import unicode_literals -import frappe -from frappe import _ -from frappe.utils.nestedset import NestedSet - -sitemap_fields = ("page_name", "ref_doctype", "docname", "page_or_generator", "idx", - "lastmod", "parent_website_route", "public_read", "public_write", "page_title") - -class WebsiteRoute(NestedSet): - nsm_parent_field = "parent_website_route" - - def autoname(self): - self.name = self.get_url() - - def get_url(self): - url = self.page_name - if self.parent_website_route: - url = self.parent_website_route + "/" + url - return url - - def validate(self): - if not frappe.flags.in_sync_website: - self.make_private_if_parent_is_private() - - def on_update(self): - if self.get_url() != self.name: - self.rename() - if not frappe.flags.in_sync_website: - NestedSet.on_update(self) - self.clear_cache() - - def rename(self, new_page_name=None, new_parent_website_route=None): - self.old_name = self.name - self.old_parent_website_route = self.parent_website_route - - # get new route - if new_page_name != None: - self.page_name = new_page_name - if new_parent_website_route != None: - self.parent_website_route = new_parent_website_route - self.name = self.get_url() - - # update values (don't run triggers) - frappe.db.sql("""update `tabWebsite Route` set - name=%s, page_name=%s, parent_website_route=%s where name=%s""", - (self.name, self.page_name, self.parent_website_route, self.old_name)) - - self.rename_links() - self.rename_descendants() - self.clear_cache(self.old_name) - self.clear_cache(self.old_parent_website_route) - self.clear_cache(self.parent_website_route) - - def rename_links(self): - for doctype in frappe.db.sql_list("""select parent from tabDocField - where fieldtype='Link' - and fieldname='parent_website_route' - and options='Website Route' - and parent!='Website Route'"""): - for name in frappe.db.sql_list("""select name from `tab{}` - where parent_website_route=%s""".format(doctype), self.old_name): - frappe.db.set_value(doctype, name, "parent_website_route", self.name) - - def rename_descendants(self): - # rename children - for name in frappe.db.sql_list("""select name from `tabWebsite Route` - where parent_website_route=%s""", self.old_name): - child = frappe.get_doc("Website Route", name) - child.parent_website_route = self.name - child.save() - - def make_private_if_parent_is_private(self): - if self.parent_website_route: - parent_pubic_read = frappe.db.get_value("Website Route", self.parent_website_route, - "public_read") - - if not parent_pubic_read: - self.public_read = self.public_write = 0 - - def on_trash(self): - # remove website sitemap permissions - to_remove = frappe.db.sql_list("""select name from `tabWebsite Route Permission` - where website_route=%s""", (self.name,)) - frappe.delete_doc("Website Route Permission", to_remove, ignore_permissions=True) - self.clear_cache() - - def clear_cache(self, name=None): - from frappe.website.render import clear_cache - if name: - clear_cache(name) - else: - if self.parent_website_route: - clear_cache(self.parent_website_route) - - clear_cache(self.name) - -def remove_sitemap(page_name=None, ref_doctype=None, docname=None): - if page_name: - frappe.delete_doc("Website Route", page_name, ignore_permissions=True, force=True) - elif ref_doctype and docname: - frappe.delete_doc("Website Route", frappe.db.sql_list("""select name from `tabWebsite Route` - where ref_doctype=%s and docname=%s""", (ref_doctype, docname)), ignore_permissions=True, force=True) diff --git a/frappe/website/doctype/website_settings/website_settings.py b/frappe/website/doctype/website_settings/website_settings.py index 72e9e3f626..7c70010553 100644 --- a/frappe/website/doctype/website_settings/website_settings.py +++ b/frappe/website/doctype/website_settings/website_settings.py @@ -7,6 +7,7 @@ from frappe import _ from frappe.utils import get_request_site_address, encode from frappe.model.document import Document from urllib import quote +from frappe.website.router import resolve_route class WebsiteSettings(Document): def validate(self): @@ -15,8 +16,7 @@ class WebsiteSettings(Document): self.validate_home_page() def validate_home_page(self): - if self.home_page and \ - not frappe.db.get_value("Website Route", {"name": self.home_page}): + if self.home_page and not resolve_route(self.home_page): frappe.throw(_("Invalid Home Page") + " (Standard pages - index, login, products, blog, about, contact)") def validate_top_bar_items(self): diff --git a/frappe/website/page/sitemap_browser/__init__.py b/frappe/website/page/sitemap_browser/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/frappe/website/page/sitemap_browser/sitemap_browser.js b/frappe/website/page/sitemap_browser/sitemap_browser.js deleted file mode 100644 index 94f6c79d1e..0000000000 --- a/frappe/website/page/sitemap_browser/sitemap_browser.js +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -// MIT License. See license.txt" - -frappe.pages['sitemap-browser'].onload = function(wrapper) { - frappe.ui.make_app_page({ - parent: wrapper, - title: 'Sitemap Browser', - }); - wrapper.appframe.add_module_icon("Website") - - wrapper.appframe.set_title_right('Refresh', function() { - frappe.website.sitemap.tree.rootnode.reload(); - }); - - $(wrapper) - .find(".layout-side-section") - .html('
'+ - __('Click on a link to get options') + '
') - - frappe.website.sitemap = new frappe.website.SitemapBrowser( - $(wrapper) - .find(".layout-main-section") - .css({ - "min-height": "300px", - "padding-bottom": "25px" - })); -} - -frappe.provide("frappe.website"); - -frappe.website.SitemapBrowser = Class.extend({ - init: function(parent) { - $(parent).empty(); - var me = this; - this.tree = new frappe.ui.Tree({ - parent: $(parent), - label: "Sitemap", - method: 'frappe.website.page.sitemap_browser.sitemap_browser.get_children', - toolbar: [ - { - toggle_btn: true, - }, - { - label: __("Open"), - click: function(node, btn) { - frappe.set_route("Form", node.data.ref_doctype, node.data.docname); - } - } - ] - - // drop: function(dragged_node, dropped_node, dragged_element, dropped_element) { - // frappe.website.sitemap.update_parent(dragged_node.label, dropped_node.label, function(r) { - // if(!r.exc) { - // dragged_element.remove(); - // dropped_node.reload(); - // } - // }); - // } - }); - this.tree.rootnode.$a - .data('node-data', {value: "Sitemap", expandable:1}) - .click(); - }, - selected_node: function() { - return this.tree.$w.find('.tree-link.selected'); - }, - open: function() { - var node = this.selected_node(); - frappe.set_route("Form", "Website Route", node.data("label")); - }, -}); diff --git a/frappe/website/page/sitemap_browser/sitemap_browser.json b/frappe/website/page/sitemap_browser/sitemap_browser.json deleted file mode 100644 index 4cbbdf9bb6..0000000000 --- a/frappe/website/page/sitemap_browser/sitemap_browser.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "creation": "2014-02-18 10:47:22.000000", - "docstatus": 0, - "doctype": "Page", - "icon": "icon-sitemap", - "idx": 1, - "modified": "2014-02-18 10:47:22.000000", - "modified_by": "Administrator", - "module": "Website", - "name": "sitemap-browser", - "owner": "Administrator", - "page_name": "sitemap-browser", - "roles": [ - { - "role": "Website Manager" - }, - { - "role": "System Manager" - } - ], - "standard": "Yes", - "title": "Sitemap Browser" -} \ No newline at end of file diff --git a/frappe/website/page/sitemap_browser/sitemap_browser.py b/frappe/website/page/sitemap_browser/sitemap_browser.py deleted file mode 100644 index 67d85b444b..0000000000 --- a/frappe/website/page/sitemap_browser/sitemap_browser.py +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -# MIT License. See license.txt - -from __future__ import unicode_literals -import frappe -from frappe import _ -from frappe.website.render import clear_cache - -@frappe.whitelist() -def get_children(parent=None): - if not frappe.has_permission("Website Route"): - raise frappe.PermissionError - - if parent=="Sitemap": - parent = "" - - return frappe.db.sql("""select name as value, 1 as expandable, ref_doctype, docname - from `tabWebsite Route` where - ifnull(parent_website_route, '')=%s - order by ifnull(idx,0), name asc""", parent, as_dict=True) - -@frappe.whitelist() -def move(name, up_or_down): - ret = None - if not frappe.has_permission("Website Route"): - raise frappe.PermissionError - - sitemap = frappe.get_doc("Website Route", name) - if up_or_down=="up": - if sitemap.idx > 0: - prev = frappe.get_doc("Website Route", { - "parent_website_route": sitemap.parent_website_route, - "idx": sitemap.idx - 1 - }) - if prev.name: - prev.idx = prev.idx + 1 - prev.save() - - sitemap.idx = sitemap.idx - 1 - sitemap.save() - ret = "ok" - - else: - nexts = frappe.get_doc("Website Route", { - "parent_website_route": sitemap.parent_website_route, - "idx": sitemap.idx + 1 - }) - if nexts.name: - nexts.idx = nexts.idx - 1 - nexts.save() - - sitemap.idx = sitemap.idx + 1 - sitemap.save() - ret = "ok" - - clear_cache() - return ret - -@frappe.whitelist() -def update_parent(name, new_parent): - if not frappe.has_permission("Website Route"): - raise frappe.PermissionError - - sitemap = frappe.get_doc("Website Route", name) - - if sitemap.ref_doctype: - generator = frappe.get_doc(sitemap.ref_doctype, sitemap.docname) - if not generator.meta.get_field("parent_website_route"): - frappe.throw(_("Not allowed to move")) - generator.parent_website_route = new_parent - generator.save() - else: - frappe.msgprint(_("Template Pages cannot be moved")) - - clear_cache() diff --git a/frappe/website/render.py b/frappe/website/render.py index 395e836db1..083b3c4708 100644 --- a/frappe/website/render.py +++ b/frappe/website/render.py @@ -10,7 +10,7 @@ from werkzeug.wrappers import Response from frappe.website.context import get_context from frappe.website.utils import scrub_relative_urls, get_home_page, can_cache, delete_page_cache from frappe.website.permissions import clear_permissions -from frappe.website.sitemap import clear_sitemap +from frappe.website.router import clear_sitemap class PageNotFoundError(Exception): pass @@ -162,8 +162,6 @@ def set_content_type(response, data, path): return data def clear_cache(path=None): - cache = frappe.cache() - if path: delete_page_cache(path) else: diff --git a/frappe/website/sitemap.py b/frappe/website/router.py similarity index 74% rename from frappe/website/sitemap.py rename to frappe/website/router.py index 9b6ea17725..85ddbbdd5a 100644 --- a/frappe/website/sitemap.py +++ b/frappe/website/router.py @@ -7,7 +7,7 @@ import frappe, os from frappe.website.utils import can_cache, delete_page_cache from frappe.model.document import get_controller -def get_sitemap_options(path): +def get_route_info(path): sitemap_options = None cache_key = "sitemap_options:{}".format(path) @@ -15,36 +15,36 @@ def get_sitemap_options(path): sitemap_options = frappe.cache().get_value(cache_key) if not sitemap_options: - sitemap_options = build_sitemap_options(path) + sitemap_options = build_route(path) if can_cache(sitemap_options.no_cache): frappe.cache().set_value(cache_key, sitemap_options) return sitemap_options -def build_sitemap_options(path): - sitemap_options = resolve_route(path) - if not sitemap_options: +def build_route(path): + context = resolve_route(path) + if not context: raise frappe.DoesNotExistError - if sitemap_options.controller: - module = frappe.get_module(sitemap_options.controller) + if context.controller: + module = frappe.get_module(context.controller) # get sitemap config fields too for prop in ("base_template_path", "template", "no_cache", "no_sitemap", "condition_field"): if hasattr(module, prop): - sitemap_options[prop] = getattr(module, prop) + context[prop] = getattr(module, prop) - sitemap_options.doctype = sitemap_options.ref_doctype - sitemap_options.title = sitemap_options.page_title - sitemap_options.pathname = path + context.doctype = context.ref_doctype + context.title = context.page_title + context.pathname = path # determine templates to be used - if not sitemap_options.base_template_path: + if not context.base_template_path: app_base = frappe.get_hooks("base_template") - sitemap_options.base_template_path = app_base[0] if app_base else "templates/base.html" + context.base_template_path = app_base[0] if app_base else "templates/base.html" - return sitemap_options + return context def resolve_route(path): route = get_page_route(path) @@ -58,20 +58,28 @@ def get_page_route(path): return found[0] if found else None def get_generator_route(path): + parts = path.rsplit("/", 1) + if len(parts)==1: + page_name = path + parent = None + else: + parent, page_name = parts + def get_route(doctype, condition_field, order_by): - condition = [] + condition = ["page_name=%s"] + if condition_field: condition.append("ifnull({0}, 0)=1".format(condition_field)) - meta = frappe.get_meta(doctype) - if meta.get_field("parent_website_route"): - condition.append("""concat(ifnull(parent_website_route, ""), - if(ifnull(parent_website_route, "")="", "", "/"), page_name) = %s""") - else: - condition.append("page_name = %s") + values = (page_name,) + if parent: + meta = frappe.get_meta(doctype) + if meta.get_field("parent_website_route"): + condition.append("""parent_website_route=%s""") + values = (page_name, parent) g = frappe.db.sql("""select name from `tab{0}` where {1} - order by {2}""".format(doctype, " and ".join(condition), order_by), path) + order by {2}""".format(doctype, " and ".join(condition), order_by), values) if g: return frappe.get_doc(doctype, g[0][0]).get_website_route() @@ -84,13 +92,15 @@ def clear_sitemap(): def clear_generators(doctype, condition_field, order_by): meta = frappe.get_meta(doctype) - query = "select page_name from `tab{0}`" + if meta.get_field("parent_website_route"): - query = """select concat(ifnull(parent_website_route, ""), - if(ifnull(parent_website_route, "")="", "", "/"), page_name) from `tab{0}`""" - for route in frappe.db.sql_list(query.format(doctype)): - if route: - delete_page_cache(route) + query = "select page_name, parent_website_route from `tab{0}`" + else: + query = "select page_name, "" from `tab{0}`" + + for r in frappe.db.sql(query.format(doctype)): + if r[0]: + delete_page_cache(((r[1] + "/") if r[1] else "") + r[0]) process_generators(clear_generators) diff --git a/frappe/website/statics.py b/frappe/website/statics.py index 64f70685e5..ca1856274d 100644 --- a/frappe/website/statics.py +++ b/frappe/website/statics.py @@ -5,7 +5,6 @@ from __future__ import unicode_literals import frappe, os, time, sys from frappe.utils import update_progress_bar -# from frappe.website.sitemap import get_route_children, get_next def sync_statics(rebuild=False): s = sync() diff --git a/frappe/website/website_generator.py b/frappe/website/website_generator.py index 497c734a2d..600e4c9f8e 100644 --- a/frappe/website/website_generator.py +++ b/frappe/website/website_generator.py @@ -9,7 +9,7 @@ from frappe.website.utils import cleanup_page_name, get_home_page from frappe.website.render import clear_cache from frappe.utils import now from frappe.modules import get_module_name -from frappe.website.sitemap import get_page_route +from frappe.website.router import get_page_route class WebsiteGenerator(Document): page_title_field = "name"