##// END OF EJS Templates
Save bump limit separately for every thread
Save bump limit separately for every thread

File last commit:

r996:1e1098b4 default
r1052:a66b11af default
Show More
settingsmanager.py
146 lines | 4.0 KiB | text/x-python | PythonLexer
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 from django.shortcuts import get_object_or_404
from boards.models import Tag
__author__ = 'neko259'
SESSION_SETTING = 'setting'
neko259
Cleaned up some code
r905 # Remove this, it is not used any more cause there is a user's permission
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 PERMISSION_MODERATE = 'moderator'
SETTING_THEME = 'theme'
SETTING_FAVORITE_TAGS = 'favorite_tags'
SETTING_HIDDEN_TAGS = 'hidden_tags'
SETTING_PERMISSIONS = 'permissions'
neko259
User notifications (BB-59)
r990 SETTING_USERNAME = 'username'
SETTING_LAST_NOTIFICATION_ID = 'last_notification'
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728
DEFAULT_THEME = 'md'
neko259
Divided settings manager into base settings manager class and session-based settings manager. This allowes to add other backends to the settings manager
r730 class SettingsManager:
"""
Base settings manager class. get_setting and set_setting methods should
be overriden.
"""
def __init__(self):
pass
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728
def get_theme(self):
theme = self.get_setting(SETTING_THEME)
if not theme:
theme = DEFAULT_THEME
self.set_setting(SETTING_THEME, theme)
return theme
def set_theme(self, theme):
self.set_setting(SETTING_THEME, theme)
def has_permission(self, permission):
permissions = self.get_setting(SETTING_PERMISSIONS)
if permissions:
return permission in permissions
else:
return False
def get_setting(self, setting):
neko259
Divided settings manager into base settings manager class and session-based settings manager. This allowes to add other backends to the settings manager
r730 pass
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728
def set_setting(self, setting, value):
neko259
Divided settings manager into base settings manager class and session-based settings manager. This allowes to add other backends to the settings manager
r730 pass
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728
def add_permission(self, permission):
permissions = self.get_setting(SETTING_PERMISSIONS)
if not permissions:
permissions = [permission]
else:
neko259
Added login and logout for moderators
r729 permissions.append(permission)
self.set_setting(SETTING_PERMISSIONS, permissions)
def del_permission(self, permission):
permissions = self.get_setting(SETTING_PERMISSIONS)
if not permissions:
permissions = []
else:
permissions.remove(permission)
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 self.set_setting(SETTING_PERMISSIONS, permissions)
def get_fav_tags(self):
tag_names = self.get_setting(SETTING_FAVORITE_TAGS)
tags = []
if tag_names:
neko259
Speed up loading by getting all favorite tags at once (BB-65)
r996 tags = Tag.objects.filter(name__in=tag_names)
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 return tags
def add_fav_tag(self, tag):
tags = self.get_setting(SETTING_FAVORITE_TAGS)
if not tags:
tags = [tag.name]
else:
if not tag.name in tags:
tags.append(tag.name)
neko259
Sort favorite and hidden tags when updating the list
r789
tags.sort()
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 self.set_setting(SETTING_FAVORITE_TAGS, tags)
def del_fav_tag(self, tag):
tags = self.get_setting(SETTING_FAVORITE_TAGS)
if tag.name in tags:
tags.remove(tag.name)
self.set_setting(SETTING_FAVORITE_TAGS, tags)
def get_hidden_tags(self):
tag_names = self.get_setting(SETTING_HIDDEN_TAGS)
tags = []
if tag_names:
for tag_name in tag_names:
tag = get_object_or_404(Tag, name=tag_name)
tags.append(tag)
return tags
def add_hidden_tag(self, tag):
tags = self.get_setting(SETTING_HIDDEN_TAGS)
if not tags:
tags = [tag.name]
else:
if not tag.name in tags:
tags.append(tag.name)
neko259
Sort favorite and hidden tags when updating the list
r789
tags.sort()
neko259
Removed user and settings mode. Added settings manager to manage settings and keep them in the session (or any other backend like cookie in the future
r728 self.set_setting(SETTING_HIDDEN_TAGS, tags)
def del_hidden_tag(self, tag):
tags = self.get_setting(SETTING_HIDDEN_TAGS)
if tag.name in tags:
tags.remove(tag.name)
self.set_setting(SETTING_HIDDEN_TAGS, tags)
neko259
Divided settings manager into base settings manager class and session-based settings manager. This allowes to add other backends to the settings manager
r730
class SessionSettingsManager(SettingsManager):
"""
Session-based settings manager. All settings are saved to the user's
session.
"""
def __init__(self, session):
SettingsManager.__init__(self)
self.session = session
def get_setting(self, setting):
if setting in self.session:
return self.session[setting]
else:
return None
def set_setting(self, setting, value):
self.session[setting] = value
neko259
User notifications (BB-59)
r990
def get_settings_manager(request) -> SettingsManager:
"""
Get settings manager based on the request object. Currently only
session-based manager is supported. In the future, cookie-based or
database-based managers could be implemented.
"""
return SessionSettingsManager(request.session)