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.
 
 
 
 
 
 

51 regels
1.6 KiB

  1. # Settings saved per user basis
  2. # such as page_limit, filters, last_view
  3. import frappe, json
  4. from six import iteritems
  5. def get_user_settings(doctype, for_update=False):
  6. user_settings = frappe.cache().hget('_user_settings',
  7. '{0}::{1}'.format(doctype, frappe.session.user))
  8. if user_settings is None:
  9. user_settings = frappe.db.sql('''select data from __UserSettings
  10. where user=%s and doctype=%s''', (frappe.session.user, doctype))
  11. user_settings = user_settings and user_settings[0][0] or '{}'
  12. if not for_update:
  13. update_user_settings(doctype, user_settings, True)
  14. return user_settings or '{}'
  15. def update_user_settings(doctype, user_settings, for_update=False):
  16. '''update user settings in cache'''
  17. if for_update:
  18. current = json.loads(user_settings)
  19. else:
  20. current = json.loads(get_user_settings(doctype, for_update = True))
  21. if isinstance(current, basestring):
  22. # corrupt due to old code, remove this in a future release
  23. current = {}
  24. current.update(user_settings)
  25. frappe.cache().hset('_user_settings', '{0}::{1}'.format(doctype, frappe.session.user),
  26. json.dumps(current))
  27. def sync_user_settings():
  28. '''Sync from cache to database (called asynchronously via the browser)'''
  29. for key, data in iteritems(frappe.cache().hgetall('_user_settings')):
  30. doctype, user = key.split('::')
  31. frappe.db.sql('''insert into __UserSettings (user, doctype, data) values (%s, %s, %s)
  32. on duplicate key update data=%s''', (user, doctype, data, data))
  33. @frappe.whitelist()
  34. def save(doctype, user_settings):
  35. user_settings = json.loads(user_settings or '{}')
  36. update_user_settings(doctype, user_settings)
  37. return user_settings