You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

пре 11 година
пре 11 година
пре 11 година
пре 12 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 12 година
пре 12 година
пре 12 година
пре 12 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 11 година
пре 12 година
пре 11 година
пре 12 година
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. from __future__ import unicode_literals
  4. import webnotes
  5. common_keys = ["Control Panel", "__global"]
  6. def set_user_default(key, value, user=None, parenttype=None):
  7. set_default(key, value, user or webnotes.session.user, parenttype)
  8. def add_user_default(key, value, user=None, parenttype=None):
  9. add_default(key, value, user or webnotes.session.user, parenttype)
  10. def get_user_default(key, user=None):
  11. d = get_defaults(user or webnotes.session.user).get(key, None)
  12. return isinstance(d, list) and d[0] or d
  13. def get_user_default_as_list(key, user=None):
  14. d = get_defaults(user or webnotes.session.user).get(key, None)
  15. return (not isinstance(d, list)) and [d] or d
  16. def get_restrictions(user=None):
  17. if not user:
  18. user = webnotes.session.user
  19. if user == webnotes.session.user:
  20. if webnotes.local.restrictions is None:
  21. webnotes.local.restrictions = build_restrictions(user)
  22. return webnotes.local.restrictions
  23. else:
  24. return build_restrictions(user)
  25. def build_restrictions(user):
  26. out = {}
  27. for key, value in webnotes.conn.sql("""select defkey, defvalue
  28. from tabDefaultValue where parent=%s and parenttype='Restriction'""", (user,)):
  29. out.setdefault(key, [])
  30. out[key].append(value)
  31. return out
  32. def get_defaults(user=None):
  33. if not user:
  34. user = webnotes.session.user if webnotes.session else "Guest"
  35. userd = get_defaults_for(user)
  36. userd.update({"user": user, "owner": user})
  37. globald = get_defaults_for()
  38. globald.update(userd)
  39. return globald
  40. def clear_user_default(key, user=None):
  41. clear_default(key, parent=user or webnotes.session.user)
  42. # Global
  43. def set_global_default(key, value):
  44. set_default(key, value, "Control Panel")
  45. def add_global_default(key, value):
  46. add_default(key, value, "Control Panel")
  47. def get_global_default(key):
  48. d = get_defaults().get(key, None)
  49. return isinstance(d, list) and d[0] or d
  50. # Common
  51. def set_default(key, value, parent, parenttype="Control Panel"):
  52. if webnotes.conn.sql("""select defkey from `tabDefaultValue` where
  53. defkey=%s and parent=%s """, (key, parent)):
  54. # update
  55. webnotes.conn.sql("""update `tabDefaultValue` set defvalue=%s, parenttype=%s
  56. where parent=%s and defkey=%s""", (value, parenttype, parent, key))
  57. _clear_cache(parent)
  58. else:
  59. add_default(key, value, parent)
  60. def add_default(key, value, parent, parenttype=None):
  61. d = webnotes.doc({
  62. "doctype": "DefaultValue",
  63. "parent": parent,
  64. "parenttype": parenttype or "Control Panel",
  65. "parentfield": "system_defaults",
  66. "defkey": key,
  67. "defvalue": value
  68. })
  69. d.insert()
  70. if parenttype=="Restriction":
  71. webnotes.local.restrictions = None
  72. _clear_cache(parent)
  73. def clear_default(key=None, value=None, parent=None, name=None, parenttype=None):
  74. conditions = []
  75. values = []
  76. if key:
  77. conditions.append("defkey=%s")
  78. values.append(key)
  79. if value:
  80. conditions.append("defvalue=%s")
  81. values.append(value)
  82. if name:
  83. conditions.append("name=%s")
  84. values.append(name)
  85. if parent:
  86. conditions.append("parent=%s")
  87. clear_cache(parent)
  88. values.append(parent)
  89. else:
  90. clear_cache("Control Panel")
  91. clear_cache("__global")
  92. if parenttype:
  93. conditions.append("parenttype=%s")
  94. values.append(parenttype)
  95. if parenttype=="Restriction":
  96. webnotes.local.restrictions = None
  97. if not conditions:
  98. raise Exception, "[clear_default] No key specified."
  99. webnotes.conn.sql("""delete from tabDefaultValue where %s""" % " and ".join(conditions), values)
  100. _clear_cache(parent)
  101. def get_defaults_for(parent="Control Panel"):
  102. """get all defaults"""
  103. defaults = webnotes.cache().get_value("__defaults:" + parent)
  104. if not defaults:
  105. res = webnotes.conn.sql("""select defkey, defvalue from `tabDefaultValue`
  106. where parent = %s order by creation""", (parent,), as_dict=1)
  107. defaults = webnotes._dict({})
  108. for d in res:
  109. if d.defkey in defaults:
  110. # listify
  111. if not isinstance(defaults[d.defkey], list) and defaults[d.defkey] != d.defvalue:
  112. defaults[d.defkey] = [defaults[d.defkey]]
  113. if d.defvalue not in defaults[d.defkey]:
  114. defaults[d.defkey].append(d.defvalue)
  115. elif d.defvalue is not None:
  116. defaults[d.defkey] = d.defvalue
  117. webnotes.cache().set_value("__defaults:" + parent, defaults)
  118. return defaults
  119. def _clear_cache(parent):
  120. if parent in common_keys:
  121. webnotes.clear_cache()
  122. else:
  123. webnotes.clear_cache(user=webnotes.session.user)
  124. def clear_cache(user=None):
  125. to_clear = []
  126. if user:
  127. to_clear = [user]
  128. elif webnotes.flags.in_install_app!="webnotes":
  129. to_clear = webnotes.conn.sql_list("select name from tabProfile")
  130. for p in to_clear + common_keys:
  131. webnotes.cache().delete_value("__defaults:" + p)