diff --git a/dribdat/public/forms.py b/dribdat/public/forms.py index 7af94988..e9976a6c 100644 --- a/dribdat/public/forms.py +++ b/dribdat/public/forms.py @@ -8,6 +8,7 @@ StringField, TextAreaField, SelectField, + SelectMultipleField, HiddenField, ) from wtforms.fields import TimeField, DateField, URLField, DateTimeLocalField @@ -163,6 +164,9 @@ class ProjectPost(FlaskForm): id = HiddenField("id") has_progress = BooleanField("Level up") + roles = SelectMultipleField( + "Roles", coerce=int, description="Choose one or more team roles for yourself." + ) note = TextAreaField( "How are the vibes in your team right now?", [length(max=1024)], diff --git a/dribdat/public/project.py b/dribdat/public/project.py index 0a807c4b..a852702b 100644 --- a/dribdat/public/project.py +++ b/dribdat/public/project.py @@ -205,6 +205,10 @@ def project_post(project_id): stage, all_valid = validateProjectData(project) form = ProjectPost(obj=project, next=request.args.get("next")) + # Populate roles + from dribdat.user.models import Role + form.roles.choices = [(r.id, r.name) for r in Role.query.order_by("name")] + # Apply random questions form.note.label.text = drib_question() @@ -214,6 +218,9 @@ def project_post(project_id): # if form.is_submitted() and timelimit(thelastact): # flash("Please wait a minute before posting", 'warning') + if not form.is_submitted(): + form.roles.data = [r.id for r in current_user.roles] + if form.is_submitted() and not form.note.data: # Empty submission flash("Please add something to your note", "warning") @@ -224,9 +231,17 @@ def project_post(project_id): if stageProjectToNext(project): flash("Level up! You are at stage '%s'" % project.phase, "info") + # Update user roles + new_roles = Role.query.filter(Role.id.in_(form.roles.data)).all() + if set(new_roles) != set(current_user.roles): + current_user.roles = new_roles + current_user.save() + project_action(project_id, "update", action="post", text="🔄 Role swap") + # Update project data del form.id del form.has_progress + del form.roles # Process form form.populate_obj(project) project.update_now() diff --git a/dribdat/templates/public/projectlog.html b/dribdat/templates/public/projectlog.html index 4dca8b55..ae051082 100644 --- a/dribdat/templates/public/projectlog.html +++ b/dribdat/templates/public/projectlog.html @@ -138,6 +138,11 @@