diff --git a/files/classes/volunteer_janitor.py b/files/classes/volunteer_janitor.py index 2c984d470..aa2e07417 100644 --- a/files/classes/volunteer_janitor.py +++ b/files/classes/volunteer_janitor.py @@ -20,7 +20,7 @@ class VolunteerJanitorRecord(Base): id = Column(Integer, primary_key=True) user_id = Column(Integer, ForeignKey("users.id"), nullable=False) comment_id = Column(Integer, ForeignKey("comments.id"), nullable=False) - edited_utc = Column(DateTime, default=0, nullable=False) + recorded_utc = Column(DateTime, default=0, nullable=False) result = Column(Enum(VolunteerJanitorResult), default=VolunteerJanitorResult.Pending, nullable=False) Index('volunteer_comment_index', user_id, comment_id) diff --git a/files/routes/volunteer.py b/files/routes/volunteer.py index d7fedcd4f..8633a7ba8 100644 --- a/files/routes/volunteer.py +++ b/files/routes/volunteer.py @@ -4,12 +4,16 @@ from files.__main__ import app from files.classes.user import User import files.helpers.jinja2 from files.helpers.wrappers import auth_required -from flask import render_template, g -import sqlalchemy -from typing import Optional - from files.routes.volunteer_common import VolunteerDuty import files.routes.volunteer_janitor +from flask import render_template, g, request +from os import environ +import sqlalchemy +from typing import Optional +import pprint + + + @files.helpers.jinja2.template_function def volunteer_available_for(u: Optional[User]) -> bool: @@ -45,3 +49,18 @@ def volunteer(v: User): g.db.commit() return render_template("volunteer.html", v=v, duty=duty) + +@app.post("/volunteer_submit") +@auth_required +def volunteer_submit(v: User): + for k in request.values: + if not k.startswith("volunteer-"): + continue + k_processed = k.removeprefix("volunteer-") + + if k_processed.startswith("janitor-"): + files.routes.volunteer_janitor.submitted(v, k_processed.removeprefix("janitor-"), request.values[k]) + else: + raise ValueError("bad key, let's generate an error") + + return render_template("volunteer_submit.html", v=v) diff --git a/files/routes/volunteer_janitor.py b/files/routes/volunteer_janitor.py index 3ef080703..5de062adc 100644 --- a/files/routes/volunteer_janitor.py +++ b/files/routes/volunteer_janitor.py @@ -20,7 +20,7 @@ class VolunteerDutyJanitor(VolunteerDuty): record = VolunteerJanitorRecord() record.user_id = v.id record.comment_id = item - record.edited_utc = sqlalchemy.func.now() + record.recorded_utc = sqlalchemy.func.now() record.result = VolunteerJanitorResult.Pending g.db.add(record) @@ -28,6 +28,9 @@ class VolunteerDutyJanitor(VolunteerDuty): def embed_template(self) -> str: return "volunteer_janitor.html" + + def comments(self) -> list[Comment]: + return g.db.query(Comment).where(Comment.id.in_(self.choices)) def get_duty(u: User) -> VolunteerDutyJanitor: @@ -64,8 +67,9 @@ def get_duty(u: User) -> VolunteerDutyJanitor: # also, let's make sure it hasn't already been looked at by this user seen_records = g.db.query(VolunteerJanitorRecord) \ + .where(VolunteerJanitorRecord.comment_id.in_(nonuser_reports)) \ .where(VolunteerJanitorRecord.user_id == u.id) \ - .with_entities(CommentFlag.comment_id) + .with_entities(VolunteerJanitorRecord.comment_id) final_reported = list({report.comment_id for report in nonuser_reports} - {record.comment_id for record in seen_records}) else: @@ -75,3 +79,12 @@ def get_duty(u: User) -> VolunteerDutyJanitor: return None return VolunteerDutyJanitor(random.sample(final_reported, k = min(3, len(final_reported)))) + +def submitted(v: User, key: str, val: str) -> None: + record = VolunteerJanitorRecord() + record.user_id = v.id + record.comment_id = key + record.recorded_utc = sqlalchemy.func.now() + record.result = VolunteerJanitorResult(int(val)) + g.db.add(record) + g.db.commit() diff --git a/files/templates/volunteer.html b/files/templates/volunteer.html index 3ac9b19ab..d9deca6fe 100644 --- a/files/templates/volunteer.html +++ b/files/templates/volunteer.html @@ -13,9 +13,12 @@ there is no volunteering to do, but thanks {% else %} +
+
- {% from duty.embed_template() import display %} + {% from duty.embed_template() import display with context %} {{ display(duty) }} +
{% endif %} diff --git a/files/templates/volunteer_janitor.html b/files/templates/volunteer_janitor.html index 1c38a91cd..9c55b20e3 100644 --- a/files/templates/volunteer_janitor.html +++ b/files/templates/volunteer_janitor.html @@ -1,3 +1,24 @@ {% macro display(duty) %} -janny +{% for c in duty.comments() %} + {% with comments=[c] %} + {% include "comments.html" %} + {% endwith %} + + + + + + + + + + + + + + + + + +{% endfor %} {% endmacro %} diff --git a/files/templates/volunteer_submit.html b/files/templates/volunteer_submit.html new file mode 100644 index 000000000..55a7efa1c --- /dev/null +++ b/files/templates/volunteer_submit.html @@ -0,0 +1,11 @@ +{% extends "default.html" %} + +{% block pagetitle %}Volunteer Submitted{% endblock %} + +{% block content %} + +
+ tenks +
+ +{% endblock %} \ No newline at end of file diff --git a/migrations/versions/2022_11_20_10_10_48_e2cd2818a196_changes_to_volunteer_janitor_behavior.py b/migrations/versions/2022_11_20_10_10_48_e2cd2818a196_changes_to_volunteer_janitor_behavior.py new file mode 100644 index 000000000..64d46fa04 --- /dev/null +++ b/migrations/versions/2022_11_20_10_10_48_e2cd2818a196_changes_to_volunteer_janitor_behavior.py @@ -0,0 +1,30 @@ +"""changes to volunteer_janitor behavior + +Revision ID: e2cd2818a196 +Revises: 65ce80ffc30e +Create Date: 2022-11-20 10:10:48.464867+00:00 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision = 'e2cd2818a196' +down_revision = '65ce80ffc30e' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('volunteer_janitor', sa.Column('recorded_utc', sa.DateTime(), nullable=False)) + op.drop_column('volunteer_janitor', 'edited_utc') + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('volunteer_janitor', sa.Column('edited_utc', postgresql.TIMESTAMP(), autoincrement=False, nullable=False)) + op.drop_column('volunteer_janitor', 'recorded_utc') + # ### end Alembic commands ###