From 54b1574d4983ce8f80620bec2ce8ed0aa317f561 Mon Sep 17 00:00:00 2001 From: Robin Sonnabend <robin@fsmpi.rwth-aachen.de> Date: Wed, 22 Mar 2017 22:09:50 +0100 Subject: [PATCH] Make metadata internal optionally /close #80 --- migrations/versions/4651698510d7_.py | 30 ++++++++++++++++++++++++++++ models/database.py | 4 +++- tasks.py | 2 +- templates/protocol-mail.txt | 2 ++ templates/protocol-show.html | 4 +++- templates/protocol.tex | 4 +++- templates/protocol.wiki | 2 ++ views/forms.py | 2 ++ views/tables.py | 4 ++-- 9 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 migrations/versions/4651698510d7_.py diff --git a/migrations/versions/4651698510d7_.py b/migrations/versions/4651698510d7_.py new file mode 100644 index 0000000..e6f86c6 --- /dev/null +++ b/migrations/versions/4651698510d7_.py @@ -0,0 +1,30 @@ +"""empty message + +Revision ID: 4651698510d7 +Revises: a06cc03bdef4 +Create Date: 2017-03-22 21:42:04.880972 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '4651698510d7' +down_revision = 'a06cc03bdef4' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('defaultmetas', sa.Column('internal', sa.Boolean(), nullable=True)) + op.add_column('metas', sa.Column('internal', sa.Boolean(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('metas', 'internal') + op.drop_column('defaultmetas', 'internal') + # ### end Alembic commands ### diff --git a/models/database.py b/models/database.py index 71dda40..9e47ae5 100644 --- a/models/database.py +++ b/models/database.py @@ -203,7 +203,7 @@ class Protocol(DatabaseModel): for default_meta in self.protocoltype.metas: if default_meta.key in remarks: value = remarks[default_meta.key].value.strip() - meta = Meta(protocol_id=self.id, name=default_meta.name, value=value) + meta = Meta(protocol_id=self.id, name=default_meta.name, value=value, internal=default_meta.internal) db.session.add(meta) db.session.commit() @@ -657,6 +657,7 @@ class DefaultMeta(DatabaseModel): protocoltype_id = db.Column(db.Integer, db.ForeignKey("protocoltypes.id")) key = db.Column(db.String) name = db.Column(db.String) + internal = db.Column(db.Boolean) def get_parent(self): return self.protocoltype @@ -668,6 +669,7 @@ class Meta(DatabaseModel): protocol_id = db.Column(db.Integer, db.ForeignKey("protocols.id")) name = db.Column(db.String) value = db.Column(db.String) + internal = db.Column(db.Boolean) def get_parent(self): return self.protocol diff --git a/tasks.py b/tasks.py index 84f4697..f08ea29 100644 --- a/tasks.py +++ b/tasks.py @@ -505,7 +505,7 @@ def send_protocol_async(protocol_id, show_private): protocol = Protocol.query.filter_by(id=protocol_id).first() to_addr = protocol.protocoltype.private_mail if show_private else protocol.protocoltype.public_mail subject = "{}{}-Protokoll vom {}".format("Internes " if show_private else "", protocol.protocoltype.short_name, date_filter(protocol.date)) - mail_content = render_template("protocol-mail.txt", protocol=protocol) + mail_content = render_template("protocol-mail.txt", protocol=protocol, show_private=show_private) appendix = [(document.name, document.as_file_like()) for document in protocol.documents if show_private or not document.is_private diff --git a/templates/protocol-mail.txt b/templates/protocol-mail.txt index 4235afc..0cb09c8 100644 --- a/templates/protocol-mail.txt +++ b/templates/protocol-mail.txt @@ -5,7 +5,9 @@ Datum: {{protocol.date|datify_long}} Zeit: von {{protocol.start_time|timify}} bis {{protocol.end_time|timify}} {% endif %} {% for meta in protocol.metas %} +{% if not meta.internal or show_private %} {{meta.name}}: {{meta.value}} +{% endif %} {% endfor %} Die Tagesordnung ist: diff --git a/templates/protocol-show.html b/templates/protocol-show.html index 1316ede..9ce74b3 100644 --- a/templates/protocol-show.html +++ b/templates/protocol-show.html @@ -65,7 +65,9 @@ {% endif %} {% if has_public_view_right %} {% for meta in protocol.metas %} - <p><strong>{{meta.name}}:</strong> {{meta.value}}</p> + {% if not meta.internal or has_private_view_right %} + <p><strong>{{meta.name}}:</strong> {{meta.value}}</p> + {% endif %} {% endfor %} {% endif %} {% else %} diff --git a/templates/protocol.tex b/templates/protocol.tex index 2004b24..1c757ba 100644 --- a/templates/protocol.tex +++ b/templates/protocol.tex @@ -27,7 +27,9 @@ {\bf Datum:} & \VAR{protocol.date|datify_long|escape_tex}\\ \ENV{endif} \ENV{for meta in protocol.metas} - {\bf \VAR{meta.name|escape_tex}:} & \VAR{meta.value|escape_tex}\\ + \ENV{if not meta.internal or show_private} + {\bf \VAR{meta.name|escape_tex}:} & \VAR{meta.value|escape_tex}\\ + \ENV{endif} \ENV{endfor} \end{tabular} \normalsize diff --git a/templates/protocol.wiki b/templates/protocol.wiki index 5cb8c6c..bc5e061 100644 --- a/templates/protocol.wiki +++ b/templates/protocol.wiki @@ -7,7 +7,9 @@ | zeit = von <var>protocol.start_time|timify</var> bis <var>protocol.end_time|timify</var> <env> endif </env> <env> for meta in protocol.metas </env> +<env> if not meta.internal or not protocol.protocoltype.wiki_only_public </env> | <var>meta.name|lower</var> = <var>meta.value</var> +<env> endif </env> <env> endfor </env> }} diff --git a/views/forms.py b/views/forms.py index 6ee8e92..78bb64b 100644 --- a/views/forms.py +++ b/views/forms.py @@ -243,10 +243,12 @@ class TodoMailForm(FlaskForm): class MetaForm(FlaskForm): name = StringField("Name", validators=[InputRequired("Bitte gib den Namen der Metadaten an.")]) value = StringField("Wert") + internal = BooleanField("Intern") class DefaultMetaForm(FlaskForm): key = StringField("Key", validators=[InputRequired("Bitte gib den Protokoll-Syntax-Schlüssel der Metadaten an.")]) name = StringField("Name", validators=[InputRequired("Bitte gib den Namen der Metadaten an.")]) + internal = BooleanField("Intern") class DecisionCategoryForm(FlaskForm): name = StringField("Name", validators=[InputRequired("Bitte gib den Namen der Kategorie an.")]) diff --git a/views/tables.py b/views/tables.py index 4d98c4c..e612dd9 100644 --- a/views/tables.py +++ b/views/tables.py @@ -474,13 +474,14 @@ class DefaultMetasTable(Table): ) def headers(self): - return ["Name", "Key", ""] + return ["Name", "Key", "Intern", ""] def row(self, meta): user = current_user() general_part = [ meta.name, meta.key, + Table.bool(meta.internal) ] links = [ Table.link(url_for("edit_defaultmeta", defaultmeta_id=meta.id), "Ändern"), @@ -491,7 +492,6 @@ class DefaultMetasTable(Table): class DecisionCategoriesTable(Table): def __init__(self, categories, protocoltype): - print(categories) super().__init__( "Beschlusskategorien", categories, -- GitLab