seitime-frappe/frappe/model/utils/user_settings.py
Faris Ansari 1a76d64781 ListView refactor (#2715)
* [list_settings] save last_view, kanban_board, gantt_mode

* listview.js cleanup

* image_view refactor

* image_view done

* wip

* [photoswipe] wip

* show view for calendar, kanban even if no results

* [gantt_view] refactor into separate file

* [imageview] 3 column border fix

* [imageview] gallery working

* delete old libs

* indentation to tabs

* [gantt] update lib, custom popup html

* custom fontawesome checkbox

* reset gantt state when not permitted

* checkbox styling fix

* working commit

* image, calendar, gantt view working

* more refactoring, kanban view

* minor

* removed old files

* user settings improved

* filters and sort selector de-coupling

* wip

* [imageview] white pswp background

* kanban filters saving fixed

* fixed reportview

* minor

* removed listing.js

* minor fixes and cleanup

* patch for UserSettings table

* patch fix
2017-03-06 11:32:27 +05:30

48 lines
1.6 KiB
Python

# Settings saved per user basis
# such as page_limit, filters, last_view
import frappe, json
def get_user_settings(doctype, for_update=False):
user_settings = frappe.cache().hget('_user_settings',
'{0}::{1}'.format(doctype, frappe.session.user))
if user_settings is None:
user_settings = frappe.db.sql('''select data from __UserSettings
where user=%s and doctype=%s''', (frappe.session.user, doctype))
user_settings = user_settings and user_settings[0][0] or '{}'
if not for_update:
update_user_settings(doctype, user_settings, True)
return user_settings or '{}'
def update_user_settings(doctype, user_settings, for_update=False):
'''update user settings in cache'''
if for_update:
current = json.loads(user_settings)
else:
current = json.loads(get_user_settings(doctype, for_update = True))
if isinstance(current, basestring):
# corrupt due to old code, remove this in a future release
current = {}
current.update(user_settings)
frappe.cache().hset('_user_settings', '{0}::{1}'.format(doctype, frappe.session.user),
json.dumps(current))
def sync_user_settings():
'''Sync from cache to database (called asynchronously via the browser)'''
for key, data in frappe.cache().hgetall('_user_settings').iteritems():
doctype, user = key.split('::')
frappe.db.sql('''insert into __UserSettings (user, doctype, data) values (%s, %s, %s)
on duplicate key update data=%s''', (user, doctype, data, data))
@frappe.whitelist()
def save(doctype, user_settings):
user_settings = json.loads(user_settings or '{}')
update_user_settings(doctype, user_settings)
return user_settings