diff --git a/migrations/versions/8fdd381e6a2a_.py b/migrations/versions/8fdd381e6a2a_.py new file mode 100644 index 0000000000000000000000000000000000000000..2256220e7700bb9fd0eeee0cb81d94decd79a065 --- /dev/null +++ b/migrations/versions/8fdd381e6a2a_.py @@ -0,0 +1,28 @@ +"""empty message + +Revision ID: 8fdd381e6a2a +Revises: cd972745eb09 +Create Date: 2017-03-09 03:44:54.631531 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '8fdd381e6a2a' +down_revision = 'cd972745eb09' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('protocols', sa.Column('pad_identifier', sa.String(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('protocols', 'pad_identifier') + # ### end Alembic commands ### diff --git a/migrations/versions/cd972745eb09_.py b/migrations/versions/cd972745eb09_.py new file mode 100644 index 0000000000000000000000000000000000000000..f6120a102f8b0cb75c58f84322edaa6fd363017d --- /dev/null +++ b/migrations/versions/cd972745eb09_.py @@ -0,0 +1,28 @@ +"""empty message + +Revision ID: cd972745eb09 +Revises: 0068d7a0fac0 +Create Date: 2017-03-09 03:35:22.809679 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'cd972745eb09' +down_revision = '0068d7a0fac0' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('protocoltypes', sa.Column('non_reproducible_pad_links', sa.Boolean(), nullable=True, server_default=sa.sql.expression.literal(False))) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('protocoltypes', 'non_reproducible_pad_links') + # ### end Alembic commands ### diff --git a/models/database.py b/models/database.py index d1a2aa061de3824799cb98cff85b8c568d7be0c4..7bd0cf5247fdfe0551dbdf8b7216ac732c2376af 100644 --- a/models/database.py +++ b/models/database.py @@ -4,6 +4,7 @@ from datetime import datetime, time, date, timedelta import math from io import StringIO, BytesIO from enum import Enum +from uuid import uuid4 from shared import db, date_filter, date_filter_short, escape_tex, DATE_KEY, START_TIME_KEY, END_TIME_KEY from utils import random_string, url_manager, get_etherpad_url, split_terms, check_ip_in_networks @@ -57,6 +58,7 @@ class ProtocolType(DatabaseModel): public_group = db.Column(db.String) private_mail = db.Column(db.String) public_mail = db.Column(db.String) + non_reproducible_pad_links = db.Column(db.Boolean) use_wiki = db.Column(db.Boolean) wiki_category = db.Column(db.String) wiki_only_public = db.Column(db.Boolean) @@ -145,6 +147,7 @@ class Protocol(DatabaseModel): end_time = db.Column(db.Time) done = db.Column(db.Boolean) public = db.Column(db.Boolean) + pad_identifier = db.Column(db.String) tops = relationship("TOP", backref=backref("protocol"), cascade="all, delete-orphan", order_by="TOP.number") decisions = relationship("Decision", backref=backref("protocol"), cascade="all, delete-orphan", order_by="Decision.id") @@ -222,10 +225,15 @@ class Protocol(DatabaseModel): return "Protokoll:{}-{:%Y-%m-%d}".format(self.protocoltype.short_name, self.date) def get_etherpad_link(self): + print(self.pad_identifier) + if self.pad_identifier is not None: + return self.pad_identifier identifier = self.get_identifier() - if identifier is None: - return "" - return get_etherpad_url(self.get_identifier()) + if self.protocoltype.non_reproducible_pad_links: + identifier = str(uuid4()) + self.pad_identifier = identifier + db.session.commit() + return get_etherpad_url(identifier) def get_datetime(self): return datetime(self.date.year, self.date.month, self.date.day, self.protocoltype.usual_time.hour, self.protocoltype.usual_time.minute) diff --git a/views/forms.py b/views/forms.py index c7a48d55cd9056e061dc37f81f1cd0c23e91d6bb..7f8a96e6bb549d655bb6c9f67cb0690a775d2ad0 100644 --- a/views/forms.py +++ b/views/forms.py @@ -102,6 +102,7 @@ class ProtocolTypeForm(FlaskForm): modify_group = SelectField("Bearbeitungsgruppe", choices=[]) private_group = SelectField("Interne Gruppe", choices=[]) public_group = SelectField("Öffentliche Gruppe", choices=[]) + non_reproducible_pad_links = BooleanField("nicht nachvollziehbare Etherpad-Links") private_mail = StringField("Interner Verteiler") public_mail = StringField("Öffentlicher Verteiler") wiki_category = StringField("Wiki-Kategorie") diff --git a/views/tables.py b/views/tables.py index cfa177f744bea9e1d416ea25b403e350512400e4..155f61e1cd15cf5f800c66be75f5ac47b632aa49 100644 --- a/views/tables.py +++ b/views/tables.py @@ -153,6 +153,9 @@ class ProtocolTypeTable(SingleValueTable): general_headers = ["Name", "Abkürzung", "Organisation", "Beginn", "Öffentlich", "Bearbeitungsgruppe", "Interne Gruppe", "Öffentliche Gruppe"] + etherpad_headers = ["Nicht-reproduzierbare Etherpadlinks"] + if not config.ETHERPAD_ACTIVE: + etherpad_headers = [] mail_headers = ["Interner Verteiler", "Öffentlicher Verteiler"] if not config.MAIL_ACTIVE: mail_headers = [] @@ -167,8 +170,9 @@ class ProtocolTypeTable(SingleValueTable): calendar_headers = [] network_headers = ["Netzwerke einschränken", "Erlaubte Netzwerke"] action_headers = ["Aktion"] - return (general_headers + mail_headers + printing_headers - + wiki_headers + calendar_headers + network_headers + action_headers) + return (general_headers + etherpad_headers + mail_headers + + printing_headers + wiki_headers + calendar_headers + + network_headers + action_headers) def row(self): user = current_user() @@ -182,6 +186,11 @@ class ProtocolTypeTable(SingleValueTable): self.value.private_group, self.value.public_group, ] + etherpad_part = [ + Table.bool(self.value.non_reproducible_pad_links) + ] + if not config.ETHERPAD_ACTIVE: + ethernet_part = [] mail_part = [ self.value.private_mail, self.value.public_mail, @@ -208,8 +217,8 @@ class ProtocolTypeTable(SingleValueTable): action_part = [Table.link(url_for("delete_type", protocoltype_id=self.value.id), "Löschen", confirm="Bist du dir sicher, dass du den Protokolltype {} löschen möchtest?".format(self.value.name))] if not self.value.has_admin_right(user): action_part = [""] - return (general_part + mail_part + printing_part + wiki_part + - calendar_part + network_part + action_part) + return (general_part + etherpad_part + mail_part + printing_part + + wiki_part + calendar_part + network_part + action_part) class DefaultTOPsTable(Table): def __init__(self, tops, protocoltype=None):