Transfer meeting ownership - #391
Conversation
|
Attention, la grosse difficulté de ce ticket va être de ne pas perdre la continuité de la salle :
Il y a peut-être d'autres points que j'oublie. |
|
Il faudrait que les admins puissent transférer des salon, soit par l'interface, soit par CLI. |
…ngs under Meeting.id
There's no revision depth left to target once a UUID-backed meeting is in the database
now, we can read meeting.quick
avoid to generate url for each use make meeting url persistents
group_member table wasn't registered when test_join.py ran in isolation, causing User mapper configuration to fail on the group relationship.
meeting.id stay autoincrement integer
| new_owner = delegate | ||
| if new_owner is None or new_owner not in meeting.get_all_delegates: | ||
| abort(404) | ||
|
|
||
| previous_owner = meeting.owner | ||
| meeting.owner = new_owner | ||
| meeting.owner_id = new_owner.id | ||
| new_access = MeetingAccess( | ||
| meeting_id=meeting.id, | ||
| user_id=previous_owner.id, | ||
| level=AccessLevel.DELEGATE, | ||
| ) | ||
| removed_access = MeetingAccess.query.filter_by( | ||
| user_id=new_owner.id, meeting_id=meeting.id | ||
| ).one() | ||
| db.session.add(new_access) | ||
| db.session.delete(removed_access) | ||
| db.session.commit() | ||
| current_app.logger.info( | ||
| "Meeting %s %s have a new owner : %s %s", | ||
| meeting.id, | ||
| meeting.name, | ||
| new_owner.id, | ||
| new_owner.fullname, | ||
| ) | ||
| current_app.logger.info( | ||
| "%s became delegate of meeting %s %s", | ||
| previous_owner.email, | ||
| meeting.id, | ||
| meeting.name, | ||
| ) | ||
| current_app.logger.info( | ||
| "%s removed from delegates of meeting %s %s", | ||
| new_owner.email, | ||
| meeting.id, | ||
| meeting.name, | ||
| ) |
There was a problem hiding this comment.
J'extrairais ça dans une méthode dédiée pour alléger la vue.
| MeetingAccess.meeting_id == self.id, | ||
| MeetingAccess.level == AccessLevel.DELEGATE, | ||
| ) | ||
| .order_by(User.family_name, User.given_name) |
There was a problem hiding this comment.
C'est un peu hors PR, tu peux pousser des choses comme ça directement sur main :) (mais ce n'est pas grave)
|
@Mdl-ac-toulouse pour revue fonctionnelle |
| @check_oidc_connection(auth) | ||
| @auth.oidc_auth("default") | ||
| @meeting_access_required() | ||
| def transfert_meeting_ownership(meeting: Meeting, user: User, delegate: User): |
There was a problem hiding this comment.
À la réflexion, les changements d'état devraient plutôt être derrière des requêtes POST.
| @auth.oidc_auth("default") | ||
| @meeting_access_required() | ||
| def transfert_meeting_ownership(meeting: Meeting, user: User, delegate: User): | ||
| """Display the page for manage meeting delegation.""" |
There was a problem hiding this comment.
Ça ne semble pas être la bonne docstring :)
| } | ||
| text = render_template(f"meeting/mailto/{body_file}.txt", **context) | ||
| html = render_template(f"meeting/mailto/{body_file}.html", **context) | ||
| msg["Subject"] = str(_(f"Transfert de {meeting.name}")) |
There was a problem hiding this comment.
Pas de f-string dans _(...), il faut utiliser _(...).format(...)
| ) | ||
|
|
||
|
|
||
| class TransferMeetingOwnership(FlaskForm): |
There was a problem hiding this comment.
Cette classe n'est jamais appelée non ?
| select = SelectField( | ||
| label=_("Sélectionner un délégataire"), | ||
| description=_( | ||
| "Transférer la propriété d'une réunion est action définitive. Vous deviendrez délégataire de cette réunion." |
| {% include 'meeting/delegation-management.html' %} | ||
| {% endblock %} | ||
|
|
||
| {# |
Cette PR est basée sur a #401
fix #329
fix #393
CHANGES
A meeting owner or an admin can transfer ownership of the meeting to a delegate.
The new owner is notified by email.
The previous owner becomes a delegate for the meeting.