瀏覽代碼

added patches for build_website and removed website template frappe/frappe#600

version-14
Rushabh Mehta 11 年之前
父節點
當前提交
c49f517e96
共有 11 個文件被更改,包括 50 次插入402 次删除
  1. +8
    -9
      frappe/cli.py
  2. +4
    -4
      frappe/installer.py
  3. +2
    -0
      frappe/patches.txt
  4. +2
    -2
      frappe/patches/v4_0/rename_sitemap_to_route.py
  5. +21
    -20
      frappe/patches/v4_0/set_website_route_idx.py
  6. +3
    -3
      frappe/patches/v4_0/website_sitemap_hierarchy.py
  7. +0
    -1
      frappe/website/doctype/website_route/website_route.py
  8. +0
    -0
      frappe/website/doctype/website_template/__init__.py
  9. +0
    -130
      frappe/website/doctype/website_template/website_template.json
  10. +0
    -141
      frappe/website/doctype/website_template/website_template.py
  11. +10
    -92
      frappe/website/page/sitemap_browser/sitemap_browser.js

+ 8
- 9
frappe/cli.py 查看文件

@@ -230,7 +230,7 @@ def setup_utilities(parser):
# clear
parser.add_argument("--clear_web", default=False, action="store_true",
help="Clear website cache")
parser.add_argument("--build_sitemap", default=False, action="store_true",
parser.add_argument("--build_website", default=False, action="store_true",
help="Build Website Route")
parser.add_argument("--sync_statics", default=False, action="store_true",
help="Sync files from templates/statics to Web Pages")
@@ -352,7 +352,7 @@ def add_to_installed_apps(*apps):
all_apps = frappe.get_all_apps(with_frappe=True)
for each in apps:
if each in all_apps:
add_to_installed_apps(each, rebuild_sitemap=False)
add_to_installed_apps(each, rebuild_website=False)
frappe.destroy()

@cmd
@@ -402,10 +402,9 @@ def update(remote=None, branch=None, reload_gunicorn=False):
subprocess.check_output("killall -HUP gunicorn".split())

@cmd
def latest(rebuild_website_config=True, quiet=False):
def latest(rebuild_website=True, quiet=False):
import frappe.modules.patch_handler
import frappe.model.sync
from frappe.website import rebuild_config
from frappe.utils.fixtures import sync_fixtures
import frappe.translate
from frappe.website import statics
@@ -425,8 +424,8 @@ def latest(rebuild_website_config=True, quiet=False):
sync.start()
sync.start(rebuild=True)
# build website config if any changes in templates etc.
if rebuild_website_config:
rebuild_config()
if rebuild_website:
build_website()

frappe.translate.clear_cache()

@@ -561,10 +560,10 @@ def clear_all_sessions():
frappe.destroy()

@cmd
def build_sitemap():
from frappe.website import rebuild_config
def build_website():
import frappe.website.sync
frappe.connect()
rebuild_config()
frappe.website.sync.sync()
frappe.destroy()

@cmd


+ 4
- 4
frappe/installer.py 查看文件

@@ -120,16 +120,16 @@ def install_app(name, verbose=False, set_as_patched=True):

frappe.flags.in_install_app = False

def add_to_installed_apps(app_name, rebuild_sitemap=True):
def add_to_installed_apps(app_name, rebuild_website=True):
installed_apps = frappe.get_installed_apps()
if not app_name in installed_apps:
installed_apps.append(app_name)
frappe.db.set_global("installed_apps", json.dumps(installed_apps))
frappe.db.commit()

if rebuild_sitemap:
from frappe.website.doctype.website_template.website_template import rebuild_website_template
rebuild_website_template()
if rebuild_website:
import frappe.website.sync
frappe.website.sync.sync()

frappe.clear_cache()



+ 2
- 0
frappe/patches.txt 查看文件

@@ -41,3 +41,5 @@ frappe.patches.v4_0.fix_attach_field_file_url
execute:frappe.reset_perms("User") #2014-06-13
execute:frappe.db.sql("""delete from `tabUserRole` where ifnull(parentfield, '')=''""") #2014-06-17
frappe.patches.v4_0.remove_user_owner_custom_field
execute:frappe.delete_doc("DocType", "Website Template")
execute:frappe.get_attr("frappe.website.sync.sync")() #2014-06-17

+ 2
- 2
frappe/patches/v4_0/rename_sitemap_to_route.py 查看文件

@@ -17,11 +17,11 @@ def execute():
frappe.reload_doc("website", "doctype", frappe.scrub(d))
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_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")

for d in ("blog_category", "blog_post", "web_page", "website_route", "website_group", "post", "user_vote"):


+ 21
- 20
frappe/patches/v4_0/set_website_route_idx.py 查看文件

@@ -1,23 +1,24 @@
import frappe

def execute():
from frappe.website.doctype.website_template.website_template import \
get_pages_and_generators, get_template_controller

frappe.reload_doc("website", "doctype", "website_template")
frappe.reload_doc("website", "doctype", "website_route")

for app in frappe.get_installed_apps():
pages, generators = get_pages_and_generators(app)
for g in generators:
doctype = frappe.get_attr(get_template_controller(app, g["path"], g["fname"]) + ".doctype")
module = frappe.db.get_value("DocType", doctype, "module")
frappe.reload_doc(frappe.scrub(module), "doctype", frappe.scrub(doctype))
frappe.db.sql("""update `tabBlog Category` set `title`=`name` where ifnull(`title`, '')=''""")
frappe.db.sql("""update `tabWebsite Route` set idx=null""")
for doctype in ["Blog Category", "Blog Post", "Web Page", "Website Group"]:
frappe.db.sql("""update `tab{}` set idx=null""".format(doctype))

from frappe.website.doctype.website_template.website_template import rebuild_website_template
rebuild_website_template()
pass
# from frappe.website.doctype.website_template.website_template import \
# get_pages_and_generators, get_template_controller
#
# frappe.reload_doc("website", "doctype", "website_template")
# frappe.reload_doc("website", "doctype", "website_route")
#
# for app in frappe.get_installed_apps():
# pages, generators = get_pages_and_generators(app)
# for g in generators:
# doctype = frappe.get_attr(get_template_controller(app, g["path"], g["fname"]) + ".doctype")
# module = frappe.db.get_value("DocType", doctype, "module")
# frappe.reload_doc(frappe.scrub(module), "doctype", frappe.scrub(doctype))
#
# frappe.db.sql("""update `tabBlog Category` set `title`=`name` where ifnull(`title`, '')=''""")
# frappe.db.sql("""update `tabWebsite Route` set idx=null""")
# for doctype in ["Blog Category", "Blog Post", "Web Page", "Website Group"]:
# frappe.db.sql("""update `tab{}` set idx=null""".format(doctype))
#
# from frappe.website.doctype.website_template.website_template import rebuild_website_template
# rebuild_website_template()

+ 3
- 3
frappe/patches/v4_0/website_sitemap_hierarchy.py 查看文件

@@ -6,9 +6,9 @@ from __future__ import unicode_literals
import frappe

def execute():
frappe.db.sql("""update `tabWebsite Route` ws set ref_doctype=(select wsc.ref_doctype
from `tabWebsite Template` wsc where wsc.name=ws.website_template)
where ifnull(page_or_generator, '')!='Page'""")
# frappe.db.sql("""update `tabWebsite Route` ws set ref_doctype=(select wsc.ref_doctype
# from `tabWebsite Template` wsc where wsc.name=ws.website_template)
# where ifnull(page_or_generator, '')!='Page'""")

frappe.reload_doc("website", "doctype", "website_settings")



+ 0
- 1
frappe/website/doctype/website_route/website_route.py 查看文件

@@ -14,7 +14,6 @@ class WebsiteRoute(NestedSet):

def autoname(self):
self.name = self.get_url()
print self.name

def get_url(self):
url = self.page_name


+ 0
- 0
frappe/website/doctype/website_template/__init__.py 查看文件


+ 0
- 130
frappe/website/doctype/website_template/website_template.json 查看文件

@@ -1,130 +0,0 @@
{
"autoname": "field:link_name",
"creation": "2013-11-18 15:35:00.000000",
"docstatus": 0,
"doctype": "DocType",
"document_type": "System",
"fields": [
{
"fieldname": "page_or_generator",
"fieldtype": "Select",
"label": "Page or Generator",
"options": "Page\nGenerator",
"permlevel": 0,
"read_only": 1
},
{
"fieldname": "ref_doctype",
"fieldtype": "Link",
"label": "Ref DocType",
"options": "DocType",
"permlevel": 0,
"read_only": 1
},
{
"fieldname": "link_name",
"fieldtype": "Data",
"label": "Link Name",
"permlevel": 0,
"read_only": 1
},
{
"fieldname": "page_title",
"fieldtype": "Data",
"label": "Page Title",
"permlevel": 0
},
{
"fieldname": "base_template_path",
"fieldtype": "Data",
"label": "Base Template Path",
"permlevel": 0,
"read_only": 1
},
{
"fieldname": "template_path",
"fieldtype": "Data",
"label": "Template Path",
"permlevel": 0,
"read_only": 1
},
{
"fieldname": "controller",
"fieldtype": "Data",
"label": "Controller",
"permlevel": 0,
"read_only": 1
},
{
"fieldname": "lastmod",
"fieldtype": "Data",
"label": "Lastmod",
"permlevel": 0
},
{
"fieldname": "no_cache",
"fieldtype": "Check",
"label": "No Cache",
"permlevel": 0,
"read_only": 1
},
{
"fieldname": "no_sitemap",
"fieldtype": "Check",
"label": "No Sitemap",
"permlevel": 0,
"read_only": 1
},
{
"fieldname": "no_sidebar",
"fieldtype": "Check",
"label": "No Sidebar",
"permlevel": 0
},
{
"fieldname": "page_name_field",
"fieldtype": "Data",
"label": "Page Name Field",
"permlevel": 0,
"read_only": 1
},
{
"fieldname": "condition_field",
"fieldtype": "Data",
"label": "Condition Field",
"permlevel": 0,
"read_only": 1
},
{
"fieldname": "sort_by",
"fieldtype": "Data",
"label": "Sort By",
"permlevel": 0
},
{
"fieldname": "sort_order",
"fieldtype": "Data",
"label": "Sort Order",
"permlevel": 0
}
],
"idx": 1,
"modified": "2014-02-24 12:47:44.000000",
"modified_by": "Administrator",
"module": "Website",
"name": "Website Template",
"owner": "Administrator",
"permissions": [
{
"cancel": 0,
"create": 0,
"delete": 1,
"export": 0,
"permlevel": 0,
"read": 1,
"report": 1,
"role": "System Manager",
"write": 0
}
]
}

+ 0
- 141
frappe/website/doctype/website_template/website_template.py 查看文件

@@ -1,141 +0,0 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt

# For license information, please see license.txt

from __future__ import unicode_literals
import frappe
import frappe.utils
import os
from frappe import _
from frappe.website.doctype.website_route.website_route import add_to_sitemap, update_sitemap, cleanup_sitemap
from frappe.utils.nestedset import rebuild_tree

from frappe.model.document import Document

class WebsiteTemplate(Document):
def after_insert(self):
if self.page_or_generator == "Page":
website_route = frappe.db.get_value("Website Route",
{"website_template": self.name, "page_or_generator": "Page"})

opts = self.as_dict()
opts.update({"public_read": 1})

if website_route:
update_sitemap(website_route, opts)
else:
add_to_sitemap(opts)

else:
condition = ""
if self.condition_field:
condition = " where ifnull(%s, 0)=1" % self.condition_field

for name in frappe.db.sql_list("""select name from `tab{doctype}`
{condition} order by idx asc, {sort_field} {sort_order}""".format(
doctype = self.ref_doctype,
condition = condition,
sort_field = getattr(self, "sort_field", "name"),
sort_order = getattr(self, "sort_order", "asc")
)):
doc = frappe.get_doc(self.ref_doctype, name)

# regenerate route
doc.run_method("on_update")

def rebuild_website_template():
# TODO
frappe.flags.in_rebuild_config = True

frappe.db.sql("""delete from `tabWebsite Template`""")
for app in frappe.get_installed_apps():
if app=="webnotes": app="frappe"
build_website_template(app)

cleanup_sitemap()

frappe.flags.in_rebuild_config = False

# enable nested set and rebuild
rebuild_tree("Website Route", "parent_website_route")

frappe.db.commit()


def build_website_template(app):
config = {"pages": {}, "generators":{}}

pages, generators = get_pages_and_generators(app)

for args in pages:
add_website_template(**args)

for args in generators:
add_website_template(**args)

frappe.db.commit()

def get_pages_and_generators(app):
pages = []
generators = []
app_path = frappe.get_app_path(app)

for config_type in ("pages", "generators"):
path = os.path.join(app_path, "templates", config_type)
if os.path.exists(path):
for fname in os.listdir(path):
fname = frappe.utils.cstr(fname)
if fname.split(".")[-1] in ("html", "xml", "js", "css"):
if config_type=="pages":
pages.append({"page_or_generator": "Page", "app": app, "path": path,
"fname":fname, "app_path":app_path})
else:
generators.append({"page_or_generator": "Generator", "app": app, "path": path,
"fname":fname, "app_path":app_path})

return pages, generators

def add_website_template(page_or_generator, app, path, fname, app_path):
name = fname[:-5] if fname.endswith(".html") else fname

wsc = frappe._dict({
"doctype": "Website Template",
"page_or_generator": page_or_generator,
"link_name": name,
"template_path": os.path.relpath(os.path.join(path, fname), app_path),
})

wsc.controller = get_template_controller(app, path, fname)

if wsc.controller:
# verbose print wsc.controller
module = frappe.get_module(wsc.controller)
wsc.no_cache = getattr(module, "no_cache", 0)
wsc.no_sitemap = wsc.no_cache or getattr(module, "no_sitemap", 0)
wsc.no_sidebar = wsc.no_sidebar or getattr(module, "no_sidebar", 0)
wsc.ref_doctype = getattr(module, "doctype", None)
wsc.page_name_field = getattr(module, "page_name_field", "page_name")
wsc.condition_field = getattr(module, "condition_field", None)
wsc.sort_by = getattr(module, "sort_by", "name")
wsc.sort_order = getattr(module, "sort_order", "asc")
wsc.base_template_path = getattr(module, "base_template_path", None)
wsc.page_title = getattr(module, "page_title", _(name.title()))

if frappe.db.exists("Website Template", wsc.link_name):
# found by earlier app, override
frappe.db.sql("""delete from `tabWebsite Template` where name=%s""", (wsc.link_name,))

frappe.get_doc(wsc).insert()

return name

def get_template_controller(app, path, fname):
controller = None
controller_name = fname.split(".")[0].replace("-", "_") + ".py"
controller_path = os.path.join(path, controller_name)
if os.path.exists(controller_path):
controller = app + "." + os.path.relpath(controller_path[:-3], frappe.get_app_path(app)).replace(os.path.sep, ".")

return controller


+ 10
- 92
frappe/website/page/sitemap_browser/sitemap_browser.js 查看文件

@@ -1,24 +1,23 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// MIT License. See license.txt"

frappe.pages['sitemap-browser'].onload = function(wrapper) {
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() {
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 to expand get options ') +
__('Add') + ' / ' + __('Edit') + ' / '+ __('Remove') + '.</div>')
.html('<div class="text-muted">'+
__('Click on a link to get options') + '</div>')

frappe.website.sitemap = new frappe.website.SitemapBrowser(
frappe.website.sitemap = new frappe.website.SitemapBrowser(
$(wrapper)
.find(".layout-main-section")
.css({
@@ -34,31 +33,13 @@ frappe.website.SitemapBrowser = Class.extend({
$(parent).empty();
var me = this;
this.tree = new frappe.ui.Tree({
parent: $(parent),
parent: $(parent),
label: "Sitemap",
method: 'frappe.website.page.sitemap_browser.sitemap_browser.get_children',
toolbar: [
{
toggle_btn: true,
},
{
label: __("Update Parent"),
click: function(node, btn) {
me.update_parent();
}
},
{
label: __("Up"),
click: function(node, btn) {
me.up_or_down("up");
}
},
{
label: __("Down"),
click: function(node, btn) {
me.up_or_down("down");
}
},
{
label: __("Open"),
click: function(node, btn) {
@@ -66,7 +47,7 @@ frappe.website.SitemapBrowser = Class.extend({
}
}
]
// 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) {
@@ -78,7 +59,7 @@ frappe.website.SitemapBrowser = Class.extend({
});
this.tree.rootnode.$a
.data('node-data', {value: "Sitemap", expandable:1})
.click();
.click();
},
selected_node: function() {
return this.tree.$w.find('.tree-link.selected');
@@ -87,67 +68,4 @@ frappe.website.SitemapBrowser = Class.extend({
var node = this.selected_node();
frappe.set_route("Form", "Website Route", node.data("label"));
},
up_or_down: function(up_or_down) {
var node = this.tree.get_selected_node();
frappe.call({
method: "frappe.website.page.sitemap_browser.sitemap_browser.move",
args: {
"name": node.label,
"up_or_down": up_or_down
},
callback: function(r) {
if(r.message==="ok") {
node.parent.insertBefore(up_or_down==="up" ?
node.parent.prev() : node.parent.next().next());
//(node.parent_node || node).reload();
}
}
});
},
update_parent: function() {
var me = this;
if(!this.move_dialog) {
this.move_dialog = new frappe.ui.Dialog({
title: __("Move"),
fields: [
{
fieldtype: "Link",
fieldname: "new_parent",
label: "New Parent",
reqd: 1,
options: "Website Route"
},
{
fieldtype: "Button",
fieldname: "update",
label: "Update",
}
]
});
this.move_dialog.get_input("update").on("click", function() {
var node = me.tree.get_selected_node();
var values = me.move_dialog.get_values();
if(!values) return;
me._update_parent(node.label, values.new_parent, function(r) {
me.move_dialog.hide();
(node.parent_node || node).reload();
})
});
}
this.move_dialog.show();
this.move_dialog.get_input("new_parent").val("");
},
_update_parent: function(name, parent, callback) {
frappe.call({
method: "frappe.website.page.sitemap_browser.sitemap_browser.update_parent",
args: {
"name": name,
"new_parent": parent
},
callback: function(r) {
callback(r);
}
});
}
});
});

Loading…
取消
儲存