added search form
This commit is contained in:
@@ -59,7 +59,7 @@ def includeme(config):
|
||||
config.include('pyramid_tm')
|
||||
|
||||
# use pyramid_retry to retry a request when transient exceptions occur
|
||||
config.include('pyramid_retry')
|
||||
# config.include('pyramid_retry')
|
||||
|
||||
session_factory = get_session_factory(get_engine(settings))
|
||||
config.registry['dbsession_factory'] = session_factory
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
# -*- coding: utf8 -*-
|
||||
from sqlalchemy import text
|
||||
|
||||
from .default import (
|
||||
execute_query,
|
||||
)
|
||||
@@ -16,23 +18,23 @@ def get_entries_by_topic(request, topic, tag):
|
||||
query = query + " AND tag = '{0}'".format(tag)
|
||||
|
||||
query = query + " ORDER BY tag, title;"
|
||||
results = request.dbsession.execute(query).fetchall()
|
||||
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(query, {'id':_id}).fetchall()
|
||||
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(query, {'id':_id, 'id_related':id_related}).first()
|
||||
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 FROM entries WHERE id=:id;"""
|
||||
results = request.dbsession.execute(query, {'id':_id}).first()
|
||||
results = request.dbsession.execute(text(query), {'id':_id}).first()
|
||||
return results
|
||||
|
||||
def get_entries_count_by_topic(request):
|
||||
@@ -41,7 +43,7 @@ def get_entries_count_by_topic(request):
|
||||
INNER JOIN topics ON entries.topic_id = topics.topic
|
||||
INNER JOIN tags ON entries.tag = tags.tag
|
||||
GROUP BY entries.tag ORDER BY entries.topic_id, entries.tag;"""
|
||||
results = request.dbsession.execute(query,).fetchall()
|
||||
results = request.dbsession.execute(text(query),).fetchall()
|
||||
return results
|
||||
|
||||
def get_last_created(request):
|
||||
@@ -52,7 +54,7 @@ def get_last_created(request):
|
||||
query = query + " AND status='publié'"
|
||||
|
||||
query = query + " ORDER BY created DESC LIMIT 15;"
|
||||
results = request.dbsession.execute(query).fetchall()
|
||||
results = request.dbsession.execute(text(query)).fetchall()
|
||||
return results
|
||||
|
||||
def get_last_edited(request):
|
||||
@@ -63,36 +65,50 @@ def get_last_edited(request):
|
||||
query = query + " AND status='publié'"
|
||||
|
||||
query = query + " ORDER BY edited DESC LIMIT 10;"
|
||||
results = request.dbsession.execute(query).fetchall()
|
||||
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(query,).all()
|
||||
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(query, {'topic':topic}).all()
|
||||
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(query, {'id':id}).first()
|
||||
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(query, {'topic':id}).first()
|
||||
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(query, {'topic':id}).all()
|
||||
results = request.dbsession.execute(text(query), {'topic':id}).all()
|
||||
return results
|
||||
|
||||
def delete_entry(request, id):
|
||||
|
||||
@@ -4,6 +4,7 @@ def includeme(config):
|
||||
config.add_route('blog', '/blog/{id:\d+}/{slug}')
|
||||
config.add_route('blog_copy', '/blog_copy/{topic}/{id}')
|
||||
config.add_route('blog_edit', '/blog_edit/{topic}/{id}')
|
||||
config.add_route('blog_search', '/blog_search')
|
||||
config.add_route('contact', '/contact')
|
||||
config.add_route('images', '/images')
|
||||
config.add_route('image_edit', '/image_edit/{filename}')
|
||||
|
||||
52
cao_sunyata/templates/blog_search.jinja2
Normal file
52
cao_sunyata/templates/blog_search.jinja2
Normal file
@@ -0,0 +1,52 @@
|
||||
{% extends "layout.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="card mb-0">
|
||||
<div class="card-body">
|
||||
|
||||
<form id="search-form" class="form-horizontal" role="form" action="/blog_search" method="post">
|
||||
|
||||
<div class="mb-3">
|
||||
<div class="input-group mb-3">
|
||||
<input type="text" class="form-control" name="criteria">
|
||||
<button class="btn btn-primary" type="submit" name="form.submitted">Rechercher</button>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="row">
|
||||
{% if items : %}
|
||||
<table class="table table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Titre</th>
|
||||
<th>Tags</th>
|
||||
<th>Date</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="table-group-divider">
|
||||
{% for entry in items %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ request.route_url('blog', id=entry.id, slug='slug') }}">
|
||||
{{ entry.title }}
|
||||
</a>
|
||||
</td>
|
||||
<td>{{ entry.tag }}</td>
|
||||
<td>{{ entry.edit_date }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% else %}
|
||||
<p>Aucune entrée trouvée pour : [<span class="text-danger">{{ criteria }}</span>]</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -188,6 +188,8 @@
|
||||
{% endif %}
|
||||
<li><a class="dropdown-item" href="{{request.route_url('settings')}}">
|
||||
<i class="ti ti-settings fs-6"></i> Paramètres</a></li>
|
||||
<li><a class="dropdown-item" href="{{request.route_url('blog_search')}}">
|
||||
<i class="ti ti-search fs-6"></i> Recherche</a></li>
|
||||
<li><a class="dropdown-item" href="{{request.route_url('logout')}}">
|
||||
<i class="ti ti-logout fs-6"></i> Se déconnecter</a></li>
|
||||
</ul>
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
<div class="pt-4">
|
||||
<h4>Versions des packages</h4>
|
||||
<ul>
|
||||
<li>cao_sunyata {{ app_version }}</li>
|
||||
<li>Pyramid {{ pyramid_version }}</li>
|
||||
<li>Bootstrap v5.3.0</li>
|
||||
<li>jQuery v3.4.0</li>
|
||||
|
||||
@@ -165,6 +165,23 @@ def blog_edit(request):
|
||||
'relateds': relateds,
|
||||
}
|
||||
|
||||
@view_config(route_name='blog_search', renderer='../templates/blog_search.jinja2')
|
||||
def blog_search(request):
|
||||
|
||||
criteria = ''
|
||||
|
||||
items = []
|
||||
if 'form.submitted' in request.params:
|
||||
criteria = request.params['criteria']
|
||||
# si afficher tous les fiches ?
|
||||
items = get_entries_by_criteria(request, criteria)
|
||||
|
||||
return {
|
||||
'page_title': "Rechercher",
|
||||
'items': items,
|
||||
'criteria': criteria,
|
||||
}
|
||||
|
||||
@view_config(route_name='related_edit', renderer='../templates/related_edit.jinja2', permission='view')
|
||||
def related_edit(request):
|
||||
# get tag parameters from request
|
||||
|
||||
@@ -92,7 +92,7 @@ def settings(request):
|
||||
sqlalchemy_version = pkg_resources.get_distribution("sqlalchemy").version
|
||||
sqlite_version = sqlite3.sqlite_version
|
||||
python_version = sys.version
|
||||
app_version = pkg_resources.require("cao_sunyata")[0].version
|
||||
app_version = '1.0' # pkg_resources.require("cao_sunyata")[0].version
|
||||
|
||||
return {
|
||||
'page_title': "Paramètres",
|
||||
|
||||
6
setup.py
6
setup.py
@@ -15,11 +15,11 @@ requires = [
|
||||
'pyramid_debugtoolbar',
|
||||
'waitress',
|
||||
'pyramid_mailer',
|
||||
'pyramid_retry',
|
||||
# 'pyramid_retry',
|
||||
'pyramid_tm',
|
||||
'SQLAlchemy==1.4.54',
|
||||
'SQLAlchemy==1.4.54',
|
||||
'transaction',
|
||||
'zope.sqlalchemy==2.0',
|
||||
'zope.sqlalchemy==2.0', # last version supporting python 3.9
|
||||
'webhelpers2', # various web building related helpers
|
||||
'passlib',
|
||||
'python-magic',
|
||||
|
||||
Reference in New Issue
Block a user