Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 
 

197 rindas
5.4 KiB

  1. # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. from __future__ import unicode_literals
  4. import frappe
  5. from frappe.desk.notifications import clear_notifications
  6. # Note: DefaultValue records are identified by parenttype
  7. # __default, __global or 'User Permission'
  8. common_keys = ["__default", "__global"]
  9. def set_user_default(key, value, user=None, parenttype=None):
  10. set_default(key, value, user or frappe.session.user, parenttype)
  11. def add_user_default(key, value, user=None, parenttype=None):
  12. add_default(key, value, user or frappe.session.user, parenttype)
  13. def get_user_default(key, user=None):
  14. user_defaults = get_defaults(user or frappe.session.user)
  15. d = user_defaults.get(key, None)
  16. if is_a_user_permission_key(key):
  17. if d and isinstance(d, (list, tuple)) and len(d)==1:
  18. # Use User Permission value when only when it has a single value
  19. d = d[0]
  20. else:
  21. d = user_defaults.get(frappe.scrub(key), None)
  22. return isinstance(d, (list, tuple)) and d[0] or d
  23. def get_user_default_as_list(key, user=None):
  24. user_defaults = get_defaults(user or frappe.session.user)
  25. d = user_defaults.get(key, None)
  26. if is_a_user_permission_key(key):
  27. if d and isinstance(d, (list, tuple)) and len(d)==1:
  28. # Use User Permission value when only when it has a single value
  29. d = [d[0]]
  30. else:
  31. d = user_defaults.get(frappe.scrub(key), None)
  32. return filter(None, (not isinstance(d, (list, tuple))) and [d] or d)
  33. def is_a_user_permission_key(key):
  34. return ":" not in key and key != frappe.scrub(key)
  35. def get_user_permissions(user=None):
  36. from frappe.core.doctype.user_permission.user_permission \
  37. import get_user_permissions as _get_user_permissions
  38. '''Return frappe.core.doctype.user_permissions.user_permissions._get_user_permissions (kept for backward compatibility)'''
  39. return _get_user_permissions(user)
  40. def get_defaults(user=None):
  41. globald = get_defaults_for()
  42. if not user:
  43. user = frappe.session.user if frappe.session else "Guest"
  44. if user:
  45. userd = {}
  46. userd.update(get_defaults_for(user))
  47. userd.update({"user": user, "owner": user})
  48. globald.update(userd)
  49. return globald
  50. def clear_user_default(key, user=None):
  51. clear_default(key, parent=user or frappe.session.user)
  52. # Global
  53. def set_global_default(key, value):
  54. set_default(key, value, "__default")
  55. def add_global_default(key, value):
  56. add_default(key, value, "__default")
  57. def get_global_default(key):
  58. d = get_defaults().get(key, None)
  59. return isinstance(d, list) and d[0] or d
  60. # Common
  61. def set_default(key, value, parent, parenttype="__default"):
  62. """Override or add a default value.
  63. Adds default value in table `tabDefaultValue`.
  64. :param key: Default key.
  65. :param value: Default value.
  66. :param parent: Usually, **User** to whom the default belongs.
  67. :param parenttype: [optional] default is `__default`."""
  68. frappe.db.sql("""delete from `tabDefaultValue` where defkey=%s and parent=%s""", (key, parent))
  69. if value != None:
  70. add_default(key, value, parent)
  71. def add_default(key, value, parent, parenttype=None):
  72. d = frappe.get_doc({
  73. "doctype": "DefaultValue",
  74. "parent": parent,
  75. "parenttype": parenttype or "__default",
  76. "parentfield": "system_defaults",
  77. "defkey": key,
  78. "defvalue": value
  79. })
  80. d.insert(ignore_permissions=True)
  81. _clear_cache(parent)
  82. def clear_default(key=None, value=None, parent=None, name=None, parenttype=None):
  83. """Clear a default value by any of the given parameters and delete caches.
  84. :param key: Default key.
  85. :param value: Default value.
  86. :param parent: User name, or `__global`, `__default`.
  87. :param name: Default ID.
  88. :param parenttype: Clear defaults table for a particular type e.g. **User**.
  89. """
  90. conditions = []
  91. values = []
  92. if name:
  93. conditions.append("name=%s")
  94. values.append(name)
  95. else:
  96. if key:
  97. conditions.append("defkey=%s")
  98. values.append(key)
  99. if value:
  100. conditions.append("defvalue=%s")
  101. values.append(value)
  102. if parent:
  103. conditions.append("parent=%s")
  104. values.append(parent)
  105. if parenttype:
  106. conditions.append("parenttype=%s")
  107. values.append(parenttype)
  108. if parent:
  109. clear_cache(parent)
  110. else:
  111. clear_cache("__default")
  112. clear_cache("__global")
  113. if not conditions:
  114. raise Exception("[clear_default] No key specified.")
  115. frappe.db.sql("""delete from tabDefaultValue where {0}""".format(" and ".join(conditions)),
  116. tuple(values))
  117. _clear_cache(parent)
  118. def get_defaults_for(parent="__default"):
  119. """get all defaults"""
  120. defaults = frappe.cache().hget("defaults", parent)
  121. if defaults==None:
  122. # sort descending because first default must get precedence
  123. res = frappe.db.sql("""select defkey, defvalue from `tabDefaultValue`
  124. where parent = %s order by creation""", (parent,), as_dict=1)
  125. defaults = frappe._dict({})
  126. for d in res:
  127. if d.defkey in defaults:
  128. # listify
  129. if not isinstance(defaults[d.defkey], list) and defaults[d.defkey] != d.defvalue:
  130. defaults[d.defkey] = [defaults[d.defkey]]
  131. if d.defvalue not in defaults[d.defkey]:
  132. defaults[d.defkey].append(d.defvalue)
  133. elif d.defvalue is not None:
  134. defaults[d.defkey] = d.defvalue
  135. frappe.cache().hset("defaults", parent, defaults)
  136. return defaults
  137. def _clear_cache(parent):
  138. if parent in common_keys:
  139. frappe.clear_cache()
  140. else:
  141. clear_notifications(user=parent)
  142. frappe.clear_cache(user=parent)
  143. def clear_cache(user=None):
  144. if user:
  145. for p in ([user] + common_keys):
  146. frappe.cache().hdel("defaults", p)
  147. elif frappe.flags.in_install!="frappe":
  148. frappe.cache().delete_key("defaults")