@@ -18,6 +18,7 @@ | |||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "", | "label": "", | ||||
@@ -42,6 +43,7 @@ | |||||
"fieldtype": "Link", | "fieldtype": "Link", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 1, | "in_list_view": 1, | ||||
"label": "Module", | "label": "Module", | ||||
@@ -69,6 +71,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Is Child Table", | "label": "Is Child Table", | ||||
@@ -95,6 +98,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Is Single", | "label": "Is Single", | ||||
@@ -120,6 +124,7 @@ | |||||
"fieldtype": "Column Break", | "fieldtype": "Column Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"length": 0, | "length": 0, | ||||
@@ -142,6 +147,7 @@ | |||||
"fieldtype": "Select", | "fieldtype": "Select", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Document Type", | "label": "Document Type", | ||||
@@ -168,6 +174,7 @@ | |||||
"fieldtype": "Data", | "fieldtype": "Data", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Icon", | "label": "Icon", | ||||
@@ -191,6 +198,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Custom?", | "label": "Custom?", | ||||
@@ -214,6 +222,7 @@ | |||||
"fieldtype": "Data", | "fieldtype": "Data", | ||||
"hidden": 1, | "hidden": 1, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Plugin", | "label": "Plugin", | ||||
@@ -237,6 +246,7 @@ | |||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Fields", | "label": "Fields", | ||||
@@ -261,6 +271,7 @@ | |||||
"fieldtype": "Table", | "fieldtype": "Table", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Fields", | "label": "Fields", | ||||
@@ -287,6 +298,7 @@ | |||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Naming", | "label": "Naming", | ||||
@@ -306,11 +318,12 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"description": "<a onclick=\"msgprint('<ol>\\\n<li><b>field:[fieldname]</b> - By Field\\\n<li><b>naming_series:</b> - By Naming Series (field called naming_series must be present\\\n<li><b>Prompt</b> - Prompt user for a name\\\n<li><b>[series]</b> - Series by prefix (separated by a dot); for example PRE.#####\\\n</ol>')\">Naming Options</a>", | |||||
"description": "<a>Naming Options</a>", | |||||
"fieldname": "autoname", | "fieldname": "autoname", | ||||
"fieldtype": "Data", | "fieldtype": "Data", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Auto Name", | "label": "Auto Name", | ||||
@@ -336,6 +349,7 @@ | |||||
"fieldtype": "Select", | "fieldtype": "Select", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Name Case", | "label": "Name Case", | ||||
@@ -362,6 +376,7 @@ | |||||
"fieldtype": "Small Text", | "fieldtype": "Small Text", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Description", | "label": "Description", | ||||
@@ -388,6 +403,7 @@ | |||||
"fieldtype": "Column Break", | "fieldtype": "Column Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"length": 0, | "length": 0, | ||||
@@ -412,6 +428,7 @@ | |||||
"fieldtype": "Data", | "fieldtype": "Data", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Title Field", | "label": "Title Field", | ||||
@@ -437,6 +454,7 @@ | |||||
"fieldtype": "Data", | "fieldtype": "Data", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Timeline Field", | "label": "Timeline Field", | ||||
@@ -462,6 +480,7 @@ | |||||
"fieldtype": "Data", | "fieldtype": "Data", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Search Fields", | "label": "Search Fields", | ||||
@@ -490,6 +509,7 @@ | |||||
"fieldtype": "Data", | "fieldtype": "Data", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Sort Field", | "label": "Sort Field", | ||||
@@ -515,6 +535,7 @@ | |||||
"fieldtype": "Select", | "fieldtype": "Select", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Sort Order", | "label": "Sort Order", | ||||
@@ -540,6 +561,7 @@ | |||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Permission Rules", | "label": "Permission Rules", | ||||
@@ -564,6 +586,7 @@ | |||||
"fieldtype": "Table", | "fieldtype": "Table", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Permissions", | "label": "Permissions", | ||||
@@ -591,6 +614,7 @@ | |||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"length": 0, | "length": 0, | ||||
@@ -613,6 +637,7 @@ | |||||
"fieldtype": "Column Break", | "fieldtype": "Column Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Permissions Settings", | "label": "Permissions Settings", | ||||
@@ -636,6 +661,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "User Cannot Create", | "label": "User Cannot Create", | ||||
@@ -661,6 +687,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "User Cannot Search", | "label": "User Cannot Search", | ||||
@@ -686,6 +713,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Is Submittable", | "label": "Is Submittable", | ||||
@@ -710,6 +738,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Allow Import", | "label": "Allow Import", | ||||
@@ -733,6 +762,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Allow Rename", | "label": "Allow Rename", | ||||
@@ -758,6 +788,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "In Dialog", | "label": "In Dialog", | ||||
@@ -783,6 +814,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Show Print First", | "label": "Show Print First", | ||||
@@ -808,6 +840,7 @@ | |||||
"fieldtype": "Int", | "fieldtype": "Int", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Max Attachments", | "label": "Max Attachments", | ||||
@@ -833,9 +866,10 @@ | |||||
"fieldtype": "Column Break", | "fieldtype": "Column Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Hide Actions", | |||||
"label": "Other Settings", | |||||
"length": 0, | "length": 0, | ||||
"no_copy": 0, | "no_copy": 0, | ||||
"permlevel": 0, | "permlevel": 0, | ||||
@@ -856,6 +890,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Hide Heading", | "label": "Hide Heading", | ||||
@@ -881,6 +916,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Hide Toolbar", | "label": "Hide Toolbar", | ||||
@@ -906,6 +942,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Hide Copy", | "label": "Hide Copy", | ||||
@@ -923,6 +960,31 @@ | |||||
"set_only_once": 0, | "set_only_once": 0, | ||||
"unique": 0 | "unique": 0 | ||||
}, | }, | ||||
{ | |||||
"allow_on_submit": 0, | |||||
"bold": 0, | |||||
"collapsible": 0, | |||||
"fieldname": "track_seen", | |||||
"fieldtype": "Check", | |||||
"hidden": 0, | |||||
"ignore_user_permissions": 0, | |||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | |||||
"in_list_view": 0, | |||||
"label": "Track Seen", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"permlevel": 0, | |||||
"precision": "", | |||||
"print_hide": 0, | |||||
"print_hide_if_no_value": 0, | |||||
"read_only": 0, | |||||
"report_hide": 0, | |||||
"reqd": 0, | |||||
"search_index": 0, | |||||
"set_only_once": 0, | |||||
"unique": 0 | |||||
}, | |||||
{ | { | ||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
@@ -931,6 +993,7 @@ | |||||
"fieldtype": "Data", | "fieldtype": "Data", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Default Print Format", | "label": "Default Print Format", | ||||
@@ -957,7 +1020,7 @@ | |||||
"issingle": 0, | "issingle": 0, | ||||
"istable": 0, | "istable": 0, | ||||
"max_attachments": 0, | "max_attachments": 0, | ||||
"modified": "2016-02-01 07:55:35.810722", | |||||
"modified": "2016-03-25 05:25:12.265558", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Core", | "module": "Core", | ||||
"name": "DocType", | "name": "DocType", | ||||
@@ -1008,5 +1071,6 @@ | |||||
"read_only_onload": 0, | "read_only_onload": 0, | ||||
"search_fields": "module", | "search_fields": "module", | ||||
"sort_field": "modified", | "sort_field": "modified", | ||||
"sort_order": "DESC" | |||||
"sort_order": "DESC", | |||||
"track_seen": 0 | |||||
} | } |
@@ -20,7 +20,7 @@ frappe.ui.form.on('User', { | |||||
}, | }, | ||||
onload: function(frm) { | onload: function(frm) { | ||||
if(has_common(user_roles, ["Administrator", "System Manager"])) { | |||||
if(has_common(user_roles, ["Administrator", "System Manager"]) && !frm.doc.__islocal) { | |||||
if(!frm.roles_editor) { | if(!frm.roles_editor) { | ||||
var role_area = $('<div style="min-height: 300px">') | var role_area = $('<div style="min-height: 300px">') | ||||
.appendTo(frm.fields_dict.roles_html.wrapper); | .appendTo(frm.fields_dict.roles_html.wrapper); | ||||
@@ -452,7 +452,6 @@ def user_query(doctype, txt, searchfield, start, page_len, filters): | |||||
where enabled=1 | where enabled=1 | ||||
and docstatus < 2 | and docstatus < 2 | ||||
and name not in ({standard_users}) | and name not in ({standard_users}) | ||||
and user_type != 'Website User' | |||||
and ({key} like %s | and ({key} like %s | ||||
or concat_ws(' ', first_name, middle_name, last_name) like %s) | or concat_ws(' ', first_name, middle_name, last_name) like %s) | ||||
{mcond} | {mcond} | ||||
@@ -132,6 +132,7 @@ CREATE TABLE `tabDocType` ( | |||||
`allow_import` int(1) NOT NULL DEFAULT 0, | `allow_import` int(1) NOT NULL DEFAULT 0, | ||||
`hide_toolbar` int(1) NOT NULL DEFAULT 0, | `hide_toolbar` int(1) NOT NULL DEFAULT 0, | ||||
`hide_heading` int(1) NOT NULL DEFAULT 0, | `hide_heading` int(1) NOT NULL DEFAULT 0, | ||||
`track_seen` int(1) NOT NULL DEFAULT 0, | |||||
`max_attachments` int(11) NOT NULL DEFAULT 0, | `max_attachments` int(11) NOT NULL DEFAULT 0, | ||||
`print_outline` varchar(255) DEFAULT NULL, | `print_outline` varchar(255) DEFAULT NULL, | ||||
`read_only_onload` int(1) NOT NULL DEFAULT 0, | `read_only_onload` int(1) NOT NULL DEFAULT 0, | ||||
@@ -7,6 +7,7 @@ | |||||
"custom": 0, | "custom": 0, | ||||
"docstatus": 0, | "docstatus": 0, | ||||
"doctype": "DocType", | "doctype": "DocType", | ||||
"document_type": "Document", | |||||
"fields": [ | "fields": [ | ||||
{ | { | ||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
@@ -16,6 +17,7 @@ | |||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "", | "label": "", | ||||
@@ -40,6 +42,7 @@ | |||||
"fieldtype": "Data", | "fieldtype": "Data", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 1, | "in_list_view": 1, | ||||
"label": "Subject", | "label": "Subject", | ||||
@@ -63,6 +66,7 @@ | |||||
"fieldtype": "Select", | "fieldtype": "Select", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 1, | "in_list_view": 1, | ||||
"label": "Event Type", | "label": "Event Type", | ||||
@@ -90,6 +94,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Send an email reminder in the morning", | "label": "Send an email reminder in the morning", | ||||
@@ -113,6 +118,7 @@ | |||||
"fieldtype": "Column Break", | "fieldtype": "Column Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"length": 0, | "length": 0, | ||||
@@ -135,6 +141,7 @@ | |||||
"fieldtype": "Datetime", | "fieldtype": "Datetime", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Starts on", | "label": "Starts on", | ||||
@@ -158,6 +165,7 @@ | |||||
"fieldtype": "Datetime", | "fieldtype": "Datetime", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Ends on", | "label": "Ends on", | ||||
@@ -181,6 +189,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "All Day", | "label": "All Day", | ||||
@@ -204,6 +213,7 @@ | |||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"length": 0, | "length": 0, | ||||
@@ -226,6 +236,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Repeat this Event", | "label": "Repeat this Event", | ||||
@@ -250,6 +261,7 @@ | |||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"length": 0, | "length": 0, | ||||
@@ -273,6 +285,7 @@ | |||||
"fieldtype": "Select", | "fieldtype": "Select", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Repeat On", | "label": "Repeat On", | ||||
@@ -299,6 +312,7 @@ | |||||
"fieldtype": "Date", | "fieldtype": "Date", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Repeat Till", | "label": "Repeat Till", | ||||
@@ -322,6 +336,7 @@ | |||||
"fieldtype": "Column Break", | "fieldtype": "Column Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"length": 0, | "length": 0, | ||||
@@ -345,6 +360,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Monday", | "label": "Monday", | ||||
@@ -369,6 +385,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Tuesday", | "label": "Tuesday", | ||||
@@ -393,6 +410,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Wednesday", | "label": "Wednesday", | ||||
@@ -417,6 +435,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Thursday", | "label": "Thursday", | ||||
@@ -441,6 +460,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Friday", | "label": "Friday", | ||||
@@ -465,6 +485,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Saturday", | "label": "Saturday", | ||||
@@ -489,6 +510,7 @@ | |||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Sunday", | "label": "Sunday", | ||||
@@ -512,6 +534,7 @@ | |||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"length": 0, | "length": 0, | ||||
@@ -534,6 +557,7 @@ | |||||
"fieldtype": "Text Editor", | "fieldtype": "Text Editor", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Description", | "label": "Description", | ||||
@@ -561,6 +585,7 @@ | |||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Participants", | "label": "Participants", | ||||
@@ -585,6 +610,7 @@ | |||||
"fieldtype": "Column Break", | "fieldtype": "Column Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Groups", | "label": "Groups", | ||||
@@ -611,6 +637,7 @@ | |||||
"fieldtype": "Table", | "fieldtype": "Table", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Roles", | "label": "Roles", | ||||
@@ -637,6 +664,7 @@ | |||||
"fieldtype": "Link", | "fieldtype": "Link", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Ref Type", | "label": "Ref Type", | ||||
@@ -663,6 +691,7 @@ | |||||
"fieldtype": "Dynamic Link", | "fieldtype": "Dynamic Link", | ||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | "in_filter": 0, | ||||
"in_list_view": 0, | "in_list_view": 0, | ||||
"label": "Ref Name", | "label": "Ref Name", | ||||
@@ -692,7 +721,7 @@ | |||||
"issingle": 0, | "issingle": 0, | ||||
"istable": 0, | "istable": 0, | ||||
"max_attachments": 0, | "max_attachments": 0, | ||||
"modified": "2016-01-08 04:50:37.240223", | |||||
"modified": "2016-03-25 06:09:03.205236", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Desk", | "module": "Desk", | ||||
"name": "Event", | "name": "Event", | ||||
@@ -741,5 +770,7 @@ | |||||
], | ], | ||||
"read_only": 1, | "read_only": 1, | ||||
"read_only_onload": 0, | "read_only_onload": 0, | ||||
"title_field": "subject" | |||||
"sort_order": "DESC", | |||||
"title_field": "subject", | |||||
"track_seen": 1 | |||||
} | } |
@@ -45,6 +45,8 @@ def getdoc(doctype, name, user=None): | |||||
if doc and not name.startswith('_'): | if doc and not name.startswith('_'): | ||||
frappe.get_user().update_recent(doctype, name) | frappe.get_user().update_recent(doctype, name) | ||||
doc.add_seen() | |||||
frappe.response.docs.append(doc) | frappe.response.docs.append(doc) | ||||
@frappe.whitelist() | @frappe.whitelist() | ||||
@@ -14,7 +14,7 @@ default_fields = ('doctype','name','owner','creation','modified','modified_by', | |||||
integer_docfield_properties = ("reqd", "search_index", "in_list_view", "permlevel", | integer_docfield_properties = ("reqd", "search_index", "in_list_view", "permlevel", | ||||
"hidden", "read_only", "ignore_user_permissions", "allow_on_submit", "report_hide", | "hidden", "read_only", "ignore_user_permissions", "allow_on_submit", "report_hide", | ||||
"in_filter", "no_copy", "print_hide", "unique") | "in_filter", "no_copy", "print_hide", "unique") | ||||
optional_fields = ("_user_tags", "_comments", "_assign", "_liked_by") | |||||
optional_fields = ("_user_tags", "_comments", "_assign", "_liked_by", "_seen") | |||||
def rename(doctype, old, new, debug=False): | def rename(doctype, old, new, debug=False): | ||||
import frappe.model.rename_doc | import frappe.model.rename_doc | ||||
@@ -85,7 +85,7 @@ class DatabaseQuery(object): | |||||
def prepare_args(self): | def prepare_args(self): | ||||
self.parse_args() | self.parse_args() | ||||
self.extract_tables() | self.extract_tables() | ||||
self.remove_user_tags() | |||||
self.set_optional_columns() | |||||
self.build_conditions() | self.build_conditions() | ||||
args = frappe._dict() | args = frappe._dict() | ||||
@@ -176,7 +176,7 @@ class DatabaseQuery(object): | |||||
if (not self.flags.ignore_permissions) and (not frappe.has_permission(doctype)): | if (not self.flags.ignore_permissions) and (not frappe.has_permission(doctype)): | ||||
raise frappe.PermissionError, doctype | raise frappe.PermissionError, doctype | ||||
def remove_user_tags(self): | |||||
def set_optional_columns(self): | |||||
"""Removes optional columns like `_user_tags`, `_comments` etc. if not in table""" | """Removes optional columns like `_user_tags`, `_comments` etc. if not in table""" | ||||
columns = frappe.db.get_table_columns(self.doctype) | columns = frappe.db.get_table_columns(self.doctype) | ||||
@@ -206,6 +206,10 @@ class DatabaseQuery(object): | |||||
else: | else: | ||||
self.filters.remove(each) | self.filters.remove(each) | ||||
# add _seen if track_seen is set | |||||
if frappe.get_meta(self.doctype).track_seen: | |||||
self.fields.append('_seen') | |||||
def build_conditions(self): | def build_conditions(self): | ||||
self.conditions = [] | self.conditions = [] | ||||
self.grouped_or_conditions = [] | self.grouped_or_conditions = [] | ||||
@@ -212,6 +212,13 @@ class DbTable: | |||||
"fieldtype": "Text" | "fieldtype": "Text" | ||||
}) | }) | ||||
# add _seen column if track_seen | |||||
if self.meta.track_seen: | |||||
fl.append({ | |||||
'fieldname': '_seen', | |||||
'fieldtype': 'Text' | |||||
}) | |||||
if not frappe.flags.in_install_db and frappe.flags.in_install != "frappe": | if not frappe.flags.in_install_db and frappe.flags.in_install != "frappe": | ||||
custom_fl = frappe.db.sql("""\ | custom_fl = frappe.db.sql("""\ | ||||
SELECT * FROM `tabCustom Field` | SELECT * FROM `tabCustom Field` | ||||
@@ -609,6 +609,7 @@ class Document(BaseDocument): | |||||
Will also update title_field if set""" | Will also update title_field if set""" | ||||
self.set_title_field() | self.set_title_field() | ||||
self.reset_seen() | |||||
if self.flags.ignore_validate: | if self.flags.ignore_validate: | ||||
return | return | ||||
@@ -675,6 +676,11 @@ class Document(BaseDocument): | |||||
for d in self.get_all_children(): | for d in self.get_all_children(): | ||||
_clear_cache(d) | _clear_cache(d) | ||||
def reset_seen(self): | |||||
'''Clear _seen property and set current user as seen''' | |||||
if self.meta.track_seen: | |||||
self._seen = json.dumps([frappe.session.user]) | |||||
def notify_update(self): | def notify_update(self): | ||||
"""Publish realtime that the current document is modified""" | """Publish realtime that the current document is modified""" | ||||
frappe.publish_realtime("doc_update", {"modified": self.modified, "doctype": self.doctype, "name": self.name}, | frappe.publish_realtime("doc_update", {"modified": self.modified, "doctype": self.doctype, "name": self.name}, | ||||
@@ -811,6 +817,22 @@ class Document(BaseDocument): | |||||
}).insert(ignore_permissions=True) | }).insert(ignore_permissions=True) | ||||
return comment | return comment | ||||
def add_seen(self, user=None): | |||||
'''add the given/current user to list of users who have seen this document (_seen)''' | |||||
if not user: | |||||
user = frappe.session.user | |||||
if self.meta.track_seen: | |||||
if self._seen: | |||||
_seen = json.loads(self._seen) | |||||
else: | |||||
_seen = [] | |||||
if user not in _seen: | |||||
_seen.append(user) | |||||
self.db_set('_seen', json.dumps(_seen)) | |||||
frappe.local.flags.commit = True | |||||
def get_signature(self): | def get_signature(self): | ||||
"""Returns signature (hash) for private URL.""" | """Returns signature (hash) for private URL.""" | ||||
return hashlib.sha224(get_datetime_str(self.creation)).hexdigest() | return hashlib.sha224(get_datetime_str(self.creation)).hexdigest() | ||||
@@ -153,6 +153,9 @@ | |||||
.list-id { | .list-id { | ||||
font-weight: bold; | font-weight: bold; | ||||
} | } | ||||
.list-id.seen { | |||||
font-weight: normal; | |||||
} | |||||
.list-col { | .list-col { | ||||
height: 20px; | height: 20px; | ||||
} | } | ||||
@@ -12,7 +12,7 @@ | |||||
</i> | </i> | ||||
<span class="likes-count">{{ (_liked_by.length > 9 ? "9+" : _liked_by.length) || "" }}</span> | <span class="likes-count">{{ (_liked_by.length > 9 ? "9+" : _liked_by.length) || "" }}</span> | ||||
</span> | </span> | ||||
<a class="grey list-id" | |||||
<a class="grey list-id {{ css_seen }}" | |||||
style="margin-right: 7px;" | style="margin-right: 7px;" | ||||
href="#Form/{{ _doctype_encoded }}/{{ _name_encoded }}" | href="#Form/{{ _doctype_encoded }}/{{ _name_encoded }}" | ||||
title="{{ _full_title }}">{{ _title }}</a> | title="{{ _full_title }}">{{ _title }}</a> | ||||
@@ -259,6 +259,14 @@ frappe.views.ListView = Class.extend({ | |||||
get_avatar_and_id: function(data, without_workflow) { | get_avatar_and_id: function(data, without_workflow) { | ||||
data._without_workflow = without_workflow; | data._without_workflow = without_workflow; | ||||
var seen = JSON.parse(data._seen); | |||||
data.css_seen = ''; | |||||
if(seen && seen.indexOf(frappe.session.user) !== -1) { | |||||
data.css_seen = 'seen' | |||||
} | |||||
return frappe.render_template("list_item_subject", data); | return frappe.render_template("list_item_subject", data); | ||||
}, | }, | ||||
@@ -197,6 +197,10 @@ | |||||
font-weight: bold; | font-weight: bold; | ||||
} | } | ||||
.list-id.seen { | |||||
font-weight: normal; | |||||
} | |||||
.list-col { | .list-col { | ||||
height: 20px; | height: 20px; | ||||
} | } | ||||
@@ -0,0 +1,43 @@ | |||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | |||||
# MIT License. See license.txt | |||||
from __future__ import unicode_literals | |||||
import frappe, unittest, json | |||||
class TestSeen(unittest.TestCase): | |||||
def test_if_user_is_added(self): | |||||
ev = frappe.get_doc({ | |||||
'doctype': 'Event', | |||||
'subject': 'test event for seen', | |||||
'starts_on': '2016-01-01 10:10:00', | |||||
'event_type': 'Public' | |||||
}).insert() | |||||
frappe.set_user('test@example.com') | |||||
from frappe.desk.form.load import getdoc | |||||
# load the form | |||||
getdoc('Event', ev.name) | |||||
# reload the event | |||||
ev = frappe.get_doc('Event', ev.name) | |||||
self.assertTrue('test@example.com' in json.loads(ev._seen)) | |||||
# test another user | |||||
frappe.set_user('test1@example.com') | |||||
# load the form | |||||
getdoc('Event', ev.name) | |||||
# reload the event | |||||
ev = frappe.get_doc('Event', ev.name) | |||||
self.assertTrue('test@example.com' in json.loads(ev._seen)) | |||||
self.assertTrue('test1@example.com' in json.loads(ev._seen)) | |||||
ev.save() | |||||
self.assertFalse('test@example.com' in json.loads(ev._seen)) | |||||
self.assertTrue('test1@example.com' in json.loads(ev._seen)) |
@@ -102,6 +102,7 @@ class WebForm(WebsiteGenerator): | |||||
if frappe.form_dict.name: | if frappe.form_dict.name: | ||||
context.doc = frappe.get_doc(self.doc_type, frappe.form_dict.name) | context.doc = frappe.get_doc(self.doc_type, frappe.form_dict.name) | ||||
context.title = context.doc.get(context.doc.meta.get_title_field()) | context.title = context.doc.get(context.doc.meta.get_title_field()) | ||||
context.doc.add_seen() | |||||
context.reference_doctype = context.doc.doctype | context.reference_doctype = context.doc.doctype | ||||
context.reference_name = context.doc.name | context.reference_name = context.doc.name | ||||