##// END OF EJS Templates
If we are trying to open a hidden tag page, show its threads
neko259 -
r1064:da5d56ec default
parent child Browse files
Show More
@@ -1,146 +1,146 b''
1 1 from django.shortcuts import get_object_or_404
2 2 from boards.models import Tag
3 3
4 4 __author__ = 'neko259'
5 5
6 6 SESSION_SETTING = 'setting'
7 7
8 8 # Remove this, it is not used any more cause there is a user's permission
9 9 PERMISSION_MODERATE = 'moderator'
10 10
11 11 SETTING_THEME = 'theme'
12 12 SETTING_FAVORITE_TAGS = 'favorite_tags'
13 13 SETTING_HIDDEN_TAGS = 'hidden_tags'
14 14 SETTING_PERMISSIONS = 'permissions'
15 15 SETTING_USERNAME = 'username'
16 16 SETTING_LAST_NOTIFICATION_ID = 'last_notification'
17 17
18 18 DEFAULT_THEME = 'md'
19 19
20 20
21 21 class SettingsManager:
22 22 """
23 23 Base settings manager class. get_setting and set_setting methods should
24 24 be overriden.
25 25 """
26 26 def __init__(self):
27 27 pass
28 28
29 def get_theme(self):
29 def get_theme(self) -> str:
30 30 theme = self.get_setting(SETTING_THEME)
31 31 if not theme:
32 32 theme = DEFAULT_THEME
33 33 self.set_setting(SETTING_THEME, theme)
34 34
35 35 return theme
36 36
37 37 def set_theme(self, theme):
38 38 self.set_setting(SETTING_THEME, theme)
39 39
40 40 def has_permission(self, permission):
41 41 permissions = self.get_setting(SETTING_PERMISSIONS)
42 42 if permissions:
43 43 return permission in permissions
44 44 else:
45 45 return False
46 46
47 47 def get_setting(self, setting):
48 48 pass
49 49
50 50 def set_setting(self, setting, value):
51 51 pass
52 52
53 53 def add_permission(self, permission):
54 54 permissions = self.get_setting(SETTING_PERMISSIONS)
55 55 if not permissions:
56 56 permissions = [permission]
57 57 else:
58 58 permissions.append(permission)
59 59 self.set_setting(SETTING_PERMISSIONS, permissions)
60 60
61 61 def del_permission(self, permission):
62 62 permissions = self.get_setting(SETTING_PERMISSIONS)
63 63 if not permissions:
64 64 permissions = []
65 65 else:
66 66 permissions.remove(permission)
67 67 self.set_setting(SETTING_PERMISSIONS, permissions)
68 68
69 def get_fav_tags(self):
69 def get_fav_tags(self) -> list:
70 70 tag_names = self.get_setting(SETTING_FAVORITE_TAGS)
71 71 tags = []
72 72 if tag_names:
73 73 tags = Tag.objects.filter(name__in=tag_names)
74 74 return tags
75 75
76 76 def add_fav_tag(self, tag):
77 77 tags = self.get_setting(SETTING_FAVORITE_TAGS)
78 78 if not tags:
79 79 tags = [tag.name]
80 80 else:
81 81 if not tag.name in tags:
82 82 tags.append(tag.name)
83 83
84 84 tags.sort()
85 85 self.set_setting(SETTING_FAVORITE_TAGS, tags)
86 86
87 87 def del_fav_tag(self, tag):
88 88 tags = self.get_setting(SETTING_FAVORITE_TAGS)
89 89 if tag.name in tags:
90 90 tags.remove(tag.name)
91 91 self.set_setting(SETTING_FAVORITE_TAGS, tags)
92 92
93 def get_hidden_tags(self):
93 def get_hidden_tags(self) -> list:
94 94 tag_names = self.get_setting(SETTING_HIDDEN_TAGS)
95 95 tags = []
96 96 if tag_names:
97 97 for tag_name in tag_names:
98 98 tag = get_object_or_404(Tag, name=tag_name)
99 99 tags.append(tag)
100 100
101 101 return tags
102 102
103 103 def add_hidden_tag(self, tag):
104 104 tags = self.get_setting(SETTING_HIDDEN_TAGS)
105 105 if not tags:
106 106 tags = [tag.name]
107 107 else:
108 108 if not tag.name in tags:
109 109 tags.append(tag.name)
110 110
111 111 tags.sort()
112 112 self.set_setting(SETTING_HIDDEN_TAGS, tags)
113 113
114 114 def del_hidden_tag(self, tag):
115 115 tags = self.get_setting(SETTING_HIDDEN_TAGS)
116 116 if tag.name in tags:
117 117 tags.remove(tag.name)
118 118 self.set_setting(SETTING_HIDDEN_TAGS, tags)
119 119
120 120
121 121 class SessionSettingsManager(SettingsManager):
122 122 """
123 123 Session-based settings manager. All settings are saved to the user's
124 124 session.
125 125 """
126 126 def __init__(self, session):
127 127 SettingsManager.__init__(self)
128 128 self.session = session
129 129
130 130 def get_setting(self, setting):
131 131 if setting in self.session:
132 132 return self.session[setting]
133 133 else:
134 134 return None
135 135
136 136 def set_setting(self, setting, value):
137 137 self.session[setting] = value
138 138
139 139
140 140 def get_settings_manager(request) -> SettingsManager:
141 141 """
142 142 Get settings manager based on the request object. Currently only
143 143 session-based manager is supported. In the future, cookie-based or
144 144 database-based managers could be implemented.
145 145 """
146 146 return SessionSettingsManager(request.session)
@@ -1,68 +1,67 b''
1 1 {% extends "boards/thread.html" %}
2 2
3 3 {% load i18n %}
4 4 {% load cache %}
5 5 {% load static from staticfiles %}
6 6 {% load board %}
7 7
8 8 {% block content %}
9 9 {% get_current_language as LANGUAGE_CODE %}
10 10
11 11 {% cache 600 thread_view thread.id thread.last_edit_time moderator LANGUAGE_CODE %}
12 12
13 13 <div class="image-mode-tab">
14 14 <a class="current_mode" href="{% url 'thread' opening_post.id %}">{% trans 'Normal mode' %}</a>,
15 15 <a href="{% url 'thread_gallery' opening_post.id %}">{% trans 'Gallery mode' %}</a>
16 16 </div>
17 17
18 18 {% if bumpable and thread.has_post_limit %}
19 19 <div class="bar-bg">
20 20 <div class="bar-value" style="width:{{ bumplimit_progress }}%" id="bumplimit_progress">
21 21 </div>
22 22 <div class="bar-text">
23 23 <span id="left_to_limit">{{ posts_left }}</span> {% trans 'posts to bumplimit' %}
24 24 </div>
25 25 </div>
26 26 {% endif %}
27 27
28 28 <div class="thread">
29 29 {% for post in thread.get_replies %}
30 30 {% post_view post moderator=moderator reply_link=True %}
31 31 {% endfor %}
32 32 </div>
33 33
34 34 {% if not thread.archived %}
35 35 <div class="post-form-w">
36 36 <script src="{% static 'js/panel.js' %}"></script>
37 37 <div class="form-title">{% trans "Reply to thread" %} #{{ opening_post.id }}</div>
38 38 <div class="post-form" id="compact-form">
39 39 <div class="swappable-form-full">
40 40 <form enctype="multipart/form-data" method="post" id="form">{% csrf_token %}
41 41 <div class="compact-form-text"></div>
42 42 {{ form.as_div }}
43 43 <div class="form-submit">
44 44 <input type="submit" value="{% trans "Post" %}"/>
45 45 </div>
46 (ctrl-enter)
47 46 </form>
48 47 </div>
49 48 <div><a href="{% url "staticpage" name="help" %}">
50 49 {% trans 'Text syntax' %}</a></div>
51 50 <div><a href="#" onClick="resetFormPosition(); return false;">{% trans 'Close form' %}</a></div>
52 51 </div>
53 52 </div>
54 53
55 54 <script src="{% static 'js/jquery.form.min.js' %}"></script>
56 55 {% endif %}
57 56
58 57 <script src="{% static 'js/form.js' %}"></script>
59 58 <script src="{% static 'js/thread.js' %}"></script>
60 59 <script src="{% static 'js/thread_update.js' %}"></script>
61 60 <script src="{% static 'js/3party/centrifuge.js' %}"></script>
62 61
63 62 {% endcache %}
64 63 {% endblock %}
65 64
66 65 {% block thread_meta_panel %}
67 66 <button id="autoupdate">{% trans 'Update' %}</button>
68 67 {% endblock %}
@@ -1,100 +1,107 b''
1 1 from django.shortcuts import get_object_or_404
2 2
3 3 from boards.abstracts.settingsmanager import get_settings_manager, \
4 4 SETTING_FAVORITE_TAGS, SETTING_HIDDEN_TAGS
5 from boards.models import Tag, Thread
5 from boards.models import Tag
6 6 from boards.views.all_threads import AllThreadsView, DEFAULT_PAGE
7 7 from boards.views.mixins import DispatcherMixin, RedirectNextMixin
8 8 from boards.forms import ThreadForm, PlainErrorList
9 9
10 10 PARAM_HIDDEN_TAGS = 'hidden_tags'
11 11 PARAM_TAG = 'tag'
12 12 PARAM_IS_FAVORITE = 'is_favorite'
13 13 PARAM_IS_HIDDEN = 'is_hidden'
14 14
15 15 __author__ = 'neko259'
16 16
17 17
18 18 class TagView(AllThreadsView, DispatcherMixin, RedirectNextMixin):
19 19
20 20 tag_name = None
21 21
22 22 def get_threads(self):
23 23 tag = get_object_or_404(Tag, name=self.tag_name)
24 24
25 hidden_tags = self.settings_manager.get_hidden_tags()
26
27 try:
28 hidden_tags.remove(tag)
29 except ValueError:
30 pass
31
25 32 return tag.get_threads().exclude(
26 tags__in=self.settings_manager.get_hidden_tags())
33 tags__in=hidden_tags)
27 34
28 35 def get_context_data(self, **kwargs):
29 36 params = super(TagView, self).get_context_data(**kwargs)
30 37
31 38 settings_manager = get_settings_manager(kwargs['request'])
32 39
33 40 tag = get_object_or_404(Tag, name=self.tag_name)
34 41 params[PARAM_TAG] = tag
35 42
36 43 fav_tag_names = settings_manager.get_setting(SETTING_FAVORITE_TAGS)
37 44 hidden_tag_names = settings_manager.get_setting(SETTING_HIDDEN_TAGS)
38 45
39 46 params[PARAM_IS_FAVORITE] = fav_tag_names is not None and tag.name in fav_tag_names
40 47 params[PARAM_IS_HIDDEN] = hidden_tag_names is not None and tag.name in hidden_tag_names
41 48
42 49 return params
43 50
44 51 def get(self, request, tag_name, page=DEFAULT_PAGE, form=None):
45 52 self.tag_name = tag_name
46 53
47 54 return super(TagView, self).get(request, page, form)
48 55
49 56
50 57 def post(self, request, tag_name, page=DEFAULT_PAGE):
51 58 self.tag_name = tag_name
52 59
53 60 if 'method' in request.POST:
54 61 self.dispatch_method(request)
55 62 form = None
56 63 else:
57 64 form = ThreadForm(request.POST, request.FILES,
58 65 error_class=PlainErrorList)
59 66 form.session = request.session
60 67
61 68 if form.is_valid():
62 69 return self.create_thread(request, form)
63 70 if form.need_to_ban:
64 71 # Ban user because he is suspected to be a bot
65 72 self._ban_current_user(request)
66 73
67 74 return self.get(request, tag_name, page, form)
68 75
69 76 def subscribe(self, request):
70 77 tag = get_object_or_404(Tag, name=self.tag_name)
71 78
72 79 settings_manager = get_settings_manager(request)
73 80 settings_manager.add_fav_tag(tag)
74 81
75 82 def unsubscribe(self, request):
76 83 tag = get_object_or_404(Tag, name=self.tag_name)
77 84
78 85 settings_manager = get_settings_manager(request)
79 86 settings_manager.del_fav_tag(tag)
80 87
81 88 def hide(self, request):
82 89 """
83 90 Adds tag to user's hidden tags. Threads with this tag will not be
84 91 shown.
85 92 """
86 93
87 94 tag = get_object_or_404(Tag, name=self.tag_name)
88 95
89 96 settings_manager = get_settings_manager(request)
90 97 settings_manager.add_hidden_tag(tag)
91 98
92 99 def unhide(self, request):
93 100 """
94 101 Removed tag from user's hidden tags.
95 102 """
96 103
97 104 tag = get_object_or_404(Tag, name=self.tag_name)
98 105
99 106 settings_manager = get_settings_manager(request)
100 107 settings_manager.del_hidden_tag(tag)
General Comments 0
You need to be logged in to leave comments. Login now