Pārlūkot izejas kodu

[route] redesigned

version-14
Rushabh Mehta pirms 11 gadiem
vecāks
revīzija
07fa6d1971
26 mainītis faili ar 68 papildinājumiem un 508 dzēšanām
  1. +0
    -3
      frappe/__init__.py
  2. +1
    -1
      frappe/cli.py
  3. +0
    -7
      frappe/config/website.py
  4. +1
    -7
      frappe/core/doctype/comment/comment.py
  5. +1
    -3
      frappe/patches/v4_0/remove_index_sitemap.py
  6. +2
    -2
      frappe/patches/v4_0/rename_sitemap_to_route.py
  7. +7
    -7
      frappe/patches/v4_0/website_sitemap_hierarchy.py
  8. +1
    -0
      frappe/patches/v4_2/refactor_website_routing.py
  9. +1
    -1
      frappe/templates/pages/sitemap.py
  10. +2
    -7
      frappe/templates/website_group/settings.py
  11. +2
    -2
      frappe/website/context.py
  12. +0
    -4
      frappe/website/doctype/blog_post/blog_post.py
  13. +6
    -15
      frappe/website/doctype/web_page/test_web_page.py
  14. +2
    -1
      frappe/website/doctype/web_page/web_page.py
  15. +0
    -0
      frappe/website/doctype/website_route/__init__.py
  16. +0
    -139
      frappe/website/doctype/website_route/website_route.json
  17. +0
    -105
      frappe/website/doctype/website_route/website_route.py
  18. +2
    -2
      frappe/website/doctype/website_settings/website_settings.py
  19. +0
    -0
      frappe/website/page/sitemap_browser/__init__.py
  20. +0
    -71
      frappe/website/page/sitemap_browser/sitemap_browser.js
  21. +0
    -23
      frappe/website/page/sitemap_browser/sitemap_browser.json
  22. +0
    -75
      frappe/website/page/sitemap_browser/sitemap_browser.py
  23. +1
    -3
      frappe/website/render.py
  24. +38
    -28
      frappe/website/router.py
  25. +0
    -1
      frappe/website/statics.py
  26. +1
    -1
      frappe/website/website_generator.py

+ 0
- 3
frappe/__init__.py Parādīt failu

@@ -596,9 +596,6 @@ def get_list(doctype, filters=None, fields=None, or_filters=None, docstatus=None


run_query = get_list 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): def add_version(doc):
get_doc({ get_doc({
"doctype": "Version", "doctype": "Version",


+ 1
- 1
frappe/cli.py Parādīt failu

@@ -233,7 +233,7 @@ def setup_utilities(parser):
parser.add_argument("--clear_web", default=False, action="store_true", parser.add_argument("--clear_web", default=False, action="store_true",
help="Clear website cache") help="Clear website cache")
parser.add_argument("--build_website", default=False, action="store_true", 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", parser.add_argument("--sync_statics", default=False, action="store_true",
help="Sync files from templates/statics to Web Pages") help="Sync files from templates/statics to Web Pages")
parser.add_argument("--clear_cache", default=False, action="store_true", parser.add_argument("--clear_cache", default=False, action="store_true",


+ 0
- 7
frappe/config/website.py Parādīt failu

@@ -47,13 +47,6 @@ def get_data():
"name": "Website Settings", "name": "Website Settings",
"description": _("Setup of top navigation bar, footer and logo."), "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", "type": "doctype",
"name": "Style Settings", "name": "Style Settings",


+ 1
- 7
frappe/core/doctype/comment/comment.py Parādīt failu

@@ -58,13 +58,7 @@ class Comment(Document):
# use sql, so that we do not mess with the timestamp # 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, frappe.db.sql("""update `tab%s` set `_comments`=%s where name=%s""" % (self.comment_doctype,
"%s", "%s"), (json.dumps(_comments), self.comment_docname)) "%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): def on_trash(self):
if (self.comment_type or "Comment") != "Comment": if (self.comment_type or "Comment") != "Comment":


+ 1
- 3
frappe/patches/v4_0/remove_index_sitemap.py Parādīt failu

@@ -1,6 +1,4 @@
import frappe import frappe


def execute(): def execute():
if frappe.db.exists("Website Route", "index"):
frappe.delete_doc("Website Route", "index", ignore_permissions=True)
pass

+ 2
- 2
frappe/patches/v4_0/rename_sitemap_to_route.py Parādīt failu

@@ -18,13 +18,13 @@ def execute():
rename_field_if_exists(d, "parent_website_sitemap", "parent_website_route") rename_field_if_exists(d, "parent_website_sitemap", "parent_website_route")


#frappe.reload_doc("website", "doctype", "website_template") #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") 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", "website_sitemap_config", "website_template")
rename_field_if_exists("Website Route Permission", "website_sitemap", "website_route") 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) frappe.reload_doc("website", "doctype", d)


def rename_field_if_exists(doctype, old_fieldname, new_fieldname): def rename_field_if_exists(doctype, old_fieldname, new_fieldname):


+ 7
- 7
frappe/patches/v4_0/website_sitemap_hierarchy.py Parādīt failu

@@ -12,10 +12,10 @@ def execute():


frappe.reload_doc("website", "doctype", "website_settings") 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)

+ 1
- 0
frappe/patches/v4_2/refactor_website_routing.py Parādīt failu

@@ -3,4 +3,5 @@ import frappe
def execute(): def execute():
# clear all static web pages # clear all static web pages
frappe.delete_doc("DocType", "Website Route", force=1) frappe.delete_doc("DocType", "Website Route", force=1)
frappe.delete_doc("Page", "sitemap-browser", force=1)
frappe.db.sql("drop table `tabWebsite Route`") frappe.db.sql("drop table `tabWebsite Route`")

+ 1
- 1
frappe/templates/pages/sitemap.py Parādīt failu

@@ -6,7 +6,7 @@ from __future__ import unicode_literals
import urllib import urllib
import frappe import frappe
from frappe.utils import get_request_site_address, get_datetime 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_cache = 1
no_sitemap = 1 no_sitemap = 1


+ 2
- 7
frappe/templates/website_group/settings.py Parādīt failu

@@ -67,9 +67,7 @@ def update_permission(group, user, perm, value):


# send email # send email
if perm=="admin" and int(value): 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], send(recipients=[user],
subject= subject, add_unsubscribe_link=False, 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"): if not get_access(doc, pathname).get("admin"):
raise frappe.PermissionError raise frappe.PermissionError


parent_website_route = frappe.db.get_value("Website Route",
{"ref_doctype": "Website Group", "docname": group})

frappe.get_doc({ frappe.get_doc({
"doctype": "Website Group", "doctype": "Website Group",
"group_name": group + "-" + new_group, "group_name": group + "-" + new_group,
"group_title": new_group, "group_title": new_group,
"parent_website_route": parent_website_route,
"parent_website_group": group,
"group_type": group_type, "group_type": group_type,
"public_read": int(public_read), "public_read": int(public_read),
"public_write": int(public_write) "public_write": int(public_write)


+ 2
- 2
frappe/website/context.py Parādīt failu

@@ -6,7 +6,7 @@ import frappe


from frappe.website.doctype.website_settings.website_settings import get_website_settings from frappe.website.doctype.website_settings.website_settings import get_website_settings
from frappe.website.template import render_blocks 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.utils import can_cache
from frappe.website.permissions import get_access from frappe.website.permissions import get_access


@@ -25,7 +25,7 @@ def get_context(path):
context = frappe.cache().get_value(cache_key) context = frappe.cache().get_value(cache_key)


if not context: if not context:
context = get_sitemap_options(path)
context = get_route_info(path)


# permission may be required for rendering # permission may be required for rendering
if context.doc and context.doc.doctype=="Website Group": if context.doc and context.doc.doctype=="Website Group":


+ 0
- 4
frappe/website/doctype/blog_post/blog_post.py Parādīt failu

@@ -36,10 +36,6 @@ class BlogPost(WebsiteGenerator):
where ifnull(blogger,'')=tabBlogger.name) where ifnull(blogger,'')=tabBlogger.name)
where name=%s""", (self.blogger,)) 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): def on_update(self):
WebsiteGenerator.on_update(self) WebsiteGenerator.on_update(self)
clear_cache("writers") clear_cache("writers")


+ 6
- 15
frappe/website/doctype/web_page/test_web_page.py Parādīt failu

@@ -1,38 +1,29 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import unittest import unittest
import frappe import frappe
from frappe.website.router import resolve_route


test_records = frappe.get_test_records('Web Page') test_records = frappe.get_test_records('Web Page')


class TestWebPage(unittest.TestCase): class TestWebPage(unittest.TestCase):
def setUp(self): def setUp(self):
frappe.db.sql("delete from `tabWeb Page`") frappe.db.sql("delete from `tabWeb Page`")
frappe.db.sql("delete from `tabWebsite Route` where ref_doctype='Web Page'")
for t in test_records: for t in test_records:
frappe.get_doc(t).insert() frappe.get_doc(t).insert()


def test_check_sitemap(self): 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): def test_check_rename(self):
web_page = frappe.get_doc("Web Page", "test-web-page-1") web_page = frappe.get_doc("Web Page", "test-web-page-1")
web_page.parent_website_route = "test-web-page-4" web_page.parent_website_route = "test-web-page-4"
web_page.save() 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.parent_website_route = ""
web_page.save() 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")

+ 2
- 1
frappe/website/doctype/web_page/web_page.py Parādīt failu

@@ -5,6 +5,7 @@ from __future__ import unicode_literals
import frappe, re, os import frappe, re, os
import requests, requests.exceptions import requests, requests.exceptions
from frappe.website.website_generator import WebsiteGenerator 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.doctype.website_slideshow.website_slideshow import get_slideshow
from frappe.website.utils import find_first_image, get_comment_list from frappe.website.utils import find_first_image, get_comment_list
from markdown2 import markdown from markdown2 import markdown
@@ -114,7 +115,7 @@ def check_broken_links():
link = link[1:] # remove leading / link = link[1:] # remove leading /
link = link.split("#")[0] link = link.split("#")[0]


if not frappe.db.exists("Website Route", link):
if not resolve_route(link):
print p.name + ":" + link print p.name + ":" + link
cnt += 1 cnt += 1




+ 0
- 0
frappe/website/doctype/website_route/__init__.py Parādīt failu


+ 0
- 139
frappe/website/doctype/website_route/website_route.json Parādīt failu

@@ -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
}
]
}

+ 0
- 105
frappe/website/doctype/website_route/website_route.py Parādīt failu

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

+ 2
- 2
frappe/website/doctype/website_settings/website_settings.py Parādīt failu

@@ -7,6 +7,7 @@ from frappe import _
from frappe.utils import get_request_site_address, encode from frappe.utils import get_request_site_address, encode
from frappe.model.document import Document from frappe.model.document import Document
from urllib import quote from urllib import quote
from frappe.website.router import resolve_route


class WebsiteSettings(Document): class WebsiteSettings(Document):
def validate(self): def validate(self):
@@ -15,8 +16,7 @@ class WebsiteSettings(Document):
self.validate_home_page() self.validate_home_page()


def validate_home_page(self): 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)") frappe.throw(_("Invalid Home Page") + " (Standard pages - index, login, products, blog, about, contact)")


def validate_top_bar_items(self): def validate_top_bar_items(self):


+ 0
- 0
frappe/website/page/sitemap_browser/__init__.py Parādīt failu


+ 0
- 71
frappe/website/page/sitemap_browser/sitemap_browser.js Parādīt failu

@@ -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"));
},
});

+ 0
- 23
frappe/website/page/sitemap_browser/sitemap_browser.json Parādīt failu

@@ -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"
}

+ 0
- 75
frappe/website/page/sitemap_browser/sitemap_browser.py Parādīt failu

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

+ 1
- 3
frappe/website/render.py Parādīt failu

@@ -10,7 +10,7 @@ from werkzeug.wrappers import Response
from frappe.website.context import get_context 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.utils import scrub_relative_urls, get_home_page, can_cache, delete_page_cache
from frappe.website.permissions import clear_permissions 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 class PageNotFoundError(Exception): pass


@@ -162,8 +162,6 @@ def set_content_type(response, data, path):
return data return data


def clear_cache(path=None): def clear_cache(path=None):
cache = frappe.cache()

if path: if path:
delete_page_cache(path) delete_page_cache(path)
else: else:


frappe/website/sitemap.py → frappe/website/router.py Parādīt failu

@@ -7,7 +7,7 @@ import frappe, os
from frappe.website.utils import can_cache, delete_page_cache from frappe.website.utils import can_cache, delete_page_cache
from frappe.model.document import get_controller from frappe.model.document import get_controller


def get_sitemap_options(path):
def get_route_info(path):
sitemap_options = None sitemap_options = None
cache_key = "sitemap_options:{}".format(path) cache_key = "sitemap_options:{}".format(path)


@@ -15,36 +15,36 @@ def get_sitemap_options(path):
sitemap_options = frappe.cache().get_value(cache_key) sitemap_options = frappe.cache().get_value(cache_key)


if not sitemap_options: if not sitemap_options:
sitemap_options = build_sitemap_options(path)
sitemap_options = build_route(path)
if can_cache(sitemap_options.no_cache): if can_cache(sitemap_options.no_cache):
frappe.cache().set_value(cache_key, sitemap_options) frappe.cache().set_value(cache_key, sitemap_options)


return 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 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 # get sitemap config fields too
for prop in ("base_template_path", "template", "no_cache", "no_sitemap", for prop in ("base_template_path", "template", "no_cache", "no_sitemap",
"condition_field"): "condition_field"):
if hasattr(module, prop): 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 # 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") 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): def resolve_route(path):
route = get_page_route(path) route = get_page_route(path)
@@ -58,20 +58,28 @@ def get_page_route(path):
return found[0] if found else None return found[0] if found else None


def get_generator_route(path): 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): def get_route(doctype, condition_field, order_by):
condition = []
condition = ["page_name=%s"]

if condition_field: if condition_field:
condition.append("ifnull({0}, 0)=1".format(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} 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: if g:
return frappe.get_doc(doctype, g[0][0]).get_website_route() 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): def clear_generators(doctype, condition_field, order_by):
meta = frappe.get_meta(doctype) meta = frappe.get_meta(doctype)
query = "select page_name from `tab{0}`"
if meta.get_field("parent_website_route"): 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) process_generators(clear_generators)



+ 0
- 1
frappe/website/statics.py Parādīt failu

@@ -5,7 +5,6 @@ from __future__ import unicode_literals
import frappe, os, time, sys import frappe, os, time, sys


from frappe.utils import update_progress_bar from frappe.utils import update_progress_bar
# from frappe.website.sitemap import get_route_children, get_next


def sync_statics(rebuild=False): def sync_statics(rebuild=False):
s = sync() s = sync()


+ 1
- 1
frappe/website/website_generator.py Parādīt failu

@@ -9,7 +9,7 @@ from frappe.website.utils import cleanup_page_name, get_home_page
from frappe.website.render import clear_cache from frappe.website.render import clear_cache
from frappe.utils import now from frappe.utils import now
from frappe.modules import get_module_name 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): class WebsiteGenerator(Document):
page_title_field = "name" page_title_field = "name"


Notiek ielāde…
Atcelt
Saglabāt