@@ -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", | |||
@@ -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", | |||
@@ -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", | |||
@@ -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": | |||
@@ -1,6 +1,4 @@ | |||
import frappe | |||
def execute(): | |||
if frappe.db.exists("Website Route", "index"): | |||
frappe.delete_doc("Website Route", "index", ignore_permissions=True) | |||
pass |
@@ -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): | |||
@@ -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) |
@@ -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`") |
@@ -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 | |||
@@ -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) | |||
@@ -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": | |||
@@ -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") | |||
@@ -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") |
@@ -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 | |||
@@ -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 | |||
} | |||
] | |||
} |
@@ -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) |
@@ -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): | |||
@@ -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('<div class="text-muted">'+ | |||
__('Click on a link to get options') + '</div>') | |||
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")); | |||
}, | |||
}); |
@@ -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" | |||
} |
@@ -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() |
@@ -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: | |||
@@ -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) | |||
@@ -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() | |||
@@ -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" | |||