refonte : theme->topic et home.pt
This commit is contained in:
@@ -8,7 +8,7 @@ from .views.default import (
|
|||||||
to_decimal,
|
to_decimal,
|
||||||
)
|
)
|
||||||
from .models.contents import (
|
from .models.contents import (
|
||||||
get_docs_themes,
|
get_d_topics,
|
||||||
)
|
)
|
||||||
|
|
||||||
@layout_config(template='templates/global_layout.pt')
|
@layout_config(template='templates/global_layout.pt')
|
||||||
@@ -46,12 +46,12 @@ class GlobalLayout(object):
|
|||||||
|
|
||||||
return is_admin
|
return is_admin
|
||||||
|
|
||||||
def get_themes(self):
|
def get_topics(self):
|
||||||
# lire toutes les themes
|
# lire toutes les topics
|
||||||
logged_in = self.request.authenticated_userid
|
logged_in = self.request.authenticated_userid
|
||||||
themes = get_docs_themes(self.request, logged_in)
|
topics = get_d_topics(self.request, logged_in)
|
||||||
dossiers = []
|
dossiers = []
|
||||||
for theme in themes:
|
for topic in topics:
|
||||||
dossiers.append(theme.theme)
|
dossiers.append(topic.topic)
|
||||||
return dossiers
|
return dossiers
|
||||||
|
|
||||||
|
|||||||
@@ -19,36 +19,36 @@ from .default import (
|
|||||||
def get_docs(request, doc_id):
|
def get_docs(request, doc_id):
|
||||||
"""Lire les doc"""
|
"""Lire les doc"""
|
||||||
if doc_id == 0:
|
if doc_id == 0:
|
||||||
query = "SELECT * FROM docs ORDER BY theme, intitule;"
|
query = "SELECT * FROM docs ORDER BY topic, intitule;"
|
||||||
results = request.dbsession.execute(query).fetchall()
|
results = request.dbsession.execute(query).fetchall()
|
||||||
else:
|
else:
|
||||||
query = "SELECT * FROM docs where doc_id = :doc_id;"
|
query = "SELECT * FROM docs where doc_id = :doc_id;"
|
||||||
results = request.dbsession.execute(query, {'doc_id': doc_id}).first()
|
results = request.dbsession.execute(query, {'doc_id': doc_id}).first()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def get_docs_bytheme(request, theme, logged_in):
|
def get_docs_bytopic(request, topic, logged_in):
|
||||||
"""Lire les doc"""
|
"""Lire les doc"""
|
||||||
if logged_in == None:
|
if logged_in == None:
|
||||||
anon = "AND statut = 'public' "
|
anon = "AND statut = 'public' "
|
||||||
else:
|
else:
|
||||||
anon = ""
|
anon = ""
|
||||||
if theme == 'BLOG':
|
if topic == 'BLOG':
|
||||||
query = "SELECT * FROM docs WHERE theme=:theme %s ORDER BY cree_le DESC LIMIT 10;" % anon
|
query = "SELECT * FROM docs WHERE topic=:topic %s ORDER BY cree_le DESC LIMIT 10;" % anon
|
||||||
else:
|
else:
|
||||||
query = "SELECT * FROM docs WHERE theme=:theme ORDER BY intitule;"
|
query = "SELECT * FROM docs WHERE topic=:topic ORDER BY intitule;"
|
||||||
results = request.dbsession.execute(query, {'theme': theme}).fetchall()
|
results = request.dbsession.execute(query, {'topic': topic}).fetchall()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def get_docs_tags(request):
|
def get_d_tags(request):
|
||||||
query = "SELECT * FROM docs_tags;"
|
query = "SELECT * FROM d_tags;"
|
||||||
results = request.dbsession.execute(query).fetchall()
|
results = request.dbsession.execute(query).fetchall()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def get_docs_themes(request, logged_in):
|
def get_d_topics(request, logged_in):
|
||||||
if logged_in == None:
|
if logged_in == None:
|
||||||
query = "SELECT * FROM docs_themes WHERE statut = 'public';"
|
query = "SELECT * FROM d_topics WHERE statut = 'public';"
|
||||||
else:
|
else:
|
||||||
query = "SELECT * FROM docs_themes;"
|
query = "SELECT * FROM d_topics;"
|
||||||
results = request.dbsession.execute(query).fetchall()
|
results = request.dbsession.execute(query).fetchall()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ def includeme(config):
|
|||||||
config.add_route('home', '/')
|
config.add_route('home', '/')
|
||||||
config.add_route('apropos', 'apropos')
|
config.add_route('apropos', 'apropos')
|
||||||
# contents
|
# contents
|
||||||
config.add_route('folder', '/folder/{theme}')
|
config.add_route('folder', '/folder/{topic}')
|
||||||
config.add_route('doc_edit', '/doc_edit/{theme}/{doc_id}')
|
config.add_route('doc_edit', '/doc_edit/{topic}/{doc_id}')
|
||||||
config.add_route('doc_view', '/doc_view/{doc_id}')
|
config.add_route('doc_view', '/doc_view/{doc_id}')
|
||||||
config.add_route('doc_search', '/doc_search')
|
config.add_route('doc_search', '/doc_search')
|
||||||
# portfolio
|
# portfolio
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-2">Dossier</label>
|
<label class="control-label col-xs-2">Dossier</label>
|
||||||
<div class="col-xs-7">
|
<div class="col-xs-7">
|
||||||
<p class="form-control-static">${doc.theme}</p>
|
<p class="form-control-static">${doc.topic}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a href="${url_retour}">[ Fermer ]</a>
|
<a href="${url_retour}">[ Fermer ]</a>
|
||||||
<a href="${request.application_url}/doc_edit/${theme}/${doc_id}" tal:condition="not layout.isAnonymous()">[ Modifier ]</a>
|
<a href="${request.application_url}/doc_edit/${topic}/${doc_id}" tal:condition="not layout.isAnonymous()">[ Modifier ]</a>
|
||||||
</p>
|
</p>
|
||||||
<hr>
|
<hr>
|
||||||
<div tal:replace="structure texte">
|
<div tal:replace="structure texte">
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a href="${request.application_url}">[ Retour ]</a>
|
<a href="${request.application_url}">[ Retour ]</a>
|
||||||
<a href="${request.application_url}/doc_edit/${theme}/0" tal:condition="not layout.isAnonymous()">[ Créer ]</a>
|
<a href="${request.application_url}/doc_edit/${topic}/0" tal:condition="not layout.isAnonymous()">[ Créer ]</a>
|
||||||
</p>
|
</p>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<table class="table">
|
<table class="table">
|
||||||
|
|||||||
@@ -54,7 +54,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="collapse navbar-collapse" id="myNavbar">
|
<div class="collapse navbar-collapse" id="myNavbar">
|
||||||
<ul class="nav navbar-nav navbar-right">
|
<ul class="nav navbar-nav navbar-right">
|
||||||
<!-- <li><a href="${request.application_url}/histo_list">HISTORIQUE</a></li> -->
|
<!-- si anonyme, lien pour se connecter -->
|
||||||
|
<li tal:condition="layout.isAnonymous()">
|
||||||
|
<a href="${request.application_url}/login"><span class="glyphicon glyphicon-user"></span></a></li>
|
||||||
|
<li><a href="${request.application_url}/doc_search"><span class="glyphicon glyphicon-search"></span></a></li>
|
||||||
${panel('dropdown_menu_panel')}
|
${panel('dropdown_menu_panel')}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -66,7 +69,7 @@
|
|||||||
<br />
|
<br />
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div align="center" tal:condition="not layout.isAnonymous()">
|
<div align="center" tal:condition="not layout.isAnonymous()">
|
||||||
<span class="menu-item" tal:repeat="item layout.get_themes()">
|
<span class="menu-item" tal:repeat="item layout.get_topics()">
|
||||||
<a href="${request.application_url}/folder/${item}">${item}</a>
|
<a href="${request.application_url}/folder/${item}">${item}</a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -93,20 +96,7 @@
|
|||||||
|
|
||||||
<footer class="container-fluid bg-black">
|
<footer class="container-fluid bg-black">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<p class="text-center" tal:condition="not layout.isAnonymous()">
|
<p class="text-center">© 2017 - <a href="${request.application_url}/apropos">Phuoc Cao</a></p>
|
||||||
<a href="https://www.instagram.com/ctphuoc/" alt="instagram" target="_blank">
|
|
||||||
<img src="${request.static_url('caotek_mesavoirs:static/img/instagram.png')}" /></a><br />
|
|
||||||
<br />
|
|
||||||
</p>
|
|
||||||
<p class="text-center">© 2017 - Phuoc Cao |
|
|
||||||
<a href="${request.application_url}/apropos">à propos</a> |
|
|
||||||
<a href="${request.application_url}/doc_search">recherche</a>
|
|
||||||
<span tal:condition="layout.isAnonymous()">
|
|
||||||
|
|
|
||||||
<a href="${request.application_url}/login">se connecter</a>
|
|
||||||
|
|
|
||||||
</span>
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
|||||||
@@ -19,23 +19,23 @@ def isAnonymous(request):
|
|||||||
|
|
||||||
@view_config(route_name='folder', renderer='../templates/contents/folder.pt')
|
@view_config(route_name='folder', renderer='../templates/contents/folder.pt')
|
||||||
def folder(request):
|
def folder(request):
|
||||||
theme = request.matchdict['theme']
|
topic = request.matchdict['topic']
|
||||||
logged_in = request.authenticated_userid
|
logged_in = request.authenticated_userid
|
||||||
|
|
||||||
# lire toutes les docs du theme
|
# lire toutes les docs du topic
|
||||||
docs = get_docs_bytheme(request, theme, logged_in)
|
docs = get_docs_bytopic(request, topic, logged_in)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': "Contenu de %s" % theme.upper(),
|
'page_title': "Contenu de %s" % topic.upper(),
|
||||||
'docs': docs,
|
'docs': docs,
|
||||||
'theme': theme,
|
'topic': topic,
|
||||||
}
|
}
|
||||||
|
|
||||||
@view_config(route_name='doc_edit', renderer='../templates/contents/doc_edit.pt', permission='view')
|
@view_config(route_name='doc_edit', renderer='../templates/contents/doc_edit.pt', permission='view')
|
||||||
def doc_edit(request):
|
def doc_edit(request):
|
||||||
theme = request.matchdict['theme']
|
topic = request.matchdict['topic']
|
||||||
doc_id = request.matchdict['doc_id']
|
doc_id = request.matchdict['doc_id']
|
||||||
url = request.route_url('doc_edit', theme=theme, doc_id=doc_id)
|
url = request.route_url('doc_edit', topic=topic, doc_id=doc_id)
|
||||||
logged_in = request.authenticated_userid
|
logged_in = request.authenticated_userid
|
||||||
|
|
||||||
# si anonyme, interdire de modifier les docs
|
# si anonyme, interdire de modifier les docs
|
||||||
@@ -43,7 +43,7 @@ def doc_edit(request):
|
|||||||
return HTTPFound(location=request.route_url('home'))
|
return HTTPFound(location=request.route_url('home'))
|
||||||
|
|
||||||
message = ""
|
message = ""
|
||||||
tags = get_docs_tags(request)
|
tags = get_d_tags(request)
|
||||||
statuts = ['private', 'public']
|
statuts = ['private', 'public']
|
||||||
|
|
||||||
if doc_id == '0':
|
if doc_id == '0':
|
||||||
@@ -52,7 +52,7 @@ def doc_edit(request):
|
|||||||
doc = {}
|
doc = {}
|
||||||
doc['intitule'] = ''
|
doc['intitule'] = ''
|
||||||
doc['texte'] = ''
|
doc['texte'] = ''
|
||||||
doc['theme'] = theme
|
doc['topic'] = topic
|
||||||
doc['tag1'] = ''
|
doc['tag1'] = ''
|
||||||
doc['tag2'] = ''
|
doc['tag2'] = ''
|
||||||
doc['statut'] = 'private'
|
doc['statut'] = 'private'
|
||||||
@@ -67,18 +67,18 @@ def doc_edit(request):
|
|||||||
new_values[param] = request.params[param]
|
new_values[param] = request.params[param]
|
||||||
|
|
||||||
if new_values:
|
if new_values:
|
||||||
new_values['theme'] = theme
|
new_values['topic'] = topic
|
||||||
update_doc(request, doc_id, new_values)
|
update_doc(request, doc_id, new_values)
|
||||||
if doc_id != '0':
|
if doc_id != '0':
|
||||||
return HTTPFound(location=request.route_url('doc_view', doc_id=doc_id))
|
return HTTPFound(location=request.route_url('doc_view', doc_id=doc_id))
|
||||||
else:
|
else:
|
||||||
return HTTPFound(location=request.route_url('folder',theme=theme))
|
return HTTPFound(location=request.route_url('folder',topic=topic))
|
||||||
|
|
||||||
if 'form.deleted' in request.params:
|
if 'form.deleted' in request.params:
|
||||||
if doc_id != '0':
|
if doc_id != '0':
|
||||||
delete_doc(request, doc_id)
|
delete_doc(request, doc_id)
|
||||||
request.session.flash(u"<%s> est supprimée avec succès." % doc.intitule, 'success')
|
request.session.flash(u"<%s> est supprimée avec succès." % doc.intitule, 'success')
|
||||||
return HTTPFound(location=request.route_url('folder',theme=theme))
|
return HTTPFound(location=request.route_url('folder',topic=topic))
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': titre,
|
'page_title': titre,
|
||||||
@@ -86,7 +86,7 @@ def doc_edit(request):
|
|||||||
'message': message,
|
'message': message,
|
||||||
'doc_id': doc_id,
|
'doc_id': doc_id,
|
||||||
'doc': doc,
|
'doc': doc,
|
||||||
'theme': theme,
|
'topic': topic,
|
||||||
'tags': tags,
|
'tags': tags,
|
||||||
'statuts': statuts,
|
'statuts': statuts,
|
||||||
}
|
}
|
||||||
@@ -125,7 +125,7 @@ def doc_view(request):
|
|||||||
# mouvements portfolio, retour vers portfolio
|
# mouvements portfolio, retour vers portfolio
|
||||||
url_retour = request.route_url('portfolio')
|
url_retour = request.route_url('portfolio')
|
||||||
else:
|
else:
|
||||||
url_retour = request.route_url('folder',theme=doc.theme)
|
url_retour = request.route_url('folder',topic=doc.topic)
|
||||||
tags = doc.tag1
|
tags = doc.tag1
|
||||||
if doc.tag2:
|
if doc.tag2:
|
||||||
tags += ', ' + doc.tag2
|
tags += ', ' + doc.tag2
|
||||||
@@ -143,7 +143,7 @@ def doc_view(request):
|
|||||||
'doc_id': doc_id,
|
'doc_id': doc_id,
|
||||||
'doc': doc,
|
'doc': doc,
|
||||||
'texte': texte,
|
'texte': texte,
|
||||||
'theme': doc.theme,
|
'topic': doc.topic,
|
||||||
'tags': tags,
|
'tags': tags,
|
||||||
'url_retour':url_retour,
|
'url_retour':url_retour,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ from ..models.members import (
|
|||||||
get_member_by_email
|
get_member_by_email
|
||||||
)
|
)
|
||||||
from ..models.contents import (
|
from ..models.contents import (
|
||||||
get_docs_bytheme
|
get_docs_bytopic
|
||||||
)
|
)
|
||||||
|
|
||||||
# import datetime
|
# import datetime
|
||||||
@@ -72,7 +72,7 @@ def home(request):
|
|||||||
id_photo = member.photo_instagram
|
id_photo = member.photo_instagram
|
||||||
|
|
||||||
# lire toutes les docs
|
# lire toutes les docs
|
||||||
items = get_docs_bytheme(request, 'BLOG', logged_in)
|
items = get_docs_bytopic(request, 'BLOG', logged_in)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': "Méditer, c’est ouvrir la cage",
|
'page_title': "Méditer, c’est ouvrir la cage",
|
||||||
|
|||||||
27
gmail_nb.py
27
gmail_nb.py
@@ -3,21 +3,32 @@
|
|||||||
# Compter les emails BEFORE DATE
|
# Compter les emails BEFORE DATE
|
||||||
#
|
#
|
||||||
|
|
||||||
|
from pprint import pprint
|
||||||
|
import datetime
|
||||||
import imaplib
|
import imaplib
|
||||||
|
|
||||||
# connecter au serveur IMAP de la societe
|
# connecter au serveur IMAP
|
||||||
mbx_name = 'ctphuoc@gmail.com'
|
|
||||||
mbx_pwd = 'ztwciswzhxxogcfv'
|
|
||||||
conn = imaplib.IMAP4_SSL('imap.gmail.com')
|
conn = imaplib.IMAP4_SSL('imap.gmail.com')
|
||||||
|
conn.login('ctphuoc@gmail.com', 'ztwciswzhxxogcfv')
|
||||||
|
|
||||||
conn.login(mbx_name, mbx_pwd)
|
# lister les dossiers
|
||||||
# select INBOX
|
typ, data = conn.list()
|
||||||
conn.select('INBOX')
|
print('Liste des dossiers :')
|
||||||
rv, data = conn.search(None, 'BEFORE "01-FEB-2006"')
|
pprint(data)
|
||||||
|
|
||||||
|
# delete mails before 15 years
|
||||||
|
before_date = (datetime.date.today() - datetime.timedelta(10)).strftime("%d-%b-%Y")
|
||||||
|
print("Supprimer emails avant " + before_date)
|
||||||
|
|
||||||
|
# select ALL
|
||||||
|
conn.select('[Gmail]/Corbeille')
|
||||||
|
|
||||||
|
rv, data = conn.search(None, '(BEFORE {0})'.format(before_date))
|
||||||
nb_mails = str(len(data[0]))
|
nb_mails = str(len(data[0]))
|
||||||
|
print("Nombre de emails : " + nb_mails)
|
||||||
|
|
||||||
|
|
||||||
# deconnexion du serveur
|
# deconnexion du serveur
|
||||||
conn.close()
|
conn.close()
|
||||||
conn.logout()
|
conn.logout()
|
||||||
|
|
||||||
print("Nombre de emails : " + nb_mails)
|
|
||||||
@@ -3,25 +3,48 @@
|
|||||||
# Compter les emails BEFORE DATE
|
# Compter les emails BEFORE DATE
|
||||||
#
|
#
|
||||||
|
|
||||||
|
from pprint import pprint
|
||||||
|
import datetime
|
||||||
import imaplib
|
import imaplib
|
||||||
|
|
||||||
# connecter au serveur IMAP de la societe
|
# connecter au serveur IMAP
|
||||||
mbx_name = 'ctphuoc@gmail.com'
|
|
||||||
mbx_pwd = 'ztwciswzhxxogcfv'
|
|
||||||
conn = imaplib.IMAP4_SSL('imap.gmail.com')
|
conn = imaplib.IMAP4_SSL('imap.gmail.com')
|
||||||
|
conn.login('ctphuoc@gmail.com', 'ztwciswzhxxogcfv')
|
||||||
|
|
||||||
conn.login(mbx_name, mbx_pwd)
|
# lister les dossiers
|
||||||
# select INBOX
|
typ, data = conn.list()
|
||||||
|
print('Liste des dossiers :')
|
||||||
|
pprint(data)
|
||||||
|
|
||||||
|
# delete mails before 14 years
|
||||||
|
before_date = (datetime.date.today() - datetime.timedelta(5110)).strftime("%d-%b-%Y")
|
||||||
|
print("Delete emails before " + before_date)
|
||||||
|
|
||||||
|
# select ALL
|
||||||
conn.select('INBOX')
|
conn.select('INBOX')
|
||||||
rv, data = conn.search(None, 'BEFORE "01-FEB-2006"')
|
|
||||||
|
rv, data = conn.search(None, '(BEFORE {0})'.format(before_date))
|
||||||
|
nb_mails = str(len(data[0]))
|
||||||
|
print(nb_mails + " emails founded")
|
||||||
|
|
||||||
|
resp = input ("Enter 'c' to continue, or 'a' to abort : ")
|
||||||
|
if resp=="c":
|
||||||
|
print("Moving " + nb_mails + " emails to Trash")
|
||||||
messages = data[0].split(b' ')
|
messages = data[0].split(b' ')
|
||||||
for mail in messages:
|
for mail in messages:
|
||||||
# mark the mail as deleted
|
# move to trash
|
||||||
conn.store(mail, "+FLAGS", "\\Deleted")
|
conn.store(mail, '+X-GM-LABELS', '\\Trash')
|
||||||
print(str(mail) + " supprimé")
|
|
||||||
|
|
||||||
|
#This block empties trash, remove if you want to keep, Gmail auto purges trash after 30 days.
|
||||||
|
print("Emptying Trash & Expunge...")
|
||||||
|
conn.select('[Gmail]/Corbeille')
|
||||||
|
conn.store("1:*", '+FLAGS', '\\Deleted')
|
||||||
# delete all the selected messages
|
# delete all the selected messages
|
||||||
conn.expunge()
|
conn.expunge()
|
||||||
|
print("Script completed")
|
||||||
|
else:
|
||||||
|
print("Script aborted")
|
||||||
|
|
||||||
# deconnexion du serveur
|
# deconnexion du serveur
|
||||||
conn.close()
|
conn.close()
|
||||||
conn.logout()
|
conn.logout()
|
||||||
|
|||||||
Reference in New Issue
Block a user