refonte : theme->topic et home.pt
This commit is contained in:
@@ -8,7 +8,7 @@ from .views.default import (
|
||||
to_decimal,
|
||||
)
|
||||
from .models.contents import (
|
||||
get_docs_themes,
|
||||
get_d_topics,
|
||||
)
|
||||
|
||||
@layout_config(template='templates/global_layout.pt')
|
||||
@@ -46,12 +46,12 @@ class GlobalLayout(object):
|
||||
|
||||
return is_admin
|
||||
|
||||
def get_themes(self):
|
||||
# lire toutes les themes
|
||||
def get_topics(self):
|
||||
# lire toutes les topics
|
||||
logged_in = self.request.authenticated_userid
|
||||
themes = get_docs_themes(self.request, logged_in)
|
||||
topics = get_d_topics(self.request, logged_in)
|
||||
dossiers = []
|
||||
for theme in themes:
|
||||
dossiers.append(theme.theme)
|
||||
for topic in topics:
|
||||
dossiers.append(topic.topic)
|
||||
return dossiers
|
||||
|
||||
|
||||
@@ -19,36 +19,36 @@ from .default import (
|
||||
def get_docs(request, doc_id):
|
||||
"""Lire les doc"""
|
||||
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()
|
||||
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_bytheme(request, theme, logged_in):
|
||||
def get_docs_bytopic(request, topic, logged_in):
|
||||
"""Lire les doc"""
|
||||
if logged_in == None:
|
||||
anon = "AND statut = 'public' "
|
||||
else:
|
||||
anon = ""
|
||||
if theme == 'BLOG':
|
||||
query = "SELECT * FROM docs WHERE theme=:theme %s ORDER BY cree_le DESC LIMIT 10;" % 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 theme=:theme ORDER BY intitule;"
|
||||
results = request.dbsession.execute(query, {'theme': theme}).fetchall()
|
||||
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):
|
||||
query = "SELECT * FROM docs_tags;"
|
||||
def get_d_tags(request):
|
||||
query = "SELECT * FROM d_tags;"
|
||||
results = request.dbsession.execute(query).fetchall()
|
||||
return results
|
||||
|
||||
def get_docs_themes(request, logged_in):
|
||||
def get_d_topics(request, logged_in):
|
||||
if logged_in == None:
|
||||
query = "SELECT * FROM docs_themes WHERE statut = 'public';"
|
||||
query = "SELECT * FROM d_topics WHERE statut = 'public';"
|
||||
else:
|
||||
query = "SELECT * FROM docs_themes;"
|
||||
query = "SELECT * FROM d_topics;"
|
||||
results = request.dbsession.execute(query).fetchall()
|
||||
return results
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ def includeme(config):
|
||||
config.add_route('home', '/')
|
||||
config.add_route('apropos', 'apropos')
|
||||
# contents
|
||||
config.add_route('folder', '/folder/{theme}')
|
||||
config.add_route('doc_edit', '/doc_edit/{theme}/{doc_id}')
|
||||
config.add_route('folder', '/folder/{topic}')
|
||||
config.add_route('doc_edit', '/doc_edit/{topic}/{doc_id}')
|
||||
config.add_route('doc_view', '/doc_view/{doc_id}')
|
||||
config.add_route('doc_search', '/doc_search')
|
||||
# portfolio
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2">Dossier</label>
|
||||
<div class="col-xs-7">
|
||||
<p class="form-control-static">${doc.theme}</p>
|
||||
<p class="form-control-static">${doc.topic}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
<p>
|
||||
<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>
|
||||
<hr>
|
||||
<div tal:replace="structure texte">
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
<p>
|
||||
<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>
|
||||
<div class="row">
|
||||
<table class="table">
|
||||
|
||||
@@ -54,7 +54,10 @@
|
||||
</div>
|
||||
<div class="collapse navbar-collapse" id="myNavbar">
|
||||
<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')}
|
||||
</ul>
|
||||
</div>
|
||||
@@ -66,7 +69,7 @@
|
||||
<br />
|
||||
<div class="container">
|
||||
<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>
|
||||
</span>
|
||||
</div>
|
||||
@@ -93,20 +96,7 @@
|
||||
|
||||
<footer class="container-fluid bg-black">
|
||||
<div class="row">
|
||||
<p class="text-center" tal:condition="not layout.isAnonymous()">
|
||||
<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>
|
||||
<p class="text-center">© 2017 - <a href="${request.application_url}/apropos">Phuoc Cao</a></p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
@@ -19,23 +19,23 @@ def isAnonymous(request):
|
||||
|
||||
@view_config(route_name='folder', renderer='../templates/contents/folder.pt')
|
||||
def folder(request):
|
||||
theme = request.matchdict['theme']
|
||||
topic = request.matchdict['topic']
|
||||
logged_in = request.authenticated_userid
|
||||
|
||||
# lire toutes les docs du theme
|
||||
docs = get_docs_bytheme(request, theme, logged_in)
|
||||
# lire toutes les docs du topic
|
||||
docs = get_docs_bytopic(request, topic, logged_in)
|
||||
|
||||
return {
|
||||
'page_title': "Contenu de %s" % theme.upper(),
|
||||
'page_title': "Contenu de %s" % topic.upper(),
|
||||
'docs': docs,
|
||||
'theme': theme,
|
||||
'topic': topic,
|
||||
}
|
||||
|
||||
@view_config(route_name='doc_edit', renderer='../templates/contents/doc_edit.pt', permission='view')
|
||||
def doc_edit(request):
|
||||
theme = request.matchdict['theme']
|
||||
topic = request.matchdict['topic']
|
||||
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
|
||||
|
||||
# si anonyme, interdire de modifier les docs
|
||||
@@ -43,7 +43,7 @@ def doc_edit(request):
|
||||
return HTTPFound(location=request.route_url('home'))
|
||||
|
||||
message = ""
|
||||
tags = get_docs_tags(request)
|
||||
tags = get_d_tags(request)
|
||||
statuts = ['private', 'public']
|
||||
|
||||
if doc_id == '0':
|
||||
@@ -52,7 +52,7 @@ def doc_edit(request):
|
||||
doc = {}
|
||||
doc['intitule'] = ''
|
||||
doc['texte'] = ''
|
||||
doc['theme'] = theme
|
||||
doc['topic'] = topic
|
||||
doc['tag1'] = ''
|
||||
doc['tag2'] = ''
|
||||
doc['statut'] = 'private'
|
||||
@@ -67,18 +67,18 @@ def doc_edit(request):
|
||||
new_values[param] = request.params[param]
|
||||
|
||||
if new_values:
|
||||
new_values['theme'] = theme
|
||||
new_values['topic'] = topic
|
||||
update_doc(request, doc_id, new_values)
|
||||
if doc_id != '0':
|
||||
return HTTPFound(location=request.route_url('doc_view', doc_id=doc_id))
|
||||
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 doc_id != '0':
|
||||
delete_doc(request, doc_id)
|
||||
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 {
|
||||
'page_title': titre,
|
||||
@@ -86,7 +86,7 @@ def doc_edit(request):
|
||||
'message': message,
|
||||
'doc_id': doc_id,
|
||||
'doc': doc,
|
||||
'theme': theme,
|
||||
'topic': topic,
|
||||
'tags': tags,
|
||||
'statuts': statuts,
|
||||
}
|
||||
@@ -125,7 +125,7 @@ def doc_view(request):
|
||||
# mouvements portfolio, retour vers portfolio
|
||||
url_retour = request.route_url('portfolio')
|
||||
else:
|
||||
url_retour = request.route_url('folder',theme=doc.theme)
|
||||
url_retour = request.route_url('folder',topic=doc.topic)
|
||||
tags = doc.tag1
|
||||
if doc.tag2:
|
||||
tags += ', ' + doc.tag2
|
||||
@@ -143,7 +143,7 @@ def doc_view(request):
|
||||
'doc_id': doc_id,
|
||||
'doc': doc,
|
||||
'texte': texte,
|
||||
'theme': doc.theme,
|
||||
'topic': doc.topic,
|
||||
'tags': tags,
|
||||
'url_retour':url_retour,
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ from ..models.members import (
|
||||
get_member_by_email
|
||||
)
|
||||
from ..models.contents import (
|
||||
get_docs_bytheme
|
||||
get_docs_bytopic
|
||||
)
|
||||
|
||||
# import datetime
|
||||
@@ -72,7 +72,7 @@ def home(request):
|
||||
id_photo = member.photo_instagram
|
||||
|
||||
# lire toutes les docs
|
||||
items = get_docs_bytheme(request, 'BLOG', logged_in)
|
||||
items = get_docs_bytopic(request, 'BLOG', logged_in)
|
||||
|
||||
return {
|
||||
'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
|
||||
#
|
||||
|
||||
from pprint import pprint
|
||||
import datetime
|
||||
import imaplib
|
||||
|
||||
# connecter au serveur IMAP de la societe
|
||||
mbx_name = 'ctphuoc@gmail.com'
|
||||
mbx_pwd = 'ztwciswzhxxogcfv'
|
||||
# connecter au serveur IMAP
|
||||
conn = imaplib.IMAP4_SSL('imap.gmail.com')
|
||||
conn.login('ctphuoc@gmail.com', 'ztwciswzhxxogcfv')
|
||||
|
||||
conn.login(mbx_name, mbx_pwd)
|
||||
# select INBOX
|
||||
conn.select('INBOX')
|
||||
rv, data = conn.search(None, 'BEFORE "01-FEB-2006"')
|
||||
# lister les dossiers
|
||||
typ, data = conn.list()
|
||||
print('Liste des dossiers :')
|
||||
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]))
|
||||
print("Nombre de emails : " + nb_mails)
|
||||
|
||||
|
||||
# deconnexion du serveur
|
||||
conn.close()
|
||||
conn.logout()
|
||||
|
||||
print("Nombre de emails : " + nb_mails)
|
||||
@@ -3,25 +3,48 @@
|
||||
# Compter les emails BEFORE DATE
|
||||
#
|
||||
|
||||
from pprint import pprint
|
||||
import datetime
|
||||
import imaplib
|
||||
|
||||
# connecter au serveur IMAP de la societe
|
||||
mbx_name = 'ctphuoc@gmail.com'
|
||||
mbx_pwd = 'ztwciswzhxxogcfv'
|
||||
# connecter au serveur IMAP
|
||||
conn = imaplib.IMAP4_SSL('imap.gmail.com')
|
||||
conn.login('ctphuoc@gmail.com', 'ztwciswzhxxogcfv')
|
||||
|
||||
conn.login(mbx_name, mbx_pwd)
|
||||
# select INBOX
|
||||
# lister les dossiers
|
||||
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')
|
||||
rv, data = conn.search(None, 'BEFORE "01-FEB-2006"')
|
||||
messages = data[0].split(b' ')
|
||||
for mail in messages:
|
||||
# mark the mail as deleted
|
||||
conn.store(mail, "+FLAGS", "\\Deleted")
|
||||
print(str(mail) + " supprimé")
|
||||
|
||||
# delete all the selected messages
|
||||
conn.expunge()
|
||||
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' ')
|
||||
for mail in messages:
|
||||
# move to trash
|
||||
conn.store(mail, '+X-GM-LABELS', '\\Trash')
|
||||
|
||||
#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
|
||||
conn.expunge()
|
||||
print("Script completed")
|
||||
else:
|
||||
print("Script aborted")
|
||||
|
||||
# deconnexion du serveur
|
||||
conn.close()
|
||||
conn.logout()
|
||||
|
||||
Reference in New Issue
Block a user