# -*- coding: utf8 -*- from sqlalchemy import text from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import ( scoped_session, sessionmaker, ) from zope.sqlalchemy import ZopeTransactionExtension, mark_changed from datetime import * import transaction from urllib.request import urlopen from .default import ( execute_query, ) def get_docs(request, doc_id): """Lire les doc""" if doc_id == 0: query = "SELECT * FROM docs ORDER BY topic, intitule;" results = request.dbsession.execute(query).fetchall() else: query = "SELECT * FROM docs where doc_id = :doc_id;" results = request.dbsession.execute(query, {'doc_id': doc_id}).first() return results def get_docs_bytopic(request, topic, logged_in): """Lire les doc""" if logged_in == None: anon = "AND statut = 'public' " else: anon = "" if topic == 'BLOG': query = "SELECT * FROM docs WHERE topic=:topic %s ORDER BY cree_le DESC LIMIT 10;" % anon else: query = "SELECT * FROM docs WHERE topic=:topic ORDER BY intitule;" results = request.dbsession.execute(query, {'topic': topic}).fetchall() return results def get_docs_tags(request, doc_id): query = "SELECT * FROM docs_tags WHERE doc_id=:doc_id;" results = request.dbsession.execute(query, {'doc_id': doc_id}).fetchall() return results def get_d_tags_manquant(request, topic, doc_id): # tags à ajouter query = """SELECT d_tags.* FROM d_tags LEFT JOIN docs_tags ON docs_tags.tag = d_tags.tag AND docs_tags.doc_id = :doc_id WHERE d_tags.topic=:topic AND docs_tags.tag IS null;""" results = request.dbsession.execute(query, {'topic': topic, 'doc_id': doc_id}).fetchall() return results def get_d_topics(request, logged_in): if logged_in == None: query = "SELECT * FROM d_topics WHERE statut = 'public';" else: query = "SELECT * FROM d_topics;" results = request.dbsession.execute(query).fetchall() return results def get_docs_bycritere(request, critere, logged_in): if logged_in == None: query = "SELECT * FROM docs WHERE (texte like :critere OR intitule like :critere) AND statut = 'public';" else: query = "SELECT * FROM docs WHERE (texte like :critere OR intitule like :critere);" results = request.dbsession.execute(query, {'critere': '%' + critere + '%'}).fetchall() return results def update_doc(request, doc_id, new_values): """créér ou modifier le doc""" # formater les champs s = '' for param in new_values.keys(): if s: s += ",%s=:%s" % (param, param) else: s = "%s=:%s" % (param, param) if doc_id == '0': query = "INSERT INTO docs SET %s;" % s else: new_values['doc_id'] = doc_id query = "update docs SET %s WHERE doc_id = :doc_id;" % s execute_query(request, query, new_values) def delete_doc(request, doc_id): """supprimer la doc""" query = "delete from docs where doc_id = :doc_id;" execute_query(request, query, {'doc_id': doc_id}) def change_doc_tag(request, action, doc_id, tag): """ajouter une tag dans le doc""" if action == 'ADD': query = "INSERT INTO docs_tags (`doc_id`,`tag`) VALUES (:doc_id, :tag);" execute_query(request, query, {'doc_id': doc_id, 'tag': tag}) else: query = "DELETE FROM docs_tags WHERE doc_id=:doc_id AND tag=:tag;" execute_query(request, query, {'doc_id': doc_id, 'tag': tag})