@@ -230,7 +230,7 @@ def setup_utilities(parser): | |||||
# clear | # clear | ||||
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_sitemap", default=False, action="store_true", | |||||
parser.add_argument("--build_website", default=False, action="store_true", | |||||
help="Build Website Route") | help="Build Website Route") | ||||
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") | ||||
@@ -352,7 +352,7 @@ def add_to_installed_apps(*apps): | |||||
all_apps = frappe.get_all_apps(with_frappe=True) | all_apps = frappe.get_all_apps(with_frappe=True) | ||||
for each in apps: | for each in apps: | ||||
if each in all_apps: | if each in all_apps: | ||||
add_to_installed_apps(each, rebuild_sitemap=False) | |||||
add_to_installed_apps(each, rebuild_website=False) | |||||
frappe.destroy() | frappe.destroy() | ||||
@cmd | @cmd | ||||
@@ -402,10 +402,9 @@ def update(remote=None, branch=None, reload_gunicorn=False): | |||||
subprocess.check_output("killall -HUP gunicorn".split()) | subprocess.check_output("killall -HUP gunicorn".split()) | ||||
@cmd | @cmd | ||||
def latest(rebuild_website_config=True, quiet=False): | |||||
def latest(rebuild_website=True, quiet=False): | |||||
import frappe.modules.patch_handler | import frappe.modules.patch_handler | ||||
import frappe.model.sync | import frappe.model.sync | ||||
from frappe.website import rebuild_config | |||||
from frappe.utils.fixtures import sync_fixtures | from frappe.utils.fixtures import sync_fixtures | ||||
import frappe.translate | import frappe.translate | ||||
from frappe.website import statics | from frappe.website import statics | ||||
@@ -425,8 +424,8 @@ def latest(rebuild_website_config=True, quiet=False): | |||||
sync.start() | sync.start() | ||||
sync.start(rebuild=True) | sync.start(rebuild=True) | ||||
# build website config if any changes in templates etc. | # build website config if any changes in templates etc. | ||||
if rebuild_website_config: | |||||
rebuild_config() | |||||
if rebuild_website: | |||||
build_website() | |||||
frappe.translate.clear_cache() | frappe.translate.clear_cache() | ||||
@@ -561,10 +560,10 @@ def clear_all_sessions(): | |||||
frappe.destroy() | frappe.destroy() | ||||
@cmd | @cmd | ||||
def build_sitemap(): | |||||
from frappe.website import rebuild_config | |||||
def build_website(): | |||||
import frappe.website.sync | |||||
frappe.connect() | frappe.connect() | ||||
rebuild_config() | |||||
frappe.website.sync.sync() | |||||
frappe.destroy() | frappe.destroy() | ||||
@cmd | @cmd | ||||
@@ -120,16 +120,16 @@ def install_app(name, verbose=False, set_as_patched=True): | |||||
frappe.flags.in_install_app = False | 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() | installed_apps = frappe.get_installed_apps() | ||||
if not app_name in installed_apps: | if not app_name in installed_apps: | ||||
installed_apps.append(app_name) | installed_apps.append(app_name) | ||||
frappe.db.set_global("installed_apps", json.dumps(installed_apps)) | frappe.db.set_global("installed_apps", json.dumps(installed_apps)) | ||||
frappe.db.commit() | 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() | frappe.clear_cache() | ||||
@@ -41,3 +41,5 @@ frappe.patches.v4_0.fix_attach_field_file_url | |||||
execute:frappe.reset_perms("User") #2014-06-13 | execute:frappe.reset_perms("User") #2014-06-13 | ||||
execute:frappe.db.sql("""delete from `tabUserRole` where ifnull(parentfield, '')=''""") #2014-06-17 | execute:frappe.db.sql("""delete from `tabUserRole` where ifnull(parentfield, '')=''""") #2014-06-17 | ||||
frappe.patches.v4_0.remove_user_owner_custom_field | 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 |
@@ -17,11 +17,11 @@ def execute(): | |||||
frappe.reload_doc("website", "doctype", frappe.scrub(d)) | frappe.reload_doc("website", "doctype", frappe.scrub(d)) | ||||
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_route", "website_group", "post", "user_vote"): | ||||
@@ -1,23 +1,24 @@ | |||||
import frappe | import frappe | ||||
def execute(): | 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() |
@@ -6,9 +6,9 @@ from __future__ import unicode_literals | |||||
import frappe | import frappe | ||||
def execute(): | 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") | frappe.reload_doc("website", "doctype", "website_settings") | ||||
@@ -14,7 +14,6 @@ class WebsiteRoute(NestedSet): | |||||
def autoname(self): | def autoname(self): | ||||
self.name = self.get_url() | self.name = self.get_url() | ||||
print self.name | |||||
def get_url(self): | def get_url(self): | ||||
url = self.page_name | url = self.page_name | ||||
@@ -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 | |||||
} | |||||
] | |||||
} |
@@ -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 | |||||
@@ -1,24 +1,23 @@ | |||||
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors | // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors | ||||
// MIT License. See license.txt" | // MIT License. See license.txt" | ||||
frappe.pages['sitemap-browser'].onload = function(wrapper) { | |||||
frappe.pages['sitemap-browser'].onload = function(wrapper) { | |||||
frappe.ui.make_app_page({ | frappe.ui.make_app_page({ | ||||
parent: wrapper, | parent: wrapper, | ||||
title: 'Sitemap Browser', | title: 'Sitemap Browser', | ||||
}); | |||||
}); | |||||
wrapper.appframe.add_module_icon("Website") | 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(); | frappe.website.sitemap.tree.rootnode.reload(); | ||||
}); | }); | ||||
$(wrapper) | $(wrapper) | ||||
.find(".layout-side-section") | .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) | $(wrapper) | ||||
.find(".layout-main-section") | .find(".layout-main-section") | ||||
.css({ | .css({ | ||||
@@ -34,31 +33,13 @@ frappe.website.SitemapBrowser = Class.extend({ | |||||
$(parent).empty(); | $(parent).empty(); | ||||
var me = this; | var me = this; | ||||
this.tree = new frappe.ui.Tree({ | this.tree = new frappe.ui.Tree({ | ||||
parent: $(parent), | |||||
parent: $(parent), | |||||
label: "Sitemap", | label: "Sitemap", | ||||
method: 'frappe.website.page.sitemap_browser.sitemap_browser.get_children', | method: 'frappe.website.page.sitemap_browser.sitemap_browser.get_children', | ||||
toolbar: [ | toolbar: [ | ||||
{ | { | ||||
toggle_btn: true, | 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"), | label: __("Open"), | ||||
click: function(node, btn) { | click: function(node, btn) { | ||||
@@ -66,7 +47,7 @@ frappe.website.SitemapBrowser = Class.extend({ | |||||
} | } | ||||
} | } | ||||
] | ] | ||||
// drop: function(dragged_node, dropped_node, dragged_element, dropped_element) { | // drop: function(dragged_node, dropped_node, dragged_element, dropped_element) { | ||||
// frappe.website.sitemap.update_parent(dragged_node.label, dropped_node.label, function(r) { | // frappe.website.sitemap.update_parent(dragged_node.label, dropped_node.label, function(r) { | ||||
// if(!r.exc) { | // if(!r.exc) { | ||||
@@ -78,7 +59,7 @@ frappe.website.SitemapBrowser = Class.extend({ | |||||
}); | }); | ||||
this.tree.rootnode.$a | this.tree.rootnode.$a | ||||
.data('node-data', {value: "Sitemap", expandable:1}) | .data('node-data', {value: "Sitemap", expandable:1}) | ||||
.click(); | |||||
.click(); | |||||
}, | }, | ||||
selected_node: function() { | selected_node: function() { | ||||
return this.tree.$w.find('.tree-link.selected'); | return this.tree.$w.find('.tree-link.selected'); | ||||
@@ -87,67 +68,4 @@ frappe.website.SitemapBrowser = Class.extend({ | |||||
var node = this.selected_node(); | var node = this.selected_node(); | ||||
frappe.set_route("Form", "Website Route", node.data("label")); | 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); | |||||
} | |||||
}); | |||||
} | |||||
}); | |||||
}); |