Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions dribdat/public/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
StringField,
TextAreaField,
SelectField,
SelectMultipleField,
HiddenField,
)
from wtforms.fields import TimeField, DateField, URLField, DateTimeLocalField
Expand Down Expand Up @@ -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)],
Expand Down
15 changes: 15 additions & 0 deletions dribdat/public/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand All @@ -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")
Expand All @@ -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()
Expand Down
5 changes: 5 additions & 0 deletions dribdat/templates/public/projectlog.html
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,11 @@ <h2>{{s.title}}</h2>
<a class="userlink"
href="{{ url_for('public.user_profile', username=s.author )}}">
{{ s.author }}</a>
{% if s.user_roles %}
{% for r in s.user_roles %}
<span class="badge bg-secondary" title="{{r}}">{{r[0]|upper}}</span>
{% endfor %}
{% endif %}
{% endif %}
{% if s.ref_url %}
</a>
Expand Down
72 changes: 71 additions & 1 deletion dribdat/templates/public/projectpost.html
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,72 @@ <h2 class="project-name">

<div class="form-project-post">
{% if stage %}
{{ render_form(url_for('project.project_post', project_id=project.id), form, formid='projectPost') }}
<form id="projectPost" method="POST" action="{{ url_for('project.project_post', project_id=project.id) }}">
{{ form.hidden_tag() }}
<div class="form-group{% if form.has_progress.errors %} has-error{% endif %}">
{{ form.has_progress(class_="form-check-input") }}
{{ form.has_progress.label(class_="form-check-label") }}
{% if form.has_progress.errors %}
<ul class="help-block error">
{% for error in form.has_progress.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div>

<div id="roleSelection" style="display:none">
<div class="form-group{% if form.roles.errors %} has-error{% endif %}">
<label class="control-label" for="roles">{{ form.roles.label }}</label>
<div class="fld-roles">
{{ form.roles(class_="form-control") }}
<span class="help-inline">{{ form.roles.description }}</span>
{% if form.roles.errors %}
<ul class="help-block error">
{% for error in form.roles.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
</div>

<div class="form-group{% if form.note.errors %} has-error{% endif %}">
<label class="control-label" for="note">{{ form.note.label }}</label>
<div class="fld-note">
{{ form.note(class_="form-control", rows="3") }}
<span class="help-inline">{{ form.note.description }}</span>
{% if form.note.errors %}
<ul class="help-block error">
{% for error in form.note.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>

<div class="form-group mt-2">
<div class="form-actions">
{{ form.submit(class_="btn btn-primary") }}
<a id="swapRoleBtn" href="javascript:;" class="btn btn-light ms-2">
<i class="fa fa-refresh" aria-hidden="true"></i>
Swap role
</a>
</div>
</div>
</form>
<script>
document.getElementById('swapRoleBtn').addEventListener('click', function() {
var roleDiv = document.getElementById('roleSelection');
if (roleDiv.style.display === 'none') {
roleDiv.style.display = 'block';
} else {
roleDiv.style.display = 'none';
}
});
</script>
{% else %}
{{ render_form(url_for('project.project_comment', project_id=project.id), form, formid='projectPost') }}
{% endif %}
Expand All @@ -135,6 +200,11 @@ <h2 class="project-name">
<a class="userlink"
href="{{ url_for('public.user_profile', username=s.author )}}">
{{ s.author }}</a>
{% if s.user_roles %}
{% for r in s.user_roles %}
<span class="badge bg-secondary" title="{{r}}">{{r[0]|upper}}</span>
{% endfor %}
{% endif %}
{% endif %}
</div>
</div>
Expand Down
7 changes: 6 additions & 1 deletion dribdat/user/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1096,6 +1096,7 @@ def all_dribs(self, limit=50, by_name=None, only_posts=False):
"title": title,
"text": text,
"author": author,
"user_roles": a.data.get("user_roles"),
"name": a.name,
"date": a.timestamp,
"timesince": a.data["timesince"],
Expand Down Expand Up @@ -1455,7 +1456,10 @@ class Activity(PkModel):
@property
def data(self):
"""Get JSON representation."""
localtime = self.timestamp.replace(tzinfo=current_app.tz) # pyright: ignore
try:
localtime = self.timestamp.replace(tzinfo=current_app.tz) # pyright: ignore
except Exception:
localtime = self.timestamp
a = {
"id": self.id,
"time": int(mktime(self.timestamp.timetuple())),
Expand All @@ -1469,6 +1473,7 @@ def data(self):
if self.user:
a["user_id"] = self.user.id
a["user_name"] = self.user.username
a["user_roles"] = [r.name for r in self.user.roles]
if self.project:
a["project_id"] = self.project.id
a["project_name"] = self.project.name
Expand Down
Binary file added flask.log
Binary file not shown.