From 80366ffa8bc37c77a7dceac10cf712e865d673af Mon Sep 17 00:00:00 2001 From: Phuoc CAO Date: Sun, 3 May 2020 14:37:58 +0200 Subject: [PATCH] ajout recherche.pt --- caotek_mesavoirs/models/default.py | 11 ++- caotek_mesavoirs/routes.py | 3 +- caotek_mesavoirs/static/css/style.less | 4 + caotek_mesavoirs/static/img/logo-caotek.png | Bin 3644 -> 3605 bytes caotek_mesavoirs/templates/apropos.pt | 34 ++++++++ caotek_mesavoirs/templates/archives.pt | 3 + caotek_mesavoirs/templates/doc_edit.pt | 12 +-- caotek_mesavoirs/templates/doc_search.pt | 77 ++++++++++++++++++ caotek_mesavoirs/templates/doc_view.pt | 8 +- .../templates/layouts/global_layout.pt | 26 +++--- caotek_mesavoirs/views/default.py | 55 +++++++++++-- 11 files changed, 193 insertions(+), 40 deletions(-) create mode 100644 caotek_mesavoirs/templates/apropos.pt create mode 100644 caotek_mesavoirs/templates/doc_search.pt diff --git a/caotek_mesavoirs/models/default.py b/caotek_mesavoirs/models/default.py index 0b4df3f..c88fb6d 100644 --- a/caotek_mesavoirs/models/default.py +++ b/caotek_mesavoirs/models/default.py @@ -36,11 +36,16 @@ def get_docs_bytheme(request, theme): results = request.dbsession.execute(query, {'theme': theme}).fetchall() return results -def get_blog_themes(request): - query = "SELECT * FROM blog_themes;" +def get_docs_themes(request): + query = "SELECT * FROM docs_themes;" results = request.dbsession.execute(query).fetchall() return results +def get_docs_bycritere(request, critere): + query = "SELECT * FROM docs WHERE texte like :critere;" + results = request.dbsession.execute(query, {'critere': '%' + critere + '%'}).fetchall() + return results + def update_doc(request, doc_id, intitule, texte, theme): """créér ou modifier le doc""" if doc_id == '0': @@ -53,5 +58,5 @@ def update_doc(request, doc_id, intitule, texte, theme): def delete_doc(request, doc_id): """supprimer la doc""" query = "delete from docs where doc_id = :doc_id;" - results = request.dbsession.execute(query, {'doc_id': doc_id}) + execute_query(request, query, {'doc_id': doc_id}) diff --git a/caotek_mesavoirs/routes.py b/caotek_mesavoirs/routes.py index 562c45a..84746d6 100644 --- a/caotek_mesavoirs/routes.py +++ b/caotek_mesavoirs/routes.py @@ -1,10 +1,11 @@ def includeme(config): config.add_static_view('static', 'static', cache_max_age=3600) config.add_route('home', '/') + config.add_route('apropos', 'apropos') config.add_route('archives', '/archives/{theme}') config.add_route('doc_edit', '/doc_edit/{doc_id}') config.add_route('doc_view', '/doc_view/{doc_id}') - config.add_route('memo_view', '/memo_view/{doc_id}') + config.add_route('doc_search', '/doc_search') # actifs config.add_route('actif_edit', '/actif_edit/{no_id}') config.add_route('actif2_edit', '/actif2_edit/{no_id}') diff --git a/caotek_mesavoirs/static/css/style.less b/caotek_mesavoirs/static/css/style.less index cc5bff7..7ae8391 100644 --- a/caotek_mesavoirs/static/css/style.less +++ b/caotek_mesavoirs/static/css/style.less @@ -55,6 +55,10 @@ } } +.container h2{ + color: crimson !important; +} + .container-fluid { padding-top: 2em; padding-bottom: 1em; diff --git a/caotek_mesavoirs/static/img/logo-caotek.png b/caotek_mesavoirs/static/img/logo-caotek.png index 306d63e14e2a1a3b0da084d4e2a3be2574b33fb1..c549094c288cb9ff3c6470b8e72a957a5c9dc95b 100644 GIT binary patch delta 3537 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 LNkvXXu0mjfd+_r$ delta 3576 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 +
+ +
+
+
+
+
+
+ L'argent qu'on possède est l'instrument de la liberté; celui qu'on pourchasse est celui de la servitude. +
+
+ +
+
+
+
+
+
+ L'intelligence ce n'est pas ce que l'on sait mais ce que l'on fait quand on ne sait pas. +
+
+
+ +
+
+
+ +
+ diff --git a/caotek_mesavoirs/templates/archives.pt b/caotek_mesavoirs/templates/archives.pt index d97894d..8ab61c6 100644 --- a/caotek_mesavoirs/templates/archives.pt +++ b/caotek_mesavoirs/templates/archives.pt @@ -2,6 +2,9 @@
+

+ Créer un nouveau post +

diff --git a/caotek_mesavoirs/templates/doc_edit.pt b/caotek_mesavoirs/templates/doc_edit.pt index bab9850..7004d7d 100644 --- a/caotek_mesavoirs/templates/doc_edit.pt +++ b/caotek_mesavoirs/templates/doc_edit.pt @@ -37,16 +37,12 @@
-
- + -
-
-
- +
diff --git a/caotek_mesavoirs/templates/doc_search.pt b/caotek_mesavoirs/templates/doc_search.pt new file mode 100644 index 0000000..83019ed --- /dev/null +++ b/caotek_mesavoirs/templates/doc_search.pt @@ -0,0 +1,77 @@ + +
+ +
+
+ +
+
+
+ + + + +
+
+
+ +
+ +
+
+
${ligne.intitule}
+ + + + + + +
${ligne.intitule}${ligne.tag1}${ligne.cree_le.strftime("%d-%m-%Y")}${ligne.modif_le.strftime("%d-%m-%Y")}
+
+
+

Aucun document ne correspond à la recherche

+
+
+
+
+ + + + + diff --git a/caotek_mesavoirs/templates/doc_view.pt b/caotek_mesavoirs/templates/doc_view.pt index a645d5b..b105550 100644 --- a/caotek_mesavoirs/templates/doc_view.pt +++ b/caotek_mesavoirs/templates/doc_view.pt @@ -1,14 +1,16 @@
- [ Fermer ] - [ Modifier ] -
+

+ [ Fermer ]  + [ Modifier ] +


Page text goes here.

+ Dernière modification le ${modif_le}

diff --git a/caotek_mesavoirs/templates/layouts/global_layout.pt b/caotek_mesavoirs/templates/layouts/global_layout.pt index b3b972c..08a32b5 100644 --- a/caotek_mesavoirs/templates/layouts/global_layout.pt +++ b/caotek_mesavoirs/templates/layouts/global_layout.pt @@ -55,7 +55,6 @@ @@ -89,21 +88,16 @@ diff --git a/caotek_mesavoirs/views/default.py b/caotek_mesavoirs/views/default.py index 2175bdb..662275e 100644 --- a/caotek_mesavoirs/views/default.py +++ b/caotek_mesavoirs/views/default.py @@ -102,7 +102,7 @@ def doc_edit(request): url = request.route_url('doc_edit',doc_id=doc_id) message = "" - themes = get_blog_themes(request) + themes = get_docs_themes(request) if doc_id == '0': titre = "Nouveau doc" @@ -126,15 +126,15 @@ def doc_edit(request): if doc_id != '0': return HTTPFound(location=request.route_url('doc_view', doc_id=doc_id)) else: - return HTTPFound(location=request.route_url('doc_list')) + return HTTPFound(location=request.route_url('archives',theme=doc.theme)) else: message = "Veuillez saisir un intitule et un texte." if 'form.deleted' in request.params: if doc_id != '0': delete_doc(request, doc_id) - request.session.flash(u"<%s> est supprimée avec succès." % intitule, 'success') - return HTTPFound(location=request.route_url('doc_list')) + request.session.flash(u"<%s> est supprimée avec succès." % doc.intitule, 'success') + return HTTPFound(location=request.route_url('archives',theme=doc.theme)) return { 'page_title': titre, @@ -147,24 +147,61 @@ def doc_edit(request): 'themes': themes, } +@view_config(route_name='doc_search', renderer='../templates/doc_search.pt') +def doc_search(request): + + critere = '' + docs = [] + + if 'form.submitted' in request.params: + critere = request.params['critere'] + # si afficher tous les fiches ? + docs = get_docs_bycritere(request, critere) + + return { + 'page_title': "Rechercher", + 'docs': docs, + 'critere': critere, + } + +@view_config(route_name='apropos', renderer='../templates/apropos.pt') +def apropos(request): + + + return { + 'page_title': "A propos", + } + + @view_config(route_name='doc_view', renderer='../templates/doc_view.pt') -@view_config(route_name='memo_view', renderer='../templates/doc_view.pt', permission='view') def doc_view(request): + + logged_in = request.authenticated_userid doc_id = request.matchdict['doc_id'] doc = get_docs(request, doc_id) + if logged_in == None and doc.theme == 'memo': + # si anonyme, interdire de voir les memo + return HTTPFound(location=request.route_url('home')) + intitule = doc.intitule url_retour = request.route_url('archives',theme=doc.theme) # insèrer le path de static/img - img_path = 'image:: %s/static/img/' % request.application_url - - texte = doc.texte.replace('image:: static/img/', img_path) + texte = doc.texte.replace('static/img/', "%s/static/img/" % request.application_url) + # convertir reST en HTML - texte = publish_parts(texte, writer_name='html')['html_body'] + # texte = publish_parts(texte, writer_name='html')['html_body'] + + # convertir mardown en HTML + from markdown2 import Markdown + markdowner = Markdown() + texte = markdowner.convert(texte) + return { 'page_title': intitule, 'texte': texte, + 'modif_le': doc.modif_le.strftime('%d/%m/%Y'), 'doc_id': doc_id, 'url_retour':url_retour }