[enhancement] added feature to track user seen, fixes #1648
This commit is contained in:
parent
8193c026f3
commit
d029eae1f7
16 changed files with 201 additions and 12 deletions
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
43
frappe/tests/test_seen.py
Normal file
43
frappe/tests/test_seen.py
Normal file
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue