mirror of
https://github.com/lucaspalomodevelop/indico-plugins.git
synced 2026-03-15 00:14:38 +00:00
Handle event deletion
This commit is contained in:
parent
7969b63457
commit
4dda648bc0
@ -31,7 +31,7 @@ from indico_chat.forms import AddChatroomForm, EditChatroomForm
|
||||
from indico_chat.models.chatrooms import ChatroomEventAssociation, Chatroom
|
||||
from indico_chat.util import is_chat_admin
|
||||
from indico_chat.views import WPChatEventPage, WPChatEventMgmt
|
||||
from indico_chat.xmpp import create_room, update_room, delete_room
|
||||
from indico_chat.xmpp import create_room, update_room
|
||||
|
||||
|
||||
class RHChatEventPage(RHConferenceBaseDisplay):
|
||||
@ -69,7 +69,8 @@ class RHChatManageEvent(RHChatManageEventBase):
|
||||
"""Lists the chatrooms of an event"""
|
||||
|
||||
def _process(self):
|
||||
chatrooms = ChatroomEventAssociation.find_for_event(self.event, include_hidden=True, _eager='chatroom.events')
|
||||
chatrooms = ChatroomEventAssociation.find_for_event(self.event, include_hidden=True,
|
||||
_eager='chatroom.events').all()
|
||||
chatroom_filter = (~Chatroom.id.in_(x.chatroom_id for x in chatrooms)) if chatrooms else True
|
||||
available_chatrooms = Chatroom.find_all(Chatroom.created_by_id == int(session.user.id), chatroom_filter)
|
||||
return WPChatEventMgmt.render_template('manage_event.html', self._conf, event_chatrooms=chatrooms,
|
||||
@ -145,12 +146,9 @@ class RHChatManageEventRemove(RHChatManageEventBase):
|
||||
self.chatroom = self.event_chatroom.chatroom
|
||||
|
||||
def _process(self):
|
||||
db.session.delete(self.event_chatroom)
|
||||
db.session.flush()
|
||||
if self.chatroom.events:
|
||||
flash('Chatroom removed from event', 'success')
|
||||
else:
|
||||
db.session.delete(self.chatroom)
|
||||
delete_room(self.chatroom)
|
||||
chatroom_deleted = self.event_chatroom.delete()
|
||||
if chatroom_deleted:
|
||||
flash('Chatroom deleted', 'success')
|
||||
else:
|
||||
flash('Chatroom removed from event', 'success')
|
||||
return redirect(url_for_plugin('.manage_rooms', self.event))
|
||||
|
||||
@ -23,7 +23,7 @@ from indico.util.date_time import now_utc
|
||||
from indico.util.string import return_ascii
|
||||
from MaKaC.user import AvatarHolder
|
||||
from MaKaC.conference import ConferenceHolder
|
||||
from indico_chat.xmpp import generate_jid
|
||||
from indico_chat.xmpp import generate_jid, delete_room
|
||||
|
||||
|
||||
class Chatroom(db.Model):
|
||||
@ -114,6 +114,11 @@ class Chatroom(db.Model):
|
||||
server = '!' + server
|
||||
return '<Chatroom({}, {}, {}, {})>'.format(self.id, self.name, self.jid_node, server)
|
||||
|
||||
def __committed__(self, change):
|
||||
super(Chatroom, self).__committed__(change)
|
||||
if change == 'delete':
|
||||
delete_room(self)
|
||||
|
||||
def generate_jid(self):
|
||||
"""Generates the JID based on the room name"""
|
||||
assert self.jid_node is None
|
||||
@ -154,7 +159,7 @@ class ChatroomEventAssociation(db.Model):
|
||||
chatroom = db.relationship(
|
||||
'Chatroom',
|
||||
lazy=False,
|
||||
backref='events'
|
||||
backref=db.backref('events', cascade='all, delete-orphan')
|
||||
)
|
||||
|
||||
@property
|
||||
@ -185,3 +190,16 @@ class ChatroomEventAssociation(db.Model):
|
||||
if not include_hidden:
|
||||
query = query.filter(~cls.hidden)
|
||||
return query
|
||||
|
||||
def delete(self):
|
||||
"""Deletes the event chatroom and if necessary the chatroom, too.
|
||||
|
||||
:return: True if the associated chatroom was also
|
||||
deleted, otherwise False
|
||||
"""
|
||||
db.session.delete(self)
|
||||
db.session.flush()
|
||||
if not self.chatroom.events:
|
||||
db.session.delete(self.chatroom)
|
||||
return True
|
||||
return False
|
||||
|
||||
@ -89,6 +89,7 @@ class ChatPlugin(IndicoPlugin):
|
||||
self.connect(signals.event_sidemenu, self.extend_event_menu)
|
||||
self.connect(signals.event_management_sidemenu, self.extend_event_management_menu)
|
||||
self.connect(signals.event_management_clone, self.extend_event_management_clone)
|
||||
self.connect(signals.event_deleted, self.event_deleted)
|
||||
self.template_hook('event-header', self.inject_event_header)
|
||||
for wp in (WPTPLConferenceDisplay, WPXSLConferenceDisplay, WPChatEventPage, WPChatEventMgmt):
|
||||
self.inject_css('chat_css', wp)
|
||||
@ -122,6 +123,10 @@ class ChatPlugin(IndicoPlugin):
|
||||
def extend_event_management_clone(self, event, **kwargs):
|
||||
return ChatroomCloner(self, event)
|
||||
|
||||
def event_deleted(self, event, **kwargs):
|
||||
for event_chatroom in ChatroomEventAssociation.find_for_event(event, include_hidden=True):
|
||||
event_chatroom.delete()
|
||||
|
||||
|
||||
class ChatroomCloner(EventCloner):
|
||||
def get_options(self):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user