Bubble [main]
Admin can lock threads permanently; bumped version to 9.24
[1mdiff --git a/50_bubble.py b/50_bubble.py[m
[1mindex 080e552..b0fa21e 100644[m
[1m--- a/50_bubble.py[m
[1m+++ b/50_bubble.py[m
[36m@@ -18,7 +18,7 @@[m [mfrom utils import *[m
from worker import *[m
[m
[m
[31m-__version__ = '9.23'[m
[32m+[m[32m__version__ = '9.24'[m
[m
[m
class Bubble:[m
[36m@@ -211,7 +211,7 @@[m [mBubble is open source:[m
return False[m
if self.user.role == User.ADMIN:[m
return True[m
[31m- if post.flags & Post.LOCKED_FLAG:[m
[32m+[m[32m if post.flags & (Post.LOCKED_FLAG | Post.ADMIN_LOCKED_FLAG):[m
return False[m
return True[m
[m
[1mdiff --git a/composer.py b/composer.py[m
[1mindex 629b305..95ed3ee 100644[m
[1m--- a/composer.py[m
[1m+++ b/composer.py[m
[36m@@ -531,7 +531,8 @@[m [mdef make_comment(session):[m
post = db.get_post(post_id)[m
if not post:[m
return 51, 'Not found'[m
[31m- if post.flags & Post.LOCKED_FLAG and session.user.role != User.ADMIN:[m
[32m+[m[32m if post.flags & (Post.LOCKED_FLAG | Post.ADMIN_LOCKED_FLAG) and \[m
[32m+[m[32m session.user.role != User.ADMIN:[m
return 61, 'Post is locked'[m
[m
special = None[m
[1mdiff --git a/feeds.py b/feeds.py[m
[1mindex ca37b6b..0cd7e7e 100644[m
[1m--- a/feeds.py[m
[1m+++ b/feeds.py[m
[36m@@ -243,10 +243,13 @@[m [mdef make_post_page_or_configure_feed(session):[m
actions.append(f'=> /edit-tags/{post.id} ๐ท๏ธ Add/remove tags\n')[m
actions.append(f'=> /remind/{post.id} ๐ Remind me\n')[m
if session.is_lockable(post):[m
[31m- if post.flags & Post.LOCKED_FLAG:[m
[31m- actions.append(f'=> /unlock/{post.id} ๐ Unlock comments\n')[m
[31m- else:[m
[31m- actions.append(f'=> /lock/{post.id} ๐ Lock comments\n')[m
[32m+[m[32m lock_flags = post.flags & (Post.LOCKED_FLAG | Post.ADMIN_LOCKED_FLAG)[m
[32m+[m[32m if session.user.role == User.ADMIN or (session.user.role == User.BASIC and[m
[32m+[m[32m not lock_flags & Post.ADMIN_LOCKED_FLAG):[m
[32m+[m[32m if lock_flags:[m
[32m+[m[32m actions.append(f'=> /unlock/{post.id} ๐ Unlock comments\n')[m
[32m+[m[32m else:[m
[32m+[m[32m actions.append(f'=> /lock/{post.id} ๐ Lock comments\n')[m
if session.is_moderated(post) and post.user != session.user.id:[m
if session.user.role == User.ADMIN:[m
actions.append(f'=> /settings/flair/{post.poster_name}/add/ ๐ Set flair on {post.poster_name}\n')[m
[36m@@ -490,7 +493,9 @@[m [mdef make_post_page(session, post):[m
listed.append(f'{r} {reactions[r]}')[m
if listed:[m
page += ' ยท ' + ' '.join(listed)[m
[31m- if post.flags & Post.LOCKED_FLAG:[m
[32m+[m[32m if post.flags & Post.ADMIN_LOCKED_FLAG:[m
[32m+[m[32m page += '\n๐ Locked by Admin'[m
[32m+[m[32m elif post.flags & Post.LOCKED_FLAG:[m
page += '\n๐ Locked'[m
page += '\n'[m
[m
[1mdiff --git a/model.py b/model.py[m
[1mindex 23f0232..ea2dfa6 100644[m
[1m--- a/model.py[m
[1m+++ b/model.py[m
[36m@@ -505,6 +505,7 @@[m [mclass Post:[m
OMIT_FROM_ALL_FLAG = 0x2[m
DISABLE_FEATURED_LINK_FLAG = 0x4[m
LOCKED_FLAG = 0x8[m
[32m+[m[32m ADMIN_LOCKED_FLAG = 0x10 # Admin only[m
[m
SORT_CREATED, SORT_ACTIVE, SORT_HOTNESS = range(3)[m
[m
[1mdiff --git a/user.py b/user.py[m
[1mindex bb4ac3c..fa7f005 100644[m
[1m--- a/user.py[m
[1m+++ b/user.py[m
[36m@@ -42,7 +42,14 @@[m [mdef user_actions(session):[m
return 51, 'Not found'[m
if not session.is_lockable(post):[m
return 60, 'Not authorized'[m
[31m- db.update_post(post, flags=post.flags ^ Post.LOCKED_FLAG)[m
[32m+[m[32m flags = post.flags[m
[32m+[m[32m # Admin sets both lock flags, while normal users can only set the normal lock flag.[m
[32m+[m[32m lock_flag = Post.LOCKED_FLAG | (Post.ADMIN_LOCKED_FLAG if user.role == User.ADMIN else 0)[m
[32m+[m[32m if action == 'lock':[m
[32m+[m[32m flags |= lock_flag[m
[32m+[m[32m else:[m
[32m+[m[32m flags &= ~lock_flag[m
[32m+[m[32m db.update_post(post, flags=flags)[m
return 30, post.page_url() + '/more'[m
[m
elif req.path.startswith(session.path + 'react/') or \[m