From c49f517e96efe0aaeacda8b6220ed120d2cbfd3a Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 17 Jun 2014 14:46:15 +0530 Subject: [PATCH] added patches for build_website and removed website template frappe/frappe#600 --- frappe/cli.py | 17 +-- frappe/installer.py | 8 +- frappe/patches.txt | 2 + .../patches/v4_0/rename_sitemap_to_route.py | 4 +- frappe/patches/v4_0/set_website_route_idx.py | 41 ++--- .../patches/v4_0/website_sitemap_hierarchy.py | 6 +- .../doctype/website_route/website_route.py | 1 - .../doctype/website_template/__init__.py | 0 .../website_template/website_template.json | 130 ---------------- .../website_template/website_template.py | 141 ------------------ .../page/sitemap_browser/sitemap_browser.js | 102 ++----------- 11 files changed, 50 insertions(+), 402 deletions(-) delete mode 100644 frappe/website/doctype/website_template/__init__.py delete mode 100644 frappe/website/doctype/website_template/website_template.json delete mode 100644 frappe/website/doctype/website_template/website_template.py diff --git a/frappe/cli.py b/frappe/cli.py index 8270d43498..2a02d5a616 100755 --- a/frappe/cli.py +++ b/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 diff --git a/frappe/installer.py b/frappe/installer.py index 7e94db953e..70b46521ed 100755 --- a/frappe/installer.py +++ b/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() diff --git a/frappe/patches.txt b/frappe/patches.txt index 5387aafbc2..201feac005 100644 --- a/frappe/patches.txt +++ b/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 diff --git a/frappe/patches/v4_0/rename_sitemap_to_route.py b/frappe/patches/v4_0/rename_sitemap_to_route.py index 2ef8de6486..a0922874ee 100644 --- a/frappe/patches/v4_0/rename_sitemap_to_route.py +++ b/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"): diff --git a/frappe/patches/v4_0/set_website_route_idx.py b/frappe/patches/v4_0/set_website_route_idx.py index eb5fc1ebd6..82f64756a4 100644 --- a/frappe/patches/v4_0/set_website_route_idx.py +++ b/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() \ No newline at end of file + 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() diff --git a/frappe/patches/v4_0/website_sitemap_hierarchy.py b/frappe/patches/v4_0/website_sitemap_hierarchy.py index 800a14f4e7..2ac591e415 100644 --- a/frappe/patches/v4_0/website_sitemap_hierarchy.py +++ b/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") diff --git a/frappe/website/doctype/website_route/website_route.py b/frappe/website/doctype/website_route/website_route.py index 1b59621189..60237772b9 100644 --- a/frappe/website/doctype/website_route/website_route.py +++ b/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 diff --git a/frappe/website/doctype/website_template/__init__.py b/frappe/website/doctype/website_template/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/frappe/website/doctype/website_template/website_template.json b/frappe/website/doctype/website_template/website_template.json deleted file mode 100644 index 5461131bc1..0000000000 --- a/frappe/website/doctype/website_template/website_template.json +++ /dev/null @@ -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 - } - ] -} \ No newline at end of file diff --git a/frappe/website/doctype/website_template/website_template.py b/frappe/website/doctype/website_template/website_template.py deleted file mode 100644 index c21163a121..0000000000 --- a/frappe/website/doctype/website_template/website_template.py +++ /dev/null @@ -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 - diff --git a/frappe/website/page/sitemap_browser/sitemap_browser.js b/frappe/website/page/sitemap_browser/sitemap_browser.js index 392853e341..94f6c79d1e 100644 --- a/frappe/website/page/sitemap_browser/sitemap_browser.js +++ b/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('
'+ - __('Click on a link to get options to expand get options ') + - __('Add') + ' / ' + __('Edit') + ' / '+ __('Remove') + '.
') + .html('
'+ + __('Click on a link to get options') + '
') - 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); - } - }); - - } -}); \ No newline at end of file +});