97 lines
3.7 KiB
Python
97 lines
3.7 KiB
Python
import sqlalchemy as sa
|
|
import datetime #<- will be used to set default dates on models
|
|
|
|
from sqlalchemy import or_, and_
|
|
from ..models.blog_record import BlogRecord, Topics, Tags
|
|
|
|
|
|
class BlogRecordService(object):
|
|
|
|
@classmethod
|
|
def by_topic(cls, request, topic, tag):
|
|
# get posts by topic
|
|
query = request.dbsession.query(BlogRecord).filter(BlogRecord.topic_id == topic)
|
|
if request.authenticated_userid == None:
|
|
# if user is anonym, display only published posts
|
|
query = query.filter(BlogRecord.status == 'publié')
|
|
if request.authenticated_userid != 'admin':
|
|
# if user is not 'admin', hide admin posts
|
|
query = query.filter(BlogRecord.tag != 'admin')
|
|
if tag != '':
|
|
query = query.filter(BlogRecord.tag == tag)
|
|
return query.order_by(BlogRecord.tag, BlogRecord.title).all()
|
|
|
|
@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)))
|
|
if request.authenticated_userid != 'admin':
|
|
# if user is not 'admin', hide admin posts
|
|
query = query.filter(BlogRecord.tag != 'admin')
|
|
return query.order_by(BlogRecord.title).all()
|
|
|
|
@classmethod
|
|
def by_id(cls, request, _id):
|
|
query = request.dbsession.query(BlogRecord).filter(BlogRecord.id == _id).first()
|
|
return query
|
|
|
|
@classmethod
|
|
def get_last_created(cls, request):
|
|
# gest the last created posts
|
|
query = request.dbsession.query(BlogRecord).filter(BlogRecord.topic_id != 'ADM')
|
|
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 get_activities(cls, request):
|
|
# gest the Activities section
|
|
query = request.dbsession.query(BlogRecord).filter(and_(BlogRecord.topic_id == 'ADM',
|
|
BlogRecord.tag == 'activities',
|
|
BlogRecord.status == 'publié'))
|
|
query = query.order_by(sa.desc(BlogRecord.created)).first()
|
|
return query
|
|
|
|
@classmethod
|
|
def get_tags_byTopic(cls, request, topic):
|
|
# gest the last 5 items modified
|
|
query = request.dbsession.query(Tags).filter(Tags.topic == topic)
|
|
query = query.order_by(Tags.tag_name).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 get_topic_byTopic(cls, request, id):
|
|
# get the name of a given topic
|
|
query = request.dbsession.query(Topics).filter(Topics.topic == id).first()
|
|
return query
|
|
|
|
@classmethod
|
|
def get_topics(cls, request):
|
|
# get all topics
|
|
query = request.dbsession.query(Topics).order_by(Topics.topic).all()
|
|
return query
|
|
|
|
@classmethod
|
|
def delete(cls, request, id):
|
|
request.dbsession.query(BlogRecord).filter(BlogRecord.id == id).delete(synchronize_session=False)
|
|
return
|
|
|
|
@classmethod
|
|
def tag_delete(cls, request, id):
|
|
request.dbsession.query(Tags).filter(Tags.id == id).delete(synchronize_session=False)
|
|
return
|
|
|
|
@classmethod
|
|
def topic_delete(cls, request, id):
|
|
request.dbsession.query(Topics).filter(Topics.topic == id).delete(synchronize_session=False)
|
|
return
|