diff --git a/cao_blogr.sqlite b/cao_blogr.sqlite index aa89269..1602273 100644 Binary files a/cao_blogr.sqlite and b/cao_blogr.sqlite differ diff --git a/cao_blogr/alembic/versions/20230121_a632e375e7dc.py b/cao_blogr/alembic/versions/20230121_a632e375e7dc.py new file mode 100644 index 0000000..4092575 --- /dev/null +++ b/cao_blogr/alembic/versions/20230121_a632e375e7dc.py @@ -0,0 +1,26 @@ +"""init + +Revision ID: a632e375e7dc +Revises: +Create Date: 2023-01-21 11:25:48.517435 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'a632e375e7dc' +down_revision = None +branch_labels = None +depends_on = None + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('entries', 'author') + # ### end Alembic commands ### + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('entries', sa.Column('author', sa.VARCHAR(length=50), nullable=True)) + # ### end Alembic commands ### diff --git a/cao_blogr/alembic/versions/20230121_d335bb2cb9da.py b/cao_blogr/alembic/versions/20230121_d335bb2cb9da.py deleted file mode 100644 index c01a3df..0000000 --- a/cao_blogr/alembic/versions/20230121_d335bb2cb9da.py +++ /dev/null @@ -1,55 +0,0 @@ -"""init - -Revision ID: d335bb2cb9da -Revises: -Create Date: 2023-01-21 08:05:36.719719 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'd335bb2cb9da' -down_revision = None -branch_labels = None -depends_on = None - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('tags', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('tag', sa.Unicode(length=25), nullable=True), - sa.Column('tag_name', sa.Unicode(length=25), nullable=False), - sa.PrimaryKeyConstraint('id', name=op.f('pk_tags')) - ) - op.create_table('users', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('name', sa.Unicode(length=255), nullable=False), - sa.Column('password', sa.Unicode(length=255), nullable=False), - sa.Column('last_logged', sa.DateTime(), nullable=True), - sa.PrimaryKeyConstraint('id', name=op.f('pk_users')), - sa.UniqueConstraint('name', name=op.f('uq_users_name')) - ) - op.create_table('entries', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('title', sa.Unicode(length=255), nullable=False), - sa.Column('body', sa.UnicodeText(), nullable=True), - sa.Column('created', sa.DateTime(), nullable=True), - sa.Column('creator', sa.Unicode(length=50), nullable=True), - sa.Column('edited', sa.DateTime(), nullable=True), - sa.Column('editor', sa.Unicode(length=50), nullable=True), - sa.Column('tag', sa.Unicode(length=25), nullable=True), - sa.Column('author', sa.Unicode(length=50), nullable=True), - sa.Column('status', sa.Unicode(length=50), nullable=True), - sa.PrimaryKeyConstraint('id', name=op.f('pk_entries')), - sa.UniqueConstraint('title', name=op.f('uq_entries_title')) - ) - # ### end Alembic commands ### - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('entries') - op.drop_table('users') - op.drop_table('tags') - # ### end Alembic commands ### diff --git a/cao_blogr/forms.py b/cao_blogr/forms.py index 8ad68ec..c0bd4b1 100644 --- a/cao_blogr/forms.py +++ b/cao_blogr/forms.py @@ -1,4 +1,4 @@ -from wtforms import Form, StringField, TextAreaField, validators +from wtforms import Form, StringField, TextAreaField, SelectField, validators from wtforms import IntegerField, PasswordField from wtforms.validators import InputRequired, Length from wtforms.widgets import HiddenInput @@ -10,10 +10,8 @@ class BlogCreateForm(Form): filters=[strip_filter]) body = TextAreaField('Corps du texte', validators=[InputRequired(), Length(min=1)], filters=[strip_filter]) - topic = StringField('Topic', validators=[InputRequired(), Length(min=1, max=255)], - filters=[strip_filter]) - tag = StringField('Tag', validators=[InputRequired(), Length(min=1, max=20)], - filters=[strip_filter]) + tag = SelectField('Tag') + status = SelectField('Statut', choices=[('brouillon','Brouillon'),('privé','Privé'),('publié','Publié')]) class BlogUpdateForm(BlogCreateForm): id = IntegerField(widget=HiddenInput()) @@ -22,6 +20,13 @@ class BlogSearchForm(Form): criteria = StringField('Critère', validators=[InputRequired(), Length(min=3, max=45)], filters=[strip_filter]) +class TagForm(Form): + id = IntegerField(widget=HiddenInput()) + + tag = StringField('Tag', validators=[InputRequired(), Length(min=1, max=25)], + filters=[strip_filter]) + + class UserCreateForm(Form): username = StringField('Nom', validators=[InputRequired(), Length(min=1, max=255)], filters=[strip_filter]) diff --git a/cao_blogr/models/blog_record.py b/cao_blogr/models/blog_record.py index a889358..4fb3fe4 100644 --- a/cao_blogr/models/blog_record.py +++ b/cao_blogr/models/blog_record.py @@ -21,7 +21,6 @@ class BlogRecord(Base): edited = Column(DateTime, default=datetime.datetime.now) editor = Column(Unicode(50), default='') tag = Column(Unicode(25)) - author = Column(Unicode(50), default='') status = Column(Unicode(50), default='brouillon') @property @@ -38,3 +37,4 @@ class Tags(Base): __tablename__ = 'tags' id = Column(Integer, primary_key=True) tag = Column(Unicode(25)) + diff --git a/cao_blogr/routes.py b/cao_blogr/routes.py index 5515009..cf1e8da 100644 --- a/cao_blogr/routes.py +++ b/cao_blogr/routes.py @@ -7,6 +7,8 @@ def includeme(config): config.add_route('blog_search', '/blog_search') config.add_route('login', '/login') config.add_route('logout', '/logout') + config.add_route('tags', '/tags') + config.add_route('tag_edit', '/tag_edit/{id}') config.add_route('users', '/users') config.add_route('user_add', '/user_add/{name}') config.add_route('user_pwd', '/user_pwd/{name}') diff --git a/cao_blogr/services/blog_record.py b/cao_blogr/services/blog_record.py index a3fe4b0..46283f2 100644 --- a/cao_blogr/services/blog_record.py +++ b/cao_blogr/services/blog_record.py @@ -2,22 +2,21 @@ import sqlalchemy as sa import datetime #<- will be used to set default dates on models from sqlalchemy import or_ -from ..models.blog_record import BlogRecord +from ..models.blog_record import BlogRecord, Tags class BlogRecordService(object): - @classmethod - def all(cls, request): - query = request.dbsession.query(BlogRecord) - return query.order_by(sa.desc(BlogRecord.created)) - @classmethod def by_criteria(cls, request, criteria): search = "%{}%".format(criteria) - query = request.dbsession.query(BlogRecord).filter(or_(BlogRecord.title.like(search), - BlogRecord.body.like(search))).all() + query = request.dbsession.query(BlogRecord) + if request.authenticated_userid == None: + # if user is anonym, display only published posts + query = query.filter(BlogRecord.status == 'publié') + query = query.filter(or_(BlogRecord.title.like(search), + BlogRecord.body.like(search))).all() return query @classmethod @@ -29,6 +28,30 @@ class BlogRecordService(object): def get_last_created(cls, request): # gest the 10 last created posts query = request.dbsession.query(BlogRecord) + if request.authenticated_userid == None: + # if user is anonym, display only published posts + query = query.filter(BlogRecord.status == 'publié') query = query.order_by(sa.desc(BlogRecord.created)).limit(10).all() return query + @classmethod + def delete(cls, request, id): + request.dbsession.query(BlogRecord).filter(BlogRecord.id == id).delete(synchronize_session=False) + return + + @classmethod + def get_tags(cls, request): + query = request.dbsession.query(Tags) + query = query.order_by(Tags.tag).all() + return query + + @classmethod + def get_tags_byId(cls, request, id): + # gest the last 5 items modified + query = request.dbsession.query(Tags).filter(Tags.id == id).first() + return query + + @classmethod + def tag_delete(cls, request, id): + request.dbsession.query(Tags).filter(Tags.id == id).delete(synchronize_session=False) + return diff --git a/cao_blogr/templates/blog.jinja2 b/cao_blogr/templates/blog.jinja2 index ceb8a8d..531903f 100644 --- a/cao_blogr/templates/blog.jinja2 +++ b/cao_blogr/templates/blog.jinja2 @@ -12,20 +12,23 @@
{{ body_html | safe }}
- Topic : {{ entry.topic }} - | - Tag : {{ entry.tag }} - | - Créé le : {{ entry.created.strftime("%d-%m-%Y - %H:%M") }} - | - Modifié le : {{ entry.edited.strftime("%d-%m-%Y - %H:%M") }} -
- {% else %} -- Créé : {{ entry.created_in_words }} -
- {% endif %} +
+ Auteur : {{ entry.author }}
+ Publié le : {{ entry.created.strftime("%d-%m-%Y - %H:%M") }}
+ {% if request.authenticated_userid %}
+ Modifié le : {{ entry.edited.strftime("%d-%m-%Y - %H:%M") }}
+ Tag : {{ entry.tag }}
+ Statut : {{ entry.status }}
+ {% endif %}
+
+ {% if blog_id != '0' %}
+ Créé le : {{ entry.created.strftime("%d-%m-%Y - %H:%M") }}
+ Modifié le : {{ entry.edited.strftime("%d-%m-%Y - %H:%M") }}
+ {% endif %}
+
| {{ entry.created.strftime("%d.%m.%Y") }} | -- {{ entry.title }} - | -{{ entry.topic }} | -{{ entry.tag }} | - +{{ entry.created.strftime("%d.%m.%Y") }} | ++ {{ entry.title }} + | +{{ entry.tag }} | + {% if entry.status != 'publié' %} +{{ entry.status }} | + {% else %} ++ {% endif%} |