Ajout des modules initiaux
darcs-hash:20070124114812-f46e9-171ef12f1e1b89ae005adf4aab6f6535fb9289e6.gz
This commit is contained in:
parent
8713311bc1
commit
ed3ab40ccd
80 changed files with 4852 additions and 5 deletions
359
intranet/modules/monCompte/main.py
Executable file
359
intranet/modules/monCompte/main.py
Executable file
|
@ -0,0 +1,359 @@
|
|||
#! /usr/bin/env python
|
||||
# -*- coding: iso-8859-15 -*-
|
||||
# ##################################################################################################### #
|
||||
# MonCompte
|
||||
# ##################################################################################################### #
|
||||
# Description:
|
||||
#
|
||||
# Informations:
|
||||
#
|
||||
# Pages:
|
||||
#
|
||||
#
|
||||
# ##################################################################################################### #
|
||||
|
||||
import cherrypy, sys, os, datetime
|
||||
# libraries crans
|
||||
import crans.cp as _crans_cp
|
||||
sys.path.append('/usr/scripts/gestion/')
|
||||
from config_mail import MailConfig
|
||||
|
||||
if (cherrypy.config.configMap["global"]["server.environment"] == "development"):
|
||||
from ldap_crans_test import *
|
||||
# print("monCompte : unsing test ldap : env=" + cherrypy.config.configMap["global"]["server.environment"])
|
||||
else:
|
||||
from ldap_crans import *
|
||||
# print("monCompte : unsing prod ldap : env=" + cherrypy.config.configMap["global"]["server.environment"])
|
||||
|
||||
from ClassesIntranet.ModuleBase import ModuleBase
|
||||
|
||||
class main(ModuleBase):
|
||||
def title(self):
|
||||
return "Mon Compte"
|
||||
|
||||
def getCurrentAdministrativeYear(self):
|
||||
'''
|
||||
premiere partie de l''annee scolaire en cours
|
||||
ex : le 5 juin 2006 retourne 2005
|
||||
'''
|
||||
now = datetime.datetime.now()
|
||||
currentYear = int(now.strftime("%Y"))
|
||||
currentMonth = int(now.strftime("%m"))
|
||||
if currentMonth > 8:
|
||||
administrativeYear = currentYear
|
||||
else:
|
||||
administrativeYear = currentYear - 1
|
||||
return administrativeYear
|
||||
|
||||
##########################
|
||||
# affichage
|
||||
##########################
|
||||
#
|
||||
# methode qui affiche la template avec toutes les infos de
|
||||
# l'adherent + les formulaires
|
||||
#
|
||||
def index(self, message = '', error = '', currentTab = 'mainTab'):
|
||||
adh = cherrypy.session['LDAP'].search('uid=' + cherrypy.session['uid'])['adherent'][0]
|
||||
t = {}
|
||||
t['message'] = message
|
||||
t['error'] = error
|
||||
|
||||
|
||||
############## info adherent ##############
|
||||
adherent = {}
|
||||
# nom, prenom, chambre, tel, solde, droits, mail
|
||||
adherent['prenom'] = adh.prenom()
|
||||
adherent['nom'] = adh.nom()
|
||||
adherent['chambre'] = adh.chbre()
|
||||
if adherent['chambre'] == "EXT":
|
||||
adr = adh.adresse()
|
||||
adherent['adresse'] = {}
|
||||
adherent['adresse']['ligne1'] = adr[0]
|
||||
adherent['adresse']['ligne2'] = adr[1]
|
||||
adherent['adresse']['cp'] = adr[2]
|
||||
adherent['adresse']['ville'] = adr[3]
|
||||
adherent['telephone'] = adh.tel
|
||||
adherent['solde'] = adh.solde
|
||||
adherent['droits'] = u", ".join(adh.droits())
|
||||
adherent['mail'] = adh.email()
|
||||
# cotisation
|
||||
administrativeYear = self.getCurrentAdministrativeYear()
|
||||
if administrativeYear in adh.paiement():
|
||||
adherent['cotisationOK'] = 'OK'
|
||||
else:
|
||||
adherent['cotisationOK'] = None
|
||||
# carte etudiant
|
||||
if administrativeYear in adh.carteEtudiant():
|
||||
adherent['carteOK'] = 'OK'
|
||||
else:
|
||||
adherent['carteOK'] = None
|
||||
# annee scolaire (ex 2001-2002)
|
||||
adherent['anneeScolaire'] = str(administrativeYear) + '-' + str(administrativeYear + 1)
|
||||
t['adherent'] = adherent
|
||||
|
||||
############## info mail ##############
|
||||
mailInfos = {}
|
||||
try:
|
||||
mailConfig = MailConfig(cherrypy.session['uid'])
|
||||
mailInfos['forwarding_address'] = mailConfig['forward']
|
||||
mailInfos['spam'] = {}
|
||||
mailInfos['spam']['no'] = mailConfig['spam'] == 'accepte'
|
||||
mailInfos['spam']['mark'] = mailConfig['spam'] == 'marque'
|
||||
mailInfos['spam']['drop'] = mailConfig['spam'] == 'supprime'
|
||||
except Exception, e:
|
||||
t['mailError'] = u"Erreur:fichiers de configuration mail personnels"
|
||||
|
||||
mailInfos['alias'] = adh.alias()
|
||||
mailInfos['contourneGreylist'] = adh.contourneGreylist()
|
||||
mailInfos['rewriteMailHeaders'] = adh.rewriteMailHeaders()
|
||||
t['mailInfos'] = mailInfos
|
||||
|
||||
|
||||
|
||||
return {
|
||||
'template' :'monCompte',
|
||||
'values' :t,
|
||||
'stylesheets' :['monCompte.css'],
|
||||
'scripts':['crans_domtab.js','moncompte.js','passwordGenerator.js'],
|
||||
}
|
||||
index.exposed = True
|
||||
|
||||
|
||||
|
||||
##########################
|
||||
# paypal
|
||||
##########################
|
||||
#
|
||||
# methode qui affiche successivement les
|
||||
# templates du popup pour recharger son compte impression
|
||||
# via paypal
|
||||
#
|
||||
def rechargerCompteImpression(self, etape = '1', combien = None):
|
||||
adh = cherrypy.session['LDAP'].search('uid=' + cherrypy.session['uid'])['adherent'][0]
|
||||
if (etape == "1"): # Introduction
|
||||
return {
|
||||
'template' :'MonCompteRechargePaypal1',
|
||||
'standalone' :True,
|
||||
'values' :{},
|
||||
}
|
||||
elif (etape == "2"): # choix montant
|
||||
return {
|
||||
'template' :'MonCompteRechargePaypal2',
|
||||
'standalone' :True,
|
||||
'values' :{},
|
||||
}
|
||||
elif (etape == "3"): # confirmer facture
|
||||
# creer objet facture
|
||||
f = Facture(adh)
|
||||
# /!\ verifier que combien est un nombre
|
||||
# et qu'il n'y a pas plus de 2 chiffres après le point...
|
||||
# (ce serait bien aussi si on pouvait mettre une virgue a la place du point)
|
||||
try:
|
||||
# remplacage des virgules
|
||||
combien = combien.replace(u',', u'.')
|
||||
# convertissage
|
||||
combien = float(combien)
|
||||
# arrondissage-tronquage :
|
||||
combien = float(int(combien*100)/100.0)
|
||||
# nombre positif
|
||||
if combien < 0:
|
||||
raise ValueError
|
||||
except Exception:
|
||||
return {
|
||||
'template' :'MonCompteRechargePaypal2',
|
||||
'standalone' :True,
|
||||
'values' :{'error':"Le montant doit être un nombre positif !", 'combien':combien},
|
||||
}
|
||||
f.ajoute({'nombre': 1, 'code': 'SOLDE', 'designation': 'Credit du compte impression (intranet)', 'pu': combien})
|
||||
cherrypy.session['freshFacture'] = f
|
||||
pageData = {}
|
||||
pageData['details'] = [
|
||||
{
|
||||
'intitule':art['designation'],
|
||||
'quantite':art['nombre'],
|
||||
'prixUnitaire':art['pu'],
|
||||
'prixTotal':art['pu']*art['nombre'],
|
||||
} for art in f.articles()]
|
||||
pageData['total'] = f.total()
|
||||
return {
|
||||
'template' :'MonCompteRechargePaypal3',
|
||||
'standalone' :True,
|
||||
'values' :pageData,
|
||||
}
|
||||
elif (etape == "4"):# payer maintenant ?
|
||||
# sauver objet facture
|
||||
f = cherrypy.session['freshFacture']
|
||||
f.save()
|
||||
return {
|
||||
'template' :'MonCompteRechargePaypal4',
|
||||
'standalone' :True,
|
||||
'values' :{'lienPaypal' : f.urlPaypal(useSandbox = cherrypy.config.get("paypal.useSandbox", False),
|
||||
businessMail = cherrypy.config.get("paypal.businessAdress", "paypal@crans.org"),
|
||||
return_page = "https://intranet.crans.org/monCompte/paypalReturn",
|
||||
cancel_return_page = "https://intranet.crans.org/monCompte/paypalCancel",
|
||||
)},
|
||||
}
|
||||
rechargerCompteImpression.exposed = True
|
||||
|
||||
def paypalReturn(self, **kw):
|
||||
_crans_cp.log("retour de paypal avec les infos : %s" % " ".join( [ "[%s: %s]" % (str(a), str(kw[a])) for a in kw] ) )
|
||||
return {
|
||||
'template' :'MonComptePaypalReturn',
|
||||
'standalone' :True,
|
||||
'values' :{},
|
||||
}
|
||||
paypalReturn.exposed = True
|
||||
|
||||
def paypalCancel(self, **kw):
|
||||
_crans_cp.log("annulation de paypal avec les infos : %s" % " ".join( [ "[%s: %s]" % (str(a), str(kw[a])) for a in kw] ) )
|
||||
return {
|
||||
'template' :'MonComptePaypalCancel',
|
||||
'standalone' :True,
|
||||
'values' :{},
|
||||
}
|
||||
paypalCancel.exposed = True
|
||||
|
||||
|
||||
|
||||
###########################################################################
|
||||
# methodes pour changer
|
||||
# des valeurs
|
||||
###########################################################################
|
||||
#
|
||||
# En fait, les methodes recoivent les valeurs d'un formulaire
|
||||
# (ou equivalent de javascript), font la modification puis
|
||||
# appellent la methode principale d'affichage
|
||||
# en lui passant eventuellement un message a afficher
|
||||
# (pour indiquer la reussite ou non de l'operation)
|
||||
#
|
||||
|
||||
##########################
|
||||
# Adherent:nom
|
||||
##########################
|
||||
def changeNomAdherent(self, nouveauNom):
|
||||
adh = cherrypy.session['LDAP'].search('uid=' + cherrypy.session['uid'], 'w')['adherent'][0]
|
||||
try:
|
||||
ancienNom = adh.nom()
|
||||
adh.nom(nouveauNom)
|
||||
adh.save()
|
||||
except ValueError, e:
|
||||
return self.index(error=e.args[0])
|
||||
del adh
|
||||
_crans_cp.log("Change nom : %s -> %s" % (ancienNom, nouveauNom), "MONCOMPTE")
|
||||
return self.index(message=u'Modification réussie')
|
||||
changeNomAdherent.exposed = True
|
||||
|
||||
##########################
|
||||
# Adherent:password
|
||||
##########################
|
||||
def changePasswordAdherent(self, ancienPassword, nouveauPassword1, nouveauPassword2):
|
||||
if ancienPassword=='':
|
||||
msg = 'Erreur, mot de passe incorrect'
|
||||
return self.index(error=msg)
|
||||
if nouveauPassword1=='':
|
||||
msg = 'Erreur, le nouveau mot de passe ne doit pas ètre vide.'
|
||||
return self.index(error=msg)
|
||||
if nouveauPassword1!=nouveauPassword2:
|
||||
msg = 'Erreur, la confirmation ne correspond pas au nouveau mot de passe.'
|
||||
return self.index(error=msg)
|
||||
|
||||
adh = cherrypy.session['LDAP'].search('uid=' + cherrypy.session['uid'],'w')['adherent'][0]
|
||||
if adh.checkPassword(ancienPassword):
|
||||
adh.changePasswd(nouveauPassword1)
|
||||
adh.save()
|
||||
msg = u'Changement effectué'
|
||||
else:
|
||||
msg = 'Erreur, mot de passe incorrect'
|
||||
return self.index(error=msg)
|
||||
del adh
|
||||
_crans_cp.log("Change password", "MONCOMPTE")
|
||||
return self.index(message=msg)
|
||||
changePasswordAdherent.exposed = True
|
||||
|
||||
|
||||
##########################
|
||||
# Adherent:prenom
|
||||
##########################
|
||||
def changePrenomAdherent(self, nouveauPrenom):
|
||||
adh = cherrypy.session['LDAP'].search('uid=' + cherrypy.session['uid'], 'w')['adherent'][0]
|
||||
try:
|
||||
ancienPrenom = adh.prenom()
|
||||
adh.prenom(nouveauPrenom)
|
||||
adh.save()
|
||||
except ValueError, e:
|
||||
return self.index(error=e.args[0])
|
||||
del adh
|
||||
_crans_cp.log("Change prenom : %s -> %s" % (ancienPrenom, nouveauPrenom), "MONCOMPTE")
|
||||
return self.index(message=u'Modification réussie')
|
||||
changePrenomAdherent.exposed = True
|
||||
|
||||
##########################
|
||||
# Adherent:tel
|
||||
##########################
|
||||
def changeTelAdherent(self, nouveauTel):
|
||||
adh = cherrypy.session['LDAP'].search('uid=' + cherrypy.session['uid'], 'w')['adherent'][0]
|
||||
try:
|
||||
ancienTel = adh.tel()
|
||||
adh.tel(nouveauTel)
|
||||
adh.save()
|
||||
except ValueError, e:
|
||||
return self.index(error=e.args[0])
|
||||
del adh
|
||||
_crans_cp.log("Change tel : %s -> %s" % (ancienTel, nouveauTel), "MONCOMPTE")
|
||||
return self.index(message=u'Modification réussie')
|
||||
changeTelAdherent.exposed = True
|
||||
|
||||
##########################
|
||||
# mail:alias:creation
|
||||
##########################
|
||||
def newAlias(self, alias):
|
||||
adh = cherrypy.session['LDAP'].search('uid=' + cherrypy.session['uid'],'w')['adherent'][0]
|
||||
if adh.alias().__len__() >= 3 and adh.droits() == []:
|
||||
return self.index(error=u"Vous avez plus de 2 alias. Demander a un cableur pour en rajouter.")
|
||||
try:
|
||||
adh.alias(alias)
|
||||
adh.save()
|
||||
del adh
|
||||
except ValueError, e:
|
||||
return self.index(error=e.args[0])
|
||||
except RuntimeError:
|
||||
return self.index(error=u"Vous possèdez déjà  cet alias")
|
||||
except EnvironmentError:
|
||||
return self.index(error=u"Vous possèdez déjà  cet alias")
|
||||
_crans_cp.log("Nouvel alias : %s" % alias, "MONCOMPTE")
|
||||
return self.index(message=u'Alias enregistré')
|
||||
newAlias.exposed = True
|
||||
|
||||
|
||||
##########################
|
||||
# mail:sauver
|
||||
##########################
|
||||
def saveMailPrefs(self, forwarding_address=None, spanTreatment=None, contourneGreylist=False, rewriteMailHeaders=False):
|
||||
if spanTreatment == 'no':
|
||||
spanTreatment = 'accepte'
|
||||
if spanTreatment == 'mark':
|
||||
spanTreatment = 'marque'
|
||||
if spanTreatment == 'drop':
|
||||
spanTreatment = 'supprime'
|
||||
|
||||
if contourneGreylist == 'oui':
|
||||
contourneGreylist = True
|
||||
if rewriteMailHeaders == 'oui':
|
||||
rewriteMailHeaders = True
|
||||
|
||||
try:
|
||||
adh = cherrypy.session['LDAP'].search('uid=' + cherrypy.session['uid'],'w')['adherent'][0]
|
||||
if forwarding_address!=None:
|
||||
MailConfig(cherrypy.session['uid'], forward=forwarding_address, spam=spanTreatment)
|
||||
adh.contourneGreylist(contourneGreylist)
|
||||
adh.rewriteMailHeaders(rewriteMailHeaders)
|
||||
adh.save()
|
||||
del adh
|
||||
except ValueError, e:
|
||||
return self.index(error=e.args[0])
|
||||
except Exception, e:
|
||||
return self.index(error=u"Une erreur est survenue lors de lenregistrement. Vérifiez que l'adresse mail fournie est correcte.")
|
||||
_crans_cp.log("Change mail prefs", "MONCOMPTE ACTION")
|
||||
return self.index(message=u'Vos préférences ont été enregistrées')
|
||||
saveMailPrefs.exposed = True
|
||||
|
259
intranet/modules/monCompte/static/crans_domtab.js
Normal file
259
intranet/modules/monCompte/static/crans_domtab.js
Normal file
|
@ -0,0 +1,259 @@
|
|||
/*
|
||||
DOMtab Version 3.1415927
|
||||
Updated March the First 2006
|
||||
written by Christian Heilmann
|
||||
check blog for updates: http://www.wait-till-i.com
|
||||
free to use, not free to resell
|
||||
*/
|
||||
|
||||
domtab={
|
||||
tabClass:'domtab', // class to trigger tabbing
|
||||
listClass:'domtabs', // class of the menus
|
||||
activeClass:'active', // class of current link
|
||||
contentElements:'div', // elements to loop through
|
||||
backToLinks:/#top/, // pattern to check "back to top" links
|
||||
printID:'domtabprintview', // id of the print all link
|
||||
showAllLinkText:'show all content', // text for the print all link
|
||||
prevNextIndicator:'doprevnext', // class to trigger prev and next links
|
||||
prevNextClass:'prevnext', // class of the prev and next list
|
||||
prevLabel:'previous', // HTML content of the prev link
|
||||
nextLabel:'next', // HTML content of the next link
|
||||
prevClass:'prev', // class for the prev link
|
||||
nextClass:'next', // class for the next link
|
||||
init:function(){
|
||||
var temp;
|
||||
if(!document.getElementById || !document.createTextNode){return;}
|
||||
var tempelm=document.getElementsByTagName('div');
|
||||
for(var i=0;i<tempelm.length;i++){
|
||||
if(!domtab.cssjs('check',tempelm[i],domtab.tabClass)){continue;}
|
||||
domtab.initTabMenu(tempelm[i]);
|
||||
domtab.removeBackLinks(tempelm[i]);
|
||||
if(domtab.cssjs('check',tempelm[i],domtab.prevNextIndicator)){
|
||||
domtab.addPrevNext(tempelm[i]);
|
||||
}
|
||||
domtab.checkURL();
|
||||
}
|
||||
if(document.getElementById(domtab.printID)
|
||||
&& !document.getElementById(domtab.printID).getElementsByTagName('a')[0]){
|
||||
var newlink=document.createElement('a');
|
||||
newlink.setAttribute('href','#');
|
||||
domtab.addEvent(newlink,'click',domtab.showAll,false);
|
||||
newlink.onclick=function(){return false;} // safari hack
|
||||
newlink.appendChild(document.createTextNode(domtab.showAllLinkText));
|
||||
document.getElementById(domtab.printID).appendChild(newlink);
|
||||
}
|
||||
},
|
||||
checkURL:function(){
|
||||
var id;
|
||||
var loc=window.location.toString();
|
||||
loc=/#/.test(loc)?loc.match(/#(\w.+)/)[1]:'';
|
||||
if(loc==''){return;}
|
||||
var elm=document.getElementById(loc);
|
||||
if(!elm){return;}
|
||||
var parentMenu=elm.parentNode.parentNode.parentNode;
|
||||
parentMenu.currentSection=loc;
|
||||
parentMenu.getElementsByTagName(domtab.contentElements)[0].style.display='none';
|
||||
domtab.cssjs('remove',parentMenu.getElementsByTagName('a')[0].parentNode,domtab.activeClass);
|
||||
var links=parentMenu.getElementsByTagName('a');
|
||||
for(i=0;i<links.length;i++){
|
||||
if(!links[i].getAttribute('href')){continue;}
|
||||
if(!/#/.test(links[i].getAttribute('href').toString())){continue;}
|
||||
id=links[i].href.match(/#(\w.+)/)[1];
|
||||
if(id==loc){
|
||||
var cur=links[i].parentNode.parentNode;
|
||||
domtab.cssjs('add',links[i].parentNode,domtab.activeClass);
|
||||
break;
|
||||
}
|
||||
}
|
||||
domtab.changeTab(elm,1);
|
||||
elm.focus();
|
||||
cur.currentLink=links[i];
|
||||
cur.currentSection=loc;
|
||||
},
|
||||
showAll:function(e){
|
||||
document.getElementById(domtab.printID).parentNode.removeChild(document.getElementById(domtab.printID));
|
||||
var tempelm=document.getElementsByTagName('div');
|
||||
for(var i=0;i<tempelm.length;i++){
|
||||
if(!domtab.cssjs('check',tempelm[i],domtab.tabClass)){continue;}
|
||||
var sec=tempelm[i].getElementsByTagName(domtab.contentElements);
|
||||
for(var j=0;j<sec.length;j++){
|
||||
sec[j].style.display='block';
|
||||
}
|
||||
}
|
||||
var tempelm=document.getElementsByTagName('ul');
|
||||
for(i=0;i<tempelm.length;i++){
|
||||
if(!domtab.cssjs('check',tempelm[i],domtab.prevNextClass)){continue;}
|
||||
tempelm[i].parentNode.removeChild(tempelm[i]);
|
||||
i--;
|
||||
}
|
||||
domtab.cancelClick(e);
|
||||
},
|
||||
addPrevNext:function(menu){
|
||||
var temp;
|
||||
var sections=menu.getElementsByTagName(domtab.contentElements);
|
||||
for(var i=0;i<sections.length;i++){
|
||||
temp=domtab.createPrevNext();
|
||||
if(i==0){
|
||||
temp.removeChild(temp.getElementsByTagName('li')[0]);
|
||||
}
|
||||
if(i==sections.length-1){
|
||||
temp.removeChild(temp.getElementsByTagName('li')[1]);
|
||||
}
|
||||
temp.i=i; // h4xx0r!
|
||||
temp.menu=menu;
|
||||
sections[i].appendChild(temp);
|
||||
}
|
||||
},
|
||||
removeBackLinks:function(menu){
|
||||
var links=menu.getElementsByTagName('a');
|
||||
for(var i=0;i<links.length;i++){
|
||||
if(!domtab.backToLinks.test(links[i].href)){continue;}
|
||||
links[i].parentNode.removeChild(links[i]);
|
||||
i--;
|
||||
}
|
||||
},
|
||||
initTabMenu:function(menu){
|
||||
var id;
|
||||
var lists=menu.getElementsByTagName('ul');
|
||||
for(var i=0;i<lists.length;i++){
|
||||
if(domtab.cssjs('check',lists[i],domtab.listClass)){
|
||||
var thismenu=lists[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!thismenu){return;}
|
||||
thismenu.currentSection='';
|
||||
thismenu.currentLink='';
|
||||
var links=thismenu.getElementsByTagName('a');
|
||||
for(i=0;i<links.length;i++){
|
||||
if(!/#/.test(links[i].getAttribute('href').toString())){continue;}
|
||||
id=links[i].href.match(/#(\w.+)/)[1];
|
||||
if(document.getElementById(id)){
|
||||
domtab.addEvent(links[i],'click',domtab.showTab,false);
|
||||
links[i].onclick=function(){return false;} // safari hack
|
||||
domtab.changeTab(document.getElementById(id),0);
|
||||
}
|
||||
}
|
||||
id=links[0].href.match(/#(\w.+)/)[1];
|
||||
if(document.getElementById(id)){
|
||||
domtab.changeTab(document.getElementById(id),1);
|
||||
thismenu.currentSection=id;
|
||||
thismenu.currentLink=links[0];
|
||||
domtab.cssjs('add',links[0].parentNode,domtab.activeClass);
|
||||
}
|
||||
},
|
||||
createPrevNext:function(){
|
||||
// this would be so much easier with innerHTML, darn you standards fetish!
|
||||
var temp=document.createElement('ul');
|
||||
temp.className=domtab.prevNextClass;
|
||||
temp.appendChild(document.createElement('li'));
|
||||
temp.getElementsByTagName('li')[0].appendChild(document.createElement('a'));
|
||||
temp.getElementsByTagName('a')[0].setAttribute('href','#');
|
||||
temp.getElementsByTagName('a')[0].innerHTML=domtab.prevLabel;
|
||||
temp.getElementsByTagName('li')[0].className=domtab.prevClass;
|
||||
temp.appendChild(document.createElement('li'));
|
||||
temp.getElementsByTagName('li')[1].appendChild(document.createElement('a'));
|
||||
temp.getElementsByTagName('a')[1].setAttribute('href','#');
|
||||
temp.getElementsByTagName('a')[1].innerHTML=domtab.nextLabel;
|
||||
temp.getElementsByTagName('li')[1].className=domtab.nextClass;
|
||||
domtab.addEvent(temp.getElementsByTagName('a')[0],'click',domtab.navTabs,false);
|
||||
domtab.addEvent(temp.getElementsByTagName('a')[1],'click',domtab.navTabs,false);
|
||||
// safari fix
|
||||
temp.getElementsByTagName('a')[0].onclick=function(){return false;}
|
||||
temp.getElementsByTagName('a')[1].onclick=function(){return false;}
|
||||
return temp;
|
||||
},
|
||||
navTabs:function(e){
|
||||
var li=domtab.getTarget(e);
|
||||
var menu=li.parentNode.parentNode.menu;
|
||||
var count=li.parentNode.parentNode.i;
|
||||
var section=menu.getElementsByTagName(domtab.contentElements);
|
||||
var links=menu.getElementsByTagName('a');
|
||||
var othercount=(li.parentNode.className==domtab.prevClass)?count-1:count+1;
|
||||
section[count].style.display='none';
|
||||
domtab.cssjs('remove',links[count].parentNode,domtab.activeClass);
|
||||
section[othercount].style.display='block';
|
||||
domtab.cssjs('add',links[othercount].parentNode,domtab.activeClass);
|
||||
var parent=links[count].parentNode.parentNode;
|
||||
parent.currentLink=links[othercount];
|
||||
parent.currentSection=links[othercount].href.match(/#(\w.+)/)[1];
|
||||
domtab.cancelClick(e);
|
||||
},
|
||||
changeTab:function(elm,state){
|
||||
do{
|
||||
elm=elm.parentNode;
|
||||
} while(elm.nodeName.toLowerCase()!=domtab.contentElements)
|
||||
elm.style.display=state==0?'none':'block';
|
||||
},
|
||||
showTab:function(e){
|
||||
var o=domtab.getTarget(e);
|
||||
if(o.parentNode.parentNode.currentSection!=''){
|
||||
domtab.changeTab(document.getElementById(o.parentNode.parentNode.currentSection),0);
|
||||
domtab.cssjs('remove',o.parentNode.parentNode.currentLink.parentNode,domtab.activeClass);
|
||||
}
|
||||
var id=o.href.match(/#(\w.+)/)[1];
|
||||
o.parentNode.parentNode.currentSection=id;
|
||||
o.parentNode.parentNode.currentLink=o;
|
||||
domtab.cssjs('add',o.parentNode,domtab.activeClass);
|
||||
domtab.changeTab(document.getElementById(id),1);
|
||||
document.getElementById(id).focus();
|
||||
domtab.cancelClick(e);
|
||||
},
|
||||
/* helper methods */
|
||||
getTarget:function(e){
|
||||
var target = window.event ? window.event.srcElement : e ? e.target : null;
|
||||
if (!target){return false;}
|
||||
if (target.nodeName.toLowerCase() != 'a'){target = target.parentNode;}
|
||||
return target;
|
||||
},
|
||||
cancelClick:function(e){
|
||||
if (window.event){
|
||||
window.event.cancelBubble = true;
|
||||
window.event.returnValue = false;
|
||||
return;
|
||||
}
|
||||
if (e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
}
|
||||
},
|
||||
addEvent: function(elm, evType, fn, useCapture){
|
||||
if (elm.addEventListener)
|
||||
{
|
||||
elm.addEventListener(evType, fn, useCapture);
|
||||
return true;
|
||||
} else if (elm.attachEvent) {
|
||||
var r = elm.attachEvent('on' + evType, fn);
|
||||
return r;
|
||||
} else {
|
||||
elm['on' + evType] = fn;
|
||||
}
|
||||
},
|
||||
cssjs:function(a,o,c1,c2){
|
||||
switch (a){
|
||||
case 'swap':
|
||||
o.className=!domtab.cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
|
||||
break;
|
||||
case 'add':
|
||||
if(!domtab.cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;}
|
||||
break;
|
||||
case 'remove':
|
||||
var rep=o.className.match(' '+c1)?' '+c1:c1;
|
||||
o.className=o.className.replace(rep,'');
|
||||
break;
|
||||
case 'check':
|
||||
var found=false;
|
||||
var temparray=o.className.split(' ');
|
||||
for(var i=0;i<temparray.length;i++){
|
||||
if(temparray[i]==c1){found=true;}
|
||||
}
|
||||
return found;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
domtab.addEvent(window, 'load', domtab.init, false);
|
||||
|
||||
document.write('<style type="text/css">');
|
||||
document.write('div.domtab>div{display:none;}<');
|
||||
document.write('/s'+'tyle>');
|
BIN
intranet/modules/monCompte/static/icon.png
Normal file
BIN
intranet/modules/monCompte/static/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4 KiB |
368
intranet/modules/monCompte/static/monCompte.css
Normal file
368
intranet/modules/monCompte/static/monCompte.css
Normal file
|
@ -0,0 +1,368 @@
|
|||
/********************************************
|
||||
* <!-- disposition générale -->
|
||||
********************************************/
|
||||
#globalDiv {
|
||||
padding-left:100px;
|
||||
}
|
||||
|
||||
/* style du titre au dessus des onglet et des titres pour les pages PayPal */
|
||||
div.domtab>h1,
|
||||
h2 {
|
||||
font-size:1.4em;
|
||||
margin:2px;
|
||||
}
|
||||
|
||||
|
||||
/********************************************
|
||||
* <!-- onglets -->
|
||||
********************************************/
|
||||
/* conteneur de l'ensemble */
|
||||
div.domtab{
|
||||
padding:3px;
|
||||
width:100%;
|
||||
background:#fad163;
|
||||
clear:left;
|
||||
}
|
||||
|
||||
/* onglets */
|
||||
ul.domtabs{
|
||||
float:left;
|
||||
width:100%;
|
||||
margin:0;
|
||||
padding:0;
|
||||
list-style-type:none;
|
||||
|
||||
}
|
||||
ul.domtabs li{
|
||||
float:left;
|
||||
}
|
||||
ul.domtabs a:link,
|
||||
ul.domtabs a:visited,
|
||||
ul.domtabs a:active,
|
||||
ul.domtabs a:hover{
|
||||
font-weight:bold;
|
||||
display:block;
|
||||
padding:0.4em;
|
||||
text-align:center;
|
||||
background:#fad163;
|
||||
}
|
||||
|
||||
ul.domtabs li.active a:link,
|
||||
ul.domtabs li.active a:visited,
|
||||
ul.domtabs li.active a:active,
|
||||
ul.domtabs li.active a:hover{
|
||||
background:#fff7D7;
|
||||
color:#000;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
/* les pages */
|
||||
div.domtab>div {
|
||||
padding:0;
|
||||
clear:both;
|
||||
border:5px solid #fff7D7;
|
||||
}
|
||||
/* ancre des pages */
|
||||
.mark {
|
||||
height:0;
|
||||
clear:both;
|
||||
display:none;
|
||||
}
|
||||
|
||||
/********************************************
|
||||
* <!-- division des pages -->
|
||||
********************************************/
|
||||
.tabbed_page {
|
||||
padding:0;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
ul.tabbed_page {
|
||||
list-style-type:none;
|
||||
}
|
||||
|
||||
dl.tabbed_page>dt,
|
||||
dl.tabbed_page>dd,
|
||||
ul.tabbed_page>li {
|
||||
background:#fff7D7;
|
||||
padding:10px;
|
||||
margin:0 0 2px 0;
|
||||
font-weight:bold;
|
||||
}
|
||||
dl.tabbed_page>dt.last,
|
||||
dl.tabbed_page>dd.last,
|
||||
ul.tabbed_page>li.last {
|
||||
margin:0 0 0 0;
|
||||
}
|
||||
|
||||
dl.tabbed_page>dt {
|
||||
width:40%;
|
||||
display:block;
|
||||
height:100%;
|
||||
float:left;
|
||||
clear:left;
|
||||
}
|
||||
|
||||
dl.tabbed_page>dd {
|
||||
padding-left:45%;
|
||||
}
|
||||
|
||||
span.actions {
|
||||
display:block;
|
||||
float:right;
|
||||
font-size:0.9em;
|
||||
font-weight:normal;
|
||||
}
|
||||
.tabbed_page span.actions a {
|
||||
margin:2px 10px;
|
||||
}
|
||||
|
||||
|
||||
.tabbed_page dl,
|
||||
.tabbed_page dl dt,
|
||||
.tabbed_page dl dd {
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
.tabbed_page dl dt {
|
||||
float:left;
|
||||
margin-right:5px;
|
||||
}
|
||||
|
||||
.tabbed_page dl dd,
|
||||
.tabbed_page p {
|
||||
font-weight:normal;
|
||||
margin:3px;
|
||||
}
|
||||
|
||||
|
||||
span.valide {
|
||||
color:green;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
span.invalide {
|
||||
color:red;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear:both;
|
||||
}
|
||||
|
||||
ul.tabbed_page li.centrer {
|
||||
padding:10px;
|
||||
margin-left:0;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
|
||||
/********************************************
|
||||
* <!-- formulaires -->
|
||||
********************************************/
|
||||
|
||||
.textInputNote {
|
||||
display:block;
|
||||
padding-left:0;
|
||||
font-size:0.8em;
|
||||
font-weight:normal;
|
||||
}
|
||||
|
||||
dd .textInputNote {
|
||||
padding-left:0;
|
||||
}
|
||||
li .textInputNote {
|
||||
padding-left:175px;
|
||||
}
|
||||
|
||||
label.textInputLabel{
|
||||
width:175px;
|
||||
display:block;
|
||||
float:left;
|
||||
}
|
||||
|
||||
label.checkBoxLabel{
|
||||
float:none;
|
||||
padding-left:175px;
|
||||
}
|
||||
|
||||
/********************************************
|
||||
* <!-- liste machines -->
|
||||
********************************************/
|
||||
dl#machineList,
|
||||
dl#machineList>dt {
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
#machineList>dt {
|
||||
|
||||
font-size:1.2em;
|
||||
font-weight:bold;
|
||||
margin:5px 5px 5px 5px;
|
||||
height:30px;
|
||||
padding:10px 20px;
|
||||
background:#fff7D7;
|
||||
}
|
||||
#machineList>dd {
|
||||
margin:0 0 2px 0;
|
||||
}
|
||||
.linkToggle {
|
||||
display:block;
|
||||
float:left;
|
||||
height:15px;
|
||||
width:15px;
|
||||
background:transparent url(../images/fl.png) top left;
|
||||
margin-right:1px;
|
||||
}
|
||||
/********************************************
|
||||
* <!-- infos machines -->
|
||||
********************************************/
|
||||
.machineDetails {
|
||||
background: #fff7D7;/*/ url(../images/fondFacturesDetails.png) repeat-x top;*/
|
||||
padding:0;
|
||||
/*width:96%;*/
|
||||
display:none;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
dl.machineInfos dt, dl.machineInfos dd {
|
||||
float:left;
|
||||
margin-top:0;
|
||||
padding:.1em;
|
||||
display:block;
|
||||
width:20%;
|
||||
}
|
||||
|
||||
dl.machineInfos dt {
|
||||
text-align:right;
|
||||
width:20%;
|
||||
|
||||
}
|
||||
/********************************************
|
||||
* <!-- liste alias -->
|
||||
********************************************/
|
||||
ul.listeAlias {
|
||||
list-style-type:none;
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
ul.listeAlias li span {
|
||||
color:#666;
|
||||
}
|
||||
|
||||
|
||||
/********************************************
|
||||
* <!-- messages -->
|
||||
********************************************/
|
||||
#loadings {
|
||||
background:#cc0000;
|
||||
position:fixed;
|
||||
top:1px;
|
||||
right:1px;
|
||||
z-index:1000;
|
||||
display:none;
|
||||
padding:2px 3px;
|
||||
color:white;
|
||||
}
|
||||
|
||||
.messageText {
|
||||
padding:2px 10px;
|
||||
display:block;
|
||||
}
|
||||
#messagePlaceHolder {
|
||||
height:0;
|
||||
overflow:visible;
|
||||
position:relative;
|
||||
top:-4em;
|
||||
}
|
||||
|
||||
.message {
|
||||
padding:0;
|
||||
background:#fad163;
|
||||
width:300px;
|
||||
text-align:center;
|
||||
margin : 1px auto 10px auto;
|
||||
}
|
||||
.errorMessage {
|
||||
display:block;
|
||||
background:white;
|
||||
border:2px #cc0000 solid;
|
||||
padding:5px;
|
||||
text-align:center;
|
||||
min-width:230px;
|
||||
max-width:430px;
|
||||
font-weight:bold;
|
||||
margin : 1px auto 10px auto;
|
||||
}
|
||||
|
||||
/********************************************
|
||||
* <!-- popup PayPal -->
|
||||
********************************************/
|
||||
div#popupInnerBody {
|
||||
border:5px solid #fad163;
|
||||
background: #fff7D7;
|
||||
margin:5px;
|
||||
padding:5px;
|
||||
}
|
||||
|
||||
div#popupInnerBody .liens {
|
||||
list-style-type:none;
|
||||
float:right;
|
||||
height:1em;
|
||||
background: #fff7D7;
|
||||
border-color:#fad163;
|
||||
border-style: none solid solid solid;
|
||||
border-width:3px;
|
||||
margin:0;
|
||||
padding:2px;
|
||||
}
|
||||
|
||||
div#popupInnerBody .liens a {
|
||||
display:block;
|
||||
height:1em;
|
||||
float : left;
|
||||
margin:0 5px;
|
||||
}
|
||||
|
||||
a { color:blue; }
|
||||
|
||||
/********************************************
|
||||
* <!-- factures - details -->
|
||||
********************************************/
|
||||
|
||||
table.factureDetails {
|
||||
padding:1%;
|
||||
width:96%;
|
||||
margin:0 1% 10px 1%;
|
||||
}
|
||||
|
||||
|
||||
.tdTotalDetail,
|
||||
.tdTotalDetailIntitule {
|
||||
border-top:thin black solid;
|
||||
}
|
||||
|
||||
.tdTotalDetailIntitule {
|
||||
text-align:right;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
table.factureDetails th {
|
||||
border-bottom:thin black solid;
|
||||
}
|
||||
table.factureDetails th,
|
||||
table.factureDetails td {
|
||||
border-right:thin black solid;
|
||||
margin:0;
|
||||
padding:5px 20px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/********************************************
|
||||
* divers
|
||||
********************************************/
|
||||
.empty {
|
||||
color:gray;
|
||||
}
|
41
intranet/modules/monCompte/static/moncompte.js
Normal file
41
intranet/modules/monCompte/static/moncompte.js
Normal file
|
@ -0,0 +1,41 @@
|
|||
function askForName(oldName) {
|
||||
var c = '';
|
||||
while ( c == '')
|
||||
c = prompt("Votre nom :",oldName);
|
||||
if (c == null)
|
||||
return false;
|
||||
else
|
||||
window.location.href= 'changeNomAdherent?nouveauNom=' + c;
|
||||
}
|
||||
|
||||
|
||||
function askForSurname(oldSurname) {
|
||||
var c = '';
|
||||
while ( c == '')
|
||||
c = prompt("Votre prénom :",oldSurname);
|
||||
if (c == null)
|
||||
return false;
|
||||
else
|
||||
window.location.href= 'changePrenomAdherent?nouveauPrenom=' + c;
|
||||
}
|
||||
|
||||
function askForTel(oldTel) {
|
||||
var c = '';
|
||||
while ( c == '')
|
||||
c = prompt("Votre numéro de téléphone :",oldTel);
|
||||
if (c == null)
|
||||
return false;
|
||||
else
|
||||
window.location.href= 'changeTelAdherent?nouveauTel=' + c;
|
||||
}
|
||||
|
||||
|
||||
function newAlias() {
|
||||
var c = '';
|
||||
while ( c == '')
|
||||
c = prompt("Nouvel alias :");
|
||||
if (c == null)
|
||||
return false;
|
||||
else
|
||||
window.location.href= 'newAlias?alias=' + c + "#mailTab";
|
||||
}
|
66
intranet/modules/monCompte/static/passwordGenerator.js
Normal file
66
intranet/modules/monCompte/static/passwordGenerator.js
Normal file
|
@ -0,0 +1,66 @@
|
|||
/************************************************************************
|
||||
Password generator
|
||||
************************************************************************/
|
||||
|
||||
function GeneratePassword() {
|
||||
|
||||
if (parseInt(navigator.appVersion) <= 3) {
|
||||
alert("Sorry this only works in 4.0 browsers");
|
||||
return false;
|
||||
}
|
||||
|
||||
var length=8;
|
||||
var sPassword = "";
|
||||
length = 10;//document.aForm.charLen.options[document.aForm.charLen.selectedIndex].value;
|
||||
|
||||
var noPunction = false;//(document.aForm.punc.checked);
|
||||
var randomLength = true;//(document.aForm.rLen.checked);
|
||||
|
||||
if (randomLength) {
|
||||
length = Math.random();
|
||||
|
||||
length = parseInt(length * 100);
|
||||
length = (length % 7) + 6
|
||||
}
|
||||
|
||||
|
||||
for (i=0; i < length; i++) {
|
||||
|
||||
numI = getRandomNum();
|
||||
if (noPunction) { while (checkPunc(numI)) { numI = getRandomNum(); } }
|
||||
|
||||
sPassword = sPassword + String.fromCharCode(numI);
|
||||
}
|
||||
|
||||
//document.aForm.passField.value = sPassword
|
||||
c = prompt('Mot de passe généré : ', sPassword)
|
||||
if (c!= null) {
|
||||
document.changePasswordForm.nouveauPassword1.value = c
|
||||
document.changePasswordForm.nouveauPassword2.value = c
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function getRandomNum() {
|
||||
|
||||
// between 0 - 1
|
||||
var rndNum = Math.random()
|
||||
|
||||
// rndNum from 0 - 1000
|
||||
rndNum = parseInt(rndNum * 1000);
|
||||
|
||||
// rndNum from 33 - 127
|
||||
rndNum = (rndNum % 94) + 33;
|
||||
|
||||
return rndNum;
|
||||
}
|
||||
|
||||
function checkPunc(num) {
|
||||
|
||||
if ((num >=33) && (num <=47)) { return true; }
|
||||
if ((num >=58) && (num <=64)) { return true; }
|
||||
if ((num >=91) && (num <=96)) { return true; }
|
||||
if ((num >=123) && (num <=126)) { return true; }
|
||||
|
||||
return false;
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
#import cherrypy
|
||||
#set bugMail = cherrypy.config.get("mail.bugreport", "nounous@crans.org")
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
|
||||
<head>
|
||||
#include "inc-paypal-head.tmpl"
|
||||
</head>
|
||||
<body>
|
||||
<div id="popupInnerBody">
|
||||
<h2>Paiement annulé</h2>
|
||||
<p>Ton compte impressions sera crédité dés que la facture sera réglée.</p>
|
||||
<p>Tu peux régler la facture plus tard en allant dans <a href="/sous/">Mes Factures</a></p>
|
||||
<p>En cas de problème, envoie un mail à <a href="mailto:$bugMail">$bugMail</a></p>
|
||||
<div class="liens">
|
||||
<a href="./">Retour</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</body></html>
|
|
@ -0,0 +1,21 @@
|
|||
#import cherrypy
|
||||
#set bugMail = cherrypy.config.get("mail.bugreport", "nounous@crans.org")
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
|
||||
<head>
|
||||
#include "inc-paypal-head.tmpl"
|
||||
</head>
|
||||
<body>
|
||||
<div id="popupInnerBody">
|
||||
<h2>Paiement terminé</h2>
|
||||
<p>Ton compte impressions sera crédité dans quelques minutes.</p>
|
||||
<p>N'hésite pas à nous envoyer tes remarques et/ou suggestions à <a href="mailto:$bugMail">$bugMail</a></p>
|
||||
<div class="liens">
|
||||
<a href="./">Retour</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</body></html>
|
|
@ -0,0 +1,20 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
|
||||
<head>
|
||||
#include "inc-paypal-head.tmpl"
|
||||
</head>
|
||||
<body>
|
||||
<div id="popupInnerBody">
|
||||
<h2>Recharger son compte impression</h2>
|
||||
<p> Le cr@ns te permet de recharger ton compte pour les impressions via PayPal ou en allant voir un câbleur.</p>
|
||||
<p>La méthode PayPal est plus rapide mais PayPal facture des frais de transaction.</p>
|
||||
<div class="liens">
|
||||
<a href="./">Annuler</a>
|
||||
<a href="?etape=2">Continuer avec Paypal</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</body></html>
|
|
@ -0,0 +1,33 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
|
||||
<head>
|
||||
#include "inc-paypal-head.tmpl"
|
||||
</head>
|
||||
<body>
|
||||
<div id="popupInnerBody">
|
||||
<h2>Étape 1 : Choisir le montant</h2>
|
||||
#if $getVar('error',False)
|
||||
<div class="errorMessage">$error</div>
|
||||
#end if
|
||||
<form method="post" action="rechargerCompteImpression" name="FormCombien">
|
||||
<input type="hidden" name="etape" value="3" />
|
||||
<label for="combien">Combien souhaites-tu mettre sur ton compte impression ?<br />
|
||||
<input type="text" name="combien" value="$getVar('combien','')" /> €
|
||||
</label>
|
||||
<p></p><!-- ici, calcul des frais de transaction -->
|
||||
<div class="liens" id="liens">
|
||||
<a href="./">Annuler</a>
|
||||
<script type="text/JavaScript">
|
||||
<!--
|
||||
appendChildNodes("liens", A({'href':'#','onclick':"javascript:window.document.FormCombien.submit(); return false;"}, "Continuer"));
|
||||
//-->
|
||||
</script>
|
||||
<noscript>
|
||||
<input type="submit" value="Continuer"/>
|
||||
</noscript>
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</body></html>
|
|
@ -0,0 +1,35 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
|
||||
<head>
|
||||
#include "inc-paypal-head.tmpl"
|
||||
</head><body>
|
||||
<div id="popupInnerBody">
|
||||
<h2>Étape 2 : Confirmer la facture</h2>
|
||||
<table cellspacing="0" border="0" class="factureDetails">
|
||||
<tr>
|
||||
<th width="80%">Description</th>
|
||||
<th>Prix unitaire</th>
|
||||
<th>Quantité</th>
|
||||
<th>total</th>
|
||||
</tr>
|
||||
#for unDetail in $details
|
||||
<tr>
|
||||
<td>$unDetail.intitule</td>
|
||||
<td>$unDetail.prixUnitaire €</td>
|
||||
<td>$unDetail.quantite</td>
|
||||
<td>$unDetail.prixTotal €</td>
|
||||
</tr>
|
||||
#end for
|
||||
<tr>
|
||||
<td colspan="3" class="tdTotalDetailIntitule">
|
||||
Total
|
||||
</td>
|
||||
<td class="tdTotalDetail">$total €</td>
|
||||
</table>
|
||||
<div class="liens">
|
||||
<a href="?etape=2">Précédent</a>
|
||||
<a href="./">Annuler</a>
|
||||
<a href="?etape=4">Confirmer</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body></html>
|
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
|
||||
<head>
|
||||
#include "inc-paypal-head.tmpl"
|
||||
</head><body>
|
||||
<div id="popupInnerBody">
|
||||
<h2>Étape 3 : Fin</h2>
|
||||
<p>Ton compte impressions sera crédité dés que la facture sera réglée.</p>
|
||||
<p>Tu peux régler la facture plus tard en allant dans <a href="/factures/">Mes Factures</a></p>
|
||||
<div class="liens">
|
||||
<a href="./">Payer plus tard</a>
|
||||
<a href="$lienPaypal">Payer tout de suite</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body></html>
|
11
intranet/modules/monCompte/templates/inc-paypal-head.tmpl
Normal file
11
intranet/modules/monCompte/templates/inc-paypal-head.tmpl
Normal file
|
@ -0,0 +1,11 @@
|
|||
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||
<title>Cr@nsIntranet</title>
|
||||
|
||||
<!-- ++++++++++++++++++++++++++ stylesheets +++++++++++++++++++++++++++ -->
|
||||
<link rel="stylesheet" type="text/css" href="$static('monCompte.css')" />
|
||||
|
||||
<!-- ++++++++++++++++++++++++++++ scripts +++++++++++++++++++++++++++++ -->
|
||||
<script src="/static/MochiKit/MochiKit.js" type="text/javascript"></script>
|
||||
<script src="/static/MochiKit/New.js" type="text/javascript"></script>
|
||||
|
211
intranet/modules/monCompte/templates/monCompte.tmpl
Normal file
211
intranet/modules/monCompte/templates/monCompte.tmpl
Normal file
|
@ -0,0 +1,211 @@
|
|||
#if $message != ''
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
Crans.messages.setMessage('$message.replace("\'","\\\'")')
|
||||
//-->
|
||||
</script>
|
||||
#end if
|
||||
|
||||
#if $error != ''
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
Crans.messages.setMessage('$error.replace("\'","\\\'")', 'errorMessage')
|
||||
//-->
|
||||
</script>
|
||||
#end if
|
||||
|
||||
<div id="globalDiv">
|
||||
<div id="paramCompte" class="domtab">
|
||||
<h1>Paramètres de mon compte</h1>
|
||||
<ul class="domtabs">
|
||||
<li><a href="#mainTab">Général</a></li>
|
||||
<li><a href="#mailTab">Mails</a></li>
|
||||
</ul>
|
||||
<!-- +++++++++++++++++++ Infos Utilisateur +++++++++++++++++++ -->
|
||||
<div>
|
||||
<h2 class="mark"><a name="mainTab" id="mainTab"></a></h2>
|
||||
<dl class="tabbed_page">
|
||||
<dt>Nom :</dt>
|
||||
<dd>$adherent.nom
|
||||
<span class="actions"><a href="#" onclick="return askForName('$adherent.nom')">modifier</a></span>
|
||||
<div class="clear"></div>
|
||||
</dd>
|
||||
<dt>Prénom :</dt>
|
||||
<dd>$adherent.prenom
|
||||
<span class="actions"><a href="#" onclick="return askForSurname('$adherent.prenom')">modifier</a></span>
|
||||
<div class="clear"></div>
|
||||
</dd>
|
||||
#if $getVar('adherent.adresse', False)
|
||||
<dt>Adresse :</dt>
|
||||
<dd>
|
||||
$adherent.adresse.ligne1 <br />
|
||||
#if $adherent.adresse.ligne2 != u' '
|
||||
$adherent.adresse.ligne2 <br />
|
||||
#end if
|
||||
$adherent.adresse.cp $adherent.adresse.ville
|
||||
</dd>
|
||||
#else
|
||||
<dt>Chambre :</dt>
|
||||
<dd>$adherent.chambre</dd>
|
||||
#end if
|
||||
<dt>Solde :</dt>
|
||||
<dd>
|
||||
$adherent.solde €
|
||||
<span class="actions"><a href="rechargerCompteImpression" onclick="return paypalWindow('$adherent.telephone')">modifier</a></span>
|
||||
<div class="clear"></div>
|
||||
</dd>
|
||||
<dt>Téléphone :</dt>
|
||||
<dd>$adherent.telephone
|
||||
<span class="actions"><a href="#" onclick="return askForTel('$adherent.telephone')">modifier</a></span>
|
||||
<div class="clear"></div>
|
||||
</dd>
|
||||
#if $adherent.droits
|
||||
<dt>Droits :</dt>
|
||||
<dd>
|
||||
$adherent.droits
|
||||
</dd>
|
||||
#end if
|
||||
<dt>État administratif pour l'année $adherent.anneeScolaire :</dt>
|
||||
<dd>
|
||||
<dl>
|
||||
<dt>Cotisation : </dt>
|
||||
<dd>
|
||||
#if $adherent.cotisationOK
|
||||
<span class="valide"> OK</span>
|
||||
#else
|
||||
<span class="invalide"> Non payée</span>
|
||||
#end if
|
||||
</dd>
|
||||
<dt>Carte d'étudiant : </dt>
|
||||
<dd>
|
||||
#if $adherent.carteOK
|
||||
<span class="valide"> OK</span>
|
||||
#else
|
||||
<span class="invalide"> pas de carte d'étudiant</span>
|
||||
#end if
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt class="last">Changer mon mot de passe</dt>
|
||||
<dd class="last">
|
||||
<form action="changePasswordAdherent" name="changePasswordForm" method="post">
|
||||
<div>
|
||||
<label class="textInputLabel" for="ancienPassword">Ancien mot de passe : </label>
|
||||
<input type="password" id="ancienPassword" name="ancienPassword"/><br />
|
||||
<label class="textInputLabel" for="nouveauPassword1">Nouveau mot de passe : </label>
|
||||
<input type="password" id="nouveauPassword1" name="nouveauPassword1"/><br />
|
||||
<a class="textInputNote" href="#" onclick="return GeneratePassword()">Générer un nouveau mot de passe</a><br />
|
||||
<label class="textInputLabel" for="nouveauPassword2">Confirmation : </label>
|
||||
<input type="password" id="nouveauPassword2" name="nouveauPassword2"/><br />
|
||||
<input type="submit" value="Modifier" />
|
||||
</div>
|
||||
</form>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<!-- +++++++++++++++++++ Infos Mails +++++++++++++++++++ -->
|
||||
<div>
|
||||
<h2 class="mark"><a name="mailTab" id="mailTab"></a></h2>
|
||||
<form action="saveMailPrefs#mailTab" method="post">
|
||||
<dl class="tabbed_page">
|
||||
<dt>Alias:</dt>
|
||||
<dd>
|
||||
#if $mailInfos.alias==[]
|
||||
<span class="empty">Vous n'avez pas d'alias</span>
|
||||
#else
|
||||
<ul class="listeAlias">
|
||||
#for $an_alias in $mailInfos.alias
|
||||
<li>$an_alias<span>@crans.org</span></li>
|
||||
#end for
|
||||
</ul>
|
||||
#end if
|
||||
<div class="clear"></div>
|
||||
<span class="actions">
|
||||
<a href="#" onclick="return newAlias()">Nouvel alias</a>
|
||||
</span>
|
||||
<div class="clear"></div>
|
||||
</dd>
|
||||
<dt> Greylisting: </dt>
|
||||
<dd>
|
||||
#if $mailInfos.contourneGreylist==True
|
||||
<label for="contourneGreylist" class="labelCheckbox">
|
||||
<input type="checkbox" name="contourneGreylist" id="contourneGreylist" class="inputCheckbox" value="oui" checked="checked" />
|
||||
Contourner
|
||||
</label>
|
||||
#else
|
||||
<label for="contourneGreylist" class="labelCheckbox">
|
||||
<input type="checkbox" name="contourneGreylist" id="contourneGreylist" class="inputCheckbox" value="oui" />
|
||||
Contourner
|
||||
</label>
|
||||
#end if
|
||||
<a class="textInputNote" href="http://wiki/CransTechnique/GreyListing?highlight=%28Greylist%29" target="_blanc">Plus d'infos</a><br />
|
||||
</dd>
|
||||
<dt>
|
||||
Entêtes:
|
||||
</dt>
|
||||
<dd>
|
||||
#if $mailInfos.rewriteMailHeaders==True
|
||||
<label for="rewriteMailHeaders" class="labelCheckbox">
|
||||
<input type="checkbox" name="rewriteMailHeaders" id="rewriteMailHeaders" class="contourneGreylist" value="oui" checked="checked" />
|
||||
Réécriture des en-tête mails
|
||||
</label>
|
||||
#else
|
||||
<label for="rewriteMailHeaders" class="labelCheckbox">
|
||||
<input type="checkbox" name="rewriteMailHeaders" id="rewriteMailHeaders" class="contourneGreylist" value="oui" />
|
||||
Réécriture des en-tête mails
|
||||
</label>
|
||||
#end if
|
||||
</dd>
|
||||
</dl>
|
||||
#if $getVar('mailError', False)
|
||||
<ul class="tabbed_page">
|
||||
<li class="centrer last">
|
||||
<span class="errorMessage">$mailError</span>
|
||||
</li>
|
||||
</ul>
|
||||
#else
|
||||
<dl class="tabbed_page">
|
||||
<dt>Transfert:</dt>
|
||||
<dd>
|
||||
<label for="forwarding_address" class="labelInput">
|
||||
<input type="text" name="forwarding_address" id="forwarding_address" class="inputText" value="$mailInfos.forwarding_address" />
|
||||
</label>
|
||||
<p class="textInputNote">Laisser vide pour désactiver le transfert</p><br />
|
||||
|
||||
</dd>
|
||||
<dt>Tri des spams:</dt>
|
||||
<dd>
|
||||
<label for="spanTreatment_no" class="labelRadio">
|
||||
#if $mailInfos.spam.no
|
||||
<input type="radio" name="spanTreatment" id="spanTreatment_no" class="inputRadio" value="no" checked="checked" /> Aucun
|
||||
#else
|
||||
<input type="radio" name="spanTreatment" id="spanTreatment_no" class="inputRadio" value="no" /> Aucun
|
||||
#end if
|
||||
</label><br />
|
||||
<label for="spanTreatment_mark" class="labelRadio">
|
||||
#if $mailInfos.spam.mark
|
||||
<input type="radio" name="spanTreatment" id="spanTreatment_mark" class="inputRadio" value="mark" checked="checked" /> Marquer
|
||||
#else
|
||||
<input type="radio" name="spanTreatment" id="spanTreatment_mark" class="inputRadio" value="mark" /> Marquer
|
||||
#end if
|
||||
</label><br />
|
||||
<label for="spanTreatment_drop" class="labelRadio">
|
||||
#if $mailInfos.spam.drop
|
||||
<input type="radio" name="spanTreatment" id="spanTreatment_drop" class="inputRadio" value="drop" checked="checked" /> Supprimer
|
||||
#else
|
||||
<input type="radio" name="spanTreatment" id="spanTreatment_drop" class="inputRadio" value="drop" /> Supprimer
|
||||
#end if
|
||||
</label><br />
|
||||
</dd>
|
||||
</dl>
|
||||
#end if
|
||||
<ul class="tabbed_page">
|
||||
<li class="centrer last">
|
||||
<input type="reset" value="Reset" />
|
||||
<input type="submit" value="Soumettre" />
|
||||
</li>
|
||||
</ul>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
Loading…
Add table
Add a link
Reference in a new issue