diff --git a/migrations/versions/310d9ab321b8_.py b/migrations/versions/310d9ab321b8_.py new file mode 100644 index 0000000000000000000000000000000000000000..1ebf1e1b726413f66fdee5cd862c355cdfa04e3e --- /dev/null +++ b/migrations/versions/310d9ab321b8_.py @@ -0,0 +1,32 @@ +"""empty message + +Revision ID: 310d9ab321b8 +Revises: 0131d5776f8d +Create Date: 2017-02-25 17:26:34.663460 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '310d9ab321b8' +down_revision = '0131d5776f8d' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('protocols', sa.Column('plain_text_private', sa.String(), nullable=True)) + op.add_column('protocols', sa.Column('plain_text_public', sa.String(), nullable=True)) + op.drop_column('todos', 'is_id_fixed') + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('todos', sa.Column('is_id_fixed', sa.BOOLEAN(), autoincrement=False, nullable=True)) + op.drop_column('protocols', 'plain_text_public') + op.drop_column('protocols', 'plain_text_private') + # ### end Alembic commands ### diff --git a/migrations/versions/495509e8f49a_.py b/migrations/versions/495509e8f49a_.py new file mode 100644 index 0000000000000000000000000000000000000000..61fb9dc21c504f31dcab372d02e6e8b9c0d88d3f --- /dev/null +++ b/migrations/versions/495509e8f49a_.py @@ -0,0 +1,34 @@ +"""empty message + +Revision ID: 495509e8f49a +Revises: 310d9ab321b8 +Create Date: 2017-02-25 17:34:03.830014 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '495509e8f49a' +down_revision = '310d9ab321b8' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('protocols', sa.Column('content_private', sa.String(), nullable=True)) + op.add_column('protocols', sa.Column('content_public', sa.String(), nullable=True)) + op.drop_column('protocols', 'plain_text_private') + op.drop_column('protocols', 'plain_text_public') + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('protocols', sa.Column('plain_text_public', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.add_column('protocols', sa.Column('plain_text_private', sa.VARCHAR(), autoincrement=False, nullable=True)) + op.drop_column('protocols', 'content_public') + op.drop_column('protocols', 'content_private') + # ### end Alembic commands ### diff --git a/models/database.py b/models/database.py index 75fbf0feaddd701c7c902e767da7a2a7163027ef..bb0aa02cbe5a0af284c81077f0f75fef1f0dbc9d 100644 --- a/models/database.py +++ b/models/database.py @@ -93,7 +93,9 @@ class Protocol(db.Model): __tablename__ = "protocols" id = db.Column(db.Integer, primary_key=True) protocoltype_id = db.Column(db.Integer, db.ForeignKey("protocoltypes.id")) - source = db.Column(db.String, nullable=True) + source = db.Column(db.String) + content_public = db.Column(db.String) + content_private = db.Column(db.String) date = db.Column(db.Date) start_time = db.Column(db.Time) end_time = db.Column(db.Time) @@ -107,10 +109,12 @@ class Protocol(db.Model): documents = relationship("Document", backref=backref("protocol"), cascade="all, delete-orphan", order_by="Document.is_compiled") errors = relationship("Error", backref=backref("protocol"), cascade="all, delete-orphan", order_by="Error.id") - def __init__(self, protocoltype_id, date, source=None, start_time=None, end_time=None, author=None, participants=None, location=None, done=False): + def __init__(self, protocoltype_id, date, source=None, content_public=None, content_private=None, start_time=None, end_time=None, author=None, participants=None, location=None, done=False): self.protocoltype_id = protocoltype_id self.date = date self.source = source + self.content_private = content_private + self.content_public = content_public self.start_time = start_time self.end_time = end_time self.author = author diff --git a/parser.py b/parser.py index 80b35f0cf68df7f98cb8f6b0f39a88dd9c9f07fc..f451d2d70c42d9739f436925db97dd038f37b339 100644 --- a/parser.py +++ b/parser.py @@ -160,7 +160,7 @@ class Text: return escape_tex(self.text) elif render_type == RenderType.wikitext: return self.text - elif render_Type == RenderType.plaintext: + elif render_type == RenderType.plaintext: return self.text else: raise _not_implemented(self, render_type) @@ -195,6 +195,8 @@ class Tag: elif self.name == "todo": return self.todo.render_latex(current_protocol=protocol) return r"\textbf{{{}:}} {}".format(escape_tex(self.name.capitalize()), escape_tex(self.values[0])) + elif render_type == RenderType.plaintext: + return "{}: {}".format(self.name.capitalize(), self.values[0]) else: raise _not_implemented(self, render_type) @@ -331,7 +333,7 @@ class Fork(Element): title_line = "{} {}".format("#" * (level + 1), name_line) content_parts = [] for child in self.children: - part = child.render(render_Type, show_private, level=level+1, protocol=protocol) + part = child.render(render_type, show_private, level=level+1, protocol=protocol) if len(part.strip()) == 0: continue content_parts.append(part) diff --git a/server.py b/server.py index 6c1b428e97f82bc02a20218bab3c4fc4aff42aa2..05a1cd8f00e0242be1687c66fa8b698363361ea6 100755 --- a/server.py +++ b/server.py @@ -14,7 +14,7 @@ from datetime import datetime import math import config -from shared import db, date_filter, datetime_filter, date_filter_long, time_filter, ldap_manager, security_manager, current_user, check_login, login_required, group_required +from shared import db, date_filter, datetime_filter, date_filter_long, time_filter, ldap_manager, security_manager, current_user, check_login, login_required, group_required, class_filter from utils import is_past, mail_manager, url_manager, get_first_unused_int, set_etherpad_text, get_etherpad_text from models.database import ProtocolType, Protocol, DefaultTOP, TOP, Document, Todo, Decision, MeetingReminder, Error from views.forms import LoginForm, ProtocolTypeForm, DefaultTopForm, MeetingReminderForm, NewProtocolForm, DocumentUploadForm, KnownProtocolSourceUploadForm, NewProtocolSourceUploadForm, ProtocolForm, TopForm, SearchForm @@ -45,6 +45,7 @@ app.jinja_env.filters["datetimify"] = datetime_filter app.jinja_env.filters["timify"] = time_filter app.jinja_env.filters["datify_long"] = date_filter_long app.jinja_env.filters["url_complete"] = url_manager.complete +app.jinja_env.filters["class"] = class_filter app.jinja_env.tests["auth_valid"] = security_manager.check_user import tasks diff --git a/tasks.py b/tasks.py index 8aee9d21825bc682b409d2b08f64588d850d1dac..a14bf0fd6e2d7906cbc79e030f778e6055415408 100644 --- a/tasks.py +++ b/tasks.py @@ -190,15 +190,23 @@ def parse_protocol_async(protocol_id, encoded_kwargs): db.session.add(top) db.session.commit() - private_states = [False] - - latex_source_private = texenv.get_template("protocol.tex").render(protocol=protocol, tree=tree, show_private=True, render_type=RenderType.latex) - latex_source_public = texenv.get_template("protocol.tex").render(protocol=protocol, tree=tree, show_private=False, render_type=RenderType.latex) - compile(latex_source_public, protocol, show_private=False) - if latex_source_private != latex_source_public: - compile(latex_source_private, protocol, show_private=True) - # TODO compare something that may actually be equal + render_kwargs = { + "protocol": protocol, + "tree": tree + } + privacy_states = [False] + content_private = render_template("protocol.txt", render_type=RenderType.plaintext, show_private=True, **render_kwargs) + content_public = render_template("protocol.txt", render_type=RenderType.plaintext, show_private=False, **render_kwargs) + if content_private != content_public: + print("different") + privacy_states.append(True) + protocol.content_private = content_private + protocol.content_public = content_public + for show_private in privacy_states: + latex_source = texenv.get_template("protocol.tex").render(render_type=RenderType.latex, show_private=show_private, **render_kwargs) + compile(latex_source, protocol, show_private=show_private) + # TODO render and push wiki protocol.done = True db.session.commit() diff --git a/templates/protocol-show.html b/templates/protocol-show.html index 2f9a02ee8fb15034a5974cf81b3a0b22a84d72c6..bc3a703dd970381d4af2cfccb69c10dfa5c3472e 100644 --- a/templates/protocol-show.html +++ b/templates/protocol-show.html @@ -55,9 +55,13 @@ {% if protocol.is_done() %} <h3>Beschlüsse</h3> <ul> - {% for decision in protocol.decisions %} - <li>{{decision.content}}</li> - {% endfor %} + {% if protocol.decisions|length > 0 %} + {% for decision in protocol.decisions %} + <li>{{decision.content}}</li> + {% endfor %} + {% else %} + <li>Keine Beschlüsse</li> + {% endif %} </ul> {% endif %} </div> diff --git a/templates/protocol.txt b/templates/protocol.txt new file mode 100644 index 0000000000000000000000000000000000000000..50a816d6d0c3c14dc93ead27b5e15a24d027f4aa --- /dev/null +++ b/templates/protocol.txt @@ -0,0 +1,5 @@ +{% for top in tree.children %} +{% if top|class == "Fork" %} +{{top.render(render_type=render_type, level=0, show_private=show_private, protocol=protocol)}} +{% endif %} +{% endfor %} diff --git a/views/forms.py b/views/forms.py index 24afb7bc1cfbd38d7b29375cd6526ac105e31a8e..ebec93eeb41776a797eb2848e3ffc71576410eb5 100644 --- a/views/forms.py +++ b/views/forms.py @@ -68,5 +68,5 @@ class SearchForm(FlaskForm): def __init__(self, protocoltypes, **kwargs): super().__init__(**kwargs) choices = [(protocoltype.id, protocoltype.short_name) for protocoltype in protocoltypes] - choices.insert(0, (-1, "")) + choices.insert(0, (-1, "Alle")) self.protocoltype.choices = choices