Files
cao_sunyata/cao_sunyata/models/entries.py
T
2026-05-31 09:51:25 +02:00

233 lines
9.5 KiB
Python

# -*- coding: utf8 -*-
from sqlalchemy import text
from .default import (
execute_query,
)
from webhelpers2.text import urlify #<- will generate slugs
def get_entries_by_topic(request, topic, tag):
query = "SELECT *, strftime('%d/%m/%Y', created) AS create_date FROM entries WHERE topic_id = '{0}'".format(topic)
if request.authenticated_userid == None:
# if user is anonym, display only published posts
query = query + " AND status='publié'"
else:
if request.authenticated_userid != 'admin':
# if user is not 'admin', hide admin posts
query = query + " AND tag != '_admin'"
if tag != '':
query = query + " AND tag = '{0}'".format(tag)
query = query + " ORDER BY tag, title;"
results = request.dbsession.execute(text(query)).fetchall()
return results
def get_entries_related(request, _id):
query = """SELECT *, strftime('%d/%m/%Y', edited) AS edit_date FROM entries_related WHERE id=:id;"""
results = request.dbsession.execute(text(query), {'id':_id}).fetchall()
return results
def get_entries_related_by_id(request, _id, id_related):
query = """SELECT *, strftime('%d/%m/%Y', edited) AS edit_date FROM entries_related WHERE id=:id AND id_related=:id_related;"""
results = request.dbsession.execute(text(query), {'id':_id, 'id_related':id_related}).first()
return results
def get_entries_by_id(request, _id):
query = """SELECT *, strftime('%d/%m/%Y', created) AS create_date, strftime('%d/%m/%Y', edited) AS edit_date,
strftime('%d/%m/%Y %H:%M', view_date) AS last_view FROM entries WHERE id=:id;"""
results = request.dbsession.execute(text(query), {'id':_id}).first()
return results
def get_entries_last_viewed(request):
query = """SELECT strftime('%d/%m/%Y', view_date) AS last_viewed, title, view_count
FROM entries WHERE topic_id <> '_admin' ORDER BY view_date DESC LIMIT 20;"""
results = request.dbsession.execute(text(query),).fetchall()
return results
def get_entries_most_viewed(request):
query = """SELECT strftime('%d/%m/%Y', view_date) AS date_viewed, strftime('%d/%m/%Y', created) AS create_date, \
title, view_count
FROM entries WHERE topic_id <> '_admin' ORDER BY view_count DESC LIMIT 20;"""
results = request.dbsession.execute(text(query),).fetchall()
return results
def get_entries_last_created(request):
query = """SELECT strftime('%d/%m/%Y', created) AS last_created, title, view_count
FROM entries WHERE topic_id <> '_admin' ORDER BY created DESC LIMIT 20;"""
results = request.dbsession.execute(text(query),).fetchall()
return results
def get_last_created(request):
# gest the 10 last created posts
query = "SELECT strftime('%d/%m/%Y', created) AS create_date, id, title, author, status, title_url FROM entries WHERE topic_id <> '_admin'"
if request.authenticated_userid == None:
# if user is anonym, display only published posts
query = query + " AND status='publié'"
query = query + " ORDER BY created DESC LIMIT 15;"
results = request.dbsession.execute(text(query)).fetchall()
return results
def get_last_edited(request):
# gest the last edited posts
query = "SELECT strftime('%d/%m/%Y', edited) AS edit_date, id, title, author, status, title_url FROM entries WHERE topic_id <> '_admin'"
if request.authenticated_userid == None:
# if user is anonym, display only published posts
query = query + " AND status='publié'"
query = query + " ORDER BY edited DESC LIMIT 10;"
results = request.dbsession.execute(text(query)).fetchall()
return results
def get_activities(request):
# gest the Activities section
query = "SELECT * FROM entries WHERE topic_id = '_admin' AND title like 'Activities - column%' ORDER BY title;"
results = request.dbsession.execute(text(query)).all()
return results
def get_entries_by_criteria(request, criteria):
search = "%{}%".format(criteria)
query = f"SELECT *, strftime('%d/%m/%Y', edited) AS edit_date FROM entries WHERE title like '{search}' or body like '{search}'"
if request.authenticated_userid == None:
# if user is anonym, display only published posts
query = query + " AND status='publié'"
else:
if request.authenticated_userid != 'admin':
# if user is not 'admin', hide admin posts
query = query + " AND tag != '_admin'"
query = query + " ORDER BY title;"
results = request.dbsession.execute(query).fetchall()
return results
def get_tags_byTopic(request, topic):
# get tags
query = "SELECT * FROM tags WHERE topic=:topic ORDER BY tag_name;"
results = request.dbsession.execute(text(query), {'topic':topic}).all()
return results
def get_tags_byId(request, id):
query = "SELECT * FROM tags WHERE id=:id;"
results = request.dbsession.execute(text(query), {'id':id}).first()
return results
def get_topic_byTopic(request, id):
# get the name of a given topic
query = "SELECT * FROM topics WHERE topic=:topic;"
results = request.dbsession.execute(text(query), {'topic':id}).first()
return results
def get_topics(request):
# get all topics
query = "SELECT * FROM topics ORDER BY topic_name;"
results = request.dbsession.execute(text(query), {'topic':id}).all()
return results
def delete_entry(request, id):
query = "DELETE FROM entries WHERE id = :id ;"
execute_query(request, query, {'id': id})
def delete_tag(request, id):
query = "DELETE FROM tags WHERE id = :id ;"
execute_query(request, query, {'id': id})
def delete_related(request, id, id_related):
query = "DELETE FROM entries_related WHERE id = :id AND id_related = :id_related;"
execute_query(request, query, {'id': id, 'id_related': id_related})
def delete_topic(request, topic):
query = "DELETE FROM topics WHERE topic = :topic ;"
execute_query(request, query, {'topic': topic})
def update_entry(request, blog_id, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
# import pdb;pdb.set_trace()
if blog_id == '0':
query = """INSERT INTO entries (title, body, created, edited, topic_id, tag, author, status, creator, editor)
VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{8}')""".format(
new_values['title'].replace("'","''"), new_values['body'].replace("'","''"), new_values['created'], new_values['created'],
new_values['topic_id'], new_values['tag'], new_values['author'], new_values['status'],
new_values['editor'], new_values['editor'],)
else:
new_values['id'] = blog_id
query = "UPDATE entries SET %s WHERE id = :id;" % s
execute_query(request, query, new_values)
def update_tag(request, id, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if id == '0':
query = "INSERT INTO tags (topic, tag, tag_name) VALUES ('{0}', '{1}', '{2}')".format(
new_values['topic'], new_values['tag'], new_values['tag_name'])
else:
new_values['id'] = id
query = "UPDATE tags SET %s WHERE id = :id;" % s
execute_query(request, query, new_values)
def create_related(request, id, id_related, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
# import pdb;pdb.set_trace()
query = "INSERT INTO entries_related (id, id_related, title_related, author_related, edited, creator) " \
"VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}')".format(
new_values['id'], new_values['id_related'], new_values['title_related'].replace("'","''"), new_values['author_related'],
new_values['edited'], new_values['creator'])
execute_query(request, query, new_values)
def update_topic(request, topic, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if topic == '0':
query = "INSERT INTO topics (topic, topic_name, topic_language, topic_quote) VALUES ('{0}', '{1}', '{2}', '{3}')".format(
topic, new_values['topic_name'], new_values['topic_language'], new_values['topic_quote'].replace("'","''"))
else:
new_values['topic'] = topic
query = "UPDATE topics SET %s WHERE topic = :topic;" % s
execute_query(request, query, new_values)
def get_entries(request):
query = """SELECT * FROM entries WHERE title_url IS NULL;"""
results = request.dbsession.execute(text(query)).fetchall()
return results
def update_entries_url(request):
# lire tous les posts
entries = get_entries(request)
for entry in entries:
slug = urlify(entry.title.replace("'","-"))
query = "UPDATE entries SET title_url = :slug WHERE id = :id;"
execute_query(request, query, {'id': entry.id, 'slug': slug})
def update_view_counter(request, id, remote_ip, today):
# incrementer le compteur de vues si ip et date sont differents
query = """
UPDATE entries SET view_count = view_count + 1, view_date = :today, view_ip = :remote_ip
WHERE id = :id;"""
# import pdb;pdb.set_trace()
execute_query(request, query, {'id': id, 'remote_ip': remote_ip, 'today': today})