@@ -2,7 +2,7 @@ | |||
[](https://travis-ci.org/frappe/frappe) | |||
Full-stack web application framework that uses Python and MariaDB on the server side and a tightly integrated client side library. [Built for ERPNext](https://erpnext.com) | |||
Full-stack web application framework that uses Python and MariaDB on the server side and a tightly integrated client side library. Built for [ERPNext](https://erpnext.com) | |||
### Installation | |||
@@ -13,7 +13,7 @@ import os, sys, importlib, inspect, json | |||
from .exceptions import * | |||
from .utils.jinja import get_jenv, get_template, render_template | |||
__version__ = '7.2.15' | |||
__version__ = '7.2.19' | |||
__title__ = "Frappe Framework" | |||
local = Local() | |||
@@ -1039,7 +1039,7 @@ def respond_as_web_page(title, html, success=None, http_status_code=None, | |||
local.response['context'] = context | |||
def redirect_to_message(title, html, http_status_code=None, context=None): | |||
def redirect_to_message(title, html, http_status_code=None, context=None, indicator=None): | |||
"""Redirects to /message?id=random | |||
Similar to respond_as_web_page, but used to 'redirect' and show message pages like success, failure, etc. with a detailed message | |||
@@ -1063,6 +1063,11 @@ def redirect_to_message(title, html, http_status_code=None, context=None): | |||
'message': html | |||
}) | |||
if indicator: | |||
message['context'].update({ | |||
"indicator_color": indicator | |||
}) | |||
cache().set_value("message_id:{0}".format(message_id), message, expires_in_sec=60) | |||
location = '/message?id={0}'.format(message_id) | |||
@@ -49,6 +49,7 @@ def _new_site(db_name, site, mariadb_root_username=None, mariadb_root_password=N | |||
make_site_dirs() | |||
installing = None | |||
try: | |||
installing = touch_file(get_site_path('locks', 'installing.lock')) | |||
@@ -66,7 +67,7 @@ def _new_site(db_name, site, mariadb_root_username=None, mariadb_root_password=N | |||
print "*** Scheduler is", scheduler_status, "***" | |||
finally: | |||
if os.path.exists(installing): | |||
if installing and os.path.exists(installing): | |||
os.remove(installing) | |||
frappe.destroy() | |||
@@ -408,7 +408,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Communication Type", | |||
@@ -1379,7 +1379,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2017-02-14 22:48:12.845649", | |||
"modified": "2017-02-21 04:57:33.141998", | |||
"modified_by": "Administrator", | |||
"module": "Core", | |||
"name": "Communication", | |||
@@ -1455,7 +1455,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2017-02-13 12:09:33.488890", | |||
"modified": "2017-02-17 16:41:27.613879", | |||
"modified_by": "Administrator", | |||
"module": "Core", | |||
"name": "DocType", | |||
@@ -145,7 +145,7 @@ class DocType(Document): | |||
def scrub_field_names(self): | |||
"""Sluggify fieldnames if not set from Label.""" | |||
restricted = ('name','parent','creation','modified','modified_by', | |||
'parentfield','parenttype',"file_list") | |||
'parentfield','parenttype','file_list', 'flags', 'docstatus') | |||
for d in self.get("fields"): | |||
if d.fieldtype: | |||
if (not getattr(d, "fieldname", None)): | |||
@@ -225,7 +225,7 @@ class DocType(Document): | |||
if set(global_search_fields_before_update) != set(global_search_fields_after_update): | |||
frappe.enqueue('frappe.utils.global_search.rebuild_for_doctype', | |||
now=frappe.flags.in_test, doctype=self.name) | |||
now=frappe.flags.in_test or frappe.flags.in_install, doctype=self.name) | |||
def run_module_method(self, method): | |||
from frappe.modules import load_doctype_module | |||
@@ -526,6 +526,7 @@ def validate_fields(meta): | |||
fieldname_list = [d.fieldname for d in fields] | |||
not_allowed_in_list_view = list(copy.copy(no_value_fields)) | |||
not_allowed_in_list_view.append("Attach Image") | |||
if meta.istable: | |||
not_allowed_in_list_view.remove('Button') | |||
@@ -21,6 +21,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "File Name", | |||
@@ -51,6 +52,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Is Private", | |||
@@ -79,6 +81,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Preview", | |||
@@ -107,6 +110,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Preview HTML", | |||
@@ -135,6 +139,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -163,6 +168,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Is Home Folder", | |||
@@ -191,6 +197,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Is Attachments Folder", | |||
@@ -219,6 +226,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "File Size", | |||
@@ -246,6 +254,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -274,6 +283,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "File URL", | |||
@@ -301,6 +311,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Thumbnail URL", | |||
@@ -329,6 +340,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 1, | |||
"label": "Folder", | |||
@@ -358,6 +370,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Is Folder", | |||
@@ -387,6 +400,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -414,6 +428,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 1, | |||
"label": "Attached To DocType", | |||
@@ -442,6 +457,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -469,6 +485,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Attached To Name", | |||
@@ -496,6 +513,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Content Hash", | |||
@@ -523,6 +541,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "lft", | |||
@@ -551,6 +570,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "rgt", | |||
@@ -579,6 +599,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "old_parent", | |||
@@ -609,7 +630,7 @@ | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"menu_index": 0, | |||
"modified": "2016-12-29 14:40:12.519235", | |||
"modified": "2017-02-17 16:42:36.092962", | |||
"modified_by": "Administrator", | |||
"module": "Core", | |||
"name": "File", | |||
@@ -625,7 +646,6 @@ | |||
"export": 1, | |||
"if_owner": 0, | |||
"import": 1, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -646,7 +666,6 @@ | |||
"export": 1, | |||
"if_owner": 1, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -661,6 +680,7 @@ | |||
"quick_entry": 0, | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"show_name_in_global_search": 0, | |||
"sort_order": "ASC", | |||
"title_field": "file_name", | |||
"track_changes": 1, | |||
@@ -22,6 +22,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "Module Name", | |||
@@ -51,6 +52,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 1, | |||
"label": "App Name", | |||
@@ -79,7 +81,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2016-12-29 14:40:10.236430", | |||
"modified": "2017-02-17 16:41:14.342061", | |||
"modified_by": "Administrator", | |||
"module": "Core", | |||
"name": "Module Def", | |||
@@ -95,7 +97,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -116,7 +117,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 0, | |||
"read": 1, | |||
@@ -131,6 +131,8 @@ | |||
"quick_entry": 1, | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"show_name_in_global_search": 1, | |||
"sort_order": "ASC", | |||
"track_changes": 1, | |||
"track_seen": 0 | |||
} |
@@ -23,6 +23,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Report Name", | |||
@@ -50,6 +51,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 1, | |||
"label": "Ref DocType", | |||
@@ -78,6 +80,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 1, | |||
"label": "Is Standard", | |||
@@ -106,6 +109,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Module", | |||
@@ -134,6 +138,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Add Total Row", | |||
@@ -161,6 +166,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -187,6 +193,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Report Type", | |||
@@ -215,6 +222,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Disabled", | |||
@@ -244,6 +252,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Apply User Permissions", | |||
@@ -272,6 +281,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Letter Head", | |||
@@ -301,6 +311,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -328,6 +339,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Query", | |||
@@ -357,6 +369,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Javascript", | |||
@@ -385,6 +398,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "JSON", | |||
@@ -413,7 +427,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2016-12-29 14:39:48.337818", | |||
"modified": "2017-02-17 16:41:40.315658", | |||
"modified_by": "Administrator", | |||
"module": "Core", | |||
"name": "Report", | |||
@@ -429,7 +443,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -450,7 +463,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -471,7 +483,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -492,7 +503,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -507,6 +517,7 @@ | |||
"quick_entry": 0, | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"show_name_in_global_search": 1, | |||
"sort_field": "modified", | |||
"sort_order": "DESC", | |||
"track_changes": 1, | |||
@@ -23,6 +23,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "", | |||
@@ -51,6 +52,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Enabled", | |||
@@ -81,6 +83,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -108,6 +111,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Email", | |||
@@ -138,6 +142,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "First Name", | |||
@@ -167,6 +172,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Middle Name (Optional)", | |||
@@ -196,6 +202,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Last Name", | |||
@@ -225,6 +232,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Full Name", | |||
@@ -255,6 +263,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Send Welcome Email", | |||
@@ -283,6 +292,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Unsubscribed", | |||
@@ -310,6 +320,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -339,6 +350,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Username", | |||
@@ -368,6 +380,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Language", | |||
@@ -397,6 +410,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Timezone", | |||
@@ -425,6 +439,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "User Image", | |||
@@ -453,6 +468,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "More Information", | |||
@@ -480,6 +496,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Gender", | |||
@@ -510,6 +527,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Phone", | |||
@@ -538,6 +556,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Birth Date", | |||
@@ -567,6 +586,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Location", | |||
@@ -594,6 +614,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -620,6 +641,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Bio", | |||
@@ -647,6 +669,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Mute Sounds", | |||
@@ -676,6 +699,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Change Password", | |||
@@ -703,6 +727,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Set New Password", | |||
@@ -731,6 +756,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Send Password Update Notification", | |||
@@ -759,6 +785,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Reset Password Key", | |||
@@ -786,6 +813,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Redirect URL", | |||
@@ -815,6 +843,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Email Settings", | |||
@@ -844,6 +873,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Send Notifications for Transactions I Follow", | |||
@@ -872,6 +902,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Email Signature", | |||
@@ -899,6 +930,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Email Inbox", | |||
@@ -928,6 +960,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "User Emails", | |||
@@ -958,6 +991,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Desktop Background", | |||
@@ -986,6 +1020,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Background Image", | |||
@@ -1014,6 +1049,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Background Style", | |||
@@ -1045,6 +1081,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Roles", | |||
@@ -1072,6 +1109,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Roles HTML", | |||
@@ -1099,6 +1137,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Roles Assigned", | |||
@@ -1129,6 +1168,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Modules Access", | |||
@@ -1157,6 +1197,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Modules HTML", | |||
@@ -1185,6 +1226,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Block Modules", | |||
@@ -1215,6 +1257,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Defaults", | |||
@@ -1246,6 +1289,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "User Defaults", | |||
@@ -1275,6 +1319,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Security Settings", | |||
@@ -1304,6 +1349,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Simultaneous Sessions", | |||
@@ -1334,6 +1380,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 1, | |||
"label": "User Type", | |||
@@ -1365,6 +1412,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Login After", | |||
@@ -1393,6 +1441,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Login Before", | |||
@@ -1421,6 +1470,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Restrict IP", | |||
@@ -1448,6 +1498,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -1477,6 +1528,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Last Login", | |||
@@ -1506,6 +1558,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Last IP", | |||
@@ -1535,6 +1588,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Last Active", | |||
@@ -1564,6 +1618,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Last Known Versions", | |||
@@ -1593,6 +1648,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Third Party Authentication", | |||
@@ -1620,6 +1676,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Facebook Username", | |||
@@ -1647,6 +1704,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Facebook User ID", | |||
@@ -1674,6 +1732,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Google User ID", | |||
@@ -1701,6 +1760,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -1728,6 +1788,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Github User ID", | |||
@@ -1755,6 +1816,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Github Username", | |||
@@ -1782,6 +1844,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Frappe User ID", | |||
@@ -1813,7 +1876,7 @@ | |||
"istable": 0, | |||
"max_attachments": 5, | |||
"menu_index": 0, | |||
"modified": "2017-01-13 07:10:40.266109", | |||
"modified": "2017-02-17 16:41:58.700271", | |||
"modified_by": "Administrator", | |||
"module": "Core", | |||
"name": "User", | |||
@@ -1829,7 +1892,6 @@ | |||
"export": 1, | |||
"if_owner": 0, | |||
"import": 1, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -1850,7 +1912,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 1, | |||
"print": 0, | |||
"read": 1, | |||
@@ -1866,6 +1927,7 @@ | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"search_fields": "full_name", | |||
"show_name_in_global_search": 1, | |||
"sort_order": "DESC", | |||
"title_field": "full_name", | |||
"track_changes": 1, | |||
@@ -183,6 +183,7 @@ frappe.PermissionEngine = Class.extend({ | |||
}); | |||
$.each(perm_list, function(i, d) { | |||
if(d.parent==="DocType") { return; } | |||
if(!d.permlevel) d.permlevel = 0; | |||
var row = $("<tr>").appendTo(me.table.find("tbody")); | |||
me.add_cell(row, d, "parent"); | |||
@@ -176,7 +176,7 @@ class CustomizeForm(Document): | |||
.format(df.idx)) | |||
continue | |||
elif property == "in_list_view" and df.get(property) \ | |||
and df.fieldtype!="Image" and df.fieldtype in no_value_fields: | |||
and df.fieldtype!="Attach Image" and df.fieldtype in no_value_fields: | |||
frappe.msgprint(_("'In List View' not allowed for type {0} in row {1}") | |||
.format(df.fieldtype, df.idx)) | |||
continue | |||
@@ -52,7 +52,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "Subject", | |||
@@ -837,7 +837,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2017-02-09 03:32:53.484696", | |||
"modified": "2017-02-17 17:02:18.749886", | |||
"modified_by": "Administrator", | |||
"module": "Desk", | |||
"name": "Event", | |||
@@ -22,6 +22,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Title", | |||
@@ -50,6 +51,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Public", | |||
@@ -78,6 +80,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Notify users with a popup when they log in", | |||
@@ -107,6 +110,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Expire Notification On", | |||
@@ -136,6 +140,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Content", | |||
@@ -163,6 +168,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Seen By", | |||
@@ -191,6 +197,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Seen By Table", | |||
@@ -221,7 +228,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2016-12-29 14:39:46.072073", | |||
"modified": "2017-02-17 17:02:57.067556", | |||
"modified_by": "Administrator", | |||
"module": "Desk", | |||
"name": "Note", | |||
@@ -237,7 +244,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -252,6 +258,7 @@ | |||
"quick_entry": 1, | |||
"read_only": 0, | |||
"read_only_onload": 1, | |||
"show_name_in_global_search": 0, | |||
"sort_order": "ASC", | |||
"track_changes": 1, | |||
"track_seen": 0 |
@@ -61,6 +61,7 @@ def get_script(report_name): | |||
@frappe.whitelist() | |||
def run(report_name, filters=None, user=None): | |||
report = get_report_doc(report_name) | |||
if not user: | |||
user = frappe.session.user | |||
@@ -111,6 +112,40 @@ def run(report_name, filters=None, user=None): | |||
"chart": chart | |||
} | |||
@frappe.whitelist() | |||
def export_query(): | |||
"""export from query reports""" | |||
data = frappe._dict(frappe.local.form_dict) | |||
del data["cmd"] | |||
if isinstance(data.get("filters"), basestring): | |||
filters = json.loads(data["filters"]) | |||
if isinstance(data.get("report_name"), basestring): | |||
report_name = data["report_name"] | |||
if isinstance(data.get("file_format_type"), basestring): | |||
file_format_type = data["file_format_type"] | |||
if file_format_type == "Excel": | |||
data = run(report_name, filters) | |||
data = frappe._dict(data) | |||
columns = get_columns_dict(data.columns) | |||
content = [] | |||
for col in columns.values(): | |||
content.append(col["label"]) | |||
from frappe.utils.xlsxutils import make_xlsx | |||
xlsx_file = make_xlsx([content] + data.result, "Query Report") | |||
frappe.response['filename'] = report_name + '.xlsx' | |||
frappe.response['filecontent'] = xlsx_file.getvalue() | |||
frappe.response['type'] = 'binary' | |||
def get_report_module_dotted_path(module, report_name): | |||
return frappe.local.module_app[scrub(module)] + "." + scrub(module) \ | |||
+ ".report." + scrub(report_name) + "." + scrub(report_name) | |||
@@ -166,6 +201,7 @@ def add_total_row(result, columns, meta = None): | |||
result.append(total_row) | |||
return result | |||
def get_filtered_data(ref_doctype, columns, data, user): | |||
result = [] | |||
linked_doctypes = get_linked_doctypes(columns, data) | |||
@@ -189,6 +225,7 @@ def get_filtered_data(ref_doctype, columns, data, user): | |||
return result | |||
def has_match(row, linked_doctypes, doctype_match_filters, ref_doctype, if_owner, columns_dict, user): | |||
"""Returns True if after evaluating permissions for each linked doctype | |||
- There is an owner match for the ref_doctype | |||
@@ -297,6 +334,7 @@ def get_columns_dict(columns): | |||
else: | |||
col_dict["fieldtype"] = col[1] | |||
col_dict["label"] = col[0] | |||
col_dict["fieldname"] = frappe.scrub(col[0]) | |||
# dict | |||
@@ -91,8 +91,10 @@ def export_query(): | |||
form_params["as_list"] = True | |||
doctype = form_params.doctype | |||
add_totals_row = None | |||
file_format_type = form_params["file_format_type"] | |||
del form_params["doctype"] | |||
del form_params["file_format_type"] | |||
if 'add_totals_row' in form_params and form_params['add_totals_row']=='1': | |||
add_totals_row = 1 | |||
@@ -110,20 +112,32 @@ def export_query(): | |||
for i, row in enumerate(ret): | |||
data.append([i+1] + list(row)) | |||
# convert to csv | |||
from cStringIO import StringIO | |||
import csv | |||
if file_format_type == "CSV": | |||
f = StringIO() | |||
writer = csv.writer(f) | |||
for r in data: | |||
# encode only unicode type strings and not int, floats etc. | |||
writer.writerow(map(lambda v: isinstance(v, unicode) and v.encode('utf-8') or v, r)) | |||
# convert to csv | |||
import csv | |||
from cStringIO import StringIO | |||
f = StringIO() | |||
writer = csv.writer(f) | |||
for r in data: | |||
# encode only unicode type strings and not int, floats etc. | |||
writer.writerow(map(lambda v: isinstance(v, unicode) and v.encode('utf-8') or v, r)) | |||
f.seek(0) | |||
frappe.response['result'] = unicode(f.read(), 'utf-8') | |||
frappe.response['type'] = 'csv' | |||
frappe.response['doctype'] = doctype | |||
elif file_format_type == "Excel": | |||
from frappe.utils.xlsxutils import make_xlsx | |||
xlsx_file = make_xlsx(data, doctype) | |||
frappe.response['filename'] = doctype + '.xlsx' | |||
frappe.response['filecontent'] = xlsx_file.getvalue() | |||
frappe.response['type'] = 'binary' | |||
f.seek(0) | |||
frappe.response['result'] = unicode(f.read(), 'utf-8') | |||
frappe.response['type'] = 'csv' | |||
frappe.response['doctype'] = doctype | |||
def append_totals_row(data): | |||
if not data: | |||
@@ -63,7 +63,7 @@ def make_tree_args(**kwarg): | |||
kwarg.update({ | |||
name_field: kwarg[name_field], | |||
parent_field: kwarg["parent"] | |||
parent_field: kwarg.get("parent") or kwarg.get(parent_field) | |||
}) | |||
return frappe._dict(kwarg) |
@@ -22,6 +22,7 @@ We should edit `frappe\core\doctype\user\user.js` | |||
You should be seeing a button on user form as shown below, | |||
 | |||
<img class="screenshot" alt="Custom Button" src="{{docs_base_url}}/assets/img/app-development/add_custom_button.png"> | |||
<!-- markdown --> |
@@ -2,9 +2,9 @@ Frappe provide a group of standard dialogs that are very usefull while coding. | |||
## Alert Dialog | |||
 | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/app-development/show_alert.png"> | |||
Is helpfull for show a non-obstrutive message. | |||
Is helpfull for show a non-obstructive message. | |||
This dialog have 2 parameters `txt`that is the message and `seconds` that is the time that the message will be showed for the user, the standard is `3 seconds`. | |||
@@ -16,7 +16,7 @@ This dialog have 2 parameters `txt`that is the message and `seconds` that is the | |||
## Prompt Dialog | |||
 | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/app-development/prompt.png"> | |||
Is helpful for ask a value for the user | |||
@@ -42,7 +42,7 @@ This dialog have 4 parameters, they are: | |||
--- | |||
## Confirm Dialog | |||
 | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/app-development/confirm-dialog.png"> | |||
Usefull to get a confirmation from the user before do an action | |||
@@ -68,7 +68,7 @@ This dialog have 3 arguments, they are: | |||
## Message Print | |||
 | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/app-development/msgprint.png"> | |||
Is helpfull for show a informational dialog for the user; | |||
@@ -91,7 +91,7 @@ This dialog have 2 arguments, they are: | |||
### Custom Dialog | |||
 | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/app-development/dialog.png"> | |||
Frappé provide too a `Class` that you can extend and build your own custom dialogs | |||
@@ -2,11 +2,8 @@ Use Facebook, Google or GitHub authentication to login to Frappe, and your users | |||
The system uses the **Email Address** supplied by these services to **match with an existing user** in Frappe. If no such user is found, **a new user is created** of the default type **Website User**, if Signup is not disabled in Website Settings. Any System Manager can later change the user type from **Website User** to **System User**, so that the user can access the Desktop. | |||
<figure class="text-center"> | |||
<img src="/assets/img/social-logins-1.jpg" | |||
alt="Login screen with Social Logins enabled"> | |||
<figcaption>Login screen with Social Logins enabled</figcaption> | |||
</figure> | |||
#### Login screen with Social Logins enabled | |||
<img class="screenshot" alt="Login screen with Social Logins enabled" src="{{docs_base_url}}/assets/img/social-logins.png"> | |||
To enable these signups, you need to have **Client ID** and **Client Secret** from these authentication services for your Frappe site. The Client ID and Client Secret are to be set in Website > Setup > Social Login Keys. Here are the steps to obtain these credentials. | |||
@@ -26,7 +26,8 @@ Go to | |||
> Setup > Integrations > OAuth Provider Settings | |||
<img class="screenshot" src="assets/frappe/img/oauth_provider_settings.png"> | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/oauth_provider_settings.png"> | |||
## Add a Client App | |||
@@ -34,7 +35,7 @@ As a System Manager go to | |||
> Setup > Integrations > OAuth Client | |||
<img class="screenshot" src="assets/frappe/img/oauth2_client_app.png"> | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/oauth2_client_app.png"> | |||
To add a client fill in the following details | |||
@@ -40,33 +40,33 @@ Now you will see Frappe icon on the login page. Click on this icon to login with | |||
### Part 1 : on Frappe Identity Provider (IDP) | |||
Login to IDP | |||
<img img class="screenshot" src="/assets/img/00-login-to-idp.png"> | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/00-login-to-idp.png"> | |||
Add OAuth Client on IDP | |||
<img img class="screenshot" src="/assets/img/01-add-oauth-client-on-idp.png"> | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/01-add-oauth-client-on-idp.png"> | |||
Set Server URL on IDP | |||
<img img class="screenshot" src="/assets/img/02-set-server-url-on-idp.png"> | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/02-set-server-url-on-idp.png"> | |||
### Part 2 : on Frappe App Server | |||
Set `Frappe Client ID` and `Frappe Client Secret` on App server (refer the client set on IDP) | |||
<img img class="screenshot" src="/assets/img/03-set-clientid-client-secret-server-on-app-server.png"> | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/03-set-clientid-client-secret-server-on-app-server.png"> | |||
**Note**: Frappe Server URL is the main server where identities from your organization are stored. | |||
Login Screen on App Server (login with frappe) | |||
<img img class="screenshot" src="/assets/img/04-login-screen-on-app-server.png"> | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/04-login-screen-on-app-server.png"> | |||
### Part 3 : Redirected on IDP | |||
login with user on IDP | |||
<img img class="screenshot" src="/assets/img/05-login-with-user-on-idp.png"> | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/05-login-with-user-on-idp.png"> | |||
Confirm Access on IDP | |||
<img img class="screenshot" src="/assets/img/06-confirm-grant-access-on-idp.png"> | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/06-confirm-grant-access-on-idp.png"> | |||
### Part 4 : Back on App Server | |||
Logged in on app server with ID from IDP | |||
<img img class="screenshot" src="/assets/img/07-logged-in-as-website-user-with-id-from-idp.png"> | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/07-logged-in-as-website-user-with-id-from-idp.png"> |
@@ -20,7 +20,7 @@ redirect_uri = <redirect uri from OAuth Client> | |||
#### Confirmation Dialog | |||
<img class="screenshot" src="assets/frappe/img/oauth_confirmation_page.png"> | |||
<img class="screenshot" src="{{docs_base_url}}/assets/img/oauth_confirmation_page.png"> | |||
Click 'Allow' to receive authorization code in redirect uri. | |||
@@ -10,4 +10,4 @@ For example for this folder the `index.txt` looks like: | |||
context | |||
building | |||
{next} | |||
{next} |
@@ -8,7 +8,7 @@ Roles can be assigned to Website Users and they will see menu based on their rol | |||
1. Each Portal Menu Item can have a role associated with it. If that role is set, then only those users having that role can see that menu item | |||
1. Rules can be set for default roles that will be set on default users on hooks | |||
<img class="screenshot" src="assets/frappe/img/portals/portal-settings.png"> | |||
<img class="screenshot" alt="Portal Settings" src="{{docs_base_url}}/assets/img/portals/portal-settings.png"> | |||
#### Rules for Default Role | |||
@@ -1,8 +1,8 @@ | |||
# Customizing Web Forms | |||
Web Forms are a powerful way to add forms to your website. Web forms are powerful and scriptable and from Version 7.1+ they also include tables, paging and other utilties | |||
Web Forms are a powerful way to add forms to your website. Web forms are powerful and scriptable and from Version 7.1+ they also include tables, paging and other utilities | |||
<img class="screenshot" src="assets/frappe/img/portals/sample-web-form.png"> | |||
<img class="screenshot" alt="Web Form" src="{{docs_base_url}}/assets/img/portals/sample-web-form.png"> | |||
### Standard Web Forms | |||
@@ -6,7 +6,7 @@ To create a new Query Report: | |||
### 1. Create a new Report | |||
 | |||
<img class="screenshot" alt="Query Report" src="{{docs_base_url}}/assets/img/query-report.png"> | |||
1. Set type as "Query Report" | |||
1. Set the reference DocType - Users that have access to the reference DocType will have access to the report | |||
@@ -35,7 +35,7 @@ You can define complex queries such as: | |||
### 3. Check the Report | |||
 | |||
<img class="screenshot" alt="Query Report" src="{{docs_base_url}}/assets/img/query-report-out.png"> | |||
### 4. Advanced (adding filters) | |||
@@ -10,7 +10,7 @@ Since these reports give you unrestricted access via Python scripts, they can on | |||
### 1. Create a new Report | |||
 | |||
<img class="screenshot" alt="Script Report" src="{{docs_base_url}}/assets/img/script-report.png"> | |||
1. Set Report Type as "Script Report" | |||
1. Set "Is Standard" as "Yes" | |||
@@ -58,7 +58,7 @@ Here is how the General Ledger Report is built: | |||
Here is what the report looks like: | |||
 | |||
<img class="screenshot" alt="General Ledger" src="{{docs_base_url}}/assets/img/general-ledger.png"> | |||
##### Comments: | |||
@@ -20,6 +20,7 @@ class AutoEmailReport(Document): | |||
def validate(self): | |||
self.validate_report_count() | |||
self.validate_emails() | |||
self.validate_report_format() | |||
def validate_emails(self): | |||
'''Cleanup list of emails''' | |||
@@ -39,6 +40,13 @@ class AutoEmailReport(Document): | |||
count = frappe.db.sql('select count(*) from `tabAuto Email Report` where user=%s and enabled=1', self.user)[0][0] | |||
if count > max_reports_per_user + (-1 if self.flags.in_insert else 0): | |||
frappe.throw(_('Only {0} emailed reports are allowed per user').format(max_reports_per_user)) | |||
def validate_report_format(self): | |||
""" check if user has select correct report format """ | |||
valid_report_formats = ["HTML", "XLS", "CSV"] | |||
if self.format not in valid_report_formats: | |||
frappe.throw(_("%s is not a valid report format. Report format should \ | |||
one of the following %s"%(frappe.bold(self.format), frappe.bold(", ".join(valid_report_formats))))) | |||
def get_report_content(self): | |||
'''Returns file in for the report in given format''' | |||
@@ -81,7 +81,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 1, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Last Name", | |||
@@ -554,7 +554,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2017-01-31 00:15:30.298287", | |||
"modified": "2017-02-20 14:54:33.723052", | |||
"modified_by": "Administrator", | |||
"module": "Email", | |||
"name": "Contact", | |||
@@ -805,6 +805,7 @@ | |||
"quick_entry": 0, | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"show_name_in_global_search": 0, | |||
"sort_order": "ASC", | |||
"track_changes": 0, | |||
"track_seen": 0 |
@@ -23,6 +23,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Email Id", | |||
@@ -52,6 +53,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Login Id is Different", | |||
@@ -81,6 +83,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Email Address", | |||
@@ -110,6 +113,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Password", | |||
@@ -138,6 +142,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "Awaiting password", | |||
@@ -167,6 +172,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Email Account Name", | |||
@@ -195,6 +201,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "", | |||
@@ -223,6 +230,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Domain", | |||
@@ -252,6 +260,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Service", | |||
@@ -281,6 +290,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "", | |||
@@ -311,6 +321,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Enable Incoming", | |||
@@ -340,6 +351,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Use IMAP", | |||
@@ -371,6 +383,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Email Server", | |||
@@ -401,6 +414,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Use SSL", | |||
@@ -433,6 +447,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Attachment Limit (MB)", | |||
@@ -465,6 +480,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 1, | |||
"label": "Append To", | |||
@@ -496,6 +512,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Default Incoming", | |||
@@ -525,6 +542,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -552,6 +570,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Notify if unreplied", | |||
@@ -582,6 +601,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Notify if unreplied for (in mins)", | |||
@@ -612,6 +632,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Send Notification to", | |||
@@ -640,6 +661,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "", | |||
@@ -670,6 +692,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Enable Outgoing", | |||
@@ -700,6 +723,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "SMTP Server", | |||
@@ -730,6 +754,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Use TLS", | |||
@@ -761,6 +786,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Port", | |||
@@ -792,6 +818,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Default Outgoing", | |||
@@ -822,6 +849,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Always use Account's Email Address as Sender", | |||
@@ -851,6 +879,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Send unsubscribe message in email", | |||
@@ -879,6 +908,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "", | |||
@@ -908,6 +938,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Add Signature", | |||
@@ -937,6 +968,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Signature", | |||
@@ -965,6 +997,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "", | |||
@@ -993,6 +1026,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Enable Auto Reply", | |||
@@ -1023,6 +1057,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Auto Reply Message", | |||
@@ -1051,6 +1086,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "", | |||
@@ -1079,6 +1115,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Footer", | |||
@@ -1107,6 +1144,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "uid validity", | |||
@@ -1135,6 +1173,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "uidnext", | |||
@@ -1163,6 +1202,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "No of emails remaining to be synced", | |||
@@ -1191,6 +1231,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "no failed attempts", | |||
@@ -1220,7 +1261,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2017-01-06 13:57:39.516766", | |||
"modified": "2017-02-17 17:00:50.782900", | |||
"modified_by": "Administrator", | |||
"module": "Email", | |||
"name": "Email Account", | |||
@@ -1237,7 +1278,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 0, | |||
"read": 1, | |||
@@ -1252,6 +1292,7 @@ | |||
"quick_entry": 0, | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"show_name_in_global_search": 0, | |||
"sort_field": "modified", | |||
"sort_order": "DESC", | |||
"track_changes": 1, | |||
@@ -22,6 +22,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Title", | |||
@@ -51,6 +52,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "Total Subscribers", | |||
@@ -79,7 +81,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2016-12-29 14:40:35.253956", | |||
"modified": "2017-02-17 17:01:07.647800", | |||
"modified_by": "Administrator", | |||
"module": "Email", | |||
"name": "Email Group", | |||
@@ -96,7 +98,6 @@ | |||
"export": 1, | |||
"if_owner": 0, | |||
"import": 1, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -111,6 +112,7 @@ | |||
"quick_entry": 1, | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"show_name_in_global_search": 1, | |||
"sort_field": "modified", | |||
"sort_order": "DESC", | |||
"track_changes": 1, | |||
@@ -23,6 +23,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 1, | |||
"label": "Email Group", | |||
@@ -52,6 +53,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "Email", | |||
@@ -80,6 +82,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "Unsubscribed", | |||
@@ -108,7 +111,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2016-12-29 14:40:21.545713", | |||
"modified": "2017-02-17 17:00:42.551806", | |||
"modified_by": "Administrator", | |||
"module": "Email", | |||
"name": "Email Group Member", | |||
@@ -125,7 +128,6 @@ | |||
"export": 1, | |||
"if_owner": 0, | |||
"import": 1, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -140,6 +142,7 @@ | |||
"quick_entry": 1, | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"show_name_in_global_search": 0, | |||
"sort_field": "modified", | |||
"sort_order": "DESC", | |||
"title_field": "email", | |||
@@ -24,6 +24,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 1, | |||
"label": "Email Group", | |||
@@ -53,6 +54,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Subject", | |||
@@ -81,6 +83,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 1, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Sender", | |||
@@ -108,6 +111,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Email Sent?", | |||
@@ -135,6 +139,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Scheduled To Send", | |||
@@ -163,6 +168,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "", | |||
@@ -190,6 +196,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Message", | |||
@@ -218,6 +225,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "", | |||
@@ -246,6 +254,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Test Email Address", | |||
@@ -273,6 +282,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Test", | |||
@@ -303,7 +313,7 @@ | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"menu_index": 0, | |||
"modified": "2017-01-19 06:16:23.102086", | |||
"modified": "2017-02-17 17:01:20.598041", | |||
"modified_by": "Administrator", | |||
"module": "Email", | |||
"name": "Newsletter", | |||
@@ -333,6 +343,7 @@ | |||
"quick_entry": 0, | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"show_name_in_global_search": 0, | |||
"sort_order": "ASC", | |||
"title_field": "subject", | |||
"track_changes": 1, | |||
@@ -25,6 +25,7 @@ def load_address_and_contact(doc, key): | |||
doc.set_onload('addr_list', address_list) | |||
contact_list = [] | |||
if doc.doctype != "Lead": | |||
filters = [ | |||
["Dynamic Link", "link_doctype", "=", doc.doctype], | |||
@@ -38,7 +39,7 @@ def load_address_and_contact(doc, key): | |||
(int(a.is_primary_contact - b.is_primary_contact)) or | |||
(1 if a.modified - b.modified else 0), reverse=True) | |||
doc.set_onload('contact_list', contact_list) | |||
doc.set_onload('contact_list', contact_list) | |||
def set_default_role(doc, method): | |||
'''Set customer, supplier, student based on email''' | |||
@@ -21,6 +21,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "", | |||
@@ -50,6 +51,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Address Title", | |||
@@ -77,6 +79,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 1, | |||
"label": "Address Type", | |||
@@ -105,6 +108,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Address Line 1", | |||
@@ -132,6 +136,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Address Line 2", | |||
@@ -158,7 +163,8 @@ | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 1, | |||
"in_filter": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "City/Town", | |||
@@ -186,6 +192,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "County", | |||
@@ -213,7 +220,8 @@ | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 1, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "State", | |||
@@ -240,7 +248,8 @@ | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 1, | |||
"in_filter": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 0, | |||
"in_standard_filter": 1, | |||
"label": "Country", | |||
@@ -268,7 +277,8 @@ | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 1, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Postal Code", | |||
@@ -296,6 +306,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -323,6 +334,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Email Address", | |||
@@ -350,6 +362,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Phone", | |||
@@ -376,7 +389,8 @@ | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 1, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Fax", | |||
@@ -406,6 +420,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Preferred Billing Address", | |||
@@ -435,6 +450,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Preferred Shipping Address", | |||
@@ -462,6 +478,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Reference", | |||
@@ -491,6 +508,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Is Your Company Address", | |||
@@ -519,6 +537,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Links", | |||
@@ -549,7 +568,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2017-01-13 05:01:15.084023", | |||
"modified": "2017-02-17 17:00:32.691465", | |||
"modified_by": "Administrator", | |||
"module": "Geo", | |||
"name": "Address", | |||
@@ -565,7 +584,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -586,7 +604,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -607,7 +624,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -628,7 +644,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -644,6 +659,7 @@ | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"search_fields": "country, state", | |||
"show_name_in_global_search": 0, | |||
"sort_field": "modified", | |||
"sort_order": "DESC", | |||
"track_changes": 0, | |||
@@ -59,7 +59,7 @@ def authorize(*args, **kwargs): | |||
if frappe.session['user']=='Guest': | |||
#Force login, redirect to preauth again. | |||
frappe.local.response["type"] = "redirect" | |||
frappe.local.response["location"] = "/login?redirect-to=/api/method/frappe.integration_broker.oauth2.authorize?" + quote(params) | |||
frappe.local.response["location"] = "/login?redirect-to=/api/method/frappe.integration_broker.oauth2.authorize?" + quote(params.replace("+"," ")) | |||
elif frappe.session['user']!='Guest': | |||
try: | |||
@@ -20,7 +20,6 @@ | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "LDAP Server Url", | |||
@@ -48,7 +47,6 @@ | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Organizational Unit", | |||
@@ -76,7 +74,6 @@ | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Base Distinguished Name (DN)", | |||
@@ -104,7 +101,6 @@ | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Password for Base DN", | |||
@@ -121,6 +117,140 @@ | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "section_break_5", | |||
"fieldtype": "Section Break", | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
"no_copy": 0, | |||
"permlevel": 0, | |||
"precision": "", | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 0, | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "ldap_search_string", | |||
"fieldtype": "Data", | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "LDAP Search String", | |||
"length": 0, | |||
"no_copy": 0, | |||
"permlevel": 0, | |||
"precision": "", | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 1, | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "ldap_first_name_field", | |||
"fieldtype": "Data", | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "LDAP First Name Field", | |||
"length": 0, | |||
"no_copy": 0, | |||
"permlevel": 0, | |||
"precision": "", | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 1, | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "ldap_email_field", | |||
"fieldtype": "Data", | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "LDAP Email Field", | |||
"length": 0, | |||
"no_copy": 0, | |||
"permlevel": 0, | |||
"precision": "", | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 1, | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"unique": 0 | |||
}, | |||
{ | |||
"allow_on_submit": 0, | |||
"bold": 0, | |||
"collapsible": 0, | |||
"columns": 0, | |||
"fieldname": "ldap_username_field", | |||
"fieldtype": "Data", | |||
"hidden": 0, | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "LDAP Username Field", | |||
"length": 0, | |||
"no_copy": 0, | |||
"permlevel": 0, | |||
"precision": "", | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 1, | |||
"search_index": 0, | |||
"set_only_once": 0, | |||
"unique": 0 | |||
} | |||
], | |||
"hide_heading": 0, | |||
@@ -133,7 +263,7 @@ | |||
"issingle": 1, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2016-12-29 14:40:32.018140", | |||
"modified": "2017-02-06 15:37:20.481090", | |||
"modified_by": "Administrator", | |||
"module": "Integrations", | |||
"name": "LDAP Settings", | |||
@@ -150,7 +280,6 @@ | |||
"export": 1, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -54,9 +54,13 @@ def get_service_details(): | |||
To setup LDAP you need, | |||
<ul> | |||
<li> Server URL & Port : ldap://ldap.forumsys.com:389</li> | |||
<li> Base Distinguished Name : cn=read-only-admin,dc=example,dc=com</li> | |||
<li> Organisational Unit : ou=mathematicians,dc=example,dc=com</li> | |||
<li> Password : Base DN password </li> | |||
<li> Base Distinguished Name : cn=read-only-admin,dc=example,dc=com</li> | |||
<li> Organisational Unit : ou=mathematicians,dc=example,dc=com</li> | |||
<li> Password : Base DN password</li> | |||
<li> LDAP Search Criteria : uid=*{0}</li> | |||
<li> LDAP First Name Fields : cn</li> | |||
<li> LDAP Username Field : ui</li> | |||
<li> LDAP Email Field : mail</li> | |||
</ul> | |||
</li> | |||
<br> | |||
@@ -103,7 +107,7 @@ def authenticate_ldap_user(user=None, password=None): | |||
dn = None | |||
params = {} | |||
settings = get_ldap_settings() | |||
try: | |||
import ldap | |||
except: | |||
@@ -115,7 +119,7 @@ def authenticate_ldap_user(user=None, password=None): | |||
</div> | |||
""" | |||
frappe.throw(msg, title="LDAP Not Installed") | |||
conn = ldap.initialize(settings.ldap_server_url) | |||
try: | |||
@@ -126,16 +130,14 @@ def authenticate_ldap_user(user=None, password=None): | |||
#available options for how deep a search you want. | |||
#LDAP_SCOPE_BASE, LDAP_SCOPE_ONELEVEL,LDAP_SCOPE_SUBTREE, | |||
result = conn.search_s(settings.organizational_unit, ldap.SCOPE_SUBTREE, | |||
"uid=*{0}".format(user)) | |||
print result | |||
settings.ldap_search_string.format(user)) | |||
for dn, r in result: | |||
dn = cstr(dn) | |||
params["email"] = cstr(r['mail'][0]) | |||
params["username"] = cstr(r['uid'][0]) | |||
params["first_name"] = cstr(r['cn'][0]) | |||
params["email"] = cstr(r[settings.ldap_email_field][0]) | |||
params["username"] = cstr(r[settings.ldap_username_field][0]) | |||
params["first_name"] = cstr(r[settings.ldap_first_name_field][0]) | |||
if dn: | |||
conn.simple_bind_s(dn, password) | |||
return create_user(params) | |||
@@ -101,6 +101,7 @@ def sync_customizations_for_doctype(data): | |||
from frappe.core.doctype.doctype.doctype import validate_fields_for_doctype | |||
doctype = data['doctype'] | |||
update_schema = False | |||
def sync(key, custom_doctype, doctype_fieldname): | |||
frappe.db.sql('delete from `tab{0}` where `{1}`=%s'.format(custom_doctype, doctype_fieldname), | |||
@@ -113,6 +114,7 @@ def sync_customizations_for_doctype(data): | |||
if data['custom_fields']: | |||
sync('custom_fields', 'Custom Field', 'dt') | |||
update_schema = True | |||
if data['property_setters']: | |||
sync('property_setters', 'Property Setter', 'doc_type') | |||
@@ -123,6 +125,10 @@ def sync_customizations_for_doctype(data): | |||
print 'Updating customizations for {0}'.format(doctype) | |||
validate_fields_for_doctype(doctype) | |||
if update_schema and not frappe.db.get_value('DocType', doctype, 'issingle'): | |||
from frappe.model.db_schema import updatedb | |||
updatedb(doctype) | |||
def scrub(txt): | |||
return frappe.scrub(txt) | |||
@@ -34,6 +34,7 @@ class WebApplicationServer(AuthorizationEndpoint, TokenEndpoint, ResourceEndpoin | |||
:param kwargs: Extra parameters to pass to authorization-, | |||
token-, resource-, and revocation-endpoint constructors. | |||
""" | |||
implicit_grant = ImplicitGrant(request_validator) | |||
auth_grant = AuthorizationCodeGrant(request_validator) | |||
refresh_grant = RefreshTokenGrant(request_validator) | |||
openid_connect_auth = OpenIDConnectAuthCode(request_validator) | |||
@@ -48,6 +49,7 @@ class WebApplicationServer(AuthorizationEndpoint, TokenEndpoint, ResourceEndpoin | |||
'code token': openid_connect_auth, | |||
'code id_token': openid_connect_auth, | |||
'code token id_token': openid_connect_auth, | |||
'token': implicit_grant | |||
}, | |||
default_token_type=bearer) | |||
TokenEndpoint.__init__(self, default_grant_type='authorization_code', | |||
@@ -205,7 +207,7 @@ class OAuthWebRequestValidator(RequestValidator): | |||
otoken.user = request.user | |||
otoken.scopes = get_url_delimiter().join(request.scopes) | |||
otoken.access_token = token['access_token'] | |||
otoken.refresh_token = token['refresh_token'] | |||
otoken.refresh_token = token.get('refresh_token') | |||
otoken.expires_in = token['expires_in'] | |||
otoken.save(ignore_permissions=True) | |||
frappe.db.commit() | |||
@@ -0,0 +1,18 @@ | |||
import frappe | |||
from frappe.utils import cint | |||
def execute(): | |||
frappe.reload_doc("integrations", "doctype", "ldap_settings") | |||
if not frappe.db.exists("Integration Server", "LDAP"): | |||
return | |||
if not cint(frappe.db.get_value("Integration Server", "LDAP", 'enabled')): | |||
return | |||
import ldap | |||
try: | |||
ldap_settings = frappe.get_doc("LDAP Settings") | |||
ldap_settings.save(ignore_permissions=True) | |||
except ldap.LDAPError: | |||
pass |
@@ -687,8 +687,18 @@ fieldset[disabled] .form-control { | |||
padding: 0px; | |||
overflow-y: auto; | |||
} | |||
.search-dialog .layout-side-section { | |||
padding-left: 15px; | |||
.search-dialog .layout-side-section .help-link { | |||
padding-top: 20px; | |||
text-transform: uppercase; | |||
} | |||
.search-dialog .layout-side-section .nav > li > a { | |||
padding-left: 20px; | |||
} | |||
.search-dialog .results-area a { | |||
color: #5E64FF; | |||
} | |||
.search-dialog .results-area .single-link a { | |||
color: #36414c; | |||
} | |||
.search-dialog .module-section .back-link { | |||
margin-bottom: 20px; | |||
@@ -698,11 +708,19 @@ fieldset[disabled] .form-control { | |||
font-family: 'Octicons'; | |||
content: '\f0a4'; | |||
} | |||
.search-dialog .dual-section .result a { | |||
color: black; | |||
.search-dialog .full-list .result { | |||
border-bottom: 1px solid #d1d8dd; | |||
margin-top: 10px; | |||
} | |||
.search-dialog .full-list .result .result-subtype { | |||
float: right; | |||
margin-left: 10px; | |||
} | |||
.search-dialog .dual-section .result a b { | |||
color: #4e6161; | |||
.search-dialog .full-list .section-head { | |||
margin-bottom: 25px; | |||
} | |||
.search-dialog .dual-section .result-subtype { | |||
display: none; | |||
} | |||
.search-dialog .result-status { | |||
margin-top: 30px; | |||
@@ -135,6 +135,11 @@ | |||
.navbar-form .awesomplete { | |||
width: 300px; | |||
} | |||
@media (max-width: 1199px) { | |||
.navbar-form .awesomplete { | |||
width: 280px; | |||
} | |||
} | |||
@media (max-width: 991px) { | |||
.navbar-form .awesomplete { | |||
width: 250px; | |||
@@ -200,7 +205,7 @@ | |||
} | |||
} | |||
.toolbar-user-fullname { | |||
max-width: 200px; | |||
max-width: 150px; | |||
display: inline-block; | |||
} | |||
.navbar-brand { | |||
@@ -238,6 +238,9 @@ h6.uppercase, | |||
.timeline-item .btn-more { | |||
margin-left: 65px; | |||
} | |||
.timeline-item .gmail_extra { | |||
display: none; | |||
} | |||
.timeline-items { | |||
position: relative; | |||
} | |||
@@ -20,16 +20,21 @@ | |||
} | |||
.column-picker-dialog .column-list .column-list-item { | |||
padding: 10px; | |||
cursor: move; | |||
border-bottom: 1px solid #d1d8dd; | |||
} | |||
.column-picker-dialog .column-list .column-list-item:last-child { | |||
border-bottom: none; | |||
} | |||
.column-picker-dialog .column-list .drag-handle { | |||
.column-picker-dialog .column-list .sortable-handle { | |||
cursor: move; | |||
} | |||
.column-picker-dialog .column-list .sortable-chosen { | |||
background-color: #fffce7; | |||
} | |||
.column-picker-dialog .column-list .fa-sort { | |||
margin: 0px 7px; | |||
position: relative; | |||
top: -1px; | |||
margin-top: 9px; | |||
margin-right: -15px; | |||
} | |||
.column-picker-dialog .column-list .form-control { | |||
display: inline-block; | |||
@@ -634,8 +634,9 @@ frappe.ui.form.ControlDate = frappe.ui.form.ControlData.extend({ | |||
(frappe.boot.sysdefaults.date_format || 'yyyy-mm-dd'); | |||
this.datepicker_options.dateFormat = date_format; | |||
this.datepicker_options.onSelect = function(dateObj) { | |||
me.set_value(me.get_value()) | |||
this.datepicker_options.onSelect = function(dateStr) { | |||
if(dateStr === me.get_value()) return; | |||
me.set_value(me.get_value()); | |||
me.$input.trigger('change') | |||
} | |||
}, | |||
@@ -1594,6 +1595,7 @@ frappe.ui.form.ControlTextEditor = frappe.ui.form.ControlCode.extend({ | |||
['color', ['color']], | |||
['para', ['ul', 'ol', 'paragraph']], | |||
['height', ['height']], | |||
['media', ['link', 'picture', 'video', 'table']], | |||
['misc', ['fullscreen', 'codeview']] | |||
], | |||
callbacks: { | |||
@@ -1641,7 +1643,7 @@ frappe.ui.form.ControlTextEditor = frappe.ui.form.ControlCode.extend({ | |||
'minus': 'fa fa-minus', | |||
'orderedlist': 'fa fa-list-ol', | |||
'pencil': 'fa fa-pencil', | |||
'picture': 'fa fa-picture', | |||
'picture': 'fa fa-image', | |||
'question': 'fa fa-question', | |||
'redo': 'fa fa-redo', | |||
'square': 'fa fa-square', | |||
@@ -1654,7 +1656,7 @@ frappe.ui.form.ControlTextEditor = frappe.ui.form.ControlCode.extend({ | |||
'underline': 'fa fa-underline', | |||
'undo': 'fa fa-undo', | |||
'unorderedlist': 'fa fa-list-ul', | |||
'video': 'fa fa-video' | |||
'video': 'fa fa-video-camera' | |||
} | |||
}); | |||
this.note_editor = $(this.input_area).find('.note-editor'); | |||
@@ -401,8 +401,10 @@ frappe.ui.form.Timeline = Class.extend({ | |||
out.push(me.get_version_comment(version, __('cancelled this document'))); | |||
} | |||
} else { | |||
var df = frappe.meta.get_docfield(me.frm.doctype, p[0], me.frm.docname); | |||
if(!df.hidden) { | |||
if(df && !df.hidden) { | |||
var field_display_status = frappe.perm.get_field_display_status(df, null, | |||
me.frm.perm); | |||
if(field_display_status === 'Read' || field_display_status === 'Write') { | |||
@@ -429,7 +431,7 @@ frappe.ui.form.Timeline = Class.extend({ | |||
var df = frappe.meta.get_docfield(me.frm.fields_dict[row[0]].grid.doctype, | |||
p[0], me.frm.docname); | |||
if(!df.hidden) { | |||
if(df && !df.hidden) { | |||
field_display_status = frappe.perm.get_field_display_status(df, | |||
null, me.frm.perm); | |||
@@ -59,7 +59,7 @@ frappe.form.formatters = { | |||
if(value) { | |||
return '<i class="octicon octicon-check" style="margin-right: 3px;"></i>'; | |||
} else { | |||
return '<i class="fa fa-square-o text-extra-muted" style="margin-right: 3px;"></i>'; | |||
return '<i class="fa fa-circle-o text-extra-muted" style="margin-right: 3px; margin-bottom: -2px;"></i>'; | |||
} | |||
}, | |||
Link: function(value, docfield, options, doc) { | |||
@@ -290,7 +290,7 @@ frappe.ui.form.Grid = Class.extend({ | |||
new Sortable($rows.get(0), { | |||
group: {name: 'row'}, | |||
handle: ".sortable-handle", | |||
handle: '.sortable-handle', | |||
draggable: '.grid-row', | |||
filter: 'li, a', | |||
onUpdate: function(event, ui) { | |||
@@ -628,7 +628,7 @@ frappe.ui.form.GridRow = Class.extend({ | |||
var me = this; | |||
this.wrapper = $('<div class="grid-row"></div>').appendTo(this.parent).data("grid_row", this); | |||
this.row = $('<div class="data-row row sortable-handle"></div>').appendTo(this.wrapper) | |||
this.row = $('<div class="data-row row"></div>').appendTo(this.wrapper) | |||
.on("click", function(e) { | |||
if($(e.target).hasClass('grid-row-check') || $(e.target).hasClass('row-index') || $(e.target).parent().hasClass('row-index')) { | |||
return; | |||
@@ -750,7 +750,7 @@ frappe.ui.form.GridRow = Class.extend({ | |||
// index (1, 2, 3 etc) | |||
if(!this.row_index) { | |||
var txt = (this.doc ? this.doc.idx : " "); | |||
this.row_index = $('<div class="row-index col col-xs-1">' + | |||
this.row_index = $('<div class="row-index sortable-handle col col-xs-1">' + | |||
this.row_check_html + | |||
' <span>' + txt + '</span></div>') | |||
.appendTo(this.row) | |||
@@ -787,7 +787,7 @@ frappe.ui.form.GridRow = Class.extend({ | |||
if(!this.open_form_button) { | |||
this.open_form_button = $('<a class="close btn-open-row">\ | |||
<span class="octicon octicon-triangle-down"></span></a>') | |||
.appendTo($('<div class="col col-xs-1"></div>').appendTo(this.row)) | |||
.appendTo($('<div class="col col-xs-1 sortable-handle"></div>').appendTo(this.row)) | |||
.on('click', function() { me.toggle_view(); return false; }); | |||
if(this.is_too_small()) { | |||
@@ -950,7 +950,7 @@ frappe.ui.form.GridRow = Class.extend({ | |||
return; | |||
} | |||
var values = me.get_data(); | |||
var values = me.grid.get_data(); | |||
var fieldname = $(this).attr('data-fieldname'); | |||
var fieldtype = $(this).attr('data-fieldtype'); | |||
@@ -244,6 +244,7 @@ frappe.ui.form.Toolbar = Class.extend({ | |||
} | |||
} else { | |||
this.page.clear_actions(); | |||
this.current_status = null | |||
} | |||
}, | |||
get_action_status: function() { | |||
@@ -8,15 +8,17 @@ $.extend(frappe.geo, { | |||
render_address_and_contact: function(frm) { | |||
// render address | |||
$(frm.fields_dict['address_html'].wrapper) | |||
.html(frappe.render_template("address_list", | |||
cur_frm.doc.__onload)) | |||
.find(".btn-address").on("click", function() { | |||
frappe.new_doc("Address"); | |||
}); | |||
if(frm.fields_dict['address_html'] && "addr_list" in frm.doc.__onload) { | |||
$(frm.fields_dict['address_html'].wrapper) | |||
.html(frappe.render_template("address_list", | |||
cur_frm.doc.__onload)) | |||
.find(".btn-address").on("click", function() { | |||
frappe.new_doc("Address"); | |||
}); | |||
} | |||
// render contact | |||
if(frm.fields_dict['contact_html']) { | |||
if(frm.fields_dict['contact_html'] && "contact_list" in frm.doc.__onload) { | |||
$(frm.fields_dict['contact_html'].wrapper) | |||
.html(frappe.render_template("contact_list", | |||
cur_frm.doc.__onload)) | |||
@@ -54,12 +54,12 @@ frappe.avatar = function(user, css_class, title) { | |||
frappe.get_palette = function(txt) { | |||
return '#fafbfc'; | |||
//return '#8D99A6'; | |||
if(txt==='Administrator') return '#36414C'; | |||
// get color palette selection from md5 hash | |||
var idx = cint((parseInt(md5(txt).substr(4,2), 16) + 1) / 5.33); | |||
if(idx > 47) idx = 47; | |||
return frappe.palette[idx][0] | |||
// //return '#8D99A6'; | |||
// if(txt==='Administrator') return '#36414C'; | |||
// // get color palette selection from md5 hash | |||
// var idx = cint((parseInt(md5(txt).substr(4,2), 16) + 1) / 5.33); | |||
// if(idx > 47) idx = 47; | |||
// return frappe.palette[idx][0] | |||
} | |||
frappe.get_abbr = function(txt, max_length) { | |||
@@ -12,7 +12,8 @@ function flt(v, decimals, number_format) { | |||
// strip currency symbol if exists | |||
if(v.indexOf(" ")!=-1) { | |||
// using slice(1).join(" ") because space could also be a group separator | |||
v = isNaN(parseFloat(v.split(" ")[0])) ? v.split(" ").slice(1).join(" ") : v; | |||
parts = v.split(" "); | |||
v = isNaN(parseFloat(parts[0])) ? parts.slice(parts.length - 1).join(" ") : v; | |||
} | |||
v = strip_number_groups(v, number_format); | |||
@@ -158,12 +158,17 @@ frappe.request.call = function(opts) { | |||
} | |||
}) | |||
.always(function(data, textStatus, xhr) { | |||
if(typeof data==="string") { | |||
data = JSON.parse(data); | |||
} | |||
if(data.responseText) { | |||
var xhr = data; | |||
data = JSON.parse(data.responseText); | |||
try { | |||
if(typeof data==="string") { | |||
data = JSON.parse(data); | |||
} | |||
if(data.responseText) { | |||
var xhr = data; | |||
data = JSON.parse(data.responseText); | |||
} | |||
} catch(e) { | |||
data = null; | |||
// pass | |||
} | |||
frappe.request.cleanup(opts, data); | |||
if(opts.always) { | |||
@@ -12,17 +12,21 @@ frappe.search.AwesomeBar = Class.extend({ | |||
this.nav = new frappe.search.NavSearch(); | |||
this.help = new frappe.search.HelpSearch(); | |||
this.options = []; | |||
this.global_results = []; | |||
var awesomplete = new Awesomplete(input, { | |||
minChars: 0, | |||
maxItems: 99, | |||
autoFirst: true, | |||
list: [], | |||
filter: function (text, term) { | |||
return true; | |||
filter: function (text, term) { | |||
return true; | |||
}, | |||
data: function (item, input) { | |||
var label = item.label + "%%%" + item.value + "%%%" + | |||
(item.description || "") + "%%%" + (item.index || ""); | |||
var label = item.label + "%%%" + item.value + "%%%" + | |||
(item.description || "") + "%%%" + (item.index || "") | |||
+ "%%%" + (item.type || "") + "%%%" + (item.prefix || ""); | |||
return { | |||
label: label, | |||
value: item.value | |||
@@ -31,9 +35,16 @@ frappe.search.AwesomeBar = Class.extend({ | |||
item: function(item, term) { | |||
var d = item; | |||
var parts = item.split("%%%"), | |||
d = { label: parts[0], value: parts[1], description: parts[2] }; | |||
d = { label: parts[0], value: parts[1], description: parts[2], | |||
type: parts[4], prefix: parts[5]}; | |||
var html = "<span>" + __(d.label || d.value) + "</span>"; | |||
if(d.prefix) { | |||
var html = "<span>" + __((d.prefix + ' ' + d.label)) + "</span>"; | |||
} else if(d.type) { | |||
var html = "<span>" + __((d.label + ' ' + d.type)) + "</span>"; | |||
} else { | |||
var html = "<span>" + __(d.label || d.value) + "</span>"; | |||
} | |||
if(d.description && d.value!==d.description) { | |||
html += '<br><span class="text-muted">' + __(d.description) + '</span>'; | |||
} | |||
@@ -42,29 +53,37 @@ frappe.search.AwesomeBar = Class.extend({ | |||
.html('<a style="font-weight:normal"><p>' + html + '</p></a>') | |||
.get(0); | |||
}, | |||
sort: function(a, b) { | |||
sort: function(a, b) { | |||
var a_index = a.split("%%%")[3]; | |||
var b_index = b.split("%%%")[3]; | |||
return (a_index - b_index); | |||
return (a_index - b_index); | |||
} | |||
}); | |||
$input.on("input", function(e) { | |||
var value = e.target.value; | |||
var txt = value.trim().replace(/\s\s+/g, ' '); | |||
var last_space = txt.lastIndexOf(' '); | |||
if(txt && txt.length > 2) { | |||
me.global.get_awesome_bar_options(txt.toLowerCase(), me); | |||
} | |||
var $this = $(this); | |||
clearTimeout($this.data('timeout')); | |||
$this.data('timeout', setTimeout(function(){ | |||
var value = e.target.value; | |||
var txt = strip(value); | |||
me.options = []; | |||
if(txt) { | |||
var keywords = strip(txt.toLowerCase()); | |||
me.build_options(keywords); | |||
if(me.options.length < 2) { | |||
me.global.get_awesome_bar_options(keywords, me); | |||
if(txt && txt.length > 2) { | |||
if(last_space !== -1) { | |||
me.set_specifics(txt.slice(0,last_space), txt.slice(last_space+1)); | |||
} | |||
me.options = me.options.concat(me.build_options(txt)); | |||
me.build_defaults(txt); | |||
me.options = me.options.concat(me.global_results); | |||
} | |||
me.make_calculator(txt); | |||
me.add_recent(txt || ""); | |||
me.add_help(); | |||
@@ -112,6 +131,7 @@ frappe.search.AwesomeBar = Class.extend({ | |||
} | |||
if(item.onclick) { | |||
// frappe.new_doc(item.match, true); | |||
item.onclick(item.match); | |||
} else { | |||
var previous_hash = window.location.hash; | |||
@@ -135,7 +155,8 @@ frappe.search.AwesomeBar = Class.extend({ | |||
this.options.push({ | |||
label: __("Help on Search"), | |||
value: "Help on Search", | |||
index: 20, | |||
index: 50, | |||
default: "Help", | |||
onclick: function() { | |||
var txt = '<table class="table table-bordered">\ | |||
<tr><td style="width: 50%">'+__("Make a new record")+'</td><td>'+ | |||
@@ -194,7 +215,8 @@ frappe.search.AwesomeBar = Class.extend({ | |||
out.label = match[0].bold(); | |||
out.value = match[0]; | |||
} | |||
out.index = 10 | |||
out.index = 29; | |||
out.default = "Recent"; | |||
return out; | |||
}, true); | |||
}, | |||
@@ -231,45 +253,106 @@ frappe.search.AwesomeBar = Class.extend({ | |||
setup_recent: function() { | |||
this.recent = JSON.parse(frappe.boot.user.recent || "[]") || []; | |||
}, | |||
is_present: function(txt, item) { | |||
($.isArray(item)) ? _item = item[0] : _item = item; | |||
_item = __(_item || '').toLowerCase().replace(/-/g, " "); | |||
if(txt===_item || _item.indexOf(txt) !== -1) { | |||
return item; | |||
fuzzy_search: function(txt, _item, index) { | |||
item = __(_item || '').toLowerCase().replace(/-/g, " "); | |||
txt = txt.toLowerCase(); | |||
var ilen = item.length; | |||
var tlen = txt.length; | |||
var match_level1 = 0.5; | |||
var match_level2 = 0.8; | |||
var index = ((tlen/ilen) > match_level1) ? 24 : index; | |||
var rendered_label = ""; | |||
var i, j, skips = 0, mismatches = 0; | |||
if (tlen > ilen) { | |||
return []; | |||
} | |||
if (item.indexOf(txt) !== -1) { | |||
// prefer single words | |||
index = (item.indexOf(' ') === -1) ? index-1 : index; | |||
index = ((tlen/ilen) > match_level2) ? 21 : index; | |||
var regEx = new RegExp("("+ txt +")", "ig"); | |||
rendered_label = _item.replace(regEx, '<b>$1</b>'); | |||
return [_item, index, rendered_label]; | |||
} | |||
outer: for (i = 0, j = 0; i < tlen; i++) { | |||
var t_ch = txt.charCodeAt(i); | |||
if(mismatches !== 0) skips++; | |||
if(skips > 3) return []; | |||
mismatches = 0; | |||
while (j < ilen) { | |||
var i_ch = item.charCodeAt(j); | |||
if (i_ch === t_ch) { | |||
var item_char = _item.charAt(j); | |||
if(item_char === item_char.toLowerCase()){ | |||
rendered_label += '<b>' + txt.charAt(i) + '</b>'; | |||
} else { | |||
rendered_label += '<b>' + txt.charAt(i).toUpperCase() + '</b>'; | |||
} | |||
j++; | |||
continue outer; | |||
} | |||
mismatches++; | |||
if(mismatches > 2) return []; | |||
rendered_label += _item.charAt(j); | |||
j++; | |||
} | |||
return []; | |||
} | |||
rendered_label += _item.slice(j); | |||
return [_item, index + 10, rendered_label]; | |||
}, | |||
set_specifics: function(txt, end_txt) { | |||
var me = this; | |||
var results = this.build_options(txt); | |||
results.forEach(function(r) { | |||
if((r.type).toLowerCase().indexOf(end_txt.toLowerCase()) === 0) { | |||
if(r.index < 25) { | |||
r.index = 21; | |||
} | |||
me.options.push(r); | |||
} | |||
}); | |||
}, | |||
build_defaults: function(txt) { | |||
this.make_global_search(txt); | |||
this.make_search_in_current(txt); | |||
this.options = this.options.concat(this.make_search_in_list(txt)); | |||
}, | |||
set_global_results: function(global_results){ | |||
this.options = this.options.concat(global_results); | |||
build_options: function(txt) { | |||
return this.make_new_doc(txt).concat( | |||
this.get_doctypes(txt), | |||
this.get_reports(txt), | |||
this.get_pages(txt), | |||
this.get_modules(txt) | |||
); | |||
}, | |||
build_options: function(txt) { | |||
this.options = | |||
this.make_global_search(txt).concat( | |||
this.make_search_in_current(txt), | |||
this.make_calculator(txt), | |||
this.make_new_doc(txt), | |||
this.make_search_in_list(txt), | |||
this.get_doctypes(txt), | |||
this.get_reports(txt), | |||
this.get_pages(txt), | |||
this.get_modules(txt) | |||
); | |||
set_global_results: function(global_results, txt){ | |||
this.global_results = this.global_results.concat(global_results); | |||
}, | |||
make_global_search: function(txt) { | |||
var me = this; | |||
return [{ | |||
this.options.push({ | |||
label: __("Search for '" + txt.bold() + "'"), | |||
value: __("Search for '" + txt + "'"), | |||
match: txt, | |||
index: 5, | |||
index: 22, | |||
default: "Search", | |||
onclick: function() { | |||
me.search.search_dialog.show(); | |||
me.search.setup_search(txt, [me.global, me.nav, me.help]); | |||
} | |||
}]; | |||
}); | |||
}, | |||
make_search_in_current: function(txt) { | |||
@@ -280,17 +363,18 @@ frappe.search.AwesomeBar = Class.extend({ | |||
var search_field = meta.title_field || "name"; | |||
var options = {}; | |||
options[search_field] = ["like", "%" + txt + "%"]; | |||
return [{ | |||
this.options.push({ | |||
label: __('Find {0} in {1}', [txt.bold(), route[1].bold()]), | |||
value: __('Find {0} in {1}', [txt, route[1]]), | |||
route_options: options, | |||
index: 10, | |||
index: 23, | |||
onclick: function() { | |||
cur_list.refresh(); | |||
}, | |||
default: "Current", | |||
match: txt | |||
}]; | |||
} else { return []; } | |||
}); | |||
} | |||
}, | |||
make_calculator: function(txt) { | |||
@@ -302,34 +386,37 @@ frappe.search.AwesomeBar = Class.extend({ | |||
try { | |||
var val = eval(txt); | |||
var formatted_value = __('{0} = {1}', [txt, (val + '').bold()]); | |||
return [{ | |||
this.options.push({ | |||
label: formatted_value, | |||
value: __('{0} = {1}', [txt, val]), | |||
match: val, | |||
index: 10, | |||
index: 24, | |||
default: "Calculator", | |||
onclick: function() { | |||
msgprint(formatted_value, "Result"); | |||
} | |||
}]; | |||
}); | |||
} catch(e) { | |||
// pass | |||
} | |||
} else { return []; } | |||
} | |||
}, | |||
make_new_doc: function(txt) { | |||
make_search_in_list: function(txt) { | |||
var me = this; | |||
var out = []; | |||
if(txt.split(" ")[0]==="new") { | |||
frappe.boot.user.can_create.forEach(function (item) { | |||
var target = me.is_present(txt.substr(4), item); | |||
if(in_list(txt.split(" "), "in") && (txt.slice(-2) !== "in")) { | |||
parts = txt.split(" in "); | |||
frappe.boot.user.can_read.forEach(function (item) { | |||
var target = me.fuzzy_search(parts[1], item, 21)[0]; | |||
if(target) { | |||
out.push({ | |||
label: __("New {0}", [target.bold()]), | |||
value: __("New {0}", [target]), | |||
index: 10, | |||
match: target, | |||
onclick: function() { frappe.new_doc(target, true); } | |||
label: __('Find {0} in {1}', [__(parts[0]).bold(), __(target).bold()]), | |||
value: __('Find {0} in {1}', [__(parts[0]), __(target)]), | |||
route_options: {"name": ["like", "%" + parts[0] + "%"]}, | |||
index: 21, | |||
default: "In List", | |||
route: ["List", target] | |||
}); | |||
} | |||
}); | |||
@@ -337,20 +424,23 @@ frappe.search.AwesomeBar = Class.extend({ | |||
return out; | |||
}, | |||
make_search_in_list: function(txt) { | |||
make_new_doc: function(txt) { | |||
var me = this; | |||
var out = []; | |||
if(in_list(txt.split(" "), "in")) { | |||
parts = txt.split(" in "); | |||
frappe.boot.user.can_read.forEach(function (item) { | |||
target = me.is_present(parts[1], item); | |||
if(txt.split(" ")[0]==="new") { | |||
frappe.boot.user.can_create.forEach(function (item) { | |||
var result = me.fuzzy_search(txt.substr(4), item, 21); | |||
var target = result[0]; | |||
var rendered_label = result[2]; | |||
if(target) { | |||
out.push({ | |||
label: __('Find {0} in {1}', [__(parts[0]).bold(), __(target).bold()]), | |||
value: __('Find {0} in {1}', [__(parts[0]), __(target)]), | |||
route_options: {"name": ["like", "%" + parts[0] + "%"]}, | |||
index: 10, | |||
route: ["List", target] | |||
label: rendered_label, | |||
value: __("New {0}", [target]), | |||
index: 21, | |||
type: "New", | |||
prefix: "New", | |||
match: target, | |||
onclick: function() { frappe.new_doc(target, true); } | |||
}); | |||
} | |||
}); | |||
@@ -358,36 +448,38 @@ frappe.search.AwesomeBar = Class.extend({ | |||
return out; | |||
}, | |||
get_doctypes: function(txt) { | |||
get_doctypes: function(txt) { | |||
var me = this; | |||
var out = []; | |||
var target, index; | |||
var result, target, index, rendered_label; | |||
var option = function(type, route) { | |||
return { | |||
label: __("{0} " + type, [__(target).bold()]), | |||
label: rendered_label, | |||
value: __(target), | |||
route: route, | |||
index: index, | |||
match: target | |||
match: target, | |||
type: type | |||
} | |||
}; | |||
frappe.boot.user.can_read.forEach(function (item) { | |||
target = me.is_present(txt, item); | |||
result = me.fuzzy_search(txt, item, 25); | |||
target = result[0]; | |||
index = result[1]; | |||
rendered_label = result[2]; | |||
if(target) { | |||
var match_ratio = txt.length / item.length; | |||
index = (match_ratio > 0.7) ? 10 : 12; | |||
// include 'making new' option | |||
if(in_list(frappe.boot.user.can_create, target)) { | |||
out.push({ | |||
label: __("New {0}", [target.bold()]), | |||
value: __("New {0}", [target]), | |||
match: target, | |||
index: 12, | |||
onclick: function() { frappe.new_doc(target, true); } | |||
}); | |||
} | |||
// include 'making new' option (not working) | |||
// if(in_list(frappe.boot.user.can_create, target)) { | |||
// out.push({ | |||
// label: rendered_label, | |||
// value: __("New {0}", [target]), | |||
// index: index, | |||
// type: "New", | |||
// prefix: "New", | |||
// onclick: function() { frappe.new_doc(target, true); } | |||
// }); | |||
// } | |||
if(in_list(frappe.boot.single_types, target)) { | |||
out.push(option("", ["Form", target, target])); | |||
@@ -395,7 +487,7 @@ frappe.search.AwesomeBar = Class.extend({ | |||
out.push(option("Tree", ["Tree", target])); | |||
} else { | |||
out.push(option("List", ["List", target])); | |||
out.push(option("List", ["List", target])); | |||
if(frappe.model.can_get_report(target)) { | |||
out.push(option("Report", ["Report", target])); | |||
} | |||
@@ -414,11 +506,12 @@ frappe.search.AwesomeBar = Class.extend({ | |||
var me = this; | |||
var out = []; | |||
Object.keys(frappe.boot.user.all_reports).forEach(function(item) { | |||
var target = me.is_present(txt, item); | |||
var result = me.fuzzy_search(txt, item, 26); | |||
var target = result[0]; | |||
var index = result[1]; | |||
var rendered_label = result[2]; | |||
if(target) { | |||
var report = frappe.boot.user.all_reports[target]; | |||
var match_ratio = txt.length / item.length; | |||
var index = (match_ratio > 0.7) ? 10 : 13; | |||
var route = []; | |||
if(report.report_type == "Report Builder") | |||
route = ["Report", report.ref_doctype, target]; | |||
@@ -426,10 +519,12 @@ frappe.search.AwesomeBar = Class.extend({ | |||
route = ["query-report", target]; | |||
out.push({ | |||
label: __("Report {0}", [__(target).bold()]), | |||
label: rendered_label, | |||
value: __("Report {0}" , [__(target)]), | |||
match: txt, | |||
index: index, | |||
type: "Report", | |||
prefix: "Report", | |||
route: route | |||
}); | |||
} | |||
@@ -446,16 +541,19 @@ frappe.search.AwesomeBar = Class.extend({ | |||
p.name = name; | |||
}); | |||
Object.keys(this.pages).forEach(function(item) { | |||
var target = me.is_present(txt, item); | |||
var result = me.fuzzy_search(txt, item, 27); | |||
var target = result[0]; | |||
var index = result[1]; | |||
var rendered_label = result[2]; | |||
if(target) { | |||
var match_ratio = txt.length / item.length; | |||
var index = (match_ratio > 0.7) ? 10 : 14; | |||
var page = me.pages[target]; | |||
out.push({ | |||
label: __("Open {0}", [__(target).bold()]), | |||
label: rendered_label, | |||
value: __("Open {0}", [__(target)]), | |||
match: txt, | |||
index: index, | |||
type: "Page", | |||
prefix: "Open", | |||
route: [page.route || page.name] | |||
}); | |||
} | |||
@@ -464,10 +562,12 @@ frappe.search.AwesomeBar = Class.extend({ | |||
var target = 'Calendar'; | |||
if(__('calendar').indexOf(txt.toLowerCase()) === 0) { | |||
out.push({ | |||
label: __("Open {0}", [__(target).bold()]), | |||
label: rendered_label, | |||
value: __("Open {0}", [__(target)]), | |||
route: [target, 'Event'], | |||
index: 14, | |||
index: 27, | |||
type: "Calendar", | |||
prefix: "Open", | |||
match: target | |||
}); | |||
} | |||
@@ -478,17 +578,20 @@ frappe.search.AwesomeBar = Class.extend({ | |||
var me = this; | |||
var out = []; | |||
Object.keys(frappe.modules).forEach(function(item) { | |||
var target = me.is_present(txt, item); | |||
var result = me.fuzzy_search(txt, item, 28); | |||
var target = result[0]; | |||
var index = result[1]; | |||
var rendered_label = result[2]; | |||
if(target) { | |||
var match_ratio = txt.length / item.length; | |||
var index = (match_ratio > 0.7) ? 10 : 15; | |||
var module = frappe.modules[target]; | |||
if(module._doctype) return; | |||
ret = { | |||
label: __("Open {0}", [__(target).bold()]), | |||
label: rendered_label, | |||
value: __("Open {0}", [__(target)]), | |||
match: txt, | |||
index: index | |||
index: index, | |||
type: "Module", | |||
prefix: "Open" | |||
} | |||
if(module.link) { | |||
ret.route = [module.link]; | |||
@@ -1,5 +1,7 @@ | |||
<div class="row"> | |||
<div class="col-md-2 col-sm-2 hidden-xs layout-side-section search-sidebar"> | |||
<ul class="module-sidebar-nav overlay-sidebar nav nav-pills nav-stacked search-sidelist"> | |||
</ul> | |||
</div> | |||
<div class="col-md-10 col-sm-10 layout-main-section results-area"> | |||
</div> | |||
@@ -12,7 +12,7 @@ frappe.search.UnifiedSearch = Class.extend({ | |||
this.search_modal.addClass('search-dialog'); | |||
this.input = this.search_modal.find(".search-input"); | |||
this.sidebar = this.search_modal.find(".search-sidebar"); | |||
this.sidelist = this.search_modal.find(".search-sidelist"); | |||
this.results_area = this.search_modal.find(".results-area"); | |||
}, | |||
@@ -32,19 +32,19 @@ frappe.search.UnifiedSearch = Class.extend({ | |||
$this.data('timeout', setTimeout(function(){ | |||
var keywords = me.input.val(); | |||
me.reset(); | |||
if(keywords.length > 1) { | |||
if(keywords.length > 2) { | |||
me.build_results(keywords); | |||
} else { | |||
me.current_type = ''; | |||
} | |||
}, 250)); | |||
}, 600)); | |||
}); | |||
this.build_results(keywords); | |||
setTimeout(function() { me.input.select(); }, 500); | |||
}, | |||
reset: function() { | |||
this.sidebar.empty(); | |||
this.sidelist.empty(); | |||
this.results_area.empty(); | |||
}, | |||
@@ -59,7 +59,9 @@ frappe.search.UnifiedSearch = Class.extend({ | |||
render_results: function(results_obj, keywords){ | |||
var me = this; | |||
if(this.current === 0) { this.reset() } | |||
this.sidebar.append(results_obj.sidelist); | |||
results_obj.sidelist.forEach(function(list_item) { | |||
me.sidelist.append(list_item); | |||
}) | |||
this.results_area.find('.results-status').remove(); | |||
results_obj.sections.forEach(function(section) { | |||
me.summary.append(section); | |||
@@ -70,18 +72,35 @@ frappe.search.UnifiedSearch = Class.extend({ | |||
bind_events: function() { | |||
var me = this; | |||
this.sidebar.find('.list-link').on('click', function() { | |||
me.set_sidebar_link_action($(this)); | |||
this.results_area.on('scroll', function() { | |||
if(me.results_area.find('.all-results-link').length !== 0) { | |||
return; | |||
} | |||
var r = me.results_area.find('.module-section')[1]; | |||
me.results_area.find('.module-section').each(function() { | |||
if(($(this).position().top < 120) && ($(this).position().top + $(this).height() > 120)) { | |||
var types = $(this).attr('data-type').split(','); | |||
me.sidelist.find('.list-link').removeClass('active'); | |||
types.forEach(function(type) { | |||
me.sidelist.find('*[data-category="'+ type +'"]').addClass('active'); | |||
}); | |||
} | |||
}); | |||
}); | |||
this.sidelist.find('.list-link').on('click', function() { | |||
me.set_sidelist_link_action($(this)); | |||
}); | |||
this.results_area.find('.section-more').on('click', function() { | |||
var type = $(this).attr('data-category'); | |||
me.sidebar.find('*[data-category="'+ type +'"]').trigger('click'); | |||
me.sidelist.find('*[data-category="'+ type +'"]').trigger('click'); | |||
}); | |||
}, | |||
set_sidebar_link_action: function(link) { | |||
this.sidebar.find(".list-link a").removeClass("disabled"); | |||
link.find('a').addClass("disabled"); | |||
set_sidelist_link_action: function(link) { | |||
this.sidelist.find(".list-link").removeClass("active"); | |||
this.sidelist.find(".list-link i").addClass("hide"); | |||
link.addClass("active"); | |||
link.find("i").removeClass("hide"); | |||
var type = link.attr('data-category'); | |||
this.results_area.empty().html(this.full_lists[type]); | |||
@@ -101,6 +120,9 @@ frappe.search.UnifiedSearch = Class.extend({ | |||
show_summary: function() { | |||
this.current_type = ''; | |||
this.sidelist.find(".list-link i").addClass("hide"); | |||
this.sidelist.find(".list-link").removeClass("active"); | |||
this.sidelist.find(".list-link").first().addClass("active"); | |||
this.results_area.empty().html(this.summary); | |||
this.bind_events(); | |||
}, | |||
@@ -125,7 +147,7 @@ frappe.search.UnifiedSearch = Class.extend({ | |||
var no_of_results = this.results_area.find('.result').length; | |||
var no_of_results_cue = $('<p class="results-status text-muted small">'+ | |||
no_of_results +' results found</p>'); | |||
this.results_area.find(".result:last").append(no_of_results_cue); | |||
this.results_area.find(".more-results:last").append(no_of_results_cue); | |||
} | |||
this.results_area.find('.more-results.last').slideDown(200, function() { | |||
var height = me.results_area.find('.module-body').height() - 750; | |||
@@ -144,20 +166,20 @@ frappe.search.UnifiedSearch = Class.extend({ | |||
// More searches to go | |||
this.search_objects[this.current].build_results_object(this, keywords); | |||
} else { | |||
// If there's only one link in sidebar, there's no summary (show its full list) | |||
if(this.sidebar.find('.list-link').length === 1) { | |||
// If there's only one link in sidelist, there's no summary (show its full list) | |||
if(this.sidelist.find('.list-link').length === 1) { | |||
this.bind_events(); | |||
this.sidebar.find('.list-link').trigger('click'); | |||
this.sidelist.find('.list-link').trigger('click'); | |||
this.results_area.find('.all-results-link').hide(); | |||
} else if (this.sidebar.find('.list-link').length === 0) { | |||
} else if (this.sidelist.find('.list-link').length === 0) { | |||
this.results_area.html('<p class="results-status text-muted" style="text-align: center;">'+ | |||
'No results found for: '+ "'"+ keywords +"'" +'</p>'); | |||
} else { | |||
var list_types = this.get_all_list_types(); | |||
if(list_types.indexOf(this.current_type) >= 0) { | |||
this.bind_events(); | |||
this.sidebar.find('*[data-category="'+ this.current_type +'"]').trigger('click'); | |||
this.sidelist.find('*[data-category="'+ this.current_type +'"]').trigger('click'); | |||
} else { | |||
this.show_summary(); | |||
} | |||
@@ -167,7 +189,7 @@ frappe.search.UnifiedSearch = Class.extend({ | |||
get_all_list_types: function() { | |||
var types = []; | |||
this.sidebar.find('.list-link').each(function() { | |||
this.sidelist.find('.list-link').each(function() { | |||
types.push($(this).attr('data-category')); | |||
}); | |||
return types; | |||
@@ -214,18 +236,16 @@ frappe.search.GlobalSearch = Class.extend({ | |||
make_sidelist: function() { | |||
var me = this; | |||
var sidelist = $('<ul class="list-unstyled sidebar-menu nav-list"></ul>'); | |||
sidelist.append('<li class="h6">'+ me.search_type +'</li>'); | |||
var sidelist = []; | |||
this.types.forEach(function(type) { | |||
sidelist.append(me.make_sidelist_item(type)); | |||
sidelist.push(me.make_sidelist_item(type)); | |||
}); | |||
sidelist.append('<li class="divider"></li>'); | |||
return sidelist; | |||
}, | |||
make_sidelist_item: function(type) { | |||
var sidelist_item = '<li class="list-link" data-search="{0}"' + | |||
'data-category="{1}"><a>{1}</a></li>'; | |||
var sidelist_item = '<li class="strong module-sidebar-item list-link" data-search="{0}"' + | |||
'data-category="{1}"><a><span>{1}</span><i class="fa fa-chevron-right pull-right hide"></a></li>'; | |||
return $(__(sidelist_item, [this.search_type, type])); | |||
}, | |||
@@ -319,7 +339,7 @@ frappe.search.GlobalSearch = Class.extend({ | |||
make_section: function(type, results) { | |||
var me = this; | |||
var results_section = $('<div class="row module-section '+type+'-section">'+ | |||
var results_section = $('<div class="row module-section" data-type="'+type+'">'+ | |||
'<div class="col-sm-12 module-section-column">' + | |||
'<div class="h4 section-head">'+type+'</div>' + | |||
'<div class="section-body"></div>'+ | |||
@@ -329,27 +349,53 @@ frappe.search.GlobalSearch = Class.extend({ | |||
results_col.append(me.make_result_item(type, result)); | |||
}); | |||
if(results.length > this.section_length) { | |||
results_col.append('<a class="small section-more" data-category="' | |||
+ type + '">More...</a>'); | |||
results_col.append('<button class="btn btn-default btn-xs text-muted section-more" data-category="' | |||
+ type + '" style="margin-top:10px">More...</button>'); | |||
} | |||
return results_section; | |||
}, | |||
make_result_subtypes_property: function(results) { | |||
var compressed_results = []; | |||
var labels = []; | |||
results.forEach(function(r) { | |||
if(labels.indexOf(r.label) === -1) { | |||
labels.push(r.label); | |||
} | |||
}); | |||
labels.forEach(function(l) { | |||
var item_group = { | |||
title: l, | |||
subtypes: [] | |||
}; | |||
results.forEach(function(r) { | |||
if (r.label === l) { | |||
item_group.subtypes.push(r); | |||
} | |||
}); | |||
compressed_results.push(item_group); | |||
}); | |||
return compressed_results; | |||
}, | |||
make_full_list: function(type, results, more) { | |||
var me = this; | |||
var results_list = $(' <div class="module-body"><div class="row module-section '+ | |||
var results_list = $(' <div class="module-body"><div class="row module-section full-list '+ | |||
type+'-section">'+'<div class="col-sm-12 module-section-column">' + | |||
'<div class="back-link"><a class="all-results-link small"> All Results</a></div>' + | |||
'<div class="h4 section-head">'+type+'</div>' + | |||
'<div class="section-body"></div>'+ | |||
'</div></div></div>'); | |||
'<div class="section-body"></div></div></div></div>'); | |||
if(type === "Lists") { | |||
results = this.make_result_subtypes_property(results); | |||
} | |||
var results_col = results_list.find('.module-section-column'); | |||
results.forEach(function(result) { | |||
results_col.append(me.make_result_item(type, result)); | |||
}); | |||
if(more) { | |||
results_col.append('<a class="small list-more" data-search="'+ this.search_type +'" data-category="' | |||
+ type + '">More...</a>'); | |||
results_col.append('<button class="btn btn-default btn-xs text-muted list-more" data-search="'+ | |||
this.search_type +'" data-category="'+ type + '" style="margin-top:10px"> More...</button>'); | |||
} | |||
return results_list; | |||
}, | |||
@@ -386,7 +432,6 @@ frappe.search.GlobalSearch = Class.extend({ | |||
}, | |||
get_awesome_bar_options: function(keywords, ref) { | |||
var me = this; | |||
var doctypes = []; | |||
var current = 0; | |||
@@ -426,7 +471,7 @@ frappe.search.GlobalSearch = Class.extend({ | |||
if(current < doctypes.length) { | |||
get_results(); | |||
} else { | |||
ref.set_global_results(results); | |||
ref.set_global_results(results, keywords); | |||
} | |||
} | |||
} | |||
@@ -434,13 +479,13 @@ frappe.search.GlobalSearch = Class.extend({ | |||
}; | |||
var make_option = function(data) { | |||
console.log("GS search", me.get_finds(data.content, keywords).slice(0,86) + '...'); | |||
return { | |||
label: __("{0}: {1}", [__(data.doctype).bold(), data.name]), | |||
value: __("{0}: {1}", [__(data.doctype), data.name]), | |||
route: ["Form", data.doctype, data.name], | |||
match: data.doctype, | |||
index: 5, | |||
index: 41, | |||
default: "Global", | |||
description: me.get_finds(data.content, keywords).slice(0,86) + '...' | |||
} | |||
}; | |||
@@ -455,7 +500,6 @@ frappe.search.NavSearch = frappe.search.GlobalSearch.extend({ | |||
init: function() { | |||
this.search_type = 'Navigation'; | |||
}, | |||
set_types: function() { | |||
var me = this; | |||
this.section_length = 4; | |||
@@ -520,9 +564,47 @@ frappe.search.NavSearch = frappe.search.GlobalSearch.extend({ | |||
}, | |||
make_result_item: function(type, result) { | |||
var link_html = '<div class="result '+ type +'-result single-link">' + | |||
'<a href="{0}" class="module-section-link small">{1}</a>' + | |||
'<p class="small"></p></div>'; | |||
if(!result.subtypes) { | |||
var link_html = '<div class="result '+ type +'-result single-link">' + | |||
'<a href="{0}" class="module-section-link small">{1}</a>' + | |||
'<p class="small"></p></div>'; | |||
return this.make_result_link(type, result, link_html); | |||
} else { | |||
var result_div = $('<div class="result '+ type +'-result single-link"></div>'); | |||
var button_html = '<button class="btn btn-default btn-xs text-muted result-subtype"'+ | |||
'>{0}</button>' | |||
result.subtypes.forEach(function(s) { | |||
if(["Gantt", "Report", "Calendar"].indexOf(s.type) !== -1) { | |||
var button = $(__(button_html, [s.type])); | |||
button.on('click', function() { | |||
if(s.route_options) { | |||
frappe.route_options = s.route_options; | |||
} | |||
frappe.set_route(s.route); | |||
return false; | |||
}); | |||
result_div.append(button); | |||
} else { | |||
title_link_html = '<a href="{0}" class="module-section-link small">{1}</a>'; | |||
var link = $(__(title_link_html, ['#', result.title + ' ' + s.type])); | |||
link.on('click', function() { | |||
if(s.route_options) { | |||
frappe.route_options = s.route_options; | |||
} | |||
frappe.set_route(s.route); | |||
return false; | |||
}); | |||
result_div.append(link); | |||
} | |||
}) | |||
result_div.append($('<p class="small"></p>')); | |||
return result_div; | |||
} | |||
}, | |||
make_result_link: function(type, result, link_html) { | |||
if(!result.onclick) { | |||
var link = $(__(link_html, ['#', result.label])); | |||
link.on('click', function() { | |||
@@ -545,9 +627,14 @@ frappe.search.NavSearch = frappe.search.GlobalSearch.extend({ | |||
make_dual_sections: function() { | |||
this.dual_sections = []; | |||
var section_html = '<div class="row module-section dual-section"></div>'; | |||
for(var i = 0; i < this.sections.length; i++) { | |||
var results_section = $(section_html); | |||
var types; | |||
if(i+1 < this.types.length) { | |||
types = this.types[i] + ',' + this.types[i+1]; | |||
} else { | |||
types = this.types[i]; | |||
} | |||
var results_section = $('<div class="row module-section dual-section" data-type="'+ types +'"></div>'); | |||
for(var j = 0; j < 2 && i < this.sections.length; j++, i++){ | |||
results_section.append(this.sections[i]); | |||
} | |||
@@ -574,12 +661,15 @@ frappe.search.NavSearch = frappe.search.GlobalSearch.extend({ | |||
'<div class="h4 section-head">'+type+'</div>' + | |||
'<div class="section-body"></div>'+ | |||
'</div>'); | |||
if(type === "Lists") { | |||
results = this.make_result_subtypes_property(results); | |||
} | |||
results.slice(0, this.section_length).forEach(function(result) { | |||
results_column.append(me.make_result_item(type, result)); | |||
}); | |||
if(results.length > this.section_length) { | |||
results_column.append('<a class="small section-more" data-category="' | |||
+ type + '">More...</a>'); | |||
results_column.append('<button class="btn btn-default btn-xs text-muted section-more" data-category="' | |||
+ type + '" style="margin-top:10px">More...</button>'); | |||
} | |||
return results_column; | |||
} | |||
@@ -597,12 +687,11 @@ frappe.search.HelpSearch = frappe.search.GlobalSearch.extend({ | |||
}, | |||
make_sidelist: function() { | |||
var sidelist = $('<ul class="list-unstyled sidebar-menu nav-list"></ul>'); | |||
var sidelist_item = '<li class="h6 list-link" data-search="'+ this.search_type + '"' + | |||
'data-category="'+ this.search_type + '"><a style="font-size: 11px;">'+ | |||
this.search_type +'</a></li>'; | |||
sidelist.append(sidelist_item); | |||
sidelist.append('<li class="divider"></li>'); | |||
var sidelist = []; | |||
var sidelist_item = '<li class="strong module-sidebar-item list-link help-link" '+ | |||
'data-search="'+ this.search_type + '" data-category="'+ this.search_type + '"><a><span>'+ | |||
this.search_type +'</span><i class="fa fa-chevron-right pull-right hide"></a></li>'; | |||
sidelist.push(sidelist_item); | |||
return sidelist; | |||
}, | |||
@@ -231,7 +231,7 @@ frappe.ui.toolbar.clear_cache = function() { | |||
frappe.ui.toolbar.download_backup = function() { | |||
msgprint(__("Your download is being built, this may take a few moments...")); | |||
return $c('frappe.utils.backups.get_backup',{},function(r,rt) {}); | |||
$c('frappe.utils.backups.get_backup',{},function(r,rt) {}); | |||
return false; | |||
} | |||
@@ -529,7 +529,9 @@ frappe.views.CommunicationComposer = Class.extend({ | |||
if(last_email) { | |||
var last_email_content = last_email.original_comment || last_email.content; | |||
fields.content.set_input(reply | |||
fields.content.set_input( | |||
'<p><br></p>' | |||
+ reply | |||
+ "<br><!-- original-reply --><br>" | |||
+ '<blockquote>' + | |||
'<p>' + __("On {0}, {1} wrote:", | |||
@@ -88,7 +88,7 @@ frappe.views.QueryReport = Class.extend({ | |||
}, me.report_doc.letter_head); | |||
}, true); | |||
this.page.add_menu_item(__('Export'), function() { me.export_report(); }, | |||
this.page.add_menu_item(__('Export'), function() { me.make_export(); }, | |||
true); | |||
this.page.add_menu_item(__("Setup Auto Email"), function() { | |||
@@ -784,18 +784,49 @@ frappe.views.QueryReport = Class.extend({ | |||
} | |||
}); | |||
}, | |||
export_report: function() { | |||
make_export: function() { | |||
var me = this; | |||
this.title = this.report_name; | |||
if(!frappe.model.can_export(this.report_doc.ref_doctype)) { | |||
msgprint(__("You are not allowed to export this report")); | |||
return false; | |||
} | |||
var result = $.map(frappe.slickgrid_tools.get_view_data(this.columns, this.dataView), | |||
function(row) { | |||
return [row.splice(1)]; | |||
}); | |||
this.title = this.report_name; | |||
frappe.tools.downloadify(result, null, this.title); | |||
frappe.prompt({fieldtype:"Select", label: __("Select File Type"), fieldname:"file_format_type", | |||
options:"Excel\nCSV", default:"Excel", reqd: 1}, | |||
function(data) { | |||
if (data.file_format_type == "CSV") { | |||
var result = $.map(frappe.slickgrid_tools.get_view_data(me.columns, me.dataView), | |||
function(row) { | |||
return [row.splice(1)]; | |||
}); | |||
frappe.tools.downloadify(result, null, me.title); | |||
} | |||
else if (data.file_format_type == "Excel") { | |||
me.wrapper.find(".results").toggle(false); | |||
try { | |||
var filters = me.get_values(true); | |||
} catch(e) { | |||
return; | |||
} | |||
var args = { | |||
cmd: 'frappe.desk.query_report.export_query', | |||
report_name: me.report_name, | |||
file_format_type: data.file_format_type, | |||
filters: filters | |||
}; | |||
open_url_post(frappe.request.url, args); | |||
} | |||
}, __("Export Report: "+ me.title), __("Download")); | |||
return false; | |||
}, | |||
@@ -265,6 +265,7 @@ frappe.views.ReportView = frappe.ui.Listing.extend({ | |||
filters: this.filter_list.get_filters(), | |||
save_list_settings_fields: 1, | |||
with_childnames: 1, | |||
file_format_type: this.file_format_type | |||
} | |||
}, | |||
@@ -676,11 +677,22 @@ frappe.views.ReportView = frappe.ui.Listing.extend({ | |||
} | |||
var export_btn = this.page.add_menu_item(__('Export'), function() { | |||
var args = me.get_args(); | |||
args.cmd = 'frappe.desk.reportview.export_query' | |||
if(me.add_totals_row) { | |||
args.add_totals_row = 1; | |||
} | |||
open_url_post(frappe.request.url, args); | |||
frappe.prompt({fieldtype:"Select", label: __("Select File Type"), fieldname:"file_format_type", | |||
options:"Excel\nCSV", default:"Excel", reqd: 1}, | |||
function(data) { | |||
args.cmd = 'frappe.desk.reportview.export_query'; | |||
args.file_format_type = data.file_format_type; | |||
if(me.add_totals_row) { | |||
args.add_totals_row = 1; | |||
} | |||
open_url_post(frappe.request.url, args); | |||
}, __("Export Report: " + me.doctype), __("Download")); | |||
}, true); | |||
}, | |||
@@ -835,6 +847,11 @@ frappe.ui.ColumnPicker = Class.extend({ | |||
}); | |||
new Sortable(this.column_list.get(0), { | |||
//handle: '.sortable-handle', | |||
filter: 'input', | |||
draggable: '.column-list-item', | |||
chosenClass: 'sortable-chosen', | |||
dragClass: 'sortable-chosen', | |||
onUpdate: function(event) { | |||
me.columns = []; | |||
$.each($(me.dialog.body).find('.column-list .column-list-item'), | |||
@@ -856,7 +873,8 @@ frappe.ui.ColumnPicker = Class.extend({ | |||
var me = this; | |||
var w = $('<div class="column-list-item"><div class="row">\ | |||
<div class="col-xs-1"><i class="fa fa-sort text-muted drag-handle" style="margin-top: 9px;"></i></div>\ | |||
<div class="col-xs-1">\ | |||
<i class="fa fa-sort text-muted"></i></div>\ | |||
<div class="col-xs-10"></div>\ | |||
<div class="col-xs-1"><a class="close">×</a></div>\ | |||
</div></div>') | |||
@@ -149,7 +149,7 @@ frappe.views.TreeView = Class.extend({ | |||
var toolbar = [ | |||
{toggle_btn: true}, | |||
{ | |||
label:__("Edit"), | |||
label:__(me.can_write? "Edit": "Details"), | |||
condition: function(node) { | |||
return !node.root && me.can_read; | |||
}, | |||
@@ -283,7 +283,7 @@ frappe.views.TreeView = Class.extend({ | |||
}, | |||
set_primary_action: function(){ | |||
var me = this; | |||
if (!this.opts.disable_add_node) { | |||
if (!this.opts.disable_add_node && this.can_create) { | |||
me.page.set_primary_action(__("New"), function() { | |||
me.new_node(); | |||
}, "octicon octicon-plus") | |||
@@ -563,12 +563,26 @@ textarea.form-control { | |||
} | |||
.layout-side-section { | |||
padding-left: 15px; | |||
.help-link { | |||
padding-top: 20px; | |||
text-transform: uppercase; | |||
} | |||
.nav > li > a { | |||
padding-left: 20px; | |||
} | |||
} | |||
.results-area { | |||
a { | |||
color: #5E64FF; | |||
} | |||
.single-link a { | |||
color: #36414c; | |||
} | |||
} | |||
// .results-area a { | |||
// color: #5E64FF; | |||
// } | |||
.module-section { | |||
.back-link { | |||
margin-bottom: 20px; | |||
@@ -580,13 +594,29 @@ textarea.form-control { | |||
content: '\f0a4'; | |||
} | |||
} | |||
.dual-section .result a { | |||
color: black; | |||
.full-list { | |||
.result { | |||
border-bottom: 1px solid #d1d8dd; | |||
margin-top: 10px; | |||
.result-subtype{ | |||
float: right; | |||
margin-left: 10px; | |||
} | |||
} | |||
.section-head { | |||
margin-bottom: 25px; | |||
} | |||
} | |||
.dual-section .result a b{ | |||
color: #4e6161; | |||
.dual-section { | |||
.result-subtype{ | |||
display: none; | |||
} | |||
} | |||
.result-status { | |||
margin-top: 30px; | |||
text-align: center; | |||
@@ -309,6 +309,10 @@ h6.uppercase, .h6.uppercase { | |||
.btn-more { | |||
margin-left: 65px; | |||
} | |||
.gmail_extra { | |||
display: none; | |||
} | |||
} | |||
.timeline-items { | |||
@@ -28,7 +28,6 @@ | |||
.column-list-item { | |||
padding: 10px; | |||
cursor: move; | |||
border-bottom: 1px solid @border-color; | |||
} | |||
@@ -36,10 +35,18 @@ | |||
border-bottom: none; | |||
} | |||
.drag-handle { | |||
.sortable-handle { | |||
cursor: move; | |||
} | |||
.sortable-chosen { | |||
background-color: @light-yellow; | |||
} | |||
.fa-sort { | |||
margin: 0px 7px; | |||
position: relative; | |||
top: -1px; | |||
margin-top: 9px; | |||
margin-right: -15px; | |||
} | |||
.form-control { | |||
@@ -109,6 +109,7 @@ def get_dict(fortype, name=None): | |||
messages = get_messages_from_file(name) | |||
elif fortype=="boot": | |||
messages = get_messages_from_include_files() | |||
messages += frappe.db.sql("select 'Print Format:', name from `tabPrint Format`") | |||
messages += frappe.db.sql("select 'DocType:', name from tabDocType") | |||
messages += frappe.db.sql("select 'Role:', name from tabRole") | |||
messages += frappe.db.sql("select 'Module:', name from `tabModule Def`") | |||
@@ -6,7 +6,7 @@ from __future__ import unicode_literals | |||
# IMPORTANT: only import safe functions as this module will be included in jinja environment | |||
import frappe | |||
import operator | |||
import re, urllib, datetime, math | |||
import re, urllib, datetime, math, time | |||
import babel.dates | |||
from babel.core import UnknownLocaleError | |||
from dateutil import parser | |||
@@ -116,6 +116,9 @@ def now_datetime(): | |||
dt = convert_utc_to_user_timezone(datetime.datetime.utcnow()) | |||
return dt.replace(tzinfo=None) | |||
def get_timestamp(date): | |||
return time.mktime(getdate(date).timetuple()) | |||
def get_eta(from_time, percent_complete): | |||
diff = time_diff(now_datetime(), from_time).total_seconds() | |||
return str(datetime.timedelta(seconds=(100 - percent_complete) / percent_complete * diff)) | |||
@@ -148,4 +148,5 @@ def search_in_doctype(doctype, text, start, limit): | |||
doctype = %s AND | |||
match(content) against (%s IN BOOLEAN MODE) | |||
limit {start}, {limit}'''.format(start=start, limit=limit), (doctype, text), as_dict=True) | |||
return results | |||
return results |
@@ -36,7 +36,8 @@ def build_response(response_type=None): | |||
'download': as_raw, | |||
'json': as_json, | |||
'page': as_page, | |||
'redirect': redirect | |||
'redirect': redirect, | |||
'binary': as_binary | |||
} | |||
return response_type_map[frappe.response.get('type') or response_type]() | |||
@@ -68,6 +69,13 @@ def as_json(): | |||
response.data = json.dumps(frappe.local.response, default=json_handler, separators=(',',':')) | |||
return response | |||
def as_binary(): | |||
response = Response() | |||
response.mimetype = 'application/octet-stream' | |||
response.headers[b"Content-Disposition"] = ("filename=\"%s\"" % frappe.response['filename'].replace(' ', '_')).encode("utf-8") | |||
response.data = frappe.response['filecontent'] | |||
return response | |||
def make_logs(response = None): | |||
"""make strings for msgprint and errprint""" | |||
if not response: | |||
@@ -0,0 +1,26 @@ | |||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | |||
# MIT License. See license.txt | |||
from __future__ import unicode_literals | |||
import frappe | |||
from frappe.utils import encode, cstr, cint, flt, comma_or | |||
import openpyxl | |||
from cStringIO import StringIO | |||
from openpyxl.styles import Font | |||
# return xlsx file object | |||
def make_xlsx(data, sheet_name): | |||
wb = openpyxl.Workbook(write_only=True) | |||
ws = wb.create_sheet(sheet_name, 0) | |||
row1 = ws.row_dimensions[1] | |||
row1.font = Font(name='Calibri',bold=True) | |||
for row in data: | |||
ws.append(row) | |||
xlsx_file = StringIO() | |||
wb.save(xlsx_file) | |||
return xlsx_file |
@@ -22,6 +22,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 1, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Title", | |||
@@ -49,6 +50,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Published On", | |||
@@ -76,6 +78,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Published", | |||
@@ -103,6 +106,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -129,6 +133,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 1, | |||
"label": "Blog Category", | |||
@@ -157,6 +162,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 1, | |||
"label": "Blogger", | |||
@@ -185,6 +191,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Route", | |||
@@ -213,6 +220,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -240,6 +248,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Blog Intro", | |||
@@ -267,6 +276,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 1, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Content", | |||
@@ -294,6 +304,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Email Sent", | |||
@@ -322,7 +333,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 5, | |||
"modified": "2016-12-29 14:40:20.508849", | |||
"modified": "2017-02-20 13:33:26.617917", | |||
"modified_by": "Administrator", | |||
"module": "Website", | |||
"name": "Blog Post", | |||
@@ -338,7 +349,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -359,7 +369,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -374,6 +383,7 @@ | |||
"quick_entry": 0, | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"show_name_in_global_search": 0, | |||
"sort_order": "ASC", | |||
"title_field": "title", | |||
"track_changes": 1, | |||
@@ -21,7 +21,9 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "Title", | |||
"length": 0, | |||
"no_copy": 0, | |||
@@ -30,6 +32,7 @@ | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 1, | |||
"search_index": 0, | |||
@@ -47,7 +50,9 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "Enabled", | |||
"length": 0, | |||
"no_copy": 0, | |||
@@ -56,6 +61,7 @@ | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 0, | |||
"search_index": 0, | |||
@@ -73,7 +79,9 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "Route", | |||
"length": 0, | |||
"no_copy": 0, | |||
@@ -82,6 +90,7 @@ | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 1, | |||
"search_index": 0, | |||
@@ -100,7 +109,9 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "Reference Doctype", | |||
"length": 0, | |||
"no_copy": 0, | |||
@@ -109,7 +120,8 @@ | |||
"precision": "", | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 1, | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 0, | |||
"search_index": 0, | |||
@@ -127,7 +139,9 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 1, | |||
"in_standard_filter": 0, | |||
"label": "Role", | |||
"length": 0, | |||
"no_copy": 0, | |||
@@ -137,6 +151,7 @@ | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 0, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 0, | |||
"search_index": 0, | |||
@@ -154,7 +169,9 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Target", | |||
"length": 0, | |||
"no_copy": 0, | |||
@@ -163,6 +180,7 @@ | |||
"print_hide": 0, | |||
"print_hide_if_no_value": 0, | |||
"read_only": 1, | |||
"remember_last_selected_value": 0, | |||
"report_hide": 0, | |||
"reqd": 0, | |||
"search_index": 0, | |||
@@ -180,7 +198,7 @@ | |||
"issingle": 0, | |||
"istable": 1, | |||
"max_attachments": 0, | |||
"modified": "2016-09-23 05:42:17.928917", | |||
"modified": "2017-02-23 00:56:55.063155", | |||
"modified_by": "Administrator", | |||
"module": "Website", | |||
"name": "Portal Menu Item", | |||
@@ -190,7 +208,9 @@ | |||
"quick_entry": 1, | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"show_name_in_global_search": 0, | |||
"sort_field": "modified", | |||
"sort_order": "DESC", | |||
"track_changes": 0, | |||
"track_seen": 0 | |||
} |
@@ -22,6 +22,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Title", | |||
@@ -50,6 +51,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Title", | |||
@@ -77,6 +79,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Route", | |||
@@ -106,6 +109,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Slideshow", | |||
@@ -134,6 +138,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -161,6 +166,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Published", | |||
@@ -189,6 +195,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Show Title", | |||
@@ -218,6 +225,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Content", | |||
@@ -246,6 +254,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Main Section", | |||
@@ -273,6 +282,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Script", | |||
@@ -301,6 +311,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Insert Code", | |||
@@ -329,6 +340,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Javascript", | |||
@@ -357,6 +369,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Style", | |||
@@ -384,6 +397,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Insert Style", | |||
@@ -411,6 +425,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Text Align", | |||
@@ -440,6 +455,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "CSS", | |||
@@ -468,6 +484,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Settings", | |||
@@ -496,6 +513,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Sidebar and Comments", | |||
@@ -524,6 +542,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Show Sidebar", | |||
@@ -552,6 +571,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Website Sidebar", | |||
@@ -581,6 +601,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"length": 0, | |||
@@ -608,6 +629,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Enable Comments", | |||
@@ -636,6 +658,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Priority", | |||
@@ -665,6 +688,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Header and Description", | |||
@@ -693,6 +717,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Description", | |||
@@ -721,6 +746,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Header", | |||
@@ -749,7 +775,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 20, | |||
"modified": "2016-12-29 07:51:57.437822", | |||
"modified": "2017-02-20 13:33:08.460608", | |||
"modified_by": "Administrator", | |||
"module": "Website", | |||
"name": "Web Page", | |||
@@ -765,7 +791,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 0, | |||
"read": 1, | |||
@@ -781,6 +806,7 @@ | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"search_fields": "title", | |||
"show_name_in_global_search": 1, | |||
"sort_order": "ASC", | |||
"title_field": "title", | |||
"track_changes": 1, | |||
@@ -24,6 +24,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Workflow Name", | |||
@@ -52,6 +53,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 1, | |||
"label": "Document Type", | |||
@@ -81,6 +83,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Is Active", | |||
@@ -109,6 +112,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Don't Override Status", | |||
@@ -138,6 +142,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "States", | |||
@@ -166,6 +171,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Document States", | |||
@@ -195,6 +201,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Transition Rules", | |||
@@ -223,6 +230,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Transitions", | |||
@@ -253,6 +261,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Workflow State Field", | |||
@@ -282,7 +291,7 @@ | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"menu_index": 0, | |||
"modified": "2016-12-29 14:40:05.383145", | |||
"modified": "2017-02-20 13:33:38.497751", | |||
"modified_by": "Administrator", | |||
"module": "Workflow", | |||
"name": "Workflow", | |||
@@ -298,7 +307,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -313,6 +321,8 @@ | |||
"quick_entry": 0, | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"show_name_in_global_search": 1, | |||
"sort_order": "ASC", | |||
"track_changes": 1, | |||
"track_seen": 0 | |||
} |
@@ -23,6 +23,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "State", | |||
@@ -51,6 +52,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Icon", | |||
@@ -80,6 +82,7 @@ | |||
"ignore_user_permissions": 0, | |||
"ignore_xss_filter": 0, | |||
"in_filter": 0, | |||
"in_global_search": 0, | |||
"in_list_view": 0, | |||
"in_standard_filter": 0, | |||
"label": "Style", | |||
@@ -109,7 +112,7 @@ | |||
"issingle": 0, | |||
"istable": 0, | |||
"max_attachments": 0, | |||
"modified": "2016-12-29 14:40:34.867205", | |||
"modified": "2017-02-20 13:33:44.011509", | |||
"modified_by": "Administrator", | |||
"module": "Workflow", | |||
"name": "Workflow State", | |||
@@ -125,7 +128,6 @@ | |||
"export": 0, | |||
"if_owner": 0, | |||
"import": 0, | |||
"is_custom": 0, | |||
"permlevel": 0, | |||
"print": 1, | |||
"read": 1, | |||
@@ -140,6 +142,8 @@ | |||
"quick_entry": 1, | |||
"read_only": 0, | |||
"read_only_onload": 0, | |||
"show_name_in_global_search": 1, | |||
"sort_order": "ASC", | |||
"track_changes": 1, | |||
"track_seen": 0 | |||
} |
@@ -41,3 +41,4 @@ xlwt | |||
oauthlib | |||
PyJWT | |||
pypdf | |||
openpyxl |