您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

158 行
4.3 KiB

  1. from __future__ import unicode_literals
  2. import webnotes
  3. import memc
  4. # User
  5. def set_user_default(key, value, user=None):
  6. set_default(key, value, user or webnotes.session.user)
  7. def add_user_default(key, value, user=None):
  8. add_default(key, value, user or webnotes.session.user)
  9. def get_user_default(key, user=None):
  10. d = get_defaults(user or webnotes.session.user).get(key, None)
  11. return isinstance(d, list) and d[0] or d
  12. def get_user_default_as_list(key, user=None):
  13. d = get_defaults(user or webnotes.session.user).get(key, None)
  14. return (not isinstance(d, list)) and [d] or d
  15. def get_defaults(user=None):
  16. if not user and webnotes.session:
  17. user = webnotes.session.user
  18. if user:
  19. userd = get_defaults_for(user)
  20. if user in ["__global", "Control Panel"]:
  21. userd.update({"user": webnotes.session.user, "owner": webnotes.session.user})
  22. else:
  23. userd.update({"user": user, "owner": user})
  24. else:
  25. userd = {}
  26. globald = get_defaults_for()
  27. globald.update(userd)
  28. return globald
  29. def clear_user_default(key, user=None):
  30. clear_default(key, parent=user or webnotes.session.user)
  31. # Global
  32. def set_global_default(key, value):
  33. set_default(key, value, "Control Panel")
  34. def add_global_default(key, value):
  35. add_default(key, value, "Control Panel")
  36. def get_global_default(key):
  37. d = get_defaults().get(key, None)
  38. return isinstance(d, list) and d[0] or d
  39. # Common
  40. def set_default(key, value, parent):
  41. if webnotes.conn.sql("""select defkey from `tabDefaultValue` where
  42. defkey=%s and parent=%s """, (key, parent)):
  43. # update
  44. webnotes.conn.sql("""update `tabDefaultValue` set defvalue=%s
  45. where parent=%s and defkey=%s""", (value, parent, key))
  46. clear_cache(parent)
  47. else:
  48. add_default(key, value, parent)
  49. def add_default(key, value, parent):
  50. d = webnotes.doc({
  51. "doctype": "DefaultValue",
  52. "parent": parent,
  53. "parenttype": "Control Panel",
  54. "parentfield": "system_defaults",
  55. "defkey": key,
  56. "defvalue": value
  57. })
  58. d.insert()
  59. clear_cache(parent)
  60. def clear_default(key=None, value=None, parent=None, name=None):
  61. conditions = []
  62. values = []
  63. if key:
  64. conditions.append("defkey=%s")
  65. values.append(key)
  66. if value:
  67. conditions.append("defvalue=%s")
  68. values.append(value)
  69. if name:
  70. conditions.append("name=%s")
  71. values.append(name)
  72. if parent:
  73. conditions.append("parent=%s")
  74. values.append(parent)
  75. if not conditions:
  76. raise Exception, "[clear_default] No key specified."
  77. webnotes.conn.sql("""delete from tabDefaultValue where %s""" % " and ".join(conditions), values)
  78. clear_cache()
  79. def get_defaults_for(parent="Control Panel"):
  80. """get all defaults"""
  81. defaults = webnotes.cache().get_value("__defaults:" + parent)
  82. if not defaults:
  83. res = webnotes.conn.sql("""select defkey, defvalue from `tabDefaultValue`
  84. where parent = %s order by creation""", parent, as_dict=1)
  85. defaults = webnotes._dict({})
  86. for d in res:
  87. if d.defkey in defaults:
  88. # listify
  89. if not isinstance(defaults[d.defkey], list) and defaults[d.defkey] != d.defvalue:
  90. defaults[d.defkey] = [defaults[d.defkey]]
  91. if d.defvalue not in defaults[d.defkey]:
  92. defaults[d.defkey].append(d.defvalue)
  93. elif d.defvalue is not None:
  94. defaults[d.defkey] = d.defvalue
  95. if webnotes.session and parent == webnotes.session.user:
  96. defaults.update(get_defaults_for_match(defaults))
  97. webnotes.cache().set_value("__defaults:" + parent, defaults)
  98. return defaults
  99. def get_defaults_for_match(userd):
  100. """ if a profile based match condition exists for a user's role
  101. and no user property is specified for that match key,
  102. set default value as user's profile for that match key"""
  103. user_roles = webnotes.get_roles()
  104. out = {}
  105. for role, match in webnotes.conn.sql("""select distinct role, `match`
  106. from `tabDocPerm` where ifnull(permlevel, 0)=0 and `read`=1
  107. and `match` like "%:user" """):
  108. if role in user_roles and match.split(":")[0] not in userd:
  109. out[match.split(":")[0]] = webnotes.session.user
  110. return out
  111. def clear_cache(parent=None):
  112. def all_profiles():
  113. return webnotes.conn.sql_list("select name from tabProfile") + ["Control Panel", "__global"]
  114. if parent=="Control Panel" or not parent:
  115. parent = all_profiles()
  116. elif isinstance(parent, basestring):
  117. parent = [parent]
  118. for p in parent:
  119. webnotes.cache().delete_value("__defaults:" + p)
  120. webnotes.clear_cache()