@@ -27,6 +27,7 @@ class User(Document): | |||||
self.add_system_manager_role() | self.add_system_manager_role() | ||||
self.check_enable_disable() | self.check_enable_disable() | ||||
self.update_gravatar() | self.update_gravatar() | ||||
self.ensure_unique_roles() | |||||
self.remove_all_roles_for_guest() | self.remove_all_roles_for_guest() | ||||
if self.language == "Loading...": | if self.language == "Loading...": | ||||
self.language = None | self.language = None | ||||
@@ -255,6 +256,14 @@ class User(Document): | |||||
if self.name == "Guest": | if self.name == "Guest": | ||||
self.set("user_roles", list(set(d for d in self.get("user_roles") if d.role == "Guest"))) | self.set("user_roles", list(set(d for d in self.get("user_roles") if d.role == "Guest"))) | ||||
def ensure_unique_roles(self): | |||||
exists = [] | |||||
for i, d in enumerate(self.get("user_roles")): | |||||
if (not d.role) or (d.role in exists): | |||||
self.get("user_roles").remove(d) | |||||
else: | |||||
exists.append(d.role) | |||||
@frappe.whitelist() | @frappe.whitelist() | ||||
def get_languages(): | def get_languages(): | ||||
from frappe.translate import get_lang_dict | from frappe.translate import get_lang_dict | ||||
@@ -1,7 +1,7 @@ | |||||
{ | { | ||||
"allow_copy": 0, | "allow_copy": 0, | ||||
"autoname": "UR.#####", | "autoname": "UR.#####", | ||||
"creation": "2013-02-06 11:30:13.000000", | |||||
"creation": "2013-02-06 11:30:13", | |||||
"docstatus": 0, | "docstatus": 0, | ||||
"doctype": "DocType", | "doctype": "DocType", | ||||
"fields": [ | "fields": [ | ||||
@@ -16,7 +16,7 @@ | |||||
"options": "Role", | "options": "Role", | ||||
"permlevel": 0, | "permlevel": 0, | ||||
"print_width": "200px", | "print_width": "200px", | ||||
"reqd": 0, | |||||
"reqd": 1, | |||||
"search_index": 0, | "search_index": 0, | ||||
"width": "200px" | "width": "200px" | ||||
} | } | ||||
@@ -26,10 +26,11 @@ | |||||
"idx": 1, | "idx": 1, | ||||
"issingle": 0, | "issingle": 0, | ||||
"istable": 1, | "istable": 1, | ||||
"modified": "2013-12-20 19:21:54.000000", | |||||
"modified": "2014-06-17 06:56:28.816283", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Core", | "module": "Core", | ||||
"name": "UserRole", | "name": "UserRole", | ||||
"owner": "Administrator", | "owner": "Administrator", | ||||
"permissions": [], | |||||
"read_only": 0 | "read_only": 0 | ||||
} | } |
@@ -172,8 +172,12 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False, | |||||
overwrite = params.get('overwrite') | overwrite = params.get('overwrite') | ||||
# delete child rows (if parenttype) | # delete child rows (if parenttype) | ||||
if parenttype and overwrite: | |||||
delete_child_rows(data, doctype) | |||||
parentfield = None | |||||
if parenttype: | |||||
parentfield = get_parent_field(doctype, parenttype) | |||||
if overwrite: | |||||
delete_child_rows(data, doctype) | |||||
ret = [] | ret = [] | ||||
error = False | error = False | ||||
@@ -188,13 +192,12 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False, | |||||
doc = get_doc(row_idx) | doc = get_doc(row_idx) | ||||
try: | try: | ||||
frappe.local.message_log = [] | frappe.local.message_log = [] | ||||
if doc.get("parentfield"): | |||||
parent = frappe.get_doc(doc["parenttype"], doc["parentfield"]) | |||||
parent.append(doc) | |||||
if parentfield: | |||||
parent = frappe.get_doc(parenttype, doc["parent"]) | |||||
doc = parent.append(parentfield, doc) | |||||
parent.save() | parent.save() | ||||
ret.append('Inserted row for %s at #%s' % (getlink(parenttype, | ret.append('Inserted row for %s at #%s' % (getlink(parenttype, | ||||
doc.parent), unicode(doc.idx))) | doc.parent), unicode(doc.idx))) | ||||
else: | else: | ||||
if overwrite and frappe.db.exists(doctype, doc["name"]): | if overwrite and frappe.db.exists(doctype, doc["name"]): | ||||
original = frappe.get_doc(doctype, doc["name"]) | original = frappe.get_doc(doctype, doc["name"]) | ||||
@@ -46,6 +46,32 @@ class TestDataImport(unittest.TestCase): | |||||
importer.upload(content, overwrite=True) | importer.upload(content, overwrite=True) | ||||
self.assertTrue(frappe.db.get_value("Blog Category", "test-category", "title"), "New Title") | self.assertTrue(frappe.db.get_value("Blog Category", "test-category", "title"), "New Title") | ||||
def test_import_only_children(self): | |||||
user_email = "test_import_userrole@example.com" | |||||
if frappe.db.exists("User", user_email): | |||||
frappe.delete_doc("User", user_email) | |||||
frappe.get_doc({"doctype": "User", "email": user_email, "first_name": "Test Import UserRole"}).insert() | |||||
exporter.get_template("UserRole", "User", all_doctypes="No", with_data="No") | |||||
content = read_csv_content(frappe.response.result) | |||||
content.append(["", "test_import_userrole@example.com", "Blogger"]) | |||||
importer.upload(content) | |||||
user = frappe.get_doc("User", user_email) | |||||
self.assertEquals(len(user.get("user_roles")), 1) | |||||
self.assertTrue(user.get("user_roles")[0].role, "Blogger") | |||||
# overwrite | |||||
exporter.get_template("UserRole", "User", all_doctypes="No", with_data="No") | |||||
content = read_csv_content(frappe.response.result) | |||||
content.append(["", "test_import_userrole@example.com", "Website Manager"]) | |||||
importer.upload(content, overwrite=True) | |||||
user = frappe.get_doc("User", user_email) | |||||
self.assertEquals(len(user.get("user_roles")), 1) | |||||
self.assertTrue(user.get("user_roles")[0].role, "Website Manager") | |||||
def test_import_with_children(self): | def test_import_with_children(self): | ||||
exporter.get_template("Event", all_doctypes="Yes", with_data="No") | exporter.get_template("Event", all_doctypes="Yes", with_data="No") | ||||
content = read_csv_content(frappe.response.result) | content = read_csv_content(frappe.response.result) | ||||