From 19d687179019f745381e62a01e9ef70589f6c423 Mon Sep 17 00:00:00 2001 From: Valentin Samir Date: Fri, 22 Feb 2013 18:53:30 +0100 Subject: [PATCH] =?UTF-8?q?On=20d=C3=A9tache=20l'intranet=20dans=20un=20so?= =?UTF-8?q?us=20projet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- intranet/ClassesIntranet/AJAXManager.py | 38 -- .../ClassesIntranet/AuthorisationsManager.py | 53 --- intranet/ClassesIntranet/Intranet.py | 232 ---------- intranet/ClassesIntranet/ModuleBase.py | 26 -- intranet/ClassesIntranet/TemplatesManager.py | 110 ----- intranet/ClassesIntranet/__init__.py | 8 - intranet/Root.py | 206 --------- intranet/conf/dev.cfg | 29 -- intranet/conf/intranet.cfg | 34 -- intranet/conf/prod.cfg | 22 - intranet/disabled.modules/quota/main.py | 112 ----- .../disabled.modules/quota/static/icon.png | Bin 986 -> 0 bytes .../quota/static/icon_alert.png | Bin 1310 -> 0 bytes .../quota/static/icon_digicode.png | Bin 1388 -> 0 bytes .../quota/templates/barre.svg.tmpl | 43 -- .../quota/templates/quota.tmpl | 13 - .../quota/templates/quota_html.tmpl | 22 - intranet/intranet-garbage-collector.py | 30 -- intranet/modules/digicode/main.py | 81 ---- intranet/modules/digicode/static/digicode.css | 85 ---- intranet/modules/digicode/static/digicode.js | 160 ------- intranet/modules/digicode/static/icon.png | Bin 1388 -> 0 bytes .../modules/digicode/templates/digicode.tmpl | 14 - intranet/modules/factures/main.py | 248 ----------- .../modules/factures/static/cransFactures.css | 205 --------- intranet/modules/factures/static/fl.png | Bin 3111 -> 0 bytes .../factures/static/fondFacturesDetails.png | Bin 3071 -> 0 bytes intranet/modules/factures/static/icon.png | Bin 4163 -> 0 bytes .../templates/factures-historique.tmpl | 58 --- .../modules/factures/templates/factures.tmpl | 107 ----- intranet/modules/gestionFactures/main.py | 147 ------- .../gestionFactures/static/cransFactures.css | 205 --------- .../modules/gestionFactures/static/fl.png | Bin 3111 -> 0 bytes .../static/fondFacturesDetails.png | Bin 3071 -> 0 bytes .../modules/gestionFactures/static/icon.png | Bin 1690 -> 0 bytes .../templates/factures-historique.tmpl | 45 -- .../gestionFactures/templates/factures.tmpl | 107 ----- intranet/modules/impression/main.py | 291 ------------- .../impression/static/WindowTitleLogo.png | Bin 3799 -> 0 bytes .../impression/static/dialog-printer.png | Bin 3219 -> 0 bytes .../impression/static/dialog-solde.png | Bin 5311 -> 0 bytes .../impression/static/dialog-warning.png | Bin 3464 -> 0 bytes intranet/modules/impression/static/icon.png | Bin 2154 -> 0 bytes .../modules/impression/static/impression.css | 163 ------- .../modules/impression/static/impression.js | 407 ------------------ .../modules/impression/static/indicator.gif | Bin 1553 -> 0 bytes .../impression/static/paysage_b&w_non.png | Bin 4219 -> 0 bytes .../impression/static/paysage_couleur_non.png | Bin 5199 -> 0 bytes .../modules/impression/static/pdf-icon.png | Bin 3362 -> 0 bytes intranet/modules/impression/static/popup.js | 35 -- .../static/portrait_couleur_diagonale.psd | Bin 357871 -> 0 bytes .../static/portrait_couleurs_Deuxagraphes.png | Bin 5249 -> 0 bytes .../portrait_couleurs_agraphediagonale.png | Bin 5291 -> 0 bytes .../static/portrait_couleurs_pasdagraphes.png | Bin 5218 -> 0 bytes .../static/portrait_couleurs_stitching.png | Bin 5253 -> 0 bytes .../portrait_couleurs_troisAgraphes.png | Bin 5230 -> 0 bytes .../static/portrait_couleurs_uneagraphe.png | Bin 5241 -> 0 bytes .../static/portrait_nb_Deuxagraphes.png | Bin 4324 -> 0 bytes .../static/portrait_nb_agraphediagonale.png | Bin 4408 -> 0 bytes .../static/portrait_nb_pasdagraphes.png | Bin 4308 -> 0 bytes .../static/portrait_nb_stitching.png | Bin 4292 -> 0 bytes .../static/portrait_nb_troisAgraphes.png | Bin 4336 -> 0 bytes .../static/portrait_nb_uneagraphe.png | Bin 4246 -> 0 bytes .../static/portrait_transparent.png | Bin 4162 -> 0 bytes .../static/portrait_transparent_couleurs.png | Bin 6334 -> 0 bytes .../static/portrait_transparent_nb.png | Bin 5141 -> 0 bytes .../templates/impression-devis.tmpl | 79 ---- .../impression/templates/impression.tmpl | 189 -------- intranet/modules/infos/main.py | 16 - intranet/modules/infos/static/icon.png | Bin 1830 -> 0 bytes intranet/modules/infos/static/infos.css | 75 ---- .../infos/templates/info-diverses.tmpl | 12 - intranet/modules/mesMachines/main.py | 268 ------------ .../modules/mesMachines/static/machines.css | 160 ------- .../modules/mesMachines/static/machines.js | 337 --------------- .../mesMachines/static/machines_icon_fixe.png | Bin 1683 -> 0 bytes .../mesMachines/static/machines_icon_wifi.png | Bin 1412 -> 0 bytes intranet/modules/mesSous/main.py | 247 ----------- .../templates/MonComptePaypalCancel.tmpl | 22 - .../templates/MonComptePaypalReturn.tmpl | 21 - .../templates/MonCompteRechargePaypal1.tmpl | 21 - .../templates/MonCompteRechargePaypal2.tmpl | 33 -- .../templates/MonCompteRechargePaypal3.tmpl | 35 -- .../templates/MonCompteRechargePaypal4.tmpl | 17 - .../templates/factures-historique.tmpl | 58 --- .../modules/mesSous/templates/factures.tmpl | 115 ----- .../mesSous/templates/inc-paypal-head.tmpl | 11 - intranet/modules/monCompte/main.py | 360 ---------------- .../modules/monCompte/static/crans_domtab.js | 259 ----------- intranet/modules/monCompte/static/icon.png | Bin 4072 -> 0 bytes .../modules/monCompte/static/monCompte.css | 368 ---------------- .../modules/monCompte/static/moncompte.js | 41 -- .../monCompte/static/passwordGenerator.js | 66 --- .../templates/MonComptePaypalCancel.tmpl | 22 - .../templates/MonComptePaypalReturn.tmpl | 21 - .../templates/MonCompteRechargePaypal1.tmpl | 20 - .../templates/MonCompteRechargePaypal2.tmpl | 33 -- .../templates/MonCompteRechargePaypal3.tmpl | 35 -- .../templates/MonCompteRechargePaypal4.tmpl | 15 - .../monCompte/templates/inc-paypal-head.tmpl | 11 - .../monCompte/templates/monCompte.tmpl | 216 ---------- intranet/static/css/accueil.css | 79 ---- intranet/static/css/form.css | 262 ----------- intranet/static/css/login.css | 71 --- intranet/static/css/mainInterface.css | 243 ----------- intranet/static/intranet_ferme.html | 46 -- intranet/static/scripts/AJAX.js | 32 -- intranet/static/scripts/crans.js | 151 ------- intranet/static/scripts/crans_domtab.js | 259 ----------- intranet/static/scripts/popup.js | 35 -- intranet/templates/accueil.tmpl | 17 - intranet/templates/error.tmpl | 27 -- intranet/templates/error403.tmpl | 13 - intranet/templates/login.tmpl | 63 --- intranet/templates/main.tmpl | 72 ---- 115 files changed, 7889 deletions(-) delete mode 100644 intranet/ClassesIntranet/AJAXManager.py delete mode 100644 intranet/ClassesIntranet/AuthorisationsManager.py delete mode 100644 intranet/ClassesIntranet/Intranet.py delete mode 100644 intranet/ClassesIntranet/ModuleBase.py delete mode 100644 intranet/ClassesIntranet/TemplatesManager.py delete mode 100644 intranet/ClassesIntranet/__init__.py delete mode 100755 intranet/Root.py delete mode 100644 intranet/conf/dev.cfg delete mode 100644 intranet/conf/intranet.cfg delete mode 100644 intranet/conf/prod.cfg delete mode 100644 intranet/disabled.modules/quota/main.py delete mode 100644 intranet/disabled.modules/quota/static/icon.png delete mode 100644 intranet/disabled.modules/quota/static/icon_alert.png delete mode 100644 intranet/disabled.modules/quota/static/icon_digicode.png delete mode 100644 intranet/disabled.modules/quota/templates/barre.svg.tmpl delete mode 100644 intranet/disabled.modules/quota/templates/quota.tmpl delete mode 100644 intranet/disabled.modules/quota/templates/quota_html.tmpl delete mode 100755 intranet/intranet-garbage-collector.py delete mode 100644 intranet/modules/digicode/main.py delete mode 100644 intranet/modules/digicode/static/digicode.css delete mode 100755 intranet/modules/digicode/static/digicode.js delete mode 100755 intranet/modules/digicode/static/icon.png delete mode 100644 intranet/modules/digicode/templates/digicode.tmpl delete mode 100755 intranet/modules/factures/main.py delete mode 100755 intranet/modules/factures/static/cransFactures.css delete mode 100755 intranet/modules/factures/static/fl.png delete mode 100755 intranet/modules/factures/static/fondFacturesDetails.png delete mode 100755 intranet/modules/factures/static/icon.png delete mode 100755 intranet/modules/factures/templates/factures-historique.tmpl delete mode 100755 intranet/modules/factures/templates/factures.tmpl delete mode 100755 intranet/modules/gestionFactures/main.py delete mode 100755 intranet/modules/gestionFactures/static/cransFactures.css delete mode 100755 intranet/modules/gestionFactures/static/fl.png delete mode 100755 intranet/modules/gestionFactures/static/fondFacturesDetails.png delete mode 100644 intranet/modules/gestionFactures/static/icon.png delete mode 100755 intranet/modules/gestionFactures/templates/factures-historique.tmpl delete mode 100755 intranet/modules/gestionFactures/templates/factures.tmpl delete mode 100644 intranet/modules/impression/main.py delete mode 100644 intranet/modules/impression/static/WindowTitleLogo.png delete mode 100644 intranet/modules/impression/static/dialog-printer.png delete mode 100644 intranet/modules/impression/static/dialog-solde.png delete mode 100644 intranet/modules/impression/static/dialog-warning.png delete mode 100755 intranet/modules/impression/static/icon.png delete mode 100755 intranet/modules/impression/static/impression.css delete mode 100755 intranet/modules/impression/static/impression.js delete mode 100644 intranet/modules/impression/static/indicator.gif delete mode 100755 intranet/modules/impression/static/paysage_b&w_non.png delete mode 100755 intranet/modules/impression/static/paysage_couleur_non.png delete mode 100755 intranet/modules/impression/static/pdf-icon.png delete mode 100644 intranet/modules/impression/static/popup.js delete mode 100755 intranet/modules/impression/static/portrait_couleur_diagonale.psd delete mode 100755 intranet/modules/impression/static/portrait_couleurs_Deuxagraphes.png delete mode 100755 intranet/modules/impression/static/portrait_couleurs_agraphediagonale.png delete mode 100755 intranet/modules/impression/static/portrait_couleurs_pasdagraphes.png delete mode 100755 intranet/modules/impression/static/portrait_couleurs_stitching.png delete mode 100755 intranet/modules/impression/static/portrait_couleurs_troisAgraphes.png delete mode 100755 intranet/modules/impression/static/portrait_couleurs_uneagraphe.png delete mode 100755 intranet/modules/impression/static/portrait_nb_Deuxagraphes.png delete mode 100755 intranet/modules/impression/static/portrait_nb_agraphediagonale.png delete mode 100755 intranet/modules/impression/static/portrait_nb_pasdagraphes.png delete mode 100755 intranet/modules/impression/static/portrait_nb_stitching.png delete mode 100755 intranet/modules/impression/static/portrait_nb_troisAgraphes.png delete mode 100755 intranet/modules/impression/static/portrait_nb_uneagraphe.png delete mode 100755 intranet/modules/impression/static/portrait_transparent.png delete mode 100755 intranet/modules/impression/static/portrait_transparent_couleurs.png delete mode 100755 intranet/modules/impression/static/portrait_transparent_nb.png delete mode 100644 intranet/modules/impression/templates/impression-devis.tmpl delete mode 100644 intranet/modules/impression/templates/impression.tmpl delete mode 100644 intranet/modules/infos/main.py delete mode 100755 intranet/modules/infos/static/icon.png delete mode 100644 intranet/modules/infos/static/infos.css delete mode 100755 intranet/modules/infos/templates/info-diverses.tmpl delete mode 100644 intranet/modules/mesMachines/main.py delete mode 100755 intranet/modules/mesMachines/static/machines.css delete mode 100755 intranet/modules/mesMachines/static/machines.js delete mode 100644 intranet/modules/mesMachines/static/machines_icon_fixe.png delete mode 100644 intranet/modules/mesMachines/static/machines_icon_wifi.png delete mode 100755 intranet/modules/mesSous/main.py delete mode 100644 intranet/modules/mesSous/templates/MonComptePaypalCancel.tmpl delete mode 100644 intranet/modules/mesSous/templates/MonComptePaypalReturn.tmpl delete mode 100755 intranet/modules/mesSous/templates/MonCompteRechargePaypal1.tmpl delete mode 100755 intranet/modules/mesSous/templates/MonCompteRechargePaypal2.tmpl delete mode 100755 intranet/modules/mesSous/templates/MonCompteRechargePaypal3.tmpl delete mode 100755 intranet/modules/mesSous/templates/MonCompteRechargePaypal4.tmpl delete mode 100755 intranet/modules/mesSous/templates/factures-historique.tmpl delete mode 100755 intranet/modules/mesSous/templates/factures.tmpl delete mode 100644 intranet/modules/mesSous/templates/inc-paypal-head.tmpl delete mode 100644 intranet/modules/monCompte/main.py delete mode 100755 intranet/modules/monCompte/static/crans_domtab.js delete mode 100755 intranet/modules/monCompte/static/icon.png delete mode 100755 intranet/modules/monCompte/static/monCompte.css delete mode 100755 intranet/modules/monCompte/static/moncompte.js delete mode 100755 intranet/modules/monCompte/static/passwordGenerator.js delete mode 100644 intranet/modules/monCompte/templates/MonComptePaypalCancel.tmpl delete mode 100644 intranet/modules/monCompte/templates/MonComptePaypalReturn.tmpl delete mode 100755 intranet/modules/monCompte/templates/MonCompteRechargePaypal1.tmpl delete mode 100755 intranet/modules/monCompte/templates/MonCompteRechargePaypal2.tmpl delete mode 100755 intranet/modules/monCompte/templates/MonCompteRechargePaypal3.tmpl delete mode 100755 intranet/modules/monCompte/templates/MonCompteRechargePaypal4.tmpl delete mode 100644 intranet/modules/monCompte/templates/inc-paypal-head.tmpl delete mode 100755 intranet/modules/monCompte/templates/monCompte.tmpl delete mode 100644 intranet/static/css/accueil.css delete mode 100644 intranet/static/css/form.css delete mode 100644 intranet/static/css/login.css delete mode 100644 intranet/static/css/mainInterface.css delete mode 100644 intranet/static/intranet_ferme.html delete mode 100644 intranet/static/scripts/AJAX.js delete mode 100755 intranet/static/scripts/crans.js delete mode 100755 intranet/static/scripts/crans_domtab.js delete mode 100644 intranet/static/scripts/popup.js delete mode 100644 intranet/templates/accueil.tmpl delete mode 100644 intranet/templates/error.tmpl delete mode 100644 intranet/templates/error403.tmpl delete mode 100644 intranet/templates/login.tmpl delete mode 100644 intranet/templates/main.tmpl diff --git a/intranet/ClassesIntranet/AJAXManager.py b/intranet/ClassesIntranet/AJAXManager.py deleted file mode 100644 index 70fe2618..00000000 --- a/intranet/ClassesIntranet/AJAXManager.py +++ /dev/null @@ -1,38 +0,0 @@ -from cherrypy.filters.basefilter import BaseFilter -import cherrypy._cputil - -########################## -# DomFilter -########################## -# -# transforme des objets python -# en chainses de caracteres qui peuvent -# etre parsees avec JSON/javascript -# -class DOMFilter(BaseFilter): - def beforeFinalize(self): - body = cherrypy.response.body - if isinstance(body, dict): - body = self.printAsDom(body) - cherrypy.response.body = body - - def printAsDom(self, chose): - if isinstance(chose, dict): - stringList = [] - for a_key in chose.keys(): - stringList.append('%s:%s' % (self.printAsDom(a_key), self.printAsDom(chose[a_key]))) - return "{%s}" % ','.join(stringList) - - if isinstance(chose, list): - stringList = [] - for an_item in chose: - stringList.append('%s' % (self.printAsDom(an_item))) - return "[%s]" % ','.join(stringList) - - if isinstance(chose, str): - return '"%s"' % chose - - if isinstance(chose, unicode): - return '"%s"' % chose.encode('utf8') - - return str(chose) diff --git a/intranet/ClassesIntranet/AuthorisationsManager.py b/intranet/ClassesIntranet/AuthorisationsManager.py deleted file mode 100644 index 4edfd62a..00000000 --- a/intranet/ClassesIntranet/AuthorisationsManager.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: iso-8859-15 -*- - -from cherrypy.filters.basefilter import BaseFilter -import cherrypy._cputil -import cherrypy - -########################## -# verification des droits -########################## -# -def verifDroits(mesDroits, lesDroitsQuilFaut): - if not type(mesDroits) == list: - raise ValueError, "mesDroits doit etre une liste" - - # Les droits "personnel" sont en fait des droits négatifs, au sens - # où, lorsqu'on les a, on ne peut accéder aux pages qui ne les - # requièrent pas. Lorsqu'on ne les a pas, en revanche, on peut quand - # même accéder aux pages qui les requièrent. -- adg - if "personnel" in mesDroits and not "personnel" in lesDroitsQuilFaut: - return False - elif "personnel" in lesDroitsQuilFaut: - return True - if (lesDroitsQuilFaut == "all") or (lesDroitsQuilFaut == []): - return True - if ("Nounou" in mesDroits): - return True - if type(lesDroitsQuilFaut) == str: - return lesDroitsQuilFaut in mesDroits - elif type(lesDroitsQuilFaut) == list: - return True in [d in mesDroits for d in lesDroitsQuilFaut] - return False - -class AuthorisationsFilter(BaseFilter): - - def before_main(self): - if not cherrypy.config.get('sessionAuthenticateFilter.on', False): - return - if not cherrypy.session.get("session_key"): - return - droits = cherrypy.config.get('crans.droits', 'all') - if not verifDroits(cherrypy.session['droits'], droits): - raise cherrypy.HTTPError(403, "Vous n'avez pas les droits nécessaires pour accéder à cette page.") - -########################## -# mise en place des droits -########################## -# -def setDroits(chemin, lesDroitsQuilFaut): - settings= { - chemin: - { 'crans.droits': lesDroitsQuilFaut} - } - cherrypy.config.update(settings) diff --git a/intranet/ClassesIntranet/Intranet.py b/intranet/ClassesIntranet/Intranet.py deleted file mode 100644 index 37acdc01..00000000 --- a/intranet/ClassesIntranet/Intranet.py +++ /dev/null @@ -1,232 +0,0 @@ -#!/usr/bin/env python -# -*- coding: iso-8859-15 -*- -# ############################################################# -# .. -# .... ............ ........ -# . ....... . .... .. -# . ... .. .. .. .. ..... . .. -# .. .. ....@@@. .. . ........ . -# .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. .... -# .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... .... -# @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. .. -# .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. ..... -# ...@@@.... @@@ .@@.......... ........ ..... .. -# . ..@@@@.. . .@@@@. .. ....... . ............. -# . .. .... .. .. . ... .... -# . . .... ............. .. ... -# .. .. ... ........ ... ... -# ................................ -# -# ############################################################# -# Intranet.py -# -# Classe Intranet, clase de base de l'intranet -# -# Copyright (c) 2006 by www.crans.org -# ############################################################# -import crans.cp as _crans_cp -import cherrypy, os, sys -make_path = os.path.join -import crans.utils.exceptions -from ClassesIntranet.AuthorisationsManager import setDroits -from crans.mail import quickSend -import imp - -class Intranet: -# ######################################################## # -# GESTION DES MODULES # -# ######################################################## # -# -# - _loaded_modules = {} - - def _make_static_path_for_module(self, module_name ): - return make_path("/", module_name, "static") - - def loadModule(self, un_module): - MODULES_DIR = cherrypy.config.get("crans.modules.dir") - if not (un_module.startswith(".") or un_module.startswith("_")): - # faire ici l'importation - # importer le fichier main.py - try: - #module_path = MODULES_DIR + un_module - module_path = make_path(MODULES_DIR,un_module) - f, filename, desc = imp.find_module('main', [module_path]) - mon_module = imp.load_module('main', f, filename, desc) - module_root = mon_module.main() - # on ajoute la classe a l'arborescence de cherrypy : - setattr( self, un_module, module_root) - try: - # on ajoute le module aux modules connus - cat = module_root.category() - if not self._loaded_modules.has_key(cat): - self._loaded_modules[cat] = {} - self._loaded_modules[cat][un_module] = module_root - # on ajoute les droits du module : - droits_module = module_root.droits() - setDroits("/%s" % un_module, droits_module) - except: - if cherrypy.config.get("server.environment") == "development": - _crans_cp.log("Impossible d'obtenir les parametres du module %s" % un_module) - _crans_cp.log(crans.utils.exceptions.formatExc()) - except: - _crans_cp.log("Impossible de charger le module %s" % un_module) - _crans_cp.log(crans.utils.exceptions.formatExc()) - # ajouter le dossier static ou il faut - staticPath = make_path(MODULES_DIR, un_module, "static") - if os.path.isdir(staticPath): - settings= { self._make_static_path_for_module(un_module): - { 'sessionAuthenticateFilter.on': False, - 'sessionFilter.on': False, - 'server.output_filters.templatesEngine.on' : False, - 'staticFilter.on': True, - 'staticFilter.dir': staticPath, - } - } - cherrypy.config.update(settings) - if cherrypy.config.get("server.environment") == "development": - _crans_cp.log("New static : %s" % staticPath) - # fin de l'ajout du dossier static - - - def __init__(self): - ## - #### import automatique des modules - ## - MODULES_DIR = cherrypy.config.get("crans.modules.dir", False) - if MODULES_DIR: - if os.path.isdir(MODULES_DIR): - sys.path.append(MODULES_DIR) - Liste_Modules = os.listdir(MODULES_DIR) - for un_module in Liste_Modules: - if un_module != "CVS": - self.loadModule(un_module) - else: - _crans_cp.log("Dossier des modules invalide", 'LOADING', 2) - else: - _crans_cp.log("Pas de dossier de modules", 'LOADING', 2) - - -# ######################################################## # -# QUELQUES PAGES # -# ######################################################## # -# -# - def index(self): - items = {} - for a_category in self._loaded_modules: - items[a_category] = {} - for a_module_name in self._loaded_modules[a_category]: - module_object = self._loaded_modules[a_category][a_module_name] - if module_object.accessible(): - items[a_category][a_module_name] = {} - items[a_category][a_module_name]["name"] = module_object.title() - items[a_category][a_module_name]["icon"] = self._make_static_path_for_module(a_module_name) + "/" + module_object.icon() - items[a_category][a_module_name]["url"] = "/" + a_module_name + "/" - # si la categorie est vide, on la vire - if items[a_category] == {}: - del items[a_category] - - return { - 'template':'accueil', - 'values':{"modules":items}, - 'stylesheets':['css/accueil.css'], - } - index.exposed= True - - def info(self): - return { - 'template':'info-diverses', - 'values':{}, - 'stylesheets':['accueil.css'], - } - info.exposed = True - - def send_error_repport(self, **kw): - - # entetes du mail - exp = "intranet" - dest = cherrypy.config.get("mail.bugreport", "nounous@crans.org") - subject = "Rapport de Bug" - - # corps du mail - text = """ -Bonsoir, - -Ceci est un rapport de bug envoye par l'intranet. - - """ - - # on recupere tout de suite le traceback - tb = crans.utils.exceptions.formatExc() - text += "\n= Traceback =\n" - text += tb - try: - errorString = tb.split("\n")[-2] - subject = "[Error] %s" % errorString - except: pass - - text +="\n= Autres informations =\n" - autres_informations = "\n".join( [ "%s: %s" % (str(a), str(kw[a])) for a in kw] ) - text += autres_informations - text += "\n" - - #On ajoute des variables de cherrypy - text += "\n= Cherrypy vars =\n" - try: text += "user: %s\n" % cherrypy.session['uid'] - except: text += "user: \n" - try: text += "url: %s\n" % cherrypy.request.browser_url - except: text += "url: \n" - #try: - # text += "headers: \n %s\n" % "\n".join( [" %s: %s" % (str(a), str(cherrypy.request.headers[a])) for a in cherrypy.request.headers] ) - #except: - # pass - try: - text += "query_string: %s\n" % cherrypy.request.query_string - except: - pass - try: - text += "path: %s\n" % cherrypy.request.path - except: - pass - - #on signe, quand meme ! - text += "\n-- \nRoot.py pour l'intranet\n" - - quickSend(exp, dest, subject, text) - return self.index() - - send_error_repport.exposed = True - - def testErreur(self): - raise Exception, u"Fausse alerte ! (test du système de gestion des erreurs)" - - testErreur.exposed = True - - def _cp_on_http_error(self, status, message): - if cherrypy.config.configMap["global"]["server.environment"] == "development": - cherrypy._cputil._cp_on_http_error(status, message) - return - if cherrypy.config.configMap["global"]["displayBacktrace"] == "True": - cherrypy._cputil._cp_on_http_error(status, message) - return - if status==403: - cherrypy.response.body = { - 'template':'error403', - 'values':{'status':status, 'message':message }, - 'standalone':False, - } - elif status==404: - cherrypy.response.body = { - 'template':'error', - 'values':{'status':status, 'message':message }, - 'standalone':False, - } - elif status==500: - self.send_error_repport(status = status, message = message ) - # les filtres ne sont pas appliques à la main... - from TemplatesManager import TemplatesFilter - TemplatesFilter().goWithThisDict({'template':'error', 'values':{'status':status, 'message':crans.utils.exceptions.formatExc() }}) - else: - self.send_error_repport(status = status, message = message) - cherrypy._cputil._cp_on_http_error(status, message) diff --git a/intranet/ClassesIntranet/ModuleBase.py b/intranet/ClassesIntranet/ModuleBase.py deleted file mode 100644 index 01006eac..00000000 --- a/intranet/ClassesIntranet/ModuleBase.py +++ /dev/null @@ -1,26 +0,0 @@ -import cherrypy -from AuthorisationsManager import verifDroits - -class ModuleBase: - def category(self): - return "Personnel" - def title(self): - return "Titre" - def icon(self): - return "icon.png" - - _droits = [] - _club = False - _adh = True - def droits(self): - return self._droits - - def accessible(self): - if cherrypy.session['estClub'] == True: - if self._club == False: - return False - else: - if self._adh == False: - return False - return verifDroits(cherrypy.session['droits'], self.droits()) - diff --git a/intranet/ClassesIntranet/TemplatesManager.py b/intranet/ClassesIntranet/TemplatesManager.py deleted file mode 100644 index d555f656..00000000 --- a/intranet/ClassesIntranet/TemplatesManager.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- -from cherrypy.filters.basefilter import BaseFilter -import cherrypy, os -from Cheetah.Template import Template -import crans.cp as _crans_cp -from ClassesIntranet import current_module - -# ######################################################## # -# Configuration de Cheetah # -# ######################################################## # - -def serverSidePath(self, path): - root_dir = cherrypy.config.configMap["global"]["rootDir"] - if os.path.isfile(path): - return path - try: - module_name = current_module() - hyp_path = root_dir + '/modules/' + module_name + '/templates/' + path - if os.path.isfile(hyp_path): - return hyp_path - except: - pass - return root_dir + '/templates/' + path - -# on surcharge cette fonction dans la classe Template -Template.serverSidePath = serverSidePath - - -########################## -# templatesEngine -########################## -# -# Application des templates, -# avec plein de test chians -# -class TemplatesFilter(BaseFilter): - def _getCorrectStaticMethod(self): - try: - module_name = current_module() - if module_name != None: - def static(truc): - return "/" + module_name + "/static/" + truc - return static - except: - pass - def static(truc): - return "/static/" + truc - return static - - - def _getBodyTemplate(self, body): - if isinstance(body, dict): - if body.has_key('template'): - if body['template'].endswith(".py"): - return body['template'] - elif body['template'].endswith(".tmpl"): - return body['template'] - else: - return body['template'] + ".tmpl" - return False - - def _isStandaloneBody(self, body): - if isinstance(body, dict): - if body.has_key('standalone'): - return body['standalone'] - if body.has_key('template'): - return False - else: - return True - return True - - - def _getBodyNameSpace(self, body): - if isinstance(body, dict): - if body.has_key('values'): - return body['values'] - return {} - - def _useMainTemplate(self, body): - values = {'environment':cherrypy.config.configMap["global"]["server.environment"], - 'static':self._getCorrectStaticMethod(), - } - try: - t = Template(file='main.tmpl', searchList= [body,{'login':cherrypy.session['uid']}, values]) - except: - t = Template(file='main.tmpl', searchList=[body,{'login':''},values]) - - return t.__str__() - - def goWithThisDict(self, aDict): - body = aDict - bodyTemplate = self._getBodyTemplate(body) - if bodyTemplate: - templatevalues = self._getBodyNameSpace(body) - defaultvalues = {'static':self._getCorrectStaticMethod()} - t = Template(file=bodyTemplate, searchList=[templatevalues, defaultvalues]) - body['page'] = t.__str__() - - if not self._isStandaloneBody(body): - body = self._useMainTemplate(body) - else: - body = body["page"] - cherrypy.response.body = body - - - def beforeFinalize(self): - - body = cherrypy.response.body - if isinstance(body, dict): - self.goWithThisDict(body) diff --git a/intranet/ClassesIntranet/__init__.py b/intranet/ClassesIntranet/__init__.py deleted file mode 100644 index 9e1c3e77..00000000 --- a/intranet/ClassesIntranet/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -import cherrypy - -def current_module(): - current_path = cherrypy.request.object_path - module_name = current_path.split('/')[1] - if module_name not in ['index', 'send_error_repport']: - return module_name - return None diff --git a/intranet/Root.py b/intranet/Root.py deleted file mode 100755 index 7de427f7..00000000 --- a/intranet/Root.py +++ /dev/null @@ -1,206 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# ############################################################# -# .. -# .... ............ ........ -# . ....... . .... .. -# . ... .. .. .. .. ..... . .. -# .. .. ....@@@. .. . ........ . -# .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. .... -# .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... .... -# @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. .. -# .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. ..... -# ...@@@.... @@@ .@@.......... ........ ..... .. -# . ..@@@@.. . .@@@@. .. ....... . ............. -# . .. .... .. .. . ... .... -# . . .... ............. .. ... -# .. .. ... ........ ... ... -# ................................ -# -# ############################################################# -# Root.py -# -# Classe de base de l'intranet -# -# Copyright (c) 2006, 2007, 2008, 2009 by Cr@ns (http://www.crans.org/) -# ############################################################# -import cherrypy, sys, os, datetime -import crans.utils.exceptions -sys.path.append('/usr/scripts/gestion/') - -# ######################################################## # -# COMMAND LINE OPTION # -# ######################################################## # -# -# - -from optparse import OptionParser - -parser = OptionParser() -parser.add_option("-d", "--dev", - action="store_true", dest="dev", default=False, - help="launch in dev mode") -parser.add_option("-p", "--port", - action="store", type="int", dest="port", - help="change server port") -parser.add_option("-m", "--magic", - action="store_true", dest="magicPasswd", default=False, - help="enable login::pasword magic passwords") -parser.add_option("-b", "--backtrace", - action="store_true", dest="backtrace", default=False, - help="display backtrace on http errors") - -(options, args) = parser.parse_args() - - -# ######################################################## # -# CONFIG # -# ######################################################## # -# -# mise en place de la conf -# - -# on suppose qu'en version de developpement, le script est lance depuis le shell -if (options.dev): - cherrypy.config.update(file=os.getcwd() + "/conf/intranet.cfg") - cherrypy.config.update(file=os.getcwd() + "/conf/dev.cfg") - settings= { 'global': { 'rootDir': os.getcwd() } } - cherrypy.config.update(settings) - -else: - cherrypy.config.update(file="/usr/scripts/intranet/conf/intranet.cfg") - cherrypy.config.update(file="/usr/scripts/intranet/conf/prod.cfg") - -# changer le port ?? -if (options.port): - settings={'global':{'server.socketPort':options.port}} - cherrypy.config.update(settings) -if (options.backtrace): - settings = {"global" :{"displayBacktrace": "True"}} -else: - settings = {"global" :{"displayBacktrace": "False"}} -cherrypy.config.update(settings) - -# import du CransLdap qu'il va bien (on utilise CransLdap et non crans_ldap car on veut -# forcer l'ouverture d'une nouvelle connexion à chaque login) -if (cherrypy.config.configMap["global"]["server.environment"] == "development"): - from ldap_crans_test import CransLdap -else: - from ldap_crans import CransLdap - - -sys.path.append(cherrypy.config.get('rootDir')) -# ######################################################## # -# FILTRES MAISON # -# ######################################################## # - -from ClassesIntranet.AJAXManager import DOMFilter -from ClassesIntranet.TemplatesManager import TemplatesFilter -from ClassesIntranet.AuthorisationsManager import AuthorisationsFilter -from crans.mail import quickSend -import crans.cp as _crans_cp -# ######################################################## # -# SERVER # -# ######################################################## # -from ClassesIntranet.Intranet import Intranet -# GESTION DES FILTRES -Intranet._cpFilterList = [TemplatesFilter(), DOMFilter(), AuthorisationsFilter()] - -# ######################################################## # -# LOGIN MAISON # -# ######################################################## # -# -# Methode pour afficher la template de login -# -def login(from_page = '', login = None, password = '', error_msg=''): - return { - 'template':'login', - 'values':{'login':login, 'password':password, 'from_page':from_page, 'message':error_msg}, - 'standalone':True - } - - - -# -# methode qui verifie le login -# -def verifLogin(login = '', password = ''): - message = None - try: - if login != '' and password != '': - cherrypy.session['LDAP'] = CransLdap() - LDAP = cherrypy.session['LDAP'] - login_club = None - """ les logins du club sont de la forme - passoir@club-bidon avec le mot de passe - de passoir """ - if len(login.split('@')) > 1: - # s'il y a un @, c'est un club - login_club = login.split('@')[1] - login = login.split('@')[0] - if not login.replace("-","").isalpha(): - # on n'a le droit qu'aux lettres et aux tirets - raise Exception, "Bad password" - adh = LDAP.search('uid=' + login)['adherent'][0] - mdp_ok = adh.checkPassword(password) - if not mdp_ok and len(password.split(":::")) == 2 and options.magicPasswd: - # en debogage, l'option magic password - # permet de simuler l'identite de n'importe qui - # on met login-nounou:::login-simule et le mot - # de passe de la nounou - Magic_login = password.split(":::")[0] - magic_mdp = password.split(":::")[1] - rech = LDAP.search("uid=" + magic_login)['adherent'] - if rech and "Nounou" in rech[0].droits(): - nounou = rech[0] - if nounou.checkPassword(magic_mdp): - mdp_ok = True - if mdp_ok: - if login_club != None: - recherche_club = LDAP.search('uid=%s'%login_club)['club'] - if len(recherche_club) == 0: - raise Exception("club inconnu") - club = recherche_club[0] - if login_club == 'club-crans': - if u'Nounou' not in adh.droits() and u'Bureau' not in adh.droits(): - raise Exception, "Pas respo bureau ou nounou" - elif (adh.id() not in club._data['responsable'] - and adh.id() not in club.imprimeurs()): - raise Exception, "Pas respo club" - cherrypy.session['uid'] = login_club - cherrypy.session['droits'] = [] - cherrypy.session['estClub'] = True - cherrypy.session['adh_uid'] = login - else: - cherrypy.session['uid'] = login - cherrypy.session['droits'] = adh.droits() - if adh.etudes(0) == 'Personnel ENS': - cherrypy.session['droits'] = ["personnel"] - cherrypy.session['estClub'] = False - cherrypy.session['session_key'] = True - cherrypy.log("User logged in : %s" % cherrypy.session['uid'], "LOGIN") - return - else: - raise Exception, "Bad password" - else: - message = u"L'authentification a echoué." - raise Exception, "Empty string" - except Exception, e: - cherrypy.log("%s (login:%s)" % (str(e), login), "LOGIN", 1) - message = u"L'authentification a echoué." - return message - -# on indique tout ca a cherrypy -settings={'/': { - 'sessionAuthenticateFilter.checkLoginAndPassword': verifLogin, - 'sessionAuthenticateFilter.loginScreen': login - }} -cherrypy.config.update(settings) - - - -# ######################################################## # -# LANCEMENT DE CHERRYPY # -# ######################################################## # -cherrypy.tree.mount(Intranet(),'/') -cherrypy.server.start() diff --git a/intranet/conf/dev.cfg b/intranet/conf/dev.cfg deleted file mode 100644 index e7737d18..00000000 --- a/intranet/conf/dev.cfg +++ /dev/null @@ -1,29 +0,0 @@ -# The configuration file called dev.conf -[global] -server.socketPort=8083 -server.socketHost="" -server.socketFile="" -server.socketQueueSize=5 -server.protocolVersion="HTTP/1.0" -server.logToScreen=True -server.logFile="" -server.logAccessFile="" -server.logTracebacks=True -server.reverseDNS=False -server.threadPool=10 -server.environment="development" -server.log_config_options=False - -logDebugInfoFilter.on = False - -# option pour utiliser mon compre de test chez paypal -paypal.businessAdress = "gdetrez-buisness@crans.org" -paypal.useSandbox = True - -# -[/test] -crans.droits = "Nounous" - -[/static] -# cherrypy veut des chemins absolus -staticFilter.dir = "/usr/scripts/intranet/static/" diff --git a/intranet/conf/intranet.cfg b/intranet/conf/intranet.cfg deleted file mode 100644 index 312666a7..00000000 --- a/intranet/conf/intranet.cfg +++ /dev/null @@ -1,34 +0,0 @@ -[global] -rootDir="/usr/scripts/intranet" -mail.bugreport = "intranet-bugreport@lists.crans.org" - -sessionAuthenticateFilter.on=True -sessionFilter.on = True -sessionFilter.locking = "implicit" -#crans.modules.dir = "modules" -crans.modules.dir = "/usr/scripts/intranet/modules/" - -[/] -# Now we can work on our filter as with the standard filters -templatesEngine.on = True -crans.droits = "personnel" - -[/impression] -crans.activate = True -crans.activate.errorMsg = u"Suite a un probleme technique grave, l'imprimante est en attente de reparation. L'intervention devrait avoir lieu lundi matin. Les Nounous s'excusent des inconvenients engendres." -crans.impression.codes.batJ = u"B7806" - - -[/static] -sessionAuthenticateFilter.on=False -sessionFilter.on = False -server.output_filters.templatesEngine.on = False -staticFilter.on = True -staticFilter.dir = "/usr/scripts/intranet/static/" - -#[/favicon.ico] -#sessionAuthenticateFilter.on=False -#sessionFilter.on = False -#server.output_filters.templatesEngine.on = False -#staticFilter.on = True -#staticFilter.file = "/usr/scripts/intranet/static/favicon.ico" diff --git a/intranet/conf/prod.cfg b/intranet/conf/prod.cfg deleted file mode 100644 index d9c45080..00000000 --- a/intranet/conf/prod.cfg +++ /dev/null @@ -1,22 +0,0 @@ -# The configuration file called prod.conf -[global] -server.socketPort=8080 -server.socketHost="" -server.socketFile="" -server.socketQueueSize=5 -server.protocolVersion="HTTP/1.0" -server.logToScreen=False -server.logFile="/var/log/crans/intranet.log" -server.logAccessFile="" -server.logTracebacks=True -server.reverseDNS=False -server.threadPool=10 -server.environment="production" -server.show_tracebacks= True -server.log_config_options= False -server.max_request_body_size=10485760 #10Mo -logDebugInfoFilter.on = False - -base_url_filter.on = True -base_url_filter.base_url = "https://intranet.crans.org/" -base_url_filter.use_x_forwarded_host = True diff --git a/intranet/disabled.modules/quota/main.py b/intranet/disabled.modules/quota/main.py deleted file mode 100644 index a65e3b4b..00000000 --- a/intranet/disabled.modules/quota/main.py +++ /dev/null @@ -1,112 +0,0 @@ -#! /usr/bin/env python -import cherrypy, tempfile, shutil, os - -import crans.cp -from ClassesIntranet.ModuleBase import ModuleBase -import crans.utils.quota as quota - -class main(ModuleBase): - _droits=["personnel"] - def category(self): - return "Personnel" - def title(self): - return "Quotas" - def icon(self): - try: - quotas = self._get_quota() - for a_quota in quotas: - if a_quota['quota'] < a_quota['usage']: - return "icon_alert.png" - return "icon.png" - except: - return "icon_disabled.png" - - def _get_quota(self): - if (cherrypy.config.configMap["global"]["server.environment"] == "development"): - return quota.fake_getUserQuota(cherrypy.session['uid']) - else: - return quota.getUserQuota(cherrypy.session['uid']) - - - ########################## - # affichage - ########################## - # - # methode qui affiche la template - # - def index(self ): - values = {} - try: - quotas = self._get_quota() - returned_quotas = [] - for a_quota in quotas: - # calculate text equivalent - quota = a_quota['quota'] - usage = a_quota['usage'] - limite = a_quota['limite'] - text_equiv = "[" - text_equiv+= "#" * min( 10, int( 10 * usage / quota ) ) - text_equiv+= "." * max(0, int( 10 * ( quota - usage ) / quota ) ) - if limite > quota: - text_equiv+= "|" - limite_diff = limite - quota - diff_proportion = 10 * limite_diff / quota - depassement = max(0, usage - quota) - text_equiv+= "#" * min(0, int(diff_proportion* ( depassement / limite_diff ) ) ) - text_equiv+= "." * max(0, int(diff_proportion*( limite_diff - depassement ) / limite_diff ) ) - text_equiv+= "]" - a_returned_quota = { - "label":a_quota['label'], - "usage":a_quota['usage'], - "quota":a_quota['quota'], - "limite":a_quota['limite'], - "percents":a_quota['%'], - "%":a_quota['%'], - "text_equiv":text_equiv, - "svg_url":"barreSVG?filesystem=%s" % a_quota['filesystem'], - } - returned_quotas.append(a_returned_quota) - values = {'quotas': returned_quotas} - except Exception, e: - crans.cp.log('error getting quota for user %s : %s' % (cherrypy.session['uid'], str(e)), 'QUOTA', 1) - values = {'erreur':str(e)} - return {'template':'quota', - 'values': values, - 'stylesheets':['quota.css'], - 'scripts':['quota.js', 'popup.js'], - } - index.exposed = True - - def index_html(self ): - result = self.index() - result['template'] = 'quota_html' - return result - index_html.exposed = True - - - ########################## - # SVG - ########################## - # - # methode qui renvoie une barre en svg - # - def barreSVG(self, filesystem = ""): - try: - values = {'erreur':"Not found"} - quotas = self._get_quota() - for a_quota in quotas: - if a_quota['filesystem'] == filesystem: - values = { - "usage":a_quota['usage'], - "quota":a_quota['quota'], - "limite":a_quota['limite'], - "percents":a_quota['%'], - } - except Exception, e: - values = {'erreur':str(e) } - cherrypy.response.headers['Content-Type']="image/svg+xml" - return {'template':'barre.svg', - 'values': values, - 'standalone':True, - } - barreSVG.exposed= True diff --git a/intranet/disabled.modules/quota/static/icon.png b/intranet/disabled.modules/quota/static/icon.png deleted file mode 100644 index 7621d2fa8ccf8e25d152dc9f483db7ff111e8762..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 986 zcmV<0110>4P)~z*?ul2sm|^| zFYQmFup1MobLdcD5zI`Dn}9K7Uz4to}LSBWGK`T5BgbmJzLba<`wKJTo4 zM5TCrIRKg`KhgKTr~2w(`GAM~()x`LH}6gtQ6HdSiYDp53{_dV5G? zyUp3|F43)9xNB>30Vv3_!86QiOXKj!vMCMYqoak)1fv9EbCahJ9-N;eD!(u!=8Ff+{1L!lWxiYXiQgWAWmgwtd}W5Vc7YM$zmc-U6FyY zwI+ASN|78NYfo7Q)YjFD&`Te}?;oR%0>B-6yL9(cs0=IJ4`Ka1&8MHh;b(AC8l;b+ z=}i7N5dVO%YQSAH05|^wqF+J20<4YIgya1M;m{xAm5Bn3Ao&x*(UwR+VWLiw=MX*v zt7>LI2th6et+jfi$D!Rsq!z--DOEGd>zX;0&Jch92+2@HD}$QmQ-Ix7Byxb>k>Cmq zte7FeY42?cXE(@KQ|h0T$z+`z3x&;LED>>vBt?=TofPS02!{P1XyX{T2{6K(L7tp) z974YGE~$0l8Mc&Cjm)Rj-=tOeaxvTA(JYIhT$W=1aw#RQ>$1JQ&9Y+TD|QeBk?Xok z|28ZZi$qb>w_B~&w?N`JPD2PG7xX!<9}6LbbX_;z+uOVU51THNHG}PkyRMP)pXrv@Hk}8M~7HJESy!av(wNSPXmI#7q#5W1W zDybA>wIV7-sXo|3kv>=u|GcOviVY&Au@X#Mg>5v(CE0BDPj+W_ZXb5LnN21((I!2x z46|ou&Ntt8&Uf#K2M-=>4uwLWMx)UHAe2&A!+QQ7=1jnd$Kz+klP6EQLZQ&RV`F2? zc36S9-EJb0NWYd&rvuq+mV7?XTt+IDLQ3h@q?GC(Wbt@>PKrw@@%elxrO>SO#9}dO zYiltKqja$lV#){E<)-Qdr4&jjOw%M9jpFn90LlS)JRX9<;H>vSG#V{|m;BG6O-0@7 zgkh$+^Y}9o*$58lWPy7vZ!O$}&s8-y03yRbG3NOW{~LwJr?|!af!}zq?!@GVoDEtt z`Pife9Z5f(I|-!Fh$R!G4ad0g$f}nEutwtEJ)U2@$XI_rn%|G7p@G`AHh9TMTEi*l zF&s~zRgC}F;I5fI1J8~fV{xoVV=Tt#!-r(HY(ZbNXj%X&q}RqX?A4aGi$^{`NyF@m z7qhY^*h(Pk>UetfYUwH_r84G*YuBh8a`E>0DOs3eIRA|SyCyS>lJxiE{puXa?b~U; zex1nX&8+;!#QALG96EG}@0Ts3!e2$*;cL^E zK-lbj%4D%4PUYe5UAS-o4jjNN?s!yXC3JMK;KyI#&YfxYz{DN0QW!%+mb)DG@3LnP ztXKi9t>u8XZ9}YD1#N9GVZzF|^yF?q?+2(CDL^lKyWGQ%z*p?_Xc`u;vH0|3IJXIY z9)!!6LDMGr2uF{?`t^vzjj-XOJp;P=2+}=4RNq5x)E#nMh1#KnQ^;3d6dvImw_FLF60=r-|F2$Gg}Ag<_Lc1B`<@RI8bN|W+ft< zLy|+1M>=yzXCBAX5qv+~L~Q#6R<0~Ha7#-IJv}`%Ha3nIsIP~eJDGpt1j*gIAs9sT z_4WNyU0uB@nM~5x*EeG?U*6u%{QLLe(IZrKb&2}k-do7=Z$M0j)q;~68Rxe);r%xj+ISd0_ zE`l8$E^T07;A_BeI-MaQgq+DIcbyP5F3{P#w`A4IV%_fpT)Kp5XX#3*tYJL+8)`ZS U5rIayPXGV_07*qoM6N<$g0ih+%K!iX diff --git a/intranet/disabled.modules/quota/static/icon_digicode.png b/intranet/disabled.modules/quota/static/icon_digicode.png deleted file mode 100644 index fe3729c6852d97d7da651e288ecad003da799a73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1388 zcmV-y1(W)TP)WFU8GbZ8({Xk{QrNlj4iWF>9@00huUL_t(o!>yNHY?Db#|VTv<_3K{Og=dU~4M zw{K&bCWc|)a=GyNeC*n_i`A=FNy1Hzwt*wMYA$odx{+^tiYytkHz}C~$)Fd4p9pd$R z1^5ss&awV6yWKw3-Q6wy{rz(6*fCK`oyc{7kwaGEbUI(Hsi`3x4l^+^@dI!Oh~?OG z(KOBd0|Ntc{rYw4>gsU2-FpfJ;4LpN_b8%$^KFc{1UAQLqnpbBWvTBpv} z1N#!Uivv3Gjb-SLg-y|D6u=3DmIPoJT0#^bVQsdUMT zWJE7pnHk`!iY&kZRAYj|d;zGmRV$LiwKeec?!|jvIglgX8NQ4b&yNAu;$Yg}2aUeu zxcw=3=k09D8WX|LRsaJED9!vvCQ~ZCkx|PXGb?M&`sSBrz>#^?sWT9sPmceZhOf?M zse6qbSrh8gUf|3u@BMV~+=;$SH`xrTDywVd2B3hF#j;Dk!tgJP=g*yoiEHVxCA3x$A*& zn3&es|9yZN09^S4_Oyc*>&BV-vkQ#?0000 - - - -#if $getVar('usage', False) - -#set total = $limite -#set barwidth = 700 -#set quota = $quota -#set widthquota = int( barwidth * $quota/$limite ) -#set widthusage = int( barwidth * $usage/$limite ) -#set usage = $usage -#set usage_percent = int( 100 * $usage/$limite ) -#set quota_percent = int( 100 * $quota/$limite ) - - - - - - - - - - - - -0Mo -$int(quota) Mo -$int(total) Mo - - - - - -$percents% - - -#else - -$getVar('erreur', 'BROKEN') - -#end if - diff --git a/intranet/disabled.modules/quota/templates/quota.tmpl b/intranet/disabled.modules/quota/templates/quota.tmpl deleted file mode 100644 index 07d8c2c6..00000000 --- a/intranet/disabled.modules/quota/templates/quota.tmpl +++ /dev/null @@ -1,13 +0,0 @@ -
- -#for un_truc in $quotas -

$un_truc.label

- - -#end for - -
Si les graphiques ne s'affichent pas, essayez la version html
- -
\ No newline at end of file diff --git a/intranet/disabled.modules/quota/templates/quota_html.tmpl b/intranet/disabled.modules/quota/templates/quota_html.tmpl deleted file mode 100644 index 9cf178a7..00000000 --- a/intranet/disabled.modules/quota/templates/quota_html.tmpl +++ /dev/null @@ -1,22 +0,0 @@ -
- - -#for un_truc in $quotas -

$un_truc.label

- #set total = $un_truc.limite - #set usage = int( 100 * $un_truc.usage/$un_truc.limite ) - #set quota = int( 100 * $un_truc.quota/$un_truc.limite ) -
-
- - $un_truc.text_equiv - -
-
-
$un_truc['%'] % - -#end for - - - -
\ No newline at end of file diff --git a/intranet/intranet-garbage-collector.py b/intranet/intranet-garbage-collector.py deleted file mode 100755 index b61e0230..00000000 --- a/intranet/intranet-garbage-collector.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python -import sys -sys.path.append('/usr/scripts/impression/') -import crans.utils.files, os, time, digicode -tools = crans.utils.files -PDF_FOLDER = "/var/impression/fichiers/" - -def cleanFolder(pathToFolder): - print "cleaning %s" % pathToFolder - if not os.path.isdir(pathToFolder): - raise Exception, "%s n'est pas un dossier" % pathOfFolder - fileList = os.listdir(pathToFolder) - for aFile in fileList: - aFilePath = os.path.join(pathToFolder, aFile) - if os.path.isdir(aFilePath): - cleanFolder(aFilePath) - if tools.dirIsEmpty(aFilePath): - os.rmdir(aFilePath) - print "Folder %s removed" % aFilePath - if os.path.isfile(aFilePath): - if tools.fileIsOlderThan(aFilePath, days=1): - os.remove(aFilePath) - -now = time.localtime() -displaytime = time.strftime("%A %d %B %Y, %X",now) -print "................ %s ................" % displaytime -cleanFolder(PDF_FOLDER) -print "Cleaning codes" -digicode.menage() -print diff --git a/intranet/modules/digicode/main.py b/intranet/modules/digicode/main.py deleted file mode 100644 index 7d988aab..00000000 --- a/intranet/modules/digicode/main.py +++ /dev/null @@ -1,81 +0,0 @@ -#! /usr/bin/env python -import cherrypy, tempfile, shutil, os, sys - -sys.path.append('/usr/scripts/impression') -import crans.cp, digicode -from ClassesIntranet.ModuleBase import ModuleBase - - -class main(ModuleBase): - _droits = ["Imprimeur"] - def category(self): - return "Imprimeur" - def title(self): - return "Digicode" - - ########################## - # affichage - ########################## - # - # methode qui affiche la template - # - def index(self, submit = None, fileList = None, newFile = None ): - return {'template':'digicode', - 'values':{}, - 'stylesheets':['digicode.css'], - 'scripts':['digicode.js'], - } - index.exposed = True - - - ########################## - # AJAX - ########################## - # - # methode qui renvoie la liste des codes - # - def codeList(self): - try: - listeBrute = digicode.list_code() - liste_formatee = [] - for aCode in listeBrute: - age = int(aCode[1]) - age_jours = (age/3600)/24 - age_heures = (age/3600) - age_jours*24 - age_minutes = (age/60) - (age/3600)*60 - if age_jours > 0: - age_string = "%sj %sh %smin" % (str(age_jours), str(age_heures), str( age_minutes )) - elif age_heures > 0: - age_string = "%sh %smin" % (str(age_heures), str( age_minutes )) - else: - age_string = "%smin" % (str( age_minutes )) - liste_formatee.append({'code':aCode[0], 'age':age_string, 'desc':aCode[2]}) - return {'codes': liste_formatee} - except Exception, e: - crans.cp.log('erreur lors de la creation de la liste de codes :' + str(e), 'DIGICODE', 1) - return {'erreur':str(e)} - codeList.exposed= True - - # - # methode qui cree un code - # - def createCode(self, code=None, adherent=''): - try: - if adherent == '': - adherent = cherrypy.session['uid'] - if code: - try: - int(code) - if code.__len__() != 6: - raise - except: - return {'formatErreur':1} - code = digicode.save_code(code, adherent) - else: - code = digicode.gen_code(adherent) - crans.cp.log("code cree : %s" % code, 'DIGICODE') - return {'code': code, "age" : "new", "desc":adherent} - except Exception, e: - crans.cp.log("erreur lors de la creation de code : " + str(e), 'DIGICODE', 1) - return {'erreur':str(e)} - createCode.exposed= True diff --git a/intranet/modules/digicode/static/digicode.css b/intranet/modules/digicode/static/digicode.css deleted file mode 100644 index 921f9165..00000000 --- a/intranet/modules/digicode/static/digicode.css +++ /dev/null @@ -1,85 +0,0 @@ -/************************************************************* - .. - .... ............ ........ - . ....... . .... .. - . ... .. .. .. .. ..... . .. - .. .. ....@@@. .. . ........ . - .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. .... - .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... .... - @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. .. - .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. ..... - ...@@@.... @@@ .@@.......... ........ ..... .. - . ..@@@@.. . .@@@@. .. ....... . ............. - . .. .... .. .. . ... .... -. . .... ............. .. ... -.. .. ... ........ ... ... - ................................ - -============================================================== -digicode.css - Intranet Style - - STYLE PAGE DU DIGICODE - - -Copyright (c) 2006 by www.crans.org - -**************************************************************/ -#codesTable { -width:60%; -border:thin black solid; -float:left; -} - - -#codesTable thead { -color:gray; -} - -#codesTable .code { -border-right:thin gray solid; -width:70%; -} - -#codesTable tbody .age { -text-align:right; -} - -#codesTable td, -#codesTable th { -margin:0; -padding:2px 5px; -} - -#codesTable tbody td { -border-top:thin gray solid; -} - -#codesTable thead th { -border-top:none; -} - - -div#addCodeBox { -float: right; -border:thin black solid; -padding:10px; -margin:0 5%; -width:25%; -} - -div#addCodeBox h1 { -font-size:1.1em; -margin:2px 10px 20px 10px; -text-align:center; -} - -div#addCodeBox form { -} -div#addCodeBox form input, -div#addCodeBox form button { -margin:3px; -} - -form input.textinput { -border: thin gray solid; -} diff --git a/intranet/modules/digicode/static/digicode.js b/intranet/modules/digicode/static/digicode.js deleted file mode 100755 index f9a471ac..00000000 --- a/intranet/modules/digicode/static/digicode.js +++ /dev/null @@ -1,160 +0,0 @@ -/* ************************************************************ - * Digicode - ************************************************************ - * Digicode.init : initialisation de la page - * Digicode.makeCode : creation de codes - * Digicode.codelist : liste des codes - * Digicode.AJAX : ajax - */ -Digicode = {}; - -/***************************** - Digicode.init - *****************************/ -Digicode.init = function() -{ - // afficher le tableau codelist - appendChildNodes("globalDiv", Digicode.codelist.create()); - // recuperer la liste des codes - this.codelist.load(); - // afficher le formulaire de creation de code - appendChildNodes("globalDiv", DIV({"id":"addCodeBox"})); - Digicode.makeCode.displayForm(); -} - -/***************************** - Digicode.makeCode - *****************************/ -Digicode.makeCode = {} - -Digicode.makeCode.displayForm = function() -{ - var myForm = FORM({'id':'createCodeForm', 'name':'createCodeForm','onsubmit':"Digicode.makeCode.createCode(document.createCodeForm.newCodeLogin.value, document.createCodeForm.newCode.value); return false;", 'style':'display: none;'}, - LABEL({'for':'newCodeLogin'}, "Login adhérent :"), - INPUT({"name":"newCodeLogin", "size":"10", "maxlength":"20", "class":"textinput"}), - BR(), - LABEL({'for':'newCode'}, "Code :"), - INPUT({"name":"newCode", "size":"6", "maxlength":"6", "class":"textinput"}), - BUTTON({"type":"submit","onclick":"Digicode.makeCode.createCode(document.createCodeForm.newCodeLogin.value, document.createCodeForm.newCode.value); return false;", "style":"float:right;"},"Créer code"), - BUTTON({"type":"button","onclick":"Digicode.makeCode.createCode(document.createCodeForm.newCodeLogin.value)", "style":"float:right;"},"Code aléatoire") - ); - replaceChildNodes("addCodeBox", H1({},"Nouveau code"), myForm ); - appear(myForm); - -} - -Digicode.makeCode.restoreForm = function() -{ - try - { - removeElement("newCodeDisplay"); - removeElement("loading"); - } catch (error){} - appear("createCodeForm"); - -} - -Digicode.makeCode.disableForm = function() -{ - try - { - var form = getElement("createCodeForm"); - var elts = form.elements; - for (i=0 ; i < elts.length ; i++) - elts[i].disabled = true; - } - catch (error){} -} - -Digicode.makeCode.createCode = function(login, code) -{ - var image = createDOM("IMG",{'style':'margin-right:2px;float:right;','src':'/static/images/indicator.gif'}); - appendChildNodes("addCodeBox", DIV({'id':"loading",'style':'display:none;max-height:1em;float:left;'},image,"Loading")); - this.disableForm(); - //removeElement("createCodeForm"); - appear("loading"); - if (code) - Digicode.AJAX.call("createCode?code="+code + "&adherent=" + login, this.handleNewCode); - else - Digicode.AJAX.call("createCode?adherent=" + login, this.handleNewCode); -} - -Digicode.makeCode.handleNewCode = function(res) -{ - if (res.code) - { - replaceChildNodes("addCodeBox", - H1({}, "Code créé"), - DIV({'id':"newCodeDisplay", - 'style':'display:none;font-size:2em;maring:1em;font-weight:bold;text-align:center;', - 'onclick':"Digicode.makeCode.displayForm();"},res.code)); - appear("newCodeDisplay"); - //removeElement("loading"); - Digicode.codelist.addCode(res); - } else if (res.erreur) { - logError("Erreur distante : " + res.erreur); - alert("Erreur sur le serveur, le code est peut-être déjà pris.") - Digicode.makeCode.displayForm(); - } else if (res.formatErreur) { - alert("Ceci n'est pas un code valide"); - Digicode.makeCode.displayForm(); - } -} - -/***************************** - Digicode.codelist - *****************************/ -Digicode.codelist = {}; - -Digicode.codelist.create = function () -{ - var thead = createDOM("thead", {}, - createDOM("th", {'class':'code'}, "Code" ), - createDOM("th", {'class':'age'}, "Age") - ); - var tbody = createDOM("tbody", {"id":"codeList"}); - return TABLE({"id":"codesTable", "cellspacing":"0"}, thead, tbody) -} - - - -Digicode.codelist.load = function() -{ - Digicode.AJAX.call("codeList", Digicode.codelist.displayCodes); -} - -Digicode.codelist.displayCodes = function(result) -{ - if (result.codes) - replaceChildNodes('codeList',map(Digicode.codelist.newCodeTrNodeFromDict,result.codes)); - else if (result.erreur) - logError("Erreur distante : " + result.erreur); -} - -Digicode.codelist.newCodeTrNodeFromDict = function (aDict, style) -{ - if (style) { - var aRow = createDOM("TR", {'id':'code'+aDict.code,"style":style}); - } else - var aRow = createDOM("TR", {'id':'code'+aDict.code}); - appendChildNodes(aRow, createDOM("TD", {'class':'code'}, aDict.code, SPAN({'style':'color:gray;margin-left:2em;'}, aDict.desc ) ) ); - appendChildNodes(aRow, createDOM("TD", {'class':'age'}, aDict.age) ); - return aRow; -} - -Digicode.codelist.addCode = function (aDict) -{ - var newLine = this.newCodeTrNodeFromDict(aDict); - appendChildNodes("codeList", newLine); - pulsate(newLine); -} - - -/***************************** - Digicode.AJAX - *****************************/ -Digicode.AJAX = {} - -Digicode.AJAX.call = AJAX.call - -setInterval(Digicode.codelist.load, 30000); diff --git a/intranet/modules/digicode/static/icon.png b/intranet/modules/digicode/static/icon.png deleted file mode 100755 index fe3729c6852d97d7da651e288ecad003da799a73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1388 zcmV-y1(W)TP)WFU8GbZ8({Xk{QrNlj4iWF>9@00huUL_t(o!>yNHY?Db#|VTv<_3K{Og=dU~4M zw{K&bCWc|)a=GyNeC*n_i`A=FNy1Hzwt*wMYA$odx{+^tiYytkHz}C~$)Fd4p9pd$R z1^5ss&awV6yWKw3-Q6wy{rz(6*fCK`oyc{7kwaGEbUI(Hsi`3x4l^+^@dI!Oh~?OG z(KOBd0|Ntc{rYw4>gsU2-FpfJ;4LpN_b8%$^KFc{1UAQLqnpbBWvTBpv} z1N#!Uivv3Gjb-SLg-y|D6u=3DmIPoJT0#^bVQsdUMT zWJE7pnHk`!iY&kZRAYj|d;zGmRV$LiwKeec?!|jvIglgX8NQ4b&yNAu;$Yg}2aUeu zxcw=3=k09D8WX|LRsaJED9!vvCQ~ZCkx|PXGb?M&`sSBrz>#^?sWT9sPmceZhOf?M zse6qbSrh8gUf|3u@BMV~+=;$SH`xrTDywVd2B3hF#j;Dk!tgJP=g*yoiEHVxCA3x$A*& zn3&es|9yZN09^S4_Oyc*>&BV-vkQ#?0000 -

Gestion des codes pour le local impression

- - - diff --git a/intranet/modules/factures/main.py b/intranet/modules/factures/main.py deleted file mode 100755 index 551779db..00000000 --- a/intranet/modules/factures/main.py +++ /dev/null @@ -1,248 +0,0 @@ -#! /usr/bin/env python -# -*- coding: iso-8859-15 -*- -# ##################################################################################################### # -# Mes Sous -# ##################################################################################################### # -# Description: -# Affiche la liste des factures et l'historique de debits/credits de l'adherent. -# Fait aussi les rechargements Paypal -# Informations: -# -# Pages: -# index:liste des factures -# historique: historique des débits/crédits -# rechargementPaypal: Comme son nom l'indique -# -# ##################################################################################################### # -import cherrypy, sys, os, datetime - - -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 Solde" - def category(self): - return "Personnel" - def icon(self): - return "icon.png" - - _club = False - _adh = False - - - - 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 - - - def index(self, message = '', error = ''): - adh = cherrypy.session['LDAP'].getProprio(cherrypy.session['uid']) - t = {} - t['message'] = message - t['error'] = error - - ############## liste des factures ############## - listeFactures = [] - for f in adh.factures(): - facture = {} - facture['no'] = f.numero() - facture['intitule'] = f.articles()[0]['designation'] - facture['details'] = [ - { - 'intitule':art['designation'], - 'quantite':art['nombre'], - 'prixUnitaire':art['pu'], - 'prixTotal':art['pu']*art['nombre'], - } for art in f.articles()] - facture['montant'] = f.total() - facture['paypal'] = 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", - ) - - facture['payee'] = f.recuPaiement() - listeFactures.append(facture) - t['listeFactures'] = listeFactures - - return { - 'template' :'factures', - 'values' :t, - 'stylesheets' :['cransFactures.css'], - 'scripts' :[], - } - index.exposed = True - - def historique(self, page = 1, items_per_page = 20): - adh = cherrypy.session['LDAP'].getProprio(cherrypy.session['uid']) - - lst = [ x for x in adh.historique() if x.split(u' : ',1)[1].startswith(u'credit') or x.split(u' : ',1)[1].startswith(u'debit') ] - histLst = [] - for anItem in lst: - aLine = {} - aLine["date"] = anItem.split(u",")[0] - aLine["type"] = anItem.split(u' : ',2)[1].split(u' ')[0] - aLine["montant"] = anItem.split(u' : ',2)[1].split(u' ')[1] - try: - aLine["intitule"] = anItem.split(u'[')[1].split(u']')[0] - except Exception: - aLine["intitule"] = "" - histLst.append(aLine) - - histLst.reverse() - page = int(page) - items_per_page = int(items_per_page) - if page == 1: - prevPage = None - else: - prevPage = page - 1 - - if page * items_per_page >= histLst.__len__(): - nextPage = None - else: - nextPage = page + 1 - offset = items_per_page * ( page - 1) - - - return { - 'template' :'factures-historique', - 'values' :{ - 'liste':lst, - 'historic_items':histLst[offset:offset + items_per_page], - 'nextPage':nextPage, - 'prevPage':prevPage - }, - 'stylesheets' :['cransFactures.css'], - 'scripts' :[], - } - historique.exposed = True - - def delFacture(self, no): - try: - # trrouver la factures - fact = cherrypy.session['LDAP'].search('fid=' + no, 'w')['facture'][0] - #verifier qu'elle appartient bien a l'adherent - if not fact.proprietaire().mail() == cherrypy.session['uid']: - raise Exception, "Impossible de supprimer cette facture" - # la supprimer - fact.delete() - except Exception, e: - cherrypy.log(str(e), "FACTURES", 1) - return self.index() - delFacture.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'].getProprio(cherrypy.session['uid']) - 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 apres 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 - diff --git a/intranet/modules/factures/static/cransFactures.css b/intranet/modules/factures/static/cransFactures.css deleted file mode 100755 index cc230642..00000000 --- a/intranet/modules/factures/static/cransFactures.css +++ /dev/null @@ -1,205 +0,0 @@ -/******************************************** - * -********************************************/ -#globalDiv { - //padding-left:20%; - position: relative; -} - -ul#actionMenu { - list-style-type:none; - width:18%; - padding:0; - float:left; -} - -h1 { - font-size:1.4em; - margin:2px; -} -td, tr { - margin:0; -} - -#factureListDiv { - padding:5px; - background:#fad163; - float:left; - width:75%; -} - -#factureListDiv table#listeFactures { - padding:0; - width:100%; -} - -.factureRow { - margin:2px; - position:relative; -} - -.help_text { - background:#fff7D7; - font-weight:normal; - padding:10px 20px; - -} - -.factureRow .factureSummary { - background:#fff7D7; - height:30px; - font-weight:bold; - padding:10px 20px; -} - -.factureRow .factureSummary span.intitule { - float:left; -} - -.factureRow .factureSummary span.montant { - float:right; - text-align:right; -} - -.tdNoFactures { - text-align:center; - font-size:1.2em; - background-color:#fff7D7; - color:#666; - margin:0; - padding:5px; -} - -.facturePayee { -} -.factureNonPayee .factureSummary { - color:red; -} - - -.actions { - display:block; - float:right; - font-size:0.9em; - font-weight:normal; -} -.actions a { - margin:2px 10px; -} - -/******************************************** - * -********************************************/ - -table.factureDetails { - background: #fff7D7 url(fondFacturesDetails.png) repeat-x top; - 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; -} - -/******************************************** - * -********************************************/ -.note { - display:block; - font-size:small; - margin:3px; - font-weight:normal; -} -.note { - color:#666 -} - -.linkToggle { - display:block; - float:left; - height:15px; - width:15px; - background:transparent url(fl.png) top left; - margin-right:1px; -} - -/******************************************** - * -********************************************/ - -table#historique_sous { - width:100%; -} - -table#historique_sous td { - background:#fff7D7; - padding:5px; - text-align:center; - border-top:2px #fad163 solid; -} - -table#historique_sous th { - background:#fff7D7; - padding:5px; - text-decoration:underline; -} - -/******************************************** - * -********************************************/ - -form.search { - display:block; - border: thin black solid; - padding:.2em 1em; - float:left; - //position:absolute; - width:18%; - //top:0; - //left:0; - margin:0 1%; -} - -form.search input { - max-width:95%; - margin:.3em; - float:left; - border: thin gray solid; -} - -form.search label { - padding-top:7px; - display:block; - width:4em; - float:left; - clear:left; -font-weight:bold; -} - -form.search h3 { - margin:.2em 0; -} - -form.search input.button { - margin:.5em; - text-align:center; - clear:left; -} - diff --git a/intranet/modules/factures/static/fl.png b/intranet/modules/factures/static/fl.png deleted file mode 100755 index 2c72f9ea7dee9e97c1be297eb655c827d4a95306..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3111 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 - -
- - - -
-

Historique

-
-
- #if $prevPage - << moins vieux - #else - << moins vieux - #end if -  |  - #if $nextPage - plus vieux >> - #else - plus vieux >> - #end if -
- - - - - - - - #for anItem in $historic_items - - - - #if $anItem.type=="debit" - - #else - - #end if - #if $anItem.type=="credit" - - #else - - #end if - - #end for - #if $historic_items == [] - - #end if -
DateIntituléDébitCrédit
$anItem.date$anItem.intitule$anItem.montant $anItem.montant 
- AUCUNE TRANSACTION ENREGISTRÉE -
-
- -
-
diff --git a/intranet/modules/factures/templates/factures.tmpl b/intranet/modules/factures/templates/factures.tmpl deleted file mode 100755 index 7551fcc8..00000000 --- a/intranet/modules/factures/templates/factures.tmpl +++ /dev/null @@ -1,107 +0,0 @@ -
- -#if $message != '' - -#end if - -#if $error != '' - -#end if - - - - -
- - -
-

Mes factures PayPal

- - #for f in $listeFactures - #if $f.payee -
- #else -
- #end if -
- - #if $f.details.__len__() > 1 - - #end if - $f.intitule - #if not $f.payee - (non payée) - #end if - - - - $f.montant € - - Crée le - - #if not $f.payee - - Annuler - Payer avec PayPal - - #else - Payée - #end if - -
- #if $f.details.__len__() > 1 - -
- #end if - #end for - - #if $listeFactures == [] -
- AUCUNE TRANSACTION PAYPAL ENREGISTRÉE -
- #end if -
- -
diff --git a/intranet/modules/gestionFactures/main.py b/intranet/modules/gestionFactures/main.py deleted file mode 100755 index 6c37b7c7..00000000 --- a/intranet/modules/gestionFactures/main.py +++ /dev/null @@ -1,147 +0,0 @@ -#! /usr/bin/env python -# -*- coding: iso-8859-15 -*- -# ##################################################################################################### # -# Factures (gestion) -# ##################################################################################################### # -# Description: -# Permet de chercher dans les facture, d'en créditer et d'en supprimer -# Informations: -# -# Pages: -# index:afiche le formulaire et les factures -# -# ##################################################################################################### # -import cherrypy, sys, os, datetime -import crans.cp, crans.utils.exceptions -from ClassesIntranet.ModuleBase import ModuleBase - -class main(ModuleBase): - _droits = ["Imprimeur"] - def title(self): - return "Gestion factures" - def category(self): - return "Imprimeur" - - def index(self, message = '', erreur = ''): - if cherrypy.session.has_key('gestion_factures-current_search'): - del cherrypy.session['gestion_factures-current_search'] - return self.displayTemplate() - index.exposed = True - - def search(self, fid=None, uid=None, aid=None): - cherrypy.session['gestion_factures-current_search'] = { - "fid":fid, - "uid":uid, - "aid":aid, - } - return self.displayTemplate() - search.exposed = True - - - - def displayTemplate(self, message = '', erreur = ''): - t = {} - t['message'] = message - t['error'] = erreur - if cherrypy.session.has_key('gestion_factures-current_search'): - fid = cherrypy.session['gestion_factures-current_search']['fid'] - uid = cherrypy.session['gestion_factures-current_search']['uid'] - aid = cherrypy.session['gestion_factures-current_search']['aid'] - t['listeFactures'] = self.buildInvoiceList( - fid = fid, - uid = uid, - aid = aid, - ) - - else: - fid = "" - uid = "" - aid = "" - t["form"] = [] - t["form"]+= [{'name':'fid', 'label':'fid', 'value':fid}] - t["form"]+= [{'name':'uid', 'label':'login', 'value':uid}] - t["form"]+= [{'name':'aid', 'label':'aid', 'value':aid}] - - return { - 'template' :'factures-gestion', - 'values' :t, - 'stylesheets' :['cransFactures.css'], - } - - - - - def buildInvoiceList(self, fid=None, uid=None, aid=None): - ############## liste des factures ############## - if fid: - search_string = "fid=%s" % str(fid) - liste_factures_ldap = cherrypy.session['LDAP'].search(search_string)['facture'] - elif uid: - search_string = "uid=%s" % str(uid) - try: - liste_factures_ldap = cherrypy.session['LDAP'].search(search_string)['adherent'][0].factures() - except: - liste_factures_ldap = [] - elif aid: - search_string = "aid=%s" % str(aid) - try: - liste_factures_ldap = cherrypy.session['LDAP'].search(search_string)['adherent'][0].factures() - except: - liste_factures_ldap = [] - else: - return [] - liste_factures_affichees = [] - for f in liste_factures_ldap: - try: - facture = {} - facture['no'] = f.numero() - proprio = f.proprietaire() - if proprio.objectClass == 'club': - proprio = proprio.responsable() - facture['adherent'] = proprio.mail() - facture['montant'] = f.total() - facture['payee'] = f.recuPaiement() - facture['date'] = f.historique()[0].split(',')[0] - facture['url'] = f.urlPaypal() - facture['intitule'] = f.articles()[0]['designation'] - facture['details'] = [ - { - 'intitule':art['designation'], - 'quantite':art['nombre'], - 'prixUnitaire':art['pu'], - 'prixTotal':art['pu']*art['nombre'], - } for art in f.articles()] - liste_factures_affichees.append(facture) - except: - crans.cp.log("Facture non affichable : fid=%s" % str(f.numero()), "GESTION FACTURES", 1) - - liste_factures_affichees.sort(lambda x,y : cmp(int (y['no']), int(x['no']))) - return liste_factures_affichees - - def delFacture(self, fid): - try: - # trrouver la factures - fact = cherrypy.session['LDAP'].search('fid=' + fid, 'w')['facture'][0] - # la supprimer - fact.delete() - except Exception, e: - crans.cp.log(unicode(e), "GESTION FACTURES", 1) - return self.index(erreur=u"Probleme lors de la suppression") - crans.cp.log(u"Facture supprimee [fid=%s]" % fid, "GESTION FACTURES") - return self.displayTemplate(message=u"Facture suprimée") - delFacture.exposed = True - - def crediteFacture(self, fid): - try: - # trrouver la factures - fact = cherrypy.session['LDAP'].search('fid=' + fid, 'w')['facture'][0] - # la supprimer - fact.recuPaiement(cherrypy.session['uid']) - fact.save() - except Exception, e: - crans.cp.log(unicode(e), "GESTION FACTURES", 1) - crans.cp.log( crans.utils.exceptions.formatExc( ), "GESTION FACTURES", 1) - return self.displayTemplate(erreur=u"Erreur: " + unicode(e) ) - crans.cp.log("Facture creditee [fid=%s]" % fid, "GESTION FACTURES") - return self.displayTemplate(message=u"Facture créditée") - crediteFacture.exposed = True diff --git a/intranet/modules/gestionFactures/static/cransFactures.css b/intranet/modules/gestionFactures/static/cransFactures.css deleted file mode 100755 index cc230642..00000000 --- a/intranet/modules/gestionFactures/static/cransFactures.css +++ /dev/null @@ -1,205 +0,0 @@ -/******************************************** - * -********************************************/ -#globalDiv { - //padding-left:20%; - position: relative; -} - -ul#actionMenu { - list-style-type:none; - width:18%; - padding:0; - float:left; -} - -h1 { - font-size:1.4em; - margin:2px; -} -td, tr { - margin:0; -} - -#factureListDiv { - padding:5px; - background:#fad163; - float:left; - width:75%; -} - -#factureListDiv table#listeFactures { - padding:0; - width:100%; -} - -.factureRow { - margin:2px; - position:relative; -} - -.help_text { - background:#fff7D7; - font-weight:normal; - padding:10px 20px; - -} - -.factureRow .factureSummary { - background:#fff7D7; - height:30px; - font-weight:bold; - padding:10px 20px; -} - -.factureRow .factureSummary span.intitule { - float:left; -} - -.factureRow .factureSummary span.montant { - float:right; - text-align:right; -} - -.tdNoFactures { - text-align:center; - font-size:1.2em; - background-color:#fff7D7; - color:#666; - margin:0; - padding:5px; -} - -.facturePayee { -} -.factureNonPayee .factureSummary { - color:red; -} - - -.actions { - display:block; - float:right; - font-size:0.9em; - font-weight:normal; -} -.actions a { - margin:2px 10px; -} - -/******************************************** - * -********************************************/ - -table.factureDetails { - background: #fff7D7 url(fondFacturesDetails.png) repeat-x top; - 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; -} - -/******************************************** - * -********************************************/ -.note { - display:block; - font-size:small; - margin:3px; - font-weight:normal; -} -.note { - color:#666 -} - -.linkToggle { - display:block; - float:left; - height:15px; - width:15px; - background:transparent url(fl.png) top left; - margin-right:1px; -} - -/******************************************** - * -********************************************/ - -table#historique_sous { - width:100%; -} - -table#historique_sous td { - background:#fff7D7; - padding:5px; - text-align:center; - border-top:2px #fad163 solid; -} - -table#historique_sous th { - background:#fff7D7; - padding:5px; - text-decoration:underline; -} - -/******************************************** - * -********************************************/ - -form.search { - display:block; - border: thin black solid; - padding:.2em 1em; - float:left; - //position:absolute; - width:18%; - //top:0; - //left:0; - margin:0 1%; -} - -form.search input { - max-width:95%; - margin:.3em; - float:left; - border: thin gray solid; -} - -form.search label { - padding-top:7px; - display:block; - width:4em; - float:left; - clear:left; -font-weight:bold; -} - -form.search h3 { - margin:.2em 0; -} - -form.search input.button { - margin:.5em; - text-align:center; - clear:left; -} - diff --git a/intranet/modules/gestionFactures/static/fl.png b/intranet/modules/gestionFactures/static/fl.png deleted file mode 100755 index 2c72f9ea7dee9e97c1be297eb655c827d4a95306..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3111 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 diff --git a/intranet/modules/gestionFactures/templates/factures-historique.tmpl b/intranet/modules/gestionFactures/templates/factures-historique.tmpl deleted file mode 100755 index 065725d9..00000000 --- a/intranet/modules/gestionFactures/templates/factures-historique.tmpl +++ /dev/null @@ -1,45 +0,0 @@ -
- -
- - - -
-

Historique

-
- - - - - - - - #for anItem in $historic_items - - - - #if $anItem.type=="debit" - - #else - - #end if - #if $anItem.type=="credit" - - #else - - #end if - - #end for - #if $historic_items == [] - - #end if -
DateIntituléDébitCrédit
$anItem.date$anItem.intitule$anItem.montant $anItem.montant 
- AUCUNE TRANSACTION ENREGISTRÉE -
-
- -
-
diff --git a/intranet/modules/gestionFactures/templates/factures.tmpl b/intranet/modules/gestionFactures/templates/factures.tmpl deleted file mode 100755 index 7551fcc8..00000000 --- a/intranet/modules/gestionFactures/templates/factures.tmpl +++ /dev/null @@ -1,107 +0,0 @@ -
- -#if $message != '' - -#end if - -#if $error != '' - -#end if - - - - -
- - -
-

Mes factures PayPal

- - #for f in $listeFactures - #if $f.payee -
- #else -
- #end if -
- - #if $f.details.__len__() > 1 - - #end if - $f.intitule - #if not $f.payee - (non payée) - #end if - - - - $f.montant € - - Crée le - - #if not $f.payee - - Annuler - Payer avec PayPal - - #else - Payée - #end if - -
- #if $f.details.__len__() > 1 - -
- #end if - #end for - - #if $listeFactures == [] -
- AUCUNE TRANSACTION PAYPAL ENREGISTRÉE -
- #end if -
- -
diff --git a/intranet/modules/impression/main.py b/intranet/modules/impression/main.py deleted file mode 100644 index d4735bb7..00000000 --- a/intranet/modules/impression/main.py +++ /dev/null @@ -1,291 +0,0 @@ -#!/usr/bin/env python -# -*- coding: iso-8859-15 -*- -# ############################################################# -# .. -# .... ............ ........ -# . ....... . .... .. -# . ... .. .. .. .. ..... . .. -# .. .. ....@@@. .. . ........ . -# .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. .... -# .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... .... -# @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. .. -# .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. ..... -# ...@@@.... @@@ .@@.......... ........ ..... .. -# . ..@@@@.. . .@@@@. .. ....... . ............. -# . .. .... .. .. . ... .... -# . . .... ............. .. ... -# .. .. ... ........ ... ... -# ................................ -# -# ############################################################# -# -# interface d'impression -# -# Copyright (c) 2006, 2007, 2008, 2009 by Cr@ns (http://www.crans.org) -# ############################################################# - -import cherrypy, tempfile, shutil, os, commands, sys, re -import crans.cp - -from threading import Thread -from re import compile - -sys.path.append('/usr/scripts/impression') -import digicode, etat_imprimante -from impression_canon import FichierInvalide,SoldeInsuffisant,impression -from traceback import format_exception - -BOOK_REGEXP = compile('book.pdf') -FILE_UPLOAD_BASE_FOLDER = cherrypy.config.get('fileUpload.folder', "/var/impression/fichiers/") - -class FileError(Exception): - pass -from ClassesIntranet.ModuleBase import ModuleBase - -def fmt_exc(e): - return '
'.join(format_exception(e)) - -# ############################################################# -# Classe d'impression en multithread -# ############################################################# -class threadedImpression(Thread, impression): - def __init__(self, path_to_pdf, adh = None, callback = None): - raise Exception('Code mort ') - self.tpath_to_pdf = path_to_pdf - self.tadh = adh - Thread.__init__(self) - - def run(self): - impression(self, self.tpath_to_pdf, self.tadh) - if self.tcallback: - self.tcallback(self) - - - -class main(ModuleBase): - def category(self): - return "Services" - def title(self): - return "Impression" - def icon(self): - return "icon.png" - _club = True - - ########################## - # affichage - ########################## - # - # template principale - # - def index(self, submit = None, fileList = None, newFile = None ): - data = {} - # on efface un eventuel objet impression existant - cherrypy.session['impression'] = None - if submit == "Envoyer": - try: - newFile.filename = re.sub("\s+", "_", newFile.filename) - newFile.filename = re.sub("[^\w\._]", "", newFile.filename) - self.savePDF(newFile) - data['fileName'] = newFile.filename.encode('ascii','replace').replace('?','_') - except FileError, e: - data['openError'] = e.args[0] - elif submit == "Choisir": - if (fileList): - data['fileName'] = fileList - else: - data['openError'] = "Choisissez un fichier" - - data['fileList'] = self.getUploadedFileListFor(cherrypy.session['uid']) - try: - etat_imprimante.etat() - except Exception, e: - data['Erreur_imprimante'] = str(e).replace("\"", "\\\"") - data['errorMsg'] = u"Imprimante injoignable" - adh = cherrypy.session['LDAP'].getProprio(cherrypy.session['uid']) - if not cherrypy.config.get('crans.activate', True): - data['Erreur_imprimante'] = "Config impression" - data['errorMsg'] = cherrypy.config.get('crans.activate.errorMsg', u"Imprimante HS") - return {'template':'impression', - 'values':data, - 'stylesheets':['impression.css'], - 'scripts':['impression.js', 'popup.js'], - } - index.exposed = True - - ########################## - # devis - ########################## - # - # methode qui affiche la template du devis - # - - def devis(self): - if cherrypy.session.has_key('impression') and cherrypy.session['impression'] != None : - return { - 'template':'impression-devis', - 'values': - { - 'devis':cherrypy.session['impression'].devisDetaille(), - 'total':cherrypy.session['impression'].prix(), - 'nomFichier':cherrypy.session['impression'].fileName(), - }, - 'standalone':True, - } - else: - return { - 'template':'impression-devis', - 'values': { }, - 'standalone':True, - } - devis.exposed = True - - - ########################## - # AJAX - ########################## - # - # methode qui renvoie la liste des codes de l'adherent - # - def codeList(self): - try: - listeBrute = digicode.list_code() - # liste de la forme : - # [(code, age, description),...] - listeBrute = [item[0] for item in listeBrute if item[2] == cherrypy.session['uid']] - return {'codes': listeBrute} - except Exception, e: - crans.cp.log('erreur lors de la creation de la liste de codes :' + str(e), 'IMPRESSION', 1) - return {'erreur':str(e)} - codeList.exposed = True - - # - # methode qui indique quel fichier utiliser - # - def useFile(self, fileName): - try: - filepath = os.path.join(os.path.join(FILE_UPLOAD_BASE_FOLDER, cherrypy.session['uid']+"/"), fileName) - adh = cherrypy.session['uid'] - if cherrypy.session['estClub']: - adh = cherrypy.session['adh_uid'] + '@' + adh - cherrypy.session['impression'] = impression(filepath, adh) - crans.cp.log("useFile returns: %s" % str( cherrypy.session['impression'].pages() )) - return {'nbPages': cherrypy.session['impression'].pages()} - except FichierInvalide, e: - crans.cp.log("useFile : %s (%s)" % (str(e), e.file()), 'IMPRESSION', 1) - return {'erreur':str(e) } - except Exception, e: - crans.cp.log("useFile : %s" % str(e), 'IMPRESSION', 1) - return {'erreur':str(e) } - useFile.exposed = True - - # - # methode pour changer les parametres - # - def changeSettings(self, copies=None, couleur=None, recto_verso=None, agrafage=None, papier=None, livret=None): - if not cherrypy.session.has_key('impression') or cherrypy.session['impression'] == None : - return {'nouvPrix':0.0} - try: - nouvPrix = cherrypy.session['impression'].changeSettings(papier=papier, couleur=couleur, agrafage=agrafage, recto_verso=recto_verso, copies=int(copies), livret=livret) - crans.cp.log("changeSettings returns : %s" % str(nouvPrix)) - except Exception, e: - crans.cp.log("changeSettings : %s" % str(e), 'IMPRESSION', 1) - return {"erreur":str(e)} - return {'nouvPrix':nouvPrix} - changeSettings.exposed = True - - - # - # methode pour lancer l'impression - # - def lancerImpression(self): - try: - cherrypy.session['impression'].imprime() - except SoldeInsuffisant: - return {"SoldeInsuffisant":1} - except Exception, e: - crans.cp.log("lancerImpression : %s" % str(e), 'IMPRESSION', 1) - return {"erreur":str(e)} - crans.cp.log("impression", 'IMPRESSION') - return { - 'code':str(digicode.gen_code(cherrypy.session['uid'])) + "#", - 'code_bat_j': cherrypy.config.get('crans.impression.codes.batJ', u"Non disponible") - } - lancerImpression.exposed = True - - # - # methode pour recuperer l'etat de l'imprimante - # - def etatImprimante(self): - if not cherrypy.config.get('crans.activate', True): - return {"printer_state" : u"Système down"} - try: - return {"printer_state" : u"\\n".join(etat_imprimante.etat())} - except Exception, e: - return {"printer_state" : 'Imprimante hors ligne'} - etatImprimante.exposed = True - - # - # methode pour le solde - # - def AJAXGetSolde(self): - try: - adh = cherrypy.session['LDAP'].getProprio(cherrypy.session['uid']) - return {"solde" : adh.solde() } - except Exception, e: - return {"erreur" : str(e)} - AJAXGetSolde.exposed = True - - - - - ########################## - # privees - ########################## - # - # methode pour obtenir la liste des fichiers uploadés - # - def getUploadedFileListFor(self, adh): - file_folder = os.path.join(FILE_UPLOAD_BASE_FOLDER, cherrypy.session['uid']+"/") - if not os.path.isdir(file_folder): - return [] - liste = os.listdir(file_folder) - list_pdf = [] - # exclusion des fichiers qui ne sont pas des PDF - for f in liste: - if commands.getoutput('file -ib %s' % commands.mk2arg(file_folder, f)) == "application/pdf": - if not BOOK_REGEXP.search(f): - list_pdf.append(f) - return list_pdf - - - # - # methode pour enregistrer un fichier - # - def savePDF(self, aFile): - - _, tempFileName = tempfile.mkstemp() - f = open(tempFileName, 'w+b') - size = 0 - while True: - data = aFile.file.read(1024 * 8) # Read blocks of 8KB at a time - if not data: - break - f.write(data) - size += len(data) - f.close() - if size == 0: - raise FileError("Fichier vide") - - file_folder = os.path.join(FILE_UPLOAD_BASE_FOLDER, cherrypy.session['uid']+"/") - if not os.path.isdir(file_folder): - os.makedirs(file_folder, mode=0750) - newFilePath = os.path.join(file_folder, aFile.filename.encode('ascii','replace').replace('?','_')) - shutil.move(tempFileName, newFilePath) - os.chmod(newFilePath, 0640) - crans.cp.log("New file uploaded at : %s" % newFilePath, "IMPRESSION") - return newFilePath - - - - - diff --git a/intranet/modules/impression/static/WindowTitleLogo.png b/intranet/modules/impression/static/WindowTitleLogo.png deleted file mode 100644 index d704d48e99dba6d399655f964c7a9a4e498d5d76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3799 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 N002ovPDHLkV1nW8F|Ggr diff --git a/intranet/modules/impression/static/dialog-printer.png b/intranet/modules/impression/static/dialog-printer.png deleted file mode 100644 index e812c88091e3bed741c758d991c5bc9170cd1400..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3219 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 FV1fp#;W7XK diff --git a/intranet/modules/impression/static/dialog-solde.png b/intranet/modules/impression/static/dialog-solde.png deleted file mode 100644 index a6cd9dd8c2506c087e39b60cf00aea60e9f1ddb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5311 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 RYU%(0002ovPDHLkV1l?e4Zr{Z diff --git a/intranet/modules/impression/static/dialog-warning.png b/intranet/modules/impression/static/dialog-warning.png deleted file mode 100644 index 632f99a31b882b98661687c1207ba741b839e602..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3464 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 diff --git a/intranet/modules/impression/static/impression.css b/intranet/modules/impression/static/impression.css deleted file mode 100755 index e1faa7e9..00000000 --- a/intranet/modules/impression/static/impression.css +++ /dev/null @@ -1,163 +0,0 @@ -/* ****************************************** * - * - * ****************************************** */ -#globalDiv { - padding-left:200px; - position: relative; -} - -ul#actionMenu { - list-style-type:none; - position:absolute; - width:150px; - top:0; - left:0; - margin:20px; - padding:0; -} -ul#actionMenu li { - clear:both; -} -/* ****************************************** * - * - * ****************************************** */ -#fileName { - display: block; - width:150px; - text-align:center; - padding:50px 5px 5px 5px; - background: url(./pdf-icon.png) center top no-repeat; - margin:0 0 10px 0; - overflow:auto; -} - -#actionMenu li { - margin: .8em 0; -} - -#actionEtatImprimante { - padding:0.4em; - border: thin black solid; -} - -/* ******************************************* * - * - * ******************************************* */ -form#form_impression { - margin: 0px; - font-size: 100%; - min-width:600px; -} -form#form_impression #preview { - border:1px black solid; - width:150px; - height:150px; - padding:10px; - background-color:#C0C0C0; -} - -form#form_impression #rightColumn { - margin:10px 10px 10px 240px; -} - -form#form_impression #leftColumn { - float:left; - width:170px; - margin:10px; - padding:0; -} -div#prix_placeholder { - margin:6px 0; - width:170px; - min-height:16px; - padding:0; - color:gray; -} -div#prix_placeholder img { - margin-right:2px; - float:right; -} -form#form_impression fieldset fieldset { - margin:10px; -} -form#form_impression>fieldset { - position:relative; - padding:20px; -} - -.clear { - clear:both; -} - -form#form_impression .bouttons { - text-align:right; -} -form#form_impression label.labelInput { - display:block; - width:4em; - margin-right:4px; - float:left; - text-align:right; -} - -fieldset .aide { float:right; } -/* ****************************************** * - * - * ****************************************** */ -#popupFichiers { - background:#AE0F3E; - z-index:500; - float:left; - position:absolute; - min-width:450px; - top:0; - left:20%; - right:20%; - padding:0; -} -#popupFichiers #insideDiv { - background:white; - margin:2px 5px; -} -#popupFichiers #insideDiv form { - margin:2px 5px; -} -#popupFichiers h1 { - font-size:1em; - margin:0; - text-align:center; - color:white; -} -#popupFichiers h1:before { - content:url("../images/WindowTitleLogo.png"); - margin-right:5px; -} - -#popupFichiers h2 { - font-size:1.1em; - border-bottom:thin black solid; -} -#popupFichiers select, -#popupFichiers input.file { - width:100%; -} - -.button { - float:right; -} - -/* ****************************************** * - * - * ****************************************** */ -div#printingPopupContent { - background: white url("../images/printer.png") left center no-repeat;; - padding:10px 10px 10px 115px; - min-height:100px; -} - -#printingPopupContent a, -#printingPopupContent span { - display:block; - font-weight: bold; - margin:5px 0; -} diff --git a/intranet/modules/impression/static/impression.js b/intranet/modules/impression/static/impression.js deleted file mode 100755 index a6c74e20..00000000 --- a/intranet/modules/impression/static/impression.js +++ /dev/null @@ -1,407 +0,0 @@ -/* ************************************************************ - * Impression - ************************************************************ - * Impression.settings : panneau de configuration - * Impression.popup : popup - * Impression.AJAX : ajax - */ -Impression = {}; - -/***************************** - Impression.settings - *****************************/ - -Impression.settings = {}; - - // -//// images : images used for previewing -// -Impression.settings.images = [ - "portrait_couleurs_agraphediagonale.png", - "portrait_couleurs_pasdagraphes.png", - "portrait_couleurs_uneagraphe.png", - "portrait_couleurs_Deuxagraphes.png", - "portrait_couleurs_troisAgraphes.png", - "portrait_couleurs_stitching.png", - "portrait_nb_agraphediagonale.png", - "portrait_nb_pasdagraphes.png", - "portrait_nb_uneagraphe.png", - "portrait_nb_Deuxagraphes.png", - "portrait_nb_troisAgraphes.png", - "portrait_nb_stitching.png", - "portrait_transparent_couleurs.png", - "portrait_transparent_nb.png", - ]; -/* -Impression.settings.preloadImage = function(imageName) { - var image = new Image(); - image.src = "./static/"+imageName; -} - -Impression.settings.preloadAllImages = function() { - log("Preloading images..."); - map(this.preloadImage,this.images); -} -*/ - // -//// init : parse every field and display preview -// -Impression.settings.init = function () { - log("Init settings..."); - this.theform = document.form_impression; - this.disableForm(false); -} - // -//// reset : reset form and then re-init settings -// -Impression.settings.reset = function () { - log("Reset form"); - this.theform.reset(); - this.init(); - Impression.settings.update(); -} - -Impression.settings.disableForm = function(bool) -{ - log("Set Disable Form : " + bool); - var fields = this.theform.elements; - for( var i=0; i< fields.length; i++) - { - this.setDisableField( fields[i], bool ); - } -} - - // -//// getValue : parse a field and store value in fielld.name -// -Impression.settings.getValue = function(field) -{ - if (field.value) - { - this[field.name] = field.value; - log( field.name + " is now " + this[field.name]); - } - else - { - logError("Can't get fieldValue"); - } -} - // -//// getCopies : parse copies field -// -Impression.settings.getCopies = function(field) { - if ( (!field.value) || (parseInt(field.value)!=field.value-0) || (parseInt(field.value) < 1) ) - { - this.copies = 1; - logError("Can't get copies"); - } - else - { - this.copies = parseInt(field.value); - } - log("copies is now " + this.copies); -} - - // -//// setValue : set field value -// -Impression.settings.setValue = function(afield, avalue) { - afield.value = avalue; - this.getValue(afield); -} - - // -//// setDisableField : set field disabled on/off -// -Impression.settings.setDisableField = function( afield, isdisabled ) { - afield.disabled = isdisabled ; -} - - // -//// disableField : set field disabled on -// -Impression.settings.disableField = function(afield) { - this.setDisableField(afield, true); -} - - // -//// fieldChanges : when a field is changed -// -Impression.settings.update = function () { - var orientation = "portrait"; - Impression.settings.livret="False" - if (this.theform.type_impression_couleur.checked) - this.getValue(this.theform.type_impression_couleur); - else - this.getValue(this.theform.type_impression_nb); - - if (this.theform.disposition_recto.checked) - this.getValue(this.theform.disposition_recto); - else if (this.theform.disposition_recto_verso.checked) - this.getValue(this.theform.disposition_recto_verso); - else - { - this.getValue(this.theform.disposition_livret); - Impression.settings.livret="True"; - } - this.getValue(this.theform.papier); - this.getCopies(this.theform.nb_copies); - this.getValue(this.theform.agrafage); - // Contraintes - if (Impression.settings.nb_pages > 60) - { this.disableField(this.theform.disposition_livret); - this.theform.disposition_livret.checked = false } - if ( ((this.papier == "A4") && - (( (this.theform.disposition_recto.checked) && (Impression.settings.nb_pages>50) ) || - ( (this.theform.disposition_recto_verso.checked) && (Impression.settings.nb_pages>100) ) )) - || - ((this.papier == "A3") && - (( (this.theform.disposition_recto.checked) && (Impression.settings.nb_pages>30) ) || - ( (this.theform.disposition_recto_verso.checked) && (Impression.settings.nb_pages>60) ) )) - ) - { - this.setValue(this.theform.agrafage, "None"); - this.disableField(this.theform.agrafage); - this.getValue(this.theform.agrafage); - } else { - this.setDisableField(this.theform.agrafage, false); - } - if (this.papier == "A4tr" || this.papier == "A3") - { - this.theform.disposition_recto.checked = true; - this.disableField(this.theform.disposition_recto_verso); - this.disableField(this.theform.disposition_livret); - this.getValue(this.theform.disposition_recto); - } - else - { - this.setDisableField(this.theform.disposition_recto_verso, false); - this.setDisableField(this.theform.disposition_livret, false); - } - - this.updatePreview(); - Impression.AJAX.recalcPrix(); - -} - - // -//// updatePreview : update preview with new value -// -Impression.settings.updatePreview = function() -{ - var image_name = ""; - if (this.papier == "A4tr") - image_name = "portrait_transparent_" + this.type_impression + ".png"; - else - image_name = "portrait_" + this.type_impression + '_' + this.agrafes + ".png"; - var image = createDOM("IMG",{'src':'./static/'+image_name}); - log("Updating preview (new image : " + image_name + ")"); - replaceChildNodes("preview",image) -} - - -/***************************** - Impression.popup - *****************************/ -Impression.popup = {}; - -Impression.popup.popupImpression = function(code, codeJ) { - Popup.hide(); - Popup.create({}, "Impression en cours...", - DIV( - {"id":"printingPopupContent", "style":"background-image:url(./static/dialog-printer.png)"}, - SPAN("code: "+code), - SPAN("Batiment J: "+codeJ), - A({"href":"https://wiki.crans.org/VieCrans/ImpressionReseau", "class":"aide", "target":"_blank"}, "Comment récupérer mon impression ? "), - A({"href":"index", "class":"aide", "style":"text-align:right;"}, "Nouvelle impression") - ) - - ); -Popup.display(); -} - -Impression.popup.popupError = function(erreur) { - Popup.hide(); - Popup.create({}, "Erreur", - DIV({"id":"printingPopupContent", "style":"background-image:url(./static/dialog-warning.png)"}, - SPAN(erreur), - A({"href":"mailto:nounous@crans.org", "class":"crans_help aide"}, "Envoyer un rapport aux nounous"), - Popup.closeLink({"class":"aide", "style":"text-align:right;"}, "Fermer"))); - Popup.display(); -} - -Impression.popup.popupSolde = function(code) { - Popup.hide(); - Popup.create({}, "Solde insuffisant", - DIV( - {"id":"printingPopupContent", "style":"background-image:url(./static/dialog-solde.png)"}, - SPAN("pas assez de sous"), - A({"href":"https://wiki.crans.org/CransPratique/SoldeImpression", "class":"aide", "target":"_blank"}, "Comment recharger mon compte ? "), - Popup.closeLink({"class":"aide", "style":"text-align:right;"}, "Fermer"))); - Popup.display(); -} - -Impression.popup.popupCodes = function(codeList) { - Popup.hide(); - Popup.create({}, "Codes de mes impressions", - DIV( - {"id":"printingPopupContent", "style":"background-image:url(./static/dialog-lock.png)"}, - SPAN("Mes codes"), - //UL({"size":"4", "style":"width:6em;; height:4em;padding:0;margin:0;list-style-type:none;overflow:auto;"}, map(function (code) {return LI({}, code);}, codeList)), - SELECT({"size":"4", "style":"width:100%;"}, map(function (code) {return OPTION({}, code);}, codeList)), - Popup.closeLink({"class":"aide", "style":"text-align:right;"}, "Fermer"))); - Popup.display(); -} - - - -/***************************** - Impression.mesCodes - *****************************/ -Impression.mesCodes = {}; -Impression.mesCodes.getCodes = function () -{ - Impression.AJAX.call('codeList', this.displayCodes ); -} - -Impression.mesCodes.displayCodes = function (result) { - if (result.codes) - Impression.popup.popupCodes(result.codes); - else if (result.erreur) - logError('erreur distante (codeLlist) : ' + result.erreur); - else - logError('erreur bizarre (codeLlist) : '); -} - -/***************************** - Impression.AJAX - *****************************/ -Impression.AJAX = {}; - -Impression.AJAX.call = function(url,callback) { - AJAX.call( url, callback, true); -} - -Impression.AJAX.modifPrix = function( text, wheel ) -{ - if (wheel) - { - var image = createDOM("IMG",{'src':'./static/indicator.gif'}); - } - else - { - var image = new DIV({}); - } - var item = new DIV({'onclick':'Impression.AJAX.recalcPrix();'}, image, text); - replaceChildNodes("prix_placeholder",item); - log( text ); -} - -Impression.AJAX.modifNbPages = function( nbpages ) -{ - Impression.settings.nb_pages = nbpages; - replaceChildNodes("fileNbPages",nbpages); -} - -Impression.AJAX.usefile = function(filename) { - var item = new DIV({}, "Calculs en cours..."); - this.modifPrix("Analyse du fichier...", true); - this.call('useFile?fileName=' + filename,this.analysefini ); -} - -Impression.AJAX.analysefini = function(AJAXResp) -{ - logDebug('AJAX terminated (usefile)'); - if (AJAXResp.erreur) { - Impression.AJAX.modifPrix(AJAXResp.erreur, false); - Impression.popup.popupError(AJAXResp.erreur); - Impression.settings.disableForm(true); - logWarning('Erreur distante : ' + AJAXResp.erreur); - } else { - Impression.AJAX.modifPrix("Analyse terminée", true); - Impression.settings.update(); - Impression.AJAX.modifNbPages(AJAXResp.nbPages); - } -} - -Impression.AJAX.recalcPrix = function() -{ - settings = Impression.settings; - var url = "changeSettings?copies=" + settings.copies - +"&couleur="+ settings.type_impression - +"&papier="+ settings.papier - +"&recto_verso="+ settings.disposition - +"&agrafage="+ settings.agrafage - +"&livret="+ settings.livret; - this.modifPrix("Calcul en cours", true); - this.call(url, this.changePrix); -} - -Impression.AJAX.changePrix = function(AJAXResp) -{ - if (AJAXResp.erreur) { - Impression.AJAX.modifPrix(AJAXResp.erreur, false); - Impression.popup.popupError(AJAXResp.erreur); - Impression.settings.disableForm(true); - logWarning('Erreur distante : ' + AJAXResp.erreur); - } else { - Impression.AJAX.modifPrix("Coût : " + AJAXResp.nouvPrix + "€", false); - } -} - -Impression.AJAX.lancerImpression = function(AJAXResp) -{ - var url = "lancerImpression"; - Impression.settings.disableForm(true); - this.call(url, this.finImpression); -} - -Impression.AJAX.finImpression = function(AJAXResp) -{ - if (AJAXResp.erreur) { - Impression.popup.popupError(AJAXResp.erreur); - logWarning('Erreur distante : ' + AJAXResp.erreur); - } else if (AJAXResp.SoldeInsuffisant) { - Impression.popup.popupSolde(); - Impression.settings.disableForm(false); - Impression.settings.update(); - } else { - Impression.popup.popupImpression(AJAXResp.code, AJAXResp.code_bat_j); - } - Impression.AJAX.updateSolde(); -} - -Impression.AJAX.getPrinterState = function() -{ - var url = "etatImprimante"; - Impression.AJAX.call(url, Impression.AJAX.displayPrinterState); -} - -Impression.AJAX.displayPrinterState = function(AJAXResp) -{ - if (AJAXResp.erreur) { - logWarning('Erreur distante (etatImprimante) : ' + AJAXResp.erreur); - } else { - replaceChildNodes("etatImprimanteIci", AJAXResp.printer_state) - } -} - -Impression.AJAX.updateSolde = function() -{ - var url = "AJAXGetSolde"; - Impression.AJAX.call(url, Impression.AJAX.displaySolde); -} - -Impression.AJAX.displaySolde = function(AJAXResp) -{ - if (AJAXResp.erreur) { - logWarning('Erreur distante (etatImprimante) : ' + AJAXResp.erreur); - } else { - replaceChildNodes("soldePlaceHolder", AJAXResp.solde ) - } -} - -// on met a jour le status de l'imprimante toutes les 30 secondes -setInterval(Impression.AJAX.getPrinterState, 30000); -// on met a jours le solde de l'adherent toute les 5 minutes -setInterval(Impression.AJAX.updateSolde, 300000); diff --git a/intranet/modules/impression/static/indicator.gif b/intranet/modules/impression/static/indicator.gif deleted file mode 100644 index 085ccaecaf5fa5c34bc14cd2c2ed5cbbd8e25dcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1553 zcma)+TTl~c6vwlh>nb99Af5rT)t{mCEg5urg=A(g z{C|6SPb~9Xage|wB`SrZk2FOMYM!buln2sX?5Y+T78iB(Zu9cS7|LZyZ++}u$^oi1 z_j@S}bW9OzU2R+RMy&~OT>X-oZ98$jq#ogNfJ!BM-42wHGZk*6s2KD}U*IA%epmxb zm}|6BK9YoIF;*xSL!+z@<64lB7->LTW2Vi4ostCA(z&2XniwNIv}fFo-`MbG;)u4G z^p@F!)|9HhZprHd_vXjDoxs6WkK-6P0@lfxnGT>*p(QHoUV=u1FAqb@b%*W=a3{`LsH5k^AvQNL>6fPpy#oU(&MuH(*aEX4b35*} zn4n7)`I2U%=+Z=?BVZQ?vjQFW4gD@~XSOO6b{qu81`4&LFuU2(ilxW+1|ZkNMnWe79C$gs zWT?Ele|HR{JGPe)5BTW>0Ey?-Ls6S#GoV0tbt6ku7B&*0 z;i9QM$W1Rj*rRIdceL)rAOSl+sDe3LkB87<%){;ZdHp6|SNlopDXRx< zxBDF9-lTo&v`8$humFygUij@qgT=Qzhj8{ym2-{Xciwqq_Xwk%=O3B-MNAL_6e`3U zyxwmXex4`g0^1RYw~Dth3av3Dl^AAlpO3mG!nLr#&ZZ7c_wUboI+deC+&%TFjK2Lm z!Y&f1h|T_On%RCV&=4bx`!>(YezqGVhl&QpED?N6GV)HmzJ9&rh$x*i?*@o9#6QI< z5ZI_MRX;0+pY8$`j)eF#TlUyG(eE%E7S!rj;mj^M5vhUicPm zVWQ2z+imFyg}SRABmOBY_@osR!>7Ov!ioK`NB6_Rv}7Ud?35ed5Sb@?yND?kv~RCa wqs^a3Sh>&&L4)!LKI?D2&k@))k(LESaga|C278ChSzn3NWVkcuNoY&{0f?~U_5c6? diff --git a/intranet/modules/impression/static/paysage_b&w_non.png b/intranet/modules/impression/static/paysage_b&w_non.png deleted file mode 100755 index 441ac6d227fcd911fa0ac93ce578f6dfbb1c0b34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4219 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 diff --git a/intranet/modules/impression/static/paysage_couleur_non.png b/intranet/modules/impression/static/paysage_couleur_non.png deleted file mode 100755 index d3b440d76d7a82c9de8ab8f294e248b7843004f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5199 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 PM+4MUw3I6qtzQ2R>;&B> diff --git a/intranet/modules/impression/static/pdf-icon.png b/intranet/modules/impression/static/pdf-icon.png deleted file mode 100755 index 552079fd9b77bdc0c996b0f22151fefa6cde9fa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3362 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 diff --git a/intranet/modules/impression/static/popup.js b/intranet/modules/impression/static/popup.js deleted file mode 100644 index d1cb72fa..00000000 --- a/intranet/modules/impression/static/popup.js +++ /dev/null @@ -1,35 +0,0 @@ -Popup = {}; -Popup.popupNode = null; -Popup.visible = false; - -Popup.display = function() -{ - if (this.popupNode == null) { - logError("Popup not created, cannot be displayed"); - return false; - } - appendChildNodes("pageContent", this.popupNode); - this.visible = true; - // logDebug("popup visible"); -} - -Popup.create = function(options, title_popup, content) { - var inPopup = DIV({"id":"__popupInDivId", "style":"background:white;margin:2px 5px;"}, content); - var outPopup = DIV({"id":"__popupOutDivId","style":"background:#AE0F3E;z-index:500;float:left;padding:0;min-width:300px;position:fixed;top:30%;left:30%;right:30%;"}, H1({"style":"font-size:1em;margin:0;text-align:center;color:white;"}, IMG({"src":"/static/images/WindowTitleLogo.png","alt":"icon", "style":"margin:0 5px;"}), title_popup), inPopup ); - roundElement(outPopup); - logDebug("Popup \""+ title_popup +"\" created"); - this.popupNode = outPopup; -} - -Popup.hide = function() { - if (this.visible) { - removeElement(this.popupNode); - this.visible = false; - } - // logDebug("popup not visible"); -} -Popup.closeLink = function(options, text_link) { - options["href"] = "#"; - options["onclick"] = "Popup.hide()"; - return A(options, text_link); -} diff --git a/intranet/modules/impression/static/portrait_couleur_diagonale.psd b/intranet/modules/impression/static/portrait_couleur_diagonale.psd deleted file mode 100755 index 55c6280c0d5af604cb5f929f083e5de629b5f5d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357871 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 diff --git a/intranet/modules/impression/static/portrait_couleurs_Deuxagraphes.png b/intranet/modules/impression/static/portrait_couleurs_Deuxagraphes.png deleted file mode 100755 index f431ce3913b8a5664ce33ac05fed57ebd222ae49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5249 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 diff --git a/intranet/modules/impression/static/portrait_couleurs_agraphediagonale.png b/intranet/modules/impression/static/portrait_couleurs_agraphediagonale.png deleted file mode 100755 index 25d82c811fe8334e0c6a67660568607901b20765..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5291 zcma)=Ran&Tw#R>@G&nRUozjgUAxKJhN`o+TcZjrfrw9lP3@F_p3^|0<&|T6)OS;|v zb8{}vdG@|o@ArAvS~u%+^Igx1(NI&s$DzUj003V}@r~AB&G>gL{U zLk|GJCH{Ay06BRS0Dz-vFDt8|@!rML#pAt;E1i<8ES;;ni>dDL@Ycd_f00u@V)*z8#5m5?Y@sS85-4_v!qenveG*3|%_F)D`F+X~vkgeJ7 zb!@azoUV!JG3`=WLy-T;(b3)PUHfj{?){kGIAQ2h5KHn-kpu8jE8>;d9BrbyB5bH5 z6qQtQ4V{i?2i{|c(FXuXG(X>9&+k(ADBoNFRKRtHn+Y_q{wKUugGC>pO9s{$K)bjo zNm{@lx6U95Fh~J>*RHe10nz}#(JxSj0jR(S4lk4>F@QNp>Jm9HSM&^m1;nEO*=!0- zsM2kKxo(&iCu(;OPzaS~;70GRMhP`+s;0NwEP(ag7#0wm4pKdF4qkZT+C8$FISG8W|QM7G#l40)Nk zjKqq&XewiP06=v!@#9fcDrt9TYkkLd*YV_{ujmnsbYYOBKV5xn|AdMT5UGuyESPO? zBhXw2P`-P0fg#4gf*$aG^~O|S5xdX`=coTooS*2uG)=)5jloyXpW)!*9x+>f>EPXr zll&vF?y?paeD$~bxaf}r+;XI|tGbKBAKWaQy{okncH!tUe9qUqjE@5mArA@c6B~jx zCY+?Prv@?28Vsrfel1$bZ|H~8H$ZzK{HL@T57?_6_E_)R_HUFFBBQCDRsKV=Fl6yqfr$;%~>a^|G_7U zzqpc8pK_KlVPhU4btxtX30k8r4g>rJR;3w!hG0!c&mY zG&G|KJV8}YBN5tIR5tPUmzO6H6q{fbI>AR^`)S_7h1!I6D%gwxKQFltal%YdK^C_B`FxF7|510A2Qa1TCw!8!$0!%urj2UtJgF8 zgKl8HmSQzY2J%prV|p6;0_JzD1jJ^kicADUDO+kd^vp^8O1Mg3#YIJ~673SnNh13^ z6_$e}r=gWCtlCg0U1oAq5@C{h%H2@!RuhR>U-X6wb`g_SNg7C5$VO@#{p)9bne4&} z%~43fG*(5l*k>apr$TQH9_=Uyv7lED^Jp%aEWCuPc;;u0y`BB_d!9YdR_x_)8oA7$ znUmmOPxf~A!Y_RA@FVfV2NW&YD8ZBglw}l6lswrgr5ID0*@HT~v;5TAc3Fg3F1iLU zu3iL^CJ%$s#nScCgVT2_baXv*rDpspaCItm2`k^}1(nL{)@f`)u&2o?XCTjY+aSW# zV_H61i5laYX2qRm4A;`YGe-$@=+iP7P!b?s{kkoZu`~OXJ#` zLltj~J8Ey902OUnj|y9;ZL)3tj@u{-L4VB}^5uM<@)-RX{#XDP8kZDT4Z@+ywko(v zWWj%-bHVb+{fO-7VBy5eHD5ZPGyhV|N$lDSyH&VVvo)f1(QABPa?0w!Zx8!&_>y36 zc|zgR>7w|OeE$S-GC?cCD~KhWMCr&UYK0t0vib$ivTvS1eq1kq3V+|440~TZp;XM; z%yJxMw<+XHE@=yOd1eU}T(MaKzp}8j=U*&=mGo_OvX7>Lb8K5D>Zd$MMg}>TpmWfn z!-SVJdEf$z&iVGm`}l~ja(R8qal&x}84DSKaEuJqjB99?o}`|i-lg6wR0&~nz zpZ($K+f>J`lMPds#kp;{OI7nu)5{|geL{5E8vNzI* z6}_h57~M>3Pnk`A6GX!Pg1>@$U$b7@)6Mgm69L^aytC^_I8B6nY7t*_Xmt0sgE}~B zIa(d&HitG>G>7>{{gyk;1bGrOVIRe8!RBBRF`FK!yN)>md0RO;8Jh?J{T8=fr0pb0gH{I*a0qG;5lgm0zXohuyUlaGOv_8lE7rod ^zi_i!|R!!kx2Y1>eKjbYBMM070)mJ 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 GAN~bMsxJKi diff --git a/intranet/modules/impression/static/portrait_couleurs_pasdagraphes.png b/intranet/modules/impression/static/portrait_couleurs_pasdagraphes.png deleted file mode 100755 index 68f469cc8ecf0d339f37537c90522f283923eb5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5218 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 Ig8BRZ0s3VFivR!s diff --git a/intranet/modules/impression/static/portrait_couleurs_troisAgraphes.png b/intranet/modules/impression/static/portrait_couleurs_troisAgraphes.png deleted file mode 100755 index bd7d91f0857e28dc27beeadc79421498ca7499ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5230 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 L^`ctw&HH}=cA58P diff --git a/intranet/modules/impression/static/portrait_nb_Deuxagraphes.png b/intranet/modules/impression/static/portrait_nb_Deuxagraphes.png deleted file mode 100755 index 77308966c988f26d4590fa9641948dcd543c5a77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4324 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 N9WBHAH5v}j{sq+~aYz6F diff --git a/intranet/modules/impression/static/portrait_nb_pasdagraphes.png b/intranet/modules/impression/static/portrait_nb_pasdagraphes.png deleted file mode 100755 index d58be940aec04925250ea5ab16c099657e4dce16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4308 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 diff --git a/intranet/modules/impression/static/portrait_nb_troisAgraphes.png b/intranet/modules/impression/static/portrait_nb_troisAgraphes.png deleted file mode 100755 index cb3b5b3534715370726406ce8d54cb92cca1a59c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4336 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ஒzJWA~p9rY@G%mN5=}3x)j+AiStto4;H-e>7xvF}X{1`gW+T zI-vZ(d#AFzM!tuyhr4AkKxwb^qH1s^WT$DTdA=lK zh4}I7gL8qA0_khFN#d-grv?BY6N1l;Qm^;79H7Q}01zku0AUdTaQgQ;uLFRu1ORNn z0YE+r03co|wq07+Mpa7Zf!Y)Q=}nYD+*3`?9u+Sqq@NQqlT?GkP6pq`T6~L~UYB3e z{2q}hBW)Nt9alV}oy6-kD9c}pg8V*Okaj~&JYSY84acSEFY!DaPAyD{FZwd7Agy%i zReB!q!FI(&C2-ATsNm;BP3!#f$`*3M$G1ZHveNdlV&k}0aVWV2JD!)L%3zj)OCibN z2aD*yb%-DR3o-oR0@v`r&NUpfpz=MFGS9%0U6}opGO7U?7z7q4SQgaEhm?!py%(4k z+Mb-|*A4=YaCe%#drU5KoZm&!WRaUrh6#Z(rY>1AVCqffI$?;}b9g+uy{g5>_w%Sp-Uo-H(lkp!-|DQ1o|G$j6 zMg0-kHLxO1U_p?caO~>MX14~!b`)jjJc4)qHpSs_*0^{iCukdVMXg9K@++ZI%Zd1~G#ITxfc%){Imb@$>t}rwJ*~&aZX6=!1)>;v}^)p~4 z98Yb5#!17^arknHn$jPJtQ&Tqr|dteW?Aa&vU*E00@NHoR%2~`zDqwZH?PWdho+6C zbg_e$^Et1!F3HA$%xAK?^qFGx^K+sbho!=>2;^WR{ zS`PPmy~R72YSd_`n`X9t*LfrB6Y11$BluREO@;qUiWZJNIRheX8WHYvgXx!gY-s8e zEzNAIruwf{vEH^)+yt`Q;>Q#sa$62(03`RUq-d6BLD;FDHZw}Y9Nmc?V`O$b!$n0h z3~C0iIyik)w5lKM5W^g43nIQi8b-BO9el(85?9{Pzc7j*AU5=aE8y6hMynxKm``qo zSjN4748FZFfLtHy`5=a;(GC+o^ZPicf^Xec7L!oA-C0I4{^ zKOa8Q1G#m;U1!>6aO*M6>VnFBhaG9SvsT|-WV1WsFv1Swkx}VTgQ}mX$UBL?V{g$X zwS_$fx}FQroi3TJ#O*nLh&Ox6#U`;!#MSU_pk2=araP1Pp7nx~nj#cdefJYWZE z3^_;dD(t-#lG`f}I}Co{9Li1|fdbIGc5AuF5Fq%b(M}_=;9N9UikXV8-De(9D812k zlXXye5OoC~6Cv6uEev)zbb-USQbaUN-4#Twm z=rTe>S2@aep@s>p6oovVK=Oo3I1W49@HmxOh%>LsFt6egQJ~MV|#3053rkWUPcqK z^b%<+?2C+Z2&F#}6^ndoG8O%5@w>uaMCqxy9tj~lM(RqUqOB3(Os>-9p*ELAjHZTU zo^kFL$7Ii8aWn0RNvL3}3*51(PThnuMEGS3A*Fq+cA}vaAQVR47<@q8fp@C)&i_{91 z`->_2nS}7?8)2Ky5tK>eRvqx}MmzfYe);3gOPRNp)|6kVB7|-pRkm+NYp9I=`8@w| zVhvqQ|9g%$$~N2=g-$Qnt720;AR84h)+q@ehBN6{QTY`VQx5ZB*cfk?%PIWB&{0ZeR24S=C>jw!m=caeMzzZf z%!!AafST09YK?nV-w*a5zYC>9*Qk8a@})w%J;Ux3Bxdii=iOajxBZ_g@voTv?;=xC zxq-}Dy02?>k2`>r^8yKxqQWq+K8u zLmkg=T}fh6)&fjf+=5P1@yZ2bj#i!q2<>qQBWYzc{s1vN-MJP$uZPSl!BH{>)}eVm zMk%T%Gu)A(dBr`g>BdnY70i!W!m%%;JUiKG(AvXnM?Pq$WPDSH5Xu^#nt6I##|-WH zz0i$G2mTnrXtH*1rEnOIE1%2X(leO_@Gg$jp%c zdlpr-M7dVQ{+kEN2a{jey-mb1C9BY6zyHj}|B00UG`U3S`(JY4A5xk#bBA!>Yo`V1 MXzD+xR)@d(e}Fc=bN~PV diff --git a/intranet/modules/impression/templates/impression-devis.tmpl b/intranet/modules/impression/templates/impression-devis.tmpl deleted file mode 100644 index 1b293018..00000000 --- a/intranet/modules/impression/templates/impression-devis.tmpl +++ /dev/null @@ -1,79 +0,0 @@ - - - - - Cr@ns Intranet - - - -
-

Devis pour impression

- Fichier : $getVar('nomFichier', 'XXXXX') -
- - - - - - - - - #if $getVar('devis', False) - #for anItem in $devis - - - - - - - - #end for - - - - - - #else - - #end if - -
DescriptionPrix unitaireQuantitétotal
$anItem[0]$anItem[1] €$anItem[2] - #echo str($anItem[1] * $anItem[2]) + ' €' -
- Total - $getVar('total', "XXX") €

Non disponible

-
-
- - diff --git a/intranet/modules/impression/templates/impression.tmpl b/intranet/modules/impression/templates/impression.tmpl deleted file mode 100644 index dbfa963e..00000000 --- a/intranet/modules/impression/templates/impression.tmpl +++ /dev/null @@ -1,189 +0,0 @@ -#import impression_canon - -#if $getVar('errorMsg',False) - -#end if - -
- -
-
-
Options d'impression -
-
-
-
- -
-
Type d'impression - - -
- -
Copies et papier - - - -
- - -
- - - -
- -
Disposition - - - - aide -
-
- -
- - - -
-
-
- - -
    - #if $getVar('fileName',False) -
  • $fileName
  • -
  • pages:
  • -
    - #end if -
  • Nouvelle impression
  • -
  • Mes codes
  • -
  • - Solde: - - € -
  • - -
  • - État imprimante:
    - - -
  • - -
- -#if not $getVar('Erreur_imprimante',False) - #if not $getVar('fileName',False) -
-

Impression - Choix fichier

- -
- #if $getVar('openError',False) -
$openError
- #end if -

Il semblerait que l'interface d'impression ne soit -pas compatible avec internet explorer. Nous espérons pouvoir -régler ce problème au plus vite. Nous vous conseillons en attendant -d'utiliser Firefox. Les -nounous

-
-

Mes fichiers

-
- -
-
- -
-

Envoyer un fichier

-
- -
-
- -
-
-
-
-
- - #end if -
- - #if $getVar('fileName',False) - - #else - - #end if -#else - ## desactivation de l'interface si l'imprimant a un probleme - -#end if diff --git a/intranet/modules/infos/main.py b/intranet/modules/infos/main.py deleted file mode 100644 index 797773c1..00000000 --- a/intranet/modules/infos/main.py +++ /dev/null @@ -1,16 +0,0 @@ -from ClassesIntranet.ModuleBase import ModuleBase - - -class main(ModuleBase): - def category(self): - return u"Services" - def title(self): - return u"Informations utiles" - - def index(self): - return { - 'template':'info-diverses', - 'values':{}, - 'stylesheets':['infos.css'], - } - index.exposed = True diff --git a/intranet/modules/infos/static/icon.png b/intranet/modules/infos/static/icon.png deleted file mode 100755 index df73c4d5691ac21e85e0fece50e5381a47e03260..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1830 zcmV+>2if?EP)- zK~z}7<(FHGRc9H7pMR~j*FMaFanF%~JyWJFR4C96hh9ipxFDqx0!E{;iP6NQy-;JL z-kR7Z#%kh~+Sn$f7aBusYSIf5ERCdg+9EXE^ zST!;6Pu{F#WqtqmuJ3#Q_gf48-~Q|F00pC8ml*%RIIHpjTX6E|YH)n@mKkSVS z{q8?PAkj9kvunpwFRtIZ`=MMeM>dw|&RAUc2jC4<3B}PhZ&m#Wnr?{n(a;=XrRZhm2#2WuLUGNjZv%d5 zoypMKyN2HW4LzcL@SCOS@$slQdiGx?(6VmtcXxjE`4_kE*l9bCL#13M3`4ZmSeC#G z6_0Fa=Gm`zuz#=_%dvTXq>6Hf!ON8foj zs?JP$9%#DUB@z z-#gIFBM-P_Z20pB9=|<0NoYW8vn(!(A`*!V-M#D5a`nLeo7evFhZQy8c5L03ZEq)v zVzf3G!vX+etr3>s$4~b1*yml+^&Ph499+ww)Y6#6h@>Q&?Z9pu*w;{miERJoOj8q) ziqXO>fuUCRXAX35{LD0m-^e5CO)UEwKh_w`vbcG~aZGb-Ga}uyxgh~3(bDNU36xY| zSb#9#g_>N4#jRP7KfX21qZ?Zm;x3K(grUX~VoBU$Xr)Oc65wPy7xLXsKnpjGWg)e} zvOdwMQVJ;}CJKUIz2>ngm*&3SB*xT^hmr83M9>`$V2~N$#TpkZdIs&Qmr+BL&j3aFA`3+kT`^9_^1b~H-8s7_u zBZ*c9tqe+Q1h8#=6UG>fG5md`LZKoN77Nd<1Y-3^VHuYt=aNWaoKrM2@d0-?#7?Y};@rQ>m9c@fNMn!ey zm6wLEjA2Zz=h_&wF-WCJyMlFHF2)$7)I7SWi60#5;pea1K3g9D44K(@<;WC&SC{kCpqL>>F5T&0De%wQ)Og(?=@9i4RKr;?+s6Pe(Mn z7V%+-@}V~J89$3O^^{qgg-_$ z6`b~}#aBm0MqaBYQ}x6?Pyylv-VG{X0nI?F-X?p#EdZ|TwzsuqcL__hx{1_%cEV1? zVQ^6hO8I<#C=A0wJ;7ollt2Jf7a42A9}}?xKI@tv$lNxd@Azl*?C#Ji2wiq diff --git a/intranet/modules/infos/static/infos.css b/intranet/modules/infos/static/infos.css deleted file mode 100644 index c2f0b785..00000000 --- a/intranet/modules/infos/static/infos.css +++ /dev/null @@ -1,75 +0,0 @@ -/************************************************************* - .. - .... ............ ........ - . ....... . .... .. - . ... .. .. .. .. ..... . .. - .. .. ....@@@. .. . ........ . - .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. .... - .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... .... - @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. .. - .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. ..... - ...@@@.... @@@ .@@.......... ........ ..... .. - . ..@@@@.. . .@@@@. .. ....... . ............. - . .. .... .. .. . ... .... -. . .... ............. .. ... -.. .. ... ........ ... ... - ................................ - -============================================================== -mainInterface.css - Intranet Style - - Mise en page de l'accueil - - -Copyright (c) 2006 by www.crans.org - -**************************************************************/ - -div.framed_gray { - border:5px solid #e2e2e2; /* #acc0ff */ - background-color:#f2f2f2; - padding:10px; -} - -div.framed_gray fieldset { - border-width:2px; - border-style:solid none none none; - border-color:#a2a2a2; - padding:10px; - margin:10px 10px; - font-weight:bold; -} - -div.framed_gray fieldset legend { - color:#a2a2a2; -} - -div.framed_gray fieldset ul { - list-style-type:none; - margin:0; - padding:0; -} - -div.framed_gray fieldset ul li { - float:left; - height:70px; - width:100px; - margin:5px; - display:block; - text-align:center; -} - -div.framed_gray fieldset ul li span { - margin-bottom:0; - display:block; -} -div.framed_gray fieldset ul a { - color:black; - text-decoration:none; -} - -div.framed_gray fieldset ul li img { - margin:2px auto; - width:32px; - height:32px; -} diff --git a/intranet/modules/infos/templates/info-diverses.tmpl b/intranet/modules/infos/templates/info-diverses.tmpl deleted file mode 100755 index 49f6e810..00000000 --- a/intranet/modules/infos/templates/info-diverses.tmpl +++ /dev/null @@ -1,12 +0,0 @@ -
-

Mots de passe Cr@ns

-

Pour les news

-
-
Utilisateur :
-
Vivelapa
-
Mot de passe :
-
ranoia!
-
-

Créer un compte wiki

- Depuis le campus, il faut aller sur wiki.crans.org et cliquer sur Connexion puis en créer un maintenant.
Depuis l'extérieur du campus, il faut pour cela se connecter sur zamok et exécuter creer_compte_wiki . -
diff --git a/intranet/modules/mesMachines/main.py b/intranet/modules/mesMachines/main.py deleted file mode 100644 index 6afd848e..00000000 --- a/intranet/modules/mesMachines/main.py +++ /dev/null @@ -1,268 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# ##################################################################################################### # -# Machines -# ##################################################################################################### # -# Description: -# Affiche la liste des machies, les infons sur une machine et permet des modifications -# Informations: -# -# Pages: -# index:liste des machines + le reste (AJAX) -# -# ##################################################################################################### # -import cherrypy, sys, os, datetime -from time import strftime, localtime, time -# libraries crans -sys.path.append('/usr/scripts/gestion/') -import crans.cp -if (cherrypy.config.configMap["global"]["server.environment"] == "development"): - from ldap_crans_test import * -# print("mesmachines : unsing test ldap : env=" + cherrypy.config.configMap["global"]["server.environment"]) -else: - from ldap_crans import * -# print("mesmachines : unsing prod ldap : env=" + cherrypy.config.configMap["global"]["server.environment"]) - -from ClassesIntranet.ModuleBase import ModuleBase - -class NotYourStuff(Exception): - """Erreur levée si l'adhérent essaye de modifier une machine qu'il n'est pas une des siennes""" - pass - -class main(ModuleBase): - _droits = ["personnel"] - def title(self): - return "Mes Machines" - def icon(self): - return "machines_icon_fixe.png" - - _club = True - - def AJAXListeMachines(self): - adh = cherrypy.session['LDAP'].getProprio(cherrypy.session['uid']) - machines = [] - for une_machine in adh.machines(): - machineInfos = {} - # nom, mac, mid, ip - machineInfos['nom'] = une_machine.nom() - machineInfos['nomCourt'] = une_machine.nom().split('.',1)[0] - machineInfos['mid'] = une_machine.id() - # type - if une_machine.objectClass == 'machineFixe': - machineInfos['type'] = 'fixe' - #machineInfos['type'] = 'Machine fixe' - else: - machineInfos['type'] = 'wifi' - #machineInfos['type'] = 'Machine wifi' - # clef ipsec - machines.append(machineInfos) - - return {"machines":machines} - AJAXListeMachines.exposed = True - - def AJAXMachineInfo(self, mid): - try: - machine = cherrypy.session['LDAP'].search('mid=' + mid)['machine'][0] - try: - compte_machine = machine.proprietaire().compte() - except: - raise NotYourStuff("Il semble que vous cherchiez à modifier une machine dont le propriétaire n'a pas de compte Cr@ns…") - if compte_machine != cherrypy.session['uid']: - raise NotYourStuff("Vous ne pouvez pas modifier cette machine") - # zamok -> pour tester l'affichage des ports, des alias - #machine = cherrypy.session['LDAP'].search('mid=896')['machine'][0] - machineInfos = {} - # nom, mac, mid, ip - machineInfos['nom'] = machine.nom() - machineInfos['nomCourt'] = machine.nom().split('.',1)[0] - machineInfos['mac'] = machine.mac() - machineInfos['mid'] = machine.id() - machineInfos['ip'] = machine.ip() - machineInfos['ipv6'] = str(machine.ipv6()) - machineInfos['dnsIpv6'] = str(machine.dnsIpv6()) - # type - if machine.objectClass == 'machineFixe': - machineInfos['type'] = 'fixe' - else: - machineInfos['type'] = 'wifi' - # clef ipsec - try: - machineInfos['ipsec'] = machine.ipsec() - except: - machineInfos['ipsec'] = '' - # alias - machineInfos['alias'] = machine.alias() - # blacklists - machineInfos['blacklist'] = [] - for blacklist_type in machine.blacklist_all()[0].keys(): - for (begin, end) in machine.blacklist_all()[0][blacklist_type]: - blacklist = {} - blacklist['begin'] = strftime('%d/%m/%Y %H:%M', localtime(int(begin))) - blacklist['end'] = strftime('%d/%m/%Y %H:%M', localtime(int(end))) - blacklist['type'] = blacklist_type - blacklist['actif'] = 1 - machineInfos['blacklist'].append(blacklist) - for blacklist_type in machine.blacklist_all()[1].keys(): - for (begin, end) in machine.blacklist_all()[1][blacklist_type]: - blacklist = {} - blacklist['begin'] = strftime('%d/%m/%Y %H:%M', localtime(int(begin))) - blacklist['end'] = strftime('%d/%m/%Y %H:%M', localtime(int(end))) - blacklist['type'] = blacklist_type - blacklist['actif'] = 0 - machineInfos['blacklist'].append(blacklist) - # ports - machineInfos['ports'] = [] - if machine.portTCPin() != []: - machineInfos['ports'].append( - { - 'titre':'Ports TCP ouverts ext->machine', - 'ports':machine.portTCPin() - } - ) - if machine.portTCPout() != []: - machineInfos['ports'].append( - { - 'titre':'Ports TCP ouverts machine->ext', - 'ports':machine.portTCPout() - } - ) - if machine.portUDPin() != []: - machineInfos['ports'].append( - { - 'titre':'Ports UDP ouverts ext->machine', - 'ports':machine.portUDPin() - } - ) - if machine.portUDPout() != []: - machineInfos['ports'].append( - { - 'titre':'Ports TCP ouverts machine->ext', - 'ports':machine.portUDPout() - } - ) - - return machineInfos - except Exception, e: - return {"erreur":str(e)} - AJAXMachineInfo.exposed = True - - ########################## - # affichage - ########################## - # - # methode qui affiche la template - # - def index(self): - return { - 'template' :'machines', - 'values' :{}, - 'stylesheets' :['machines.css'], - 'scripts':['machines.js'], - } - index.exposed = True - - - ########################################################################### - # methodes pour changer - # des valeurs - ########################################################################### - # - - ########################## - # machine:nom - ########################## - def AJAXChangerNom(self, mid, nouveauNom): - try: - adh = cherrypy.session['LDAP'].getProprio(cherrypy.session['uid']) - mach = cherrypy.session['LDAP'].search('mid=' + mid, 'w')['machine'][0] - # tester si c'est bien la machine de l'adherent - if mach.proprietaire().compte() != cherrypy.session['uid']: - del adh, mach - raise Exception(u"L'uid de l'adherent ne correspond pas au proprietaire de la machine.") - anciennom = mach.nom() - nouveauNom = mach.nom(nouveauNom) - mach.save() - del mach - except ValueError, e: - raise e - #return {'error':str(e)} - crans.cp.log("Changer nom machine : %s->%s" % (anciennom, nouveauNom), "MESMACHINES") - return {'message':u"Modification réussie", 'mid':mid} - AJAXChangerNom.exposed = True - - ########################## - # machine:mac - ########################## - def AJAXchangerMAC(self, mid, nouvelleMAC): - try: - adh = cherrypy.session['LDAP'].getProprio(cherrypy.session['uid']) - mach = cherrypy.session['LDAP'].search('mid=' + mid, 'w')['machine'][0] - # tester si c'est bien la machine de l'adherent - if mach.proprietaire().compte() != cherrypy.session['uid']: - del adh, mach - raise Exception(u"L'uid de l'adherent ne correspond mas au proprietaire de la machine.") - anciennemac = mach.mac() - nommachine = mach.nom() - mach.mac(nouvelleMAC) - mach.save() - del mach - except ValueError, e: - return {'error':e.args[0]} - crans.cp.log("Change mac machine %s : %s->%s" % (nommachine, anciennemac, nouvelleMAC), "MESMACHINES") - return {'message':u"Modification réussie", 'mid':mid} - AJAXchangerMAC.exposed = True - - - - ########################## - # machine:suppression - ########################## - def AJAXSupprimerMachine(self, mid): - try: - adh = cherrypy.session['LDAP'].getProprio(cherrypy.session['uid']) - mach = cherrypy.session['LDAP'].search('mid=' + mid, 'w')['machine'][0] - # tester si c'est bien la machine de l'adherent - if mach.proprietaire().compte() != cherrypy.session['uid']: - del adh, mach - raise Exception(u"L'uid de l'adherent ne correspond mas au proprietaire de la machine.") - mach.delete() - except ValueError, e: - return {'error':e.args[0]} - crans.cp.log("Machine supprimee", "MACHINES") - return {'message':u"Machine supprimée"} - AJAXSupprimerMachine.exposed = True - - ########################## - # machine:creation - ########################## - def AJAXCreerMachine(self, nomNouvelleMachine, MACNouvelleMachine, typeNouvelleMachine): - adh = cherrypy.session['LDAP'].getProprio(cherrypy.session['uid']) - est_personnel = adh.etudes(0) == 'Personnel ENS' - if est_personnel and typeNouvelleMachine == 'wifi': - return {'error':'Vous n\'avez pas la possibilite d\'enregistrer de machine WiFi.'} - if typeNouvelleMachine=='fixe' and (isinstance(adh,Adherent) and adh.droits() == []) and adh.machines_fixes() != [] and not est_personnel: - return {'error':'Vous avez deja une machine fixe. Vous ne pouvez ajouter que des machines WiFi.'} - try: - if typeNouvelleMachine=='wifi': - m = MachineWifi(adh) - elif typeNouvelleMachine=='fixe': - m = MachineFixe(adh) - else: - raise Exception, "type de machine inconnu : %s " % typeNouvelleMachine - m.nom(nomNouvelleMachine) - m.mac(MACNouvelleMachine) - m.ip("") - message = m.save() - del m - except ValueError, e: - try: - del m - except: - pass - return {'error':e.args[0].replace("\n","\\n")} - crans.cp.log("Nouvelle machine %s" % nomNouvelleMachine, "MACHINES") - return {'message':u"Machine enregistrée avec succès"} - AJAXCreerMachine.exposed = True - - - diff --git a/intranet/modules/mesMachines/static/machines.css b/intranet/modules/mesMachines/static/machines.css deleted file mode 100755 index b25aba27..00000000 --- a/intranet/modules/mesMachines/static/machines.css +++ /dev/null @@ -1,160 +0,0 @@ -/************************************************************* - .. - .... ............ ........ - . ....... . .... .. - . ... .. .. .. .. ..... . .. - .. .. ....@@@. .. . ........ . - .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. .... - .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... .... - @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. .. - .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. ..... - ...@@@.... @@@ .@@.......... ........ ..... .. - . ..@@@@.. . .@@@@. .. ....... . ............. - . .. .... .. .. . ... .... -. . .... ............. .. ... -.. .. ... ........ ... ... - ................................ - -============================================================== -macines.css - Intranet Style - -Copyright (c) 2006 by www.crans.org - -**************************************************************/ -#globalDiv { - padding-left : 20%; - margin:0; - position:relative; -} -h2 { - margin: 0 5px .5em 5px;padding:5px; -} - -div.alias { - color:gray; - margin:0; - padding:0 0 0 60px; - display:block; - font-weight:normal; - font-size:0.6em; - -} - -table.blacklist_table, -table.ports_table { - border-top: thin black solid; - border-left: thin black solid; -} - -table.blacklist_table td, -table.blacklist_table th, -table.ports_table td, -table.ports_table th { - border-right: thin black solid; - border-bottom: thin black solid; - padding: 3px; -} - -.actif { - color:red; -} -.inactif { -} - - -#gestion_machines_main_frame { - padding:5px; -} - -dl.basicInfos dt { - float:left; - font-weight:bold; - clear:left; -} - -dl.basicInfos dd { - float:left; - margin:0 1em; -} - -ul#listeMachines { - list-style-type:none; - margin:0; - padding:0; -} - -ul#listeMachines li { - float:left; - height:70px; - width:100px; - margin:5px; - display:block; - text-align:center; -} - -ul#listeMachines li span { - margin-bottom:0; - display:block; -} - -ul#listeMachines li a { -display:block; - color:black; - text-decoration:none; -} - -ul#listeMachines li a:hover { - background:#bbbbff; -} - -ul#listeMachines li a:active { - background:#8888ff; -} - -ul#listeMachines li img { - margin:2px auto; - width:32px; - height:32px; -} - -#menu_actions { - background:#eeeeff; - padding:.3em; - width:18%; - float:left; - position:absolute; - top:1em; - left:0; - border: thin black solid; -} - -#menu_actions ul { - list-style-type:none; - padding:0; - margin:.5em; -} -#menu_actions ul li a { - text-decoration:none; -} -#menu_actions ul li a:hover { - text-decoration:underline; -} - -#menu_actions h1 { - font-size:1em; - margin:0; - text-align:center; - border-bottom: thin black solid; -} - -// on change la couleur des messages -.message { - background-color:#000080; - color:white; -} - -label { - width:175px; - display:block; - float:left; -} diff --git a/intranet/modules/mesMachines/static/machines.js b/intranet/modules/mesMachines/static/machines.js deleted file mode 100755 index 59123c63..00000000 --- a/intranet/modules/mesMachines/static/machines.js +++ /dev/null @@ -1,337 +0,0 @@ -/* ************************************************************ - * Machines - ************************************************************ - * Machines.init : initialisation de la page - * Machines.listeMachines : liste des machines - * Machines.infoPane : information sur une machine - * Machines.actions : modifications, ajout... - * Machines.AJAX : ajax - */ -Machines = {}; - -/***************************** - Machines.init - *****************************/ -Machines.init = function() -{ - // afficher le tableau codelist - appendChildNodes("globalDiv", Machines.createFrames()); - appendChildNodes("globalDiv", Machines.actions.makeMenu()); - // recuperer la liste des codes - this.listeMachines.load(); -} - -Machines.createFrames = function() -{ - var main = DIV({"id":"gestion_machines_main_frame"}); - var inside = DIV({"id":"__insideDivId", "style":"background:white;margin:5px;padding:5px;"},main); - var outside = DIV({"id":"__outsideDivId","style":"background:#000080;z-index:500;padding:0;"}, inside ); - roundElement(outside); - roundElement(inside); - log("Creation du cadre"); - return outside -} - -/***************************** - Machines.listeMachines - *****************************/ -Machines.listeMachines = {}; - - -Machines.listeMachines.load = function() -{ - Machines.AJAX.call("AJAXListeMachines", Machines.listeMachines.display); - log("Chargement liste..."); - Machines.currentMachine = ''; -} - -Machines.listeMachines.display = function(result) -{ - log("display liste"); - - replaceChildNodes( "gestion_machines_main_frame", - H2({}, "Mes machines"), - UL({"id":"listeMachines"}), - DIV( {"style":"clear:both;"} ) - ); - if (result.machines) { - replaceChildNodes('listeMachines',map(Machines.listeMachines.newMachineNodeFromDict ,result.machines)); - Machines.actions.updateMenu(Machines.actions.actionForMachineList); - Machines.currentMid = ''; - } - else if (result.erreur) - logError("Erreur distante : " + result.erreur); - else - logError("Probleme bizarre..."); -} - -Machines.listeMachines.newMachineNodeFromDict = function (aDict, style) -{ - var nom = aDict.nomCourt; - var mid = aDict.mid; - var image = "machines_icon_" + aDict.type + ".png"; - //log("create an item : " + nom); - if (style) { - var anIcon = LI({'id':'machine_' + mid,"style":style}); - } else - var anIcon = LI( {'id':'machine_' + mid} ); - appendChildNodes(anIcon, A({"href":"#", "onclick":"Machines.infoPane.loadInfo('"+mid+"');return false;"}, - IMG({"src":"static/" + image}), - SPAN({},nom) ) ); - return anIcon; -} - -/***************************** - Machines.infoPane - *****************************/ -Machines.infoPane = {}; - -Machines.infoPane.loadInfo = function(mid) -{ - if (!mid) - if (!Machines.currentMachine) { - logError("Machines.infoPane.loadInfo : pas de mid, pas de machine courrante..."); - return - } else - mid = Machines.currentMachine.mid; - - log("load info : " + mid); - Machines.AJAX.call("AJAXMachineInfo?mid=" + mid, Machines.infoPane.display); - try { - pulsate('machine_' + mid); - } catch (error) {} -} - -Machines.infoPane.display = function(result) -{ - if (result.nom) { - log("displaying info : " + result.mid); - // building pane - var machinePane = DIV({"id":"machine_pane"}); - - // lien pour retourner a la liste des machines - var back_link = A({"href":"#", "onclick":"Machines.listeMachines.load(); return false;"},"Retour"); - appendChildNodes( machinePane, back_link ); - - // titre (nom de machine + alias) - var title = H2({}, IMG({"src":"./static/machines_icon_" + result.type + ".png"}), " ", result.nom); - var alias = DIV({"class":"alias"}, - map(function(a_name) { return SPAN({}, a_name + " ")}, result.alias)); - appendChildNodes( title, alias ); - appendChildNodes( machinePane, title ); - - // infos de base (type, mac, ip, ipsec...) - var basicInfos = createDOM("DL", {"class":"basicInfos"}); - appendChildNodes(basicInfos, createDOM("DT", "type:" ), createDOM("DD",{},"Machine " + result.type ) ); - appendChildNodes(basicInfos, createDOM("DT", "mac: " ), createDOM("DD",{},result.mac ) ); - appendChildNodes(basicInfos, createDOM("DT", "ip: " ), createDOM("DD",{},result.ip ) ); - appendChildNodes(basicInfos, createDOM("DT", "ipv6: " ), createDOM("DD",{},result.ipv6 ) ); - appendChildNodes(basicInfos, createDOM("DT", "accessible directement en ipv6: " ), createDOM("DD",{},result.dnsIpv6 ) ); - if (result.ipsec) { - appendChildNodes(basicInfos, createDOM("DT", "Clef Wifi:" ), createDOM("DD",{},result.ipsec, BR(), A({'href': 'http://wifi.crans.org/#Config'}, 'Comment configurer ma machine'))); - // http://wifi.crans.org/#Config - } - appendChildNodes( machinePane, basicInfos ); - appendChildNodes( machinePane, DIV( {"style":"clear:both;"} ) ); - - - // blacklist - if (result.blacklist) - if (result.blacklist.length) { - var subtitle = H3({}, "Blacklist"); - appendChildNodes( machinePane, subtitle ); - var blacklist_table = TABLE({"class":"blacklist_table", "cellspacing":"0"}, - THEAD({}, - TH({}, "Cause"), - TH({}, "Debut"), - TH({}, "Fin") - ) - ); - map(function(a_blacklist_dict) { - var style = "inactif"; - if (a_blacklist_dict.actif) - style = "actif"; - var line = TR({"class":style}, - TD({}, a_blacklist_dict.type), - TD({}, a_blacklist_dict.begin), - TD({}, a_blacklist_dict.end) - ); - appendChildNodes(blacklist_table, line); - }, result.blacklist ); - appendChildNodes( machinePane, blacklist_table ); - } - // liste des ports ouverts - if (result.ports) - if (result.ports.length) { - var subtitle = H3({}, "Ports ouverts"); - appendChildNodes( machinePane, subtitle ); - var port_table = TABLE({"class":"ports_table", "cellspacing":"0"}); - map(function(a_port_dict) { - var line = TR({}, - TH({}, a_port_dict.titre), - map(function(a_port) {return TD({}, a_port);}, a_port_dict.ports) - ); - appendChildNodes(port_table, line); - }, result.ports ); - appendChildNodes( machinePane, port_table ); - } - - // attaching pane to document - replaceChildNodes( "gestion_machines_main_frame", machinePane); - // updationg actions - Machines.currentMachine = result; - Machines.actions.updateMenu(Machines.actions.actionsForInfoPane); - } else if (result.erreur) { - logError("Erreur distante : " + result.erreur); - } else - logError("Probleme bizarr..."); - -} - -/***************************** - Machines.actions - *****************************/ -Machines.actions = {} - -Machines.actions.disponibles = -{ - 'Ajouter machine fixe':'Machines.actions.formulaire.nouvelleMachine(\'fixe\');', - 'Ajouter machine wifi':'Machines.actions.formulaire.nouvelleMachine(\'wifi\');', - 'Modifier Mac':'Machines.actions.formulaire.modifierMac(Machines.currentMid);', - 'Renommer':'Machines.actions.formulaire.renommer(Machines.currentMid);', - 'Supprimer':'Machines.actions.formulaire.supprimer(Machines.currentMid);', - 'Demander l\'ouverture d\'un port':'Machines.actions.formulaire.ouverturePort(Machines.currentMid);' -} -Machines.actions.actionForMachineList = ['Ajouter machine fixe', 'Ajouter machine wifi']; -Machines.actions.actionsForInfoPane = ['Modifier Mac', 'Renommer', 'Supprimer']; - -Machines.actions.makeMenu = function(actionListe) -{ - log("building action menu"); - var liste = UL({"id":"liste_actions"}); - //this.updateMenu(actionListe, liste) - return DIV( {"id":"menu_actions"}, - H1( {}, "ACTIONS"), - liste - ); -} - -Machines.actions.updateMenu = function(actionListe, liste_actionsNode) -{ - if (!liste_actionsNode) - liste_actionsNode = "liste_actions"; - replaceChildNodes(liste_actionsNode); - map( - function(actionName) { - appendChildNodes(liste_actionsNode, LI({}, Machines.actions.makeActionLink(actionName))); - } - , actionListe); -} - -Machines.actions.makeActionLink = function(actionName) -{ - if (this.disponibles[actionName]) - { - return A({"href":"#", "onclick":this.disponibles[actionName] + "return false;"}, actionName); - } else - logError("action inconnue " + actionName); - return A({}, "???"); -} - - - -Machines.actions.callback = function(result) { - if (result.message){ - log(result.message); - Crans.messages.setMessage(result.message); - if (result.mid) - Machines.infoPane.loadInfo(result.mid); - else - Machines.listeMachines.load(); - } - if (result.error){ - alert(result.error); - logError("AJAX error"); - } -} - -// actions : affichage des formulaires -Machines.actions.formulaire = {} -Machines.actions.formulaire.modifierMac = function() -{ - if (!Machines.currentMachine) - logError("pas de machine courrante"); - else { - var c = ''; - while ( c == '') - c = prompt("Adresse MAC de la machine :",Machines.currentMachine.mac); - if (c == null) - return false; - // AJAX stuff - Machines.AJAX.call('AJAXchangerMAC?nouvelleMAC=' + c + '&mid=' + Machines.currentMachine.mid, - Machines.actions.callback); - } - return false; -} -Machines.actions.formulaire.renommer = function() { - if (!Machines.currentMachine) - logError("pas de machine courrante"); - else { - var c = ''; - while ( c == '') - c = prompt("Nom de la machine :",Machines.currentMachine.nomCourt); - if (c == null) - return false; - // AJAX stuff - Machines.AJAX.call('AJAXChangerNom?nouveauNom=' + c + '&mid=' + Machines.currentMachine.mid, - Machines.actions.callback); - } - return false; -} -Machines.actions.formulaire.supprimer = function() { - if (!Machines.currentMachine) - logError("pas de machine courrante"); - else { - if (confirm("Supprimer la machine " + Machines.currentMachine.nomCourt +" ?")) { - // AJAX stuff - Machines.AJAX.call('AJAXSupprimerMachine?mid=' + Machines.currentMachine.mid, - Machines.actions.callback); - } - } - return false; -} - -Machines.actions.formulaire.nouvelleMachine = function(type) { - replaceChildNodes( "gestion_machines_main_frame", - A({"href":"#", "onclick":"Machines.listeMachines.load(); return false;"},"Retour"), - H2({}, "Nouvelle machine"), - FORM({"style":"clear:both;", 'onsubmit':'Machines.actions.creerMachine(this.typeField.value, this.nom.value, this.mac.value);return false;'}, - createDOM('label', {'for':'add_machine_nom'}, "Nom de la machine : "), - INPUT({"name":"nom"}), - BR(), - createDOM('label', {'for':'add_machine_mac'}, "Adresse MAC : "), - INPUT({"name":"mac"}), - BR(), - createDOM('label', {'for':'add_machine_type'}, "Type de machine : "), - SPAN({'id':'add_machine_type'}, type), - INPUT({"name":"typeField", 'type':'hidden', 'value':type}), - BR(), - BUTTON({"class":"liens", 'type':'submit'}, 'Ajouter') - ) - ); - return false; -} - -Machines.actions.creerMachine = function(type, nom, mac) { - Machines.AJAX.call('AJAXCreerMachine?nomNouvelleMachine=' + nom - + '&MACNouvelleMachine=' + mac - + '&typeNouvelleMachine=' + type, - Machines.actions.callback); -} - -/***************************** - Machines.AJAX - *****************************/ -Machines.AJAX = {} - -Machines.AJAX.call = AJAX.call diff --git a/intranet/modules/mesMachines/static/machines_icon_fixe.png b/intranet/modules/mesMachines/static/machines_icon_fixe.png deleted file mode 100644 index 11ffbb715841e715c95d4b842c4d91ce15a182d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1683 zcmV;E25k9>P)P~G_ZgYpe5;xA}@_$Q->}L64pP~ zI7*f*A*&dhWy)Y#tU`>g!RW$9v?WoSS_O3!6@)dkg+g28C{?bt*WTOj{kuO3XS%b- zIG61Yp1;1oJTLitpYQW~o(FErZTTOI?b{k2IdUYUt1I-@>ea#aXmtARhK7bq|8;;v zhyI$^-hScJ>FHRJWf{^v_qd2gB|st^)(M4T?B8GST(_=D``!RLJ3HlPpZ&)Lo6RiN zbzNS)IuE};Go_a#2_XbR2zq)ZaXQ_9Y-?-U^&bOl*zn}V>FH#t5SD%A$^r@t9VsKH z(}^t0Xqtwu>zp|8C6)!BeKv{H>5NuYl`Uv#*&h8)0KL7v(xZ+3_;b&|~<3ZEf%RcJ2Dx7!Z^JJRV1XIBd^bwW`e7*Vo6;&=6j) zmx+l9bX`vaP!yfv;W#5Bc0wU9vTR3|C7ezh9#0&fZ=C%6J_-vhN=mZudfgNi6|sEz zkFneB)YmVUdV0>d0c3!O9{SPx*IpZ#%E?ivtXzv>n2e8ynV6WsFpTtfvk77`lSCqp z!{J1dq?B%QQs%}DKO-Y@%GT?R69^2@+?>mzMGKjln&P96Mx6i>Kz)6^YMQ1N3ATx?YLM4$7%;A;US$%fr7&DmU3RY6gb zH_tkWghob&hAd|wgkX9)!KO`REwcb-en)*gH#Z-T$HT#c2l4s*U;7M_B&ev!AtNJW zP6%DsQV@!wkxW{tEM;a&qPn_zC=H;ZBDn3t4=1RpsmASgqw5+Dha)Zcl`9b*es~$R zwXk480bZ{Mhr@x*W=n%mRRw_T>|3>wz~z!tl|2h!-@bYoYd7lEm~UYICg9)J9j#$s}*GB zddmMEd}>OKMj{b^QBe_!q7n=S7#|-`>4%3CT)sSQ`ThATH*EOByP25|xwtrAdhWSj z$dSmT?VWf2Nl%Z#@UWXNzHktaC($&WMT@ck2!%qJrY$@tKw+Wp$>!$nKRxzX36>?u z&(CLgco=|BK8Y|gl8B!wyQJdU-Cpy1Hg#aBxuc_V$VsCr*mZo1Yfv&Ycr`_PikOxZ~%dtZb** z)zzc*_xEc{mNe?$X(#+9sjqM88W^~?_NAA8C6|`^NhTFc)1a~Ou;p?&UViYwqF)|9 zJk;rMh##(5v#?_K?w>}#R{((LpMN2H-@Z?8tX;b>X161~|Nc-`dHMYM*I)l_=k4A9 dw)|hqzW|YL*cM{#EkytT002ovPDHLkV1gGrGK>HK diff --git a/intranet/modules/mesMachines/static/machines_icon_wifi.png b/intranet/modules/mesMachines/static/machines_icon_wifi.png deleted file mode 100644 index caca9a1d963c0fd7e6d76a1943c5fbfbdb7f77ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1412 zcmV-~1$+95P)WFU8GbZ8({Xk{QrNlj4iWF>9@00ihsL_t(o!|j*LZxdG( z#?PI5=RIRP@7PYU6G-9^N=&POSil0J1_`PnwW1B8>Y`H1h7Aka3L#ZpbjOB&qL9X- zp(_Zbhz6o4KnRaS_>n*!ZGxTHjy*H>IKH=w5~NU6VA8J2k*;QS?){zb%$)fyz?=BL z2U<_^@bK_=JkK9j6va{$#S#R;WQz&kpp+KM<+4F3Etbn=!?x{g zB9XX5oF1+y3O71B`q|O1j;bJoiZB8K1aw^oMN~j7sGzEUEltxvQIs`LRaM!MBS#h- zSKr&)yQ`M+IEI$CSfq{X1S67$n2;lVT(-+or zcvV$ZX=-Zf^6GxC)q-Qkj#Z6}jC8MOdUkbnfngW}jsOlFI`rY#*qFd^+`9TdG&Jt(n}tLo0num_VzC&+VljwDqY#hBVQFaz7-KK~@gPLQ;c#-# zo;_o)1+cwyySr!_`_G;2-H=QslQlIp#Ow8GrfJ%WqAZ^{al#c0233yZz%UGm$K%hS zRsrMjI0S=1T2WE)YdW2#F9q1%+3DV~W5@fZVeZmY{XK$-!ebua93J60j7h0vr%lTu z12m1QXZLF=W>EU_)uqX&^nM}5rPN&i0;?hbc zlg%uqmQonwq-9zzm+q2RR#qxFjw=Iz$QUybLNY?AL@DJcrDm~Mv>C86;rW~-iDg1a zqhT7$4`Z>upU$8Ec8vlzZVdh`@OVGRanH<&$Kw_~9ybJo0ijs56;V=rf*?boVA1L6 z$Ems5nMd(hVp*1Ci7`+VS+;H4)(B5Z48Wr(N`W!PVT>yUQK-ZObMZ%y-7~ZE^7F06 z;}g;9$J4X5=}cC^81uTW!72=;403rB=H~tYf(eMCgk(uj8yh$Hw{G1MsHv^4a=G>D zQrR{Q)11#_GP8t`8H{n30h2VBR?mx~Ff?+z9E-+Ij@`NWJ$r71BTd(90H6r~8bwhG zd%eDvZQH_)p-@XxTc}0y`@AHV%X0`J&~*(k#(>a^ot$A9b~2eNFDyLCbC^i8bMxwN z*N5g8Q>l;djoli2sVCHQodAFz00IEeq^jDx_4VFhINZ^+xh)h3g<5#O&&zWh`bRH0 zJu}CCj9kcH9~?ZxVSHvX{_u$-Q>y8@1ORV61!{J=J@5E^{$M!Vv9T@G+R)nCjO*)a z5kj!qGJ5;YJ$AM?k{BDkb*fk_oX_WSrGL#8Yr3ujzy<&aAcR65PvzTzV6Z9N(b3et zWwUo?de-cVM1J{wZst@zm%IO;+j33UE1#+pc={ft0iZvh%PqaR@w|ywjXweK#!G8h SwL2jI0000 8: - administrativeYear = currentYear - else: - administrativeYear = currentYear - 1 - return administrativeYear - - - def index(self, message = '', error = ''): - adh = cherrypy.session['LDAP'].getProprio(cherrypy.session['uid']) - t = {} - t['message'] = message - t['error'] = error - t['solde'] = adh.solde - - ############## liste des factures ############## - listeFactures = [] - for f in adh.factures(): - facture = {} - facture['no'] = f.numero() - facture['intitule'] = f.articles()[0]['designation'] - facture['details'] = [ - { - 'intitule':art['designation'], - 'quantite':art['nombre'], - 'prixUnitaire':art['pu'], - 'prixTotal':art['pu']*art['nombre'], - } for art in f.articles()] - facture['montant'] = f.total() - facture['paypal'] = 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", - ) - - facture['payee'] = f.recuPaiement() - listeFactures.append(facture) - t['listeFactures'] = listeFactures - - return { - 'template' :'factures', - - 'values' :t, - 'stylesheets' :['cransFactures.css'], - 'scripts' :[], - } - index.exposed = True - - def historique(self, page = 1, items_per_page = 20): - adh = cherrypy.session['LDAP'].getProprio(cherrypy.session['uid']) - lst = [ x for x in adh.historique() if x.split(u' : ',1)[1].startswith(u'credit') or x.split(u' : ',1)[1].startswith(u'debit') ] - histLst = [] - for anItem in lst: - aLine = {} - aLine["date"] = anItem.split(u",")[0] - aLine["type"] = anItem.split(u' : ',2)[1].split(u' ')[0] - aLine["montant"] = anItem.split(u' : ',2)[1].split(u' ')[1] - try: - aLine["intitule"] = anItem.split(u'[')[1].split(u']')[0] - except Exception: - aLine["intitule"] = "" - histLst.append(aLine) - - histLst.reverse() - page = int(page) - items_per_page = int(items_per_page) - if page == 1: - prevPage = None - else: - prevPage = page - 1 - - if page * items_per_page >= histLst.__len__(): - nextPage = None - else: - nextPage = page + 1 - offset = items_per_page * ( page - 1) - - - return { - 'template' :'factures-historique', - 'values' :{ - 'liste':lst, - 'historic_items':histLst[offset:offset + items_per_page], - 'nextPage':nextPage, - 'prevPage':prevPage - }, - 'stylesheets' :['cransFactures.css'], - 'scripts' :[], - } - historique.exposed = True - - def delFacture(self, no): - try: - # trrouver la factures - fact = cherrypy.session['LDAP'].search('fid=' + no, 'w')['facture'][0] - #verifier qu'elle appartient bien a l'adherent - if not fact.proprietaire().mail() == cherrypy.session['uid']: - raise Exception, "Impossible de supprimer cette facture" - # la supprimer - fact.delete() - except Exception, e: - cherrypy.log(str(e), "FACTURES", 1) - return self.index() - delFacture.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'].getProprio(cherrypy.session['uid']) - 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 apres 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 - diff --git a/intranet/modules/mesSous/templates/MonComptePaypalCancel.tmpl b/intranet/modules/mesSous/templates/MonComptePaypalCancel.tmpl deleted file mode 100644 index eba66923..00000000 --- a/intranet/modules/mesSous/templates/MonComptePaypalCancel.tmpl +++ /dev/null @@ -1,22 +0,0 @@ -#import cherrypy -#set bugMail = cherrypy.config.get("mail.bugreport", "nounous@crans.org") - - -#include "inc-paypal-head.tmpl" - - - - - - -

En raison des conditions climatiques, l'imprimante a -tendance à bourrer relativement souvent. Merci de prévoir vos -impressions à l'avance et de privilégier les impressions -recto-verso. En raison de ces bourrages, l'agrafage peut ne pas se faire sur -toutes les feuilles. Par ailleurs, l'inscription "Paper is out" est trompeuse. -En cas de problème, merci de contacter rapidement les imprimeurs : impression@lists.crans.org. Nous -sommes en train de rechercher une solution. Merci de votre -compréhension. Les nounous

- - diff --git a/intranet/modules/mesSous/templates/MonComptePaypalReturn.tmpl b/intranet/modules/mesSous/templates/MonComptePaypalReturn.tmpl deleted file mode 100644 index de47b8ba..00000000 --- a/intranet/modules/mesSous/templates/MonComptePaypalReturn.tmpl +++ /dev/null @@ -1,21 +0,0 @@ -#import cherrypy -#set bugMail = cherrypy.config.get("mail.bugreport", "nounous@crans.org") - - -#include "inc-paypal-head.tmpl" - - -
-

Paiement terminé

-

Ton compte impressions sera crédité dans quelques minutes.

-

N'hésite pas à nous envoyer tes remarques et/ou suggestions à $bugMail

-
- Retour -
-
- - - -
- - diff --git a/intranet/modules/mesSous/templates/MonCompteRechargePaypal1.tmpl b/intranet/modules/mesSous/templates/MonCompteRechargePaypal1.tmpl deleted file mode 100755 index 3e722c24..00000000 --- a/intranet/modules/mesSous/templates/MonCompteRechargePaypal1.tmpl +++ /dev/null @@ -1,21 +0,0 @@ - - -#include "inc-paypal-head.tmpl" - - -
-

Recharger son compte impression

-

Le cr@ns te permet de recharger ton compte pour les impressions via PayPal ou en allant voir un câbleur.

-

La méthode PayPal est plus rapide mais PayPal facture des frais de transaction.

-

N.B. : le solde d'impression est de nouveau crédité directement après le paiement, le bug a été résolu.

- -
- - - - - - diff --git a/intranet/modules/mesSous/templates/MonCompteRechargePaypal2.tmpl b/intranet/modules/mesSous/templates/MonCompteRechargePaypal2.tmpl deleted file mode 100755 index e8a4e9ff..00000000 --- a/intranet/modules/mesSous/templates/MonCompteRechargePaypal2.tmpl +++ /dev/null @@ -1,33 +0,0 @@ - - -#include "inc-paypal-head.tmpl" - - -
-

Étape 1 : Choisir le montant

-#if $getVar('error',False) -
$error
-#end if -
- - -

-
- Annuler - - -
- - -
-
- - diff --git a/intranet/modules/mesSous/templates/MonCompteRechargePaypal3.tmpl b/intranet/modules/mesSous/templates/MonCompteRechargePaypal3.tmpl deleted file mode 100755 index 3ce6045b..00000000 --- a/intranet/modules/mesSous/templates/MonCompteRechargePaypal3.tmpl +++ /dev/null @@ -1,35 +0,0 @@ - - -#include "inc-paypal-head.tmpl" - -
-

Étape 2 : Confirmer la facture

- - - - - - - - #for unDetail in $details - - - - - - - #end for - - - -
DescriptionPrix unitaireQuantitétotal
$unDetail.intitule$unDetail.prixUnitaire €$unDetail.quantite$unDetail.prixTotal €
- Total - $total €
- -
- - \ No newline at end of file diff --git a/intranet/modules/mesSous/templates/MonCompteRechargePaypal4.tmpl b/intranet/modules/mesSous/templates/MonCompteRechargePaypal4.tmpl deleted file mode 100755 index 88250136..00000000 --- a/intranet/modules/mesSous/templates/MonCompteRechargePaypal4.tmpl +++ /dev/null @@ -1,17 +0,0 @@ - - -#include "inc-paypal-head.tmpl" - -
-

Étape 3 : Fin

-

Ton compte impressions sera credité dés que la facture -sera reglée.

-

Tu peux régler la facture plus tard en allant dans Mon Soldes

- -
- - diff --git a/intranet/modules/mesSous/templates/factures-historique.tmpl b/intranet/modules/mesSous/templates/factures-historique.tmpl deleted file mode 100755 index 7c772622..00000000 --- a/intranet/modules/mesSous/templates/factures-historique.tmpl +++ /dev/null @@ -1,58 +0,0 @@ -
- -
- - -
-
-

Historique

-
-
- #if $prevPage - << moins vieux - #else - << moins vieux - #end if -  |  - #if $nextPage - plus vieux >> - #else - plus vieux >> - #end if -
- - - - - - - - #for anItem in $historic_items - - - - #if $anItem.type=="debit" - - #else - - #end if - #if $anItem.type=="credit" - - #else - - #end if - - #end for - #if $historic_items == [] - - #end if -
DateIntituléDébitCrédit
$anItem.date$anItem.intitule$anItem.montant $anItem.montant 
- AUCUNE TRANSACTION ENREGISTRÉE -
-
-
-
-
diff --git a/intranet/modules/mesSous/templates/factures.tmpl b/intranet/modules/mesSous/templates/factures.tmpl deleted file mode 100755 index 0f3d5f19..00000000 --- a/intranet/modules/mesSous/templates/factures.tmpl +++ /dev/null @@ -1,115 +0,0 @@ -
- -#if $message != '' - -#end if - -#if $error != '' - -#end if - - - - -
- - -
-
-

Solde

-
$getVar('solde', "n/a") € - Rechargez avec PayPal -
-
- -
-

Mes factures PayPal

- #for f in $listeFactures - #if $f.payee -
- #else -
- #end if -
- - #if $f.details.__len__() > 1 - - #end if - $f.intitule - #if not $f.payee - (non payée) - #end if - - - - $f.montant € - - Crée le - - #if not $f.payee - - Annuler - Payer avec PayPal - - #else - Payée - #end if - -
- #if $f.details.__len__() > 1 - -
- #end if - #end for - - #if $listeFactures == [] -
- AUCUNE TRANSACTION PAYPAL ENREGISTRÉE -
- #end if -
-
-
diff --git a/intranet/modules/mesSous/templates/inc-paypal-head.tmpl b/intranet/modules/mesSous/templates/inc-paypal-head.tmpl deleted file mode 100644 index 907ec0c7..00000000 --- a/intranet/modules/mesSous/templates/inc-paypal-head.tmpl +++ /dev/null @@ -1,11 +0,0 @@ - - - Cr@nsIntranet - - - - - - - - diff --git a/intranet/modules/monCompte/main.py b/intranet/modules/monCompte/main.py deleted file mode 100644 index a3e42a6a..00000000 --- a/intranet/modules/monCompte/main.py +++ /dev/null @@ -1,360 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# ##################################################################################################### # -# 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): - _droits=["personnel"] - 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__() >= 20 and adh.droits() == []: - return self.index(error=u"Vous avez déjà 20 alias mail. Demander à un câbleur pour en rajouter et/ou effacer les inutilisés.") - 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 - diff --git a/intranet/modules/monCompte/static/crans_domtab.js b/intranet/modules/monCompte/static/crans_domtab.js deleted file mode 100755 index ce6a1fce..00000000 --- a/intranet/modules/monCompte/static/crans_domtab.js +++ /dev/null @@ -1,259 +0,0 @@ -/* - 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'); -document.write('div.domtab>div{display:none;}<'); -document.write('/s'+'tyle>'); diff --git a/intranet/modules/monCompte/static/icon.png b/intranet/modules/monCompte/static/icon.png deleted file mode 100755 index f2551b9fc670dc30741ed28b43effc55f4bb1b6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4072 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 a{xtxre-6(*ye}C50000 -********************************************/ -#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; -} - - -/******************************************** - * -********************************************/ -/* 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; -} - -/******************************************** - * -********************************************/ -.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; -} - - -/******************************************** - * -********************************************/ - -.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; -} - -/******************************************** - * -********************************************/ -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; -} -/******************************************** - * -********************************************/ -.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%; - -} -/******************************************** - * -********************************************/ -ul.listeAlias { - list-style-type:none; - margin:0; - padding:0; -} -ul.listeAlias li span { - color:#666; -} - - -/******************************************** - * -********************************************/ -#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; -} - -/******************************************** - * -********************************************/ -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; } - -/******************************************** - * -********************************************/ - -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; -} diff --git a/intranet/modules/monCompte/static/moncompte.js b/intranet/modules/monCompte/static/moncompte.js deleted file mode 100755 index 3abaac7e..00000000 --- a/intranet/modules/monCompte/static/moncompte.js +++ /dev/null @@ -1,41 +0,0 @@ -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"; -} diff --git a/intranet/modules/monCompte/static/passwordGenerator.js b/intranet/modules/monCompte/static/passwordGenerator.js deleted file mode 100755 index 18b6cf90..00000000 --- a/intranet/modules/monCompte/static/passwordGenerator.js +++ /dev/null @@ -1,66 +0,0 @@ -/************************************************************************ - 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; -} diff --git a/intranet/modules/monCompte/templates/MonComptePaypalCancel.tmpl b/intranet/modules/monCompte/templates/MonComptePaypalCancel.tmpl deleted file mode 100644 index 7bef45d6..00000000 --- a/intranet/modules/monCompte/templates/MonComptePaypalCancel.tmpl +++ /dev/null @@ -1,22 +0,0 @@ -#import cherrypy -#set bugMail = cherrypy.config.get("mail.bugreport", "nounous@crans.org") - - -#include "inc-paypal-head.tmpl" - - -
-

Paiement annulé

-

Ton compte impressions sera crédité dés que la facture sera réglée.

-

Tu peux régler la facture plus tard en allant dans Mes Factures

-

En cas de problème, envoie un mail à $bugMail

-
- Retour -
-
- - - -
- - diff --git a/intranet/modules/monCompte/templates/MonComptePaypalReturn.tmpl b/intranet/modules/monCompte/templates/MonComptePaypalReturn.tmpl deleted file mode 100644 index e96cd6c3..00000000 --- a/intranet/modules/monCompte/templates/MonComptePaypalReturn.tmpl +++ /dev/null @@ -1,21 +0,0 @@ -#import cherrypy -#set bugMail = cherrypy.config.get("mail.bugreport", "nounous@crans.org") - - -#include "inc-paypal-head.tmpl" - - -
-

Paiement terminé

-

Ton compte impressions sera crédité dans quelques minutes.

-

N'hésite pas à nous envoyer tes remarques et/ou suggestions à $bugMail

-
- Retour -
-
- - - - - - diff --git a/intranet/modules/monCompte/templates/MonCompteRechargePaypal1.tmpl b/intranet/modules/monCompte/templates/MonCompteRechargePaypal1.tmpl deleted file mode 100755 index f8e76575..00000000 --- a/intranet/modules/monCompte/templates/MonCompteRechargePaypal1.tmpl +++ /dev/null @@ -1,20 +0,0 @@ - - -#include "inc-paypal-head.tmpl" - - -
-

Recharger son compte impression

-

Le cr@ns te permet de recharger ton compte pour les impressions via PayPal ou en allant voir un câbleur.

-

La méthode PayPal est plus rapide mais PayPal facture des frais de transaction.

- -
- - - - - - \ No newline at end of file diff --git a/intranet/modules/monCompte/templates/MonCompteRechargePaypal2.tmpl b/intranet/modules/monCompte/templates/MonCompteRechargePaypal2.tmpl deleted file mode 100755 index e8a4e9ff..00000000 --- a/intranet/modules/monCompte/templates/MonCompteRechargePaypal2.tmpl +++ /dev/null @@ -1,33 +0,0 @@ - - -#include "inc-paypal-head.tmpl" - - -
-

Étape 1 : Choisir le montant

-#if $getVar('error',False) -
$error
-#end if -
- - -

-
- Annuler - - -
- - -
-
- - diff --git a/intranet/modules/monCompte/templates/MonCompteRechargePaypal3.tmpl b/intranet/modules/monCompte/templates/MonCompteRechargePaypal3.tmpl deleted file mode 100755 index 3ce6045b..00000000 --- a/intranet/modules/monCompte/templates/MonCompteRechargePaypal3.tmpl +++ /dev/null @@ -1,35 +0,0 @@ - - -#include "inc-paypal-head.tmpl" - -
-

Étape 2 : Confirmer la facture

- - - - - - - - #for unDetail in $details - - - - - - - #end for - - - -
DescriptionPrix unitaireQuantitétotal
$unDetail.intitule$unDetail.prixUnitaire €$unDetail.quantite$unDetail.prixTotal €
- Total - $total €
- -
- - \ No newline at end of file diff --git a/intranet/modules/monCompte/templates/MonCompteRechargePaypal4.tmpl b/intranet/modules/monCompte/templates/MonCompteRechargePaypal4.tmpl deleted file mode 100755 index c9c52d59..00000000 --- a/intranet/modules/monCompte/templates/MonCompteRechargePaypal4.tmpl +++ /dev/null @@ -1,15 +0,0 @@ - - -#include "inc-paypal-head.tmpl" - -
-

Étape 3 : Fin

-

Ton compte impressions sera crédité dés que la facture sera réglée.

-

Tu peux régler la facture plus tard en allant dans Mes Factures

- -
- - \ No newline at end of file diff --git a/intranet/modules/monCompte/templates/inc-paypal-head.tmpl b/intranet/modules/monCompte/templates/inc-paypal-head.tmpl deleted file mode 100644 index 907ec0c7..00000000 --- a/intranet/modules/monCompte/templates/inc-paypal-head.tmpl +++ /dev/null @@ -1,11 +0,0 @@ - - - Cr@nsIntranet - - - - - - - - diff --git a/intranet/modules/monCompte/templates/monCompte.tmpl b/intranet/modules/monCompte/templates/monCompte.tmpl deleted file mode 100755 index 63122351..00000000 --- a/intranet/modules/monCompte/templates/monCompte.tmpl +++ /dev/null @@ -1,216 +0,0 @@ -#encoding UTF-8 -#if $getVar('message',False) - -#end if - -#if $getVar('error',False) - -#end if - -
-
-

Paramètres de mon compte

- - -
-

-
-
Nom :
-
$adherent.nom - modifier -
-
-
Prénom :
-
$adherent.prenom - modifier -
-
- #if $getVar('adherent.adresse', False) -
Adresse :
-
- $adherent.adresse.ligne1
- #if $adherent.adresse.ligne2 != u' ' - $adherent.adresse.ligne2
- #end if - $adherent.adresse.cp $adherent.adresse.ville -
- #else -
Chambre :
-
$adherent.chambre
- #end if -
Solde :
-
- $adherent.solde € - modifier - -
-
-
Téléphone :
-
$adherent.telephone - modifier -
-
- #if $adherent.droits -
Droits :
-
- $adherent.droits -
- #end if -
État administratif pour l'année $adherent.anneeScolaire :
-
-
-
Cotisation :
-
- #if $adherent.cotisationOK - OK - #else - Non payée - #end if -
-
Carte d'étudiant :
-
- #if $adherent.carteOK - OK - #else - pas de carte d'étudiant - #end if -
-
-
-
Changer mon mot de passe
-
-
-
- -
- -
- Générer un nouveau mot de passe
- -
- -
-
-
-
-
- -
-

-
-
-
Alias:
-
- #if $mailInfos.alias==[] - Vous n'avez pas d'alias - #else -
    - #for $an_alias in $mailInfos.alias -
  • $an_alias
  • - #end for -
- #end if -
- - Nouvel alias -
- Afin d'éviter les abus, la destruction d'un alias nécessite une - demande via la mailing-list respbats@crans.org. -
-
-
-
Greylisting:
-
- #if $mailInfos.contourneGreylist==True - - #else - - #end if - Plus d'infos
-
-
- Entêtes: -
-
- #if $mailInfos.rewriteMailHeaders==True - - #else - - #end if -
-
-#if $getVar('mailError', False) -
    -
  • - $mailError -
  • -
-#else -
-
Transfert:
-
- -

Laisser vide pour désactiver le transfert


- -
-
Tri des spams:
-
-
-
-
-
-
-#end if -
    -
  • - - -
  • -
-
-
-
-
diff --git a/intranet/static/css/accueil.css b/intranet/static/css/accueil.css deleted file mode 100644 index c0512f91..00000000 --- a/intranet/static/css/accueil.css +++ /dev/null @@ -1,79 +0,0 @@ -/************************************************************* - .. - .... ............ ........ - . ....... . .... .. - . ... .. .. .. .. ..... . .. - .. .. ....@@@. .. . ........ . - .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. .... - .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... .... - @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. .. - .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. ..... - ...@@@.... @@@ .@@.......... ........ ..... .. - . ..@@@@.. . .@@@@. .. ....... . ............. - . .. .... .. .. . ... .... -. . .... ............. .. ... -.. .. ... ........ ... ... - ................................ - -============================================================== -mainInterface.css - Intranet Style - - Mise en page de l'accueil - - -Copyright (c) 2006 by www.crans.org - -**************************************************************/ - -div.framed_gray { - border-radius:20px; - -webkit-border-radius:20px; - border-right:3px solid DarkGreen; - border-bottom:3px solid DarkGreen; - background-color: PaleGreen; - padding:10px; -} - -div.framed_gray fieldset { - border-width:2px; - border-style:solid none none none; - border-color: DarkGreen; - padding:10px; - margin:10px 10px; - font-weight:bold; - clear: left; -} - -div.framed_gray fieldset legend { - color: DarkGreen; -} - -div.framed_gray fieldset ul { - list-style-type:none; - margin:0; - padding:0; -} - -div.framed_gray fieldset ul li { - float:left; - height:70px; - width:100px; - margin:5px; - display:block; - text-align:center; -} - -div.framed_gray fieldset ul li span { - margin-bottom:0; - display:block; -} -div.framed_gray fieldset ul a { - color:black; - text-decoration:none; -} - -div.framed_gray fieldset ul li img { - margin:2px auto; - width:32px; - height:32px; -} diff --git a/intranet/static/css/form.css b/intranet/static/css/form.css deleted file mode 100644 index d7a05344..00000000 --- a/intranet/static/css/form.css +++ /dev/null @@ -1,262 +0,0 @@ -/* form.css */ - -form * { - margin: 0px; - padding: 0px; -} - -form { - margin: 0px; - padding: 0px; - font-size: 100%; - min-width: 570px; - max-width: 570px; - width: 570px; -} - -form fieldset { - clear: both; - font-size: 100%; - border-color: #000000; - border-width: 1px 0px 0px 0px; - border-style: solid none none none; - padding: 10px; - margin: 0px 0px 0px 0px; -} - -form fieldset legend { - font-size: 150%; - font-weight: normal; - color: #000000; - margin: 0px 0px 0px 0px; - padding: 0px 5px; -} - -label { - font-size: 100%; -} - -label u { - font-style: normal; - text-decoration: underline; -} - -input, select, textarea { - font-family: Tahoma, Arial, sans-serif; - font-size: 100%; - color: #000000; -} - -textarea { - overflow: auto; -} - -form div { - clear: left; - display: block; - height: expression('1%'); - margin: 5px 0px 0px 0px; - padding: 1px 3px; -} - -form fieldset div.notes { - float: right; - width: 158px; - height: auto; - margin: 0px 0px 10px 10px; - padding: 5px; - border: 1px solid #666666; - background-color: #ffffe1; - color: #666666; - font-size: 88%; -} - -form fieldset div.notes h4 { - background-image: url(img/icon_info.gif); - background-repeat: no-repeat; - background-position: top left; - padding: 3px 0px 3px 27px; - border-width: 0px 0px 1px 0px; - border-style: solid; - border-color: #666666; - color: #666666; - font-size: 110%; -} - -form fieldset div.notes p { - margin: 0em 0em 1.2em 0em; - color: #666666; -} - -form fieldset div.notes p.last { - margin: 0em; -} - -form div fieldset { - clear: none; - border-width: 1px; - border-style: solid; - border-color: #666666; - margin: 0px 0px 0px 142px; - padding: 0px 5px 5px 5px; - width: 197px; -} - -form div fieldset legend { - font-size: 100%; - padding: 0px 3px 0px 9px; -} - -form div.required fieldset legend { - font-weight: bold; -} - -form div label { - display: block; - float: left; - width: 130px; - padding: 3px 5px; - margin: 0px 0px 5px 0px; - text-align: right; -} - -form div.optional label, label.optional { - font-weight: normal; -} - -form div.required label, label.required { - font-weight: bold; -} - -form div label.labelCheckbox, form div label.labelRadio { - float: none; - display: block; - width: 200px; - height: expression('1%'); - padding: 0px; - margin: 0px 0px 5px 142px; - text-align: left; -} - -form div fieldset label.labelCheckbox, form div fieldset label.labelRadio { - margin: 0px 0px 5px 0px; - width: 170px; -} - -form div img { - border: 1px solid #000000; -} - -p.error { - background-color: #ff0000; - background-image: url(/images/icon_error.gif); - background-repeat: no-repeat; - background-position: 3px 3px; - color: #ffffff; - padding: 3px 3px 5px 27px; - border: 1px solid #000000; - margin: auto 100px; -} - -form div.error { - background-color: #ffffe1; - background-image: url(/images/required_bg.gif); - background-repeat: no-repeat; - background-position: top left; - color: #666666; - border: 1px solid #ff0000; -} - -form div.error p.error { - background-image: url(/images/icon_error.gif); - background-position: top left; - background-color: transparent; - border-style: none; - font-size: 88%; - font-weight: bold; - margin: 0px 0px 0px 118px; - width: 200px; - color: #ff0000; -} - -form div input, form div select, form div textarea { - width: 200px; - padding: 1px 3px; - margin: 0px 0px 0px 0px; -} - - - -form div input.inputFile { - width: 211px; -} - -form div select.selectOne, form div select.selectMultiple { - width: 211px; - padding: 1px 3px; -} - -form div input.inputCheckbox, form div input.inputRadio, input.inputCheckbox, input.inputRadio { - display: inline; - height: 14px; - width: 14px; - background-color: transparent; - border-width: 0px; - padding: 0px; - margin: 0px 0px 0px 140px; -} - -form div.submit { - padding: 0px 0px 0px 140px; - text-align:right; -} - -form div.submit div { - display: inline; - float: left; - text-align: left; - width: auto; - padding: 0px; - margin: 0px; -} - -form div input.inputSubmit, form div input.inputButton, input.inputSubmit, input.inputButton { - background-color: #cccccc; - color: #000000; - width: auto; - padding: 0px 6px; - margin: 0px; -} - -form div.submit div input.inputSubmit, form div.submit div input.inputButton { - float: right; - margin: 0px 0px 0px 5px; -} - -form div small { - display: block; - margin: 0px 0px 5px 142px; - padding: 1px 3px; - font-size: 88%; - height: expression('1%'); - width:200px; - -} - -form div.wide input.inputText, form div.wide input.inputPassword, form div.wide input.inputFile, form div.wide select, form div.wide textarea { - width: 344px; - margin: 0px; -} - -form div.notes p, form div small { - line-height: 125%; -} - -form div.wide small { - margin: 0px 0px 5px 0px; -} - -form div.wide label { - float: none; - display: block; -} diff --git a/intranet/static/css/login.css b/intranet/static/css/login.css deleted file mode 100644 index 618775fe..00000000 --- a/intranet/static/css/login.css +++ /dev/null @@ -1,71 +0,0 @@ -.form { - width: 260px; - padding: 0; - margin: 0 auto; - margin-top: 60px; - } - -.title{ - position: relative; - left: -50px; - top: 20px; -} - -h2 { - position: relative; - float: left; - top: 20px; - margin: 0 0 0.5em 0; - padding:0 0 0 0; -} -img { - position: relative; - top: -60px; - float:left; -} -.block { - padding: 20px; - background: LightBlue; - border-right: 2px solid DarkSlateGrey; - border-bottom: 2px solid DarkSlateGrey; - border-radius: 20px; - -webkit-border-radius: 20px; - margin:0 auto; - } -label { - display:block; - float:left; - width:100%; - clear:both; -} -textInputLabel { - display: block; - width:150px; -} -div#message { - background: #faa; - border-right: 1px DarkRed solid; - border-bottom:1px DarkRed solid; - border-radius: 10px; - -webkit-border-radius: 10px; - padding:5px; - text-align:center; - font-weight:bold; - margin:10px auto 10px auto; - clear:both; -} -.liens { - text-align:right; - margin-top: 0.5em; - } -/**/ -#mainFooter { - text-align:center; - color:gray; - font-size:small; -} -#mainFooter a { - color:gray; - margin:5px; -} - diff --git a/intranet/static/css/mainInterface.css b/intranet/static/css/mainInterface.css deleted file mode 100644 index 58929861..00000000 --- a/intranet/static/css/mainInterface.css +++ /dev/null @@ -1,243 +0,0 @@ -/************************************************************* - .. - .... ............ ........ - . ....... . .... .. - . ... .. .. .. .. ..... . .. - .. .. ....@@@. .. . ........ . - .. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. .... - .@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... .... - @@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. .. - .@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. ..... - ...@@@.... @@@ .@@.......... ........ ..... .. - . ..@@@@.. . .@@@@. .. ....... . ............. - . .. .... .. .. . ... .... -. . .... ............. .. ... -.. .. ... ........ ... ... - ................................ - -============================================================== -mainInterface.css - Intranet Style - - STYLE GLOBAL ET MISE EN PAGE DES ELEMENTS COMMUNS - - -Copyright (c) 2006 by www.crans.org - -**************************************************************/ - -/* STYLE GLOBAL - - body - - liens - - messages - - aides - - ... -*/ - -body -{ - background:white; - padding:150px 5px 5px 5px; - margin:0; - font-family: arial, "lucida console", sans-serif; - font-size:12px; -} - -a, a:hover, a:visited {color:blue;} - -h1#pageTitle { - border:5px solid #e2e2e2; /* #acc0ff */ - background-color:#f2f2f2; - width:100%; - margin:0; -} - -img { - border:none; -} - - -div#pageContent { - padding:0; - margin:10px; -} - -/**************************************************************************/ -/* LE HAUT DES PAGES - - le logo a gauche - - petit menu a droite -*/ - -div#topContent { - position:absolute; - top:0px; - left:0px; - width:100%; - height:150px; - padding:0; - font-weight:bold; -} - -img#main_topContentLogo { - height:100%; -} -/**/ - -ul#main_topContentMenu { - /* Position */ - z-index:2; - position:absolute; - right:0px; - top:0px; - /* taille */ - height:30px; - float:right; - /* disposition */ - padding:0; - margin:0; - background:transparent; - /* suppression des puces de liste */ - list-style-type: none; -} - -ul#main_topContentMenu li { - float:left; - padding:0 10px; - border-right:1px black solid; -} -ul#main_topContentMenu li.last { - border-right-style:none; -} - -ul#main_topContentMenu hr, div#topMenu h1 { - display:none; -} - -/************************************************************************** - * LE BAS DES PAGES - **************************************************************************/ -/**/ - -#mainFooter { - text-align:center; - color:gray; - font-size:small; -} -#mainFooter a { - color:gray; - margin:5px; -} - - -/************************************************************************** - * Messages - * (les messages affichés sur les pages pour indiquer le bon déroulement - * ou non d'une action) - **************************************************************************/ -#_crans_main_message_place_holder { - height:0; - overflow:visible; - position:absolute; - top:100px; - width:100%; -} - -.messageText { - padding:2px 10px; - display:block; -} - -.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; -} - -#_crans_main_message_chargement { - background:#cc0000; - position:fixed; - top:1px; - right:1px; - z-index:1000; - display:none; - padding:2px 3px; - color:white; -} - -/************************************************************************** - * DIVERS - **************************************************************************/ - - -/**/ -#leftMenu ul { - list-style-type: none; - /* disposition */ - padding:0 25px; -} - -#leftMenu h2 { - display:none; -} - -div.visualClear {clear:both;} - - -.aide { - font-size:0.8em; -} - - -.crans_warning { - font-style: italic; - font-size: .8em; - border : thin black solid; - display: block; - width:80%; - padding:3px 5px 3px 30px; - margin:auto; - background: center left no-repeat url('/static/images/crans_mini_warning.png'); -} -.crans_ajax_error { - display: block; - width:100%; - position: absolute; - top:0; - left:0; - padding:0; - z-index:100; - background: #fff88f; - border-bottom : thin gray solid;} - -.crans_ajax_error>div { - font-weight: bold; - font-size: 1em; - display: block; - padding:1em 1em 1em 25px; - margin-left:1em; - z-index:100; - background: transparent center left no-repeat url('/static/images/crans_mini_warning.png'); -} - -.crans_signature { -text-align: right; -display: block; -} - -a.crans_helpd { - min-height: 15px; - padding-left:17px; - background: no-repeat url('/static/images/crans_help.png'); -} diff --git a/intranet/static/intranet_ferme.html b/intranet/static/intranet_ferme.html deleted file mode 100644 index 39c40955..00000000 --- a/intranet/static/intranet_ferme.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - Cr@ns Intranet - - - - - - - - - - - - - -
-
- -
-
- - -
- Fermé pour travaux -
- -

-

Liens Cr@ns

- -
-

L'intranet est en version beta, aidez-nous à - l'améliorer en nous envoyant vos remarques et en nous signalant tout - problème à intranet-bugreport@lists.crans.org

-
-
- - - diff --git a/intranet/static/scripts/AJAX.js b/intranet/static/scripts/AJAX.js deleted file mode 100644 index bfcda8b8..00000000 --- a/intranet/static/scripts/AJAX.js +++ /dev/null @@ -1,32 +0,0 @@ -/***************************** - AJAX - *****************************/ -AJAX = {}; - -AJAX.call = function(page, callBack, loadingMessage) { - var loadingMessage = (loadingMessage == null) ? true : loadingMessage; - //console.debug("calling AJAX : " + page); - if (loadingMessage) { - Crans.loading.display(true); - var oldCallBack = callBack; - callBack = function(r) { - Crans.loading.display(false); - oldCallBack( r ); - }; - } - var e = loadJSONDoc(page); - e.addCallback(callBack); - e.addErrback(AJAX.errorHandler); -} - -AJAX.errorHandler = function(d) { - Crans.loading.display(false); - appendChildNodes(document.body, - DIV({"class":"crans_ajax_error"}, - DIV({}, - "Erreur de communication, essayez de vous ", - A({"href":"do_logout"}, "reconnecter"), ".") - )); - logError("AJAX Error: " + d); - //Impression.AJAX.modifPrix("Erreur...", false); -} diff --git a/intranet/static/scripts/crans.js b/intranet/static/scripts/crans.js deleted file mode 100755 index c5ee3fe2..00000000 --- a/intranet/static/scripts/crans.js +++ /dev/null @@ -1,151 +0,0 @@ -/* ************************************************************ - * Concole - ************************************************************ - * Si firebug est présent, utilisation de la console intégrée - * à la place de celle de MockieKit - */ -try { -/* if (console.firebug) { - log("Using Firebug console"); - log = function(m) {console.log(m)}; - logWarning = function(m){console.warn(m)}; - logInfo = function(m){console.info(m)}; - logDebug = function(m){console.debug(m)}; - logError = function(m){console.error(m)}; - logFatal = function(m){console.error(m)}; - } -*/ -MochiKit.Logging.logger.useNativeConsole = true -} -catch (Exception) {} - - - -/* ************************************************************ - * Crans - ************************************************************ - * Crans.messages : afficher des messages sur les pages - * Crans.loading : afficher l'indicateur de chargement - * Crans.keys : gestion des touches du clavier - */ -Crans = {}; - -/***************************** - Crans.Messages - *****************************/ -Crans.messages = {} -Crans.messages.initialized = false; - -Crans.messages.init = function() -{ - if (!Crans.messages.initialized) - { - //updateNodeAttributes(document.body, {'onclick':'Crans.messages.setMessage();'}); - appendChildNodes(document.body, DIV({'id':'_crans_main_message_place_holder'})); - Crans.messages.initialized = true; - logDebug("Crans.message initialized"); - } -} - - -Crans.messages.setMessage = function(m, messageClass) -{ - if (!Crans.messages.initialized) - Crans.messages.init(); - if (m == null) { - var messageBox = ''; - } else { - if (messageClass==null) - messageClass='message'; - if (messageClass == "errorMessage") - logWarning(m); - else - log(m); - var textHolder = SPAN({'class':'messageText'},m); - var messageBox = DIV({'class':messageClass},textHolder); - var messagePlace = document.getElementById("_crans_main_message_place_holder"); - } - try { - var messagePlace = document.getElementById("_crans_main_message_place_holder"); - replaceChildNodes(messagePlace,messageBox); - try {roundElement(messageBox);} catch (error) {} - } - catch (error) { - logError("élement _crans_main_message_place_holder introuvable") - return - } -} - -/***************************** - Crans.loading - *****************************/ -Crans.loading = {} -Crans.loading.initialized = false; - -Crans.loading.init = function(){ - try { - if (!Crans.loading.initialized) { - appendChildNodes(document.body, DIV({'id':'_crans_main_message_chargement'}, "Chargement...")); - Crans.loading.initialized = true; - } - } catch (error) { - logError(error.description); - } -} - -Crans.loading.display = function(bool) { - if (!Crans.loading.initialized) - Crans.loading.init(); - var loadingEl = document.getElementById("_crans_main_message_chargement"); - if (loadingEl) { - if (bool) { - appear(loadingEl); - } else { - fade(loadingEl, {duration:0.1}); - } - } else { - logFatal("Crans.loading cannot fid _crans_main_message_chargement element"); } - return false; -} - -/***************************** - Crans.keys - *****************************/ -Crans.keys = {} -Crans.keys.handled = false; - - -Crans.keys.handleF1 = function() -{ - createLoggingPane(true); -}; - -Crans.keys.keyMap = -{ - 'KEY_F1': Crans.keys.handleF1 -// , 'KEY_ESCAPE':alert -}; - - -connect(document, 'onkeydown', - function(e) - { - // We're storing a handled flag to work around a Safari bug: - if (true)//(!Crans.keys.handled) - { - - var key = e.key(); - var fn = Crans.keys.keyMap[key.string]; - if (fn) - { - fn(); - } - - //replaceChildNodes('onkeydown_code', key.code); - //replaceChildNodes('onkeydown_string', key.string); - //KeyEvents.updateModifiers(e); - } - - Crans.keys.handled = true; - } - ); \ No newline at end of file diff --git a/intranet/static/scripts/crans_domtab.js b/intranet/static/scripts/crans_domtab.js deleted file mode 100755 index ce6a1fce..00000000 --- a/intranet/static/scripts/crans_domtab.js +++ /dev/null @@ -1,259 +0,0 @@ -/* - 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'); -document.write('div.domtab>div{display:none;}<'); -document.write('/s'+'tyle>'); diff --git a/intranet/static/scripts/popup.js b/intranet/static/scripts/popup.js deleted file mode 100644 index be13efbb..00000000 --- a/intranet/static/scripts/popup.js +++ /dev/null @@ -1,35 +0,0 @@ -Popup = {}; -Popup.popupNode = null; -Popup.visible = false; - -Popup.display = function() -{ - if (this.popupNode == null) { - logError("Popup not created, cannot be displayed"); - return false; - } - appendChildNodes("pageContent", this.popupNode); - this.visible = true; - // logDebug("popup visible"); -} - -Popup.create = function(options, title_popup, content) { - var inPopup = DIV({"id":"__popupInDivId", "style":"background:white;margin:2px 5px;"}, content); - var outPopup = DIV({"id":"__popupOutDivId","style":"background:#AE0F3E;z-index:500;float:left;padding:0;min-width:300px;position:fixed;top:30%;left:30%;right:30%;"}, H1({"style":"font-size:1em;margin:0;text-align:center;color:white;"}, IMG({"src":"/static/images/WindowTitleLogo.png","alt":"icon", "style":"margin:0 5px;"}), title_popup), inPopup ); - roundElement(outPopup); - logDebug("Popup \""+ title_popup +"\" created"); - this.popupNode = outPopup; -} - -Popup.hide = function() { - if (this.visible) { - removeElement(this.popupNode); - this.visible = false; - } - // logDebug("popup not visible"); -} -Popup.closeLink = function(options, text_link) { - options["href"] = "#"; - options["onclick"] = "Popup.hide()"; - return A(options, text_link); -} diff --git a/intranet/templates/accueil.tmpl b/intranet/templates/accueil.tmpl deleted file mode 100644 index eac35ea8..00000000 --- a/intranet/templates/accueil.tmpl +++ /dev/null @@ -1,17 +0,0 @@ -#encoding:utf-8 -
-#for a_category in $modules -
- $a_category -
    - #for a_module_name in $modules[a_category] - #set the_module = $modules[a_category][a_module_name] -
  • - icon - $the_module.name -
  • - #end for -
-
-#end for -
diff --git a/intranet/templates/error.tmpl b/intranet/templates/error.tmpl deleted file mode 100644 index aae48d73..00000000 --- a/intranet/templates/error.tmpl +++ /dev/null @@ -1,27 +0,0 @@ -#encoding:utf-8 - -Traveaux -
-

Erreur $status

-
-
-
Envoyer un rapport de bug - - -
- -
- - Retour à la page d'accueil -
- #if $message -
-

Message d'erreur

-
$message
-
- #end if -
-
-
-
-
diff --git a/intranet/templates/error403.tmpl b/intranet/templates/error403.tmpl deleted file mode 100644 index 29b07e7d..00000000 --- a/intranet/templates/error403.tmpl +++ /dev/null @@ -1,13 +0,0 @@ -#encoding:utf-8 - -Do Not Enter -
-

Accès interdit

- -
$message
- - - Retour à la page d'accueil -
- -
diff --git a/intranet/templates/login.tmpl b/intranet/templates/login.tmpl deleted file mode 100644 index 3b639e2c..00000000 --- a/intranet/templates/login.tmpl +++ /dev/null @@ -1,63 +0,0 @@ -#encoding:utf-8 - - - - - - .:: Cr@ns Intranet ::. - - - -

Bienvenue sur Cr@nsIntranet

- - -
-
- logocr@ns -

Connexion

-
-
- - #if $message -
- $message -
- #else -
- #end if - -
- -
- -
- -
- -
-
- - -
-
-

-

Liens Cr@ns

- -#import cherrypy -#set bugMail = cherrypy.config.get("mail.bugreport", "nounous@crans.org") -
-

L'intranet est en version beta, aidez-nous à - l'améliorer en nous envoyant vos remarques et en nous signalant tout - problème à $bugMail

-
-
- - - - diff --git a/intranet/templates/main.tmpl b/intranet/templates/main.tmpl deleted file mode 100644 index 324aa635..00000000 --- a/intranet/templates/main.tmpl +++ /dev/null @@ -1,72 +0,0 @@ -#import cherrypy -#encoding:utf-8 -#set bugMail = cherrypy.config.get("mail.bugreport", "nounous@crans.org") - - - - - - Cr@ns $getVar('title', 'Intranet') - - - - #if $getVar('stylesheets',False) - #for $a_stylesheet in $stylesheets - - #end for - #end if - - - - - - - - #if $getVar('scripts',False) - #for $a_script in $scripts - - #end for - #end if - - -
- - $page - -
-
-
-
- - -
-

-

Liens Cr@ns

- -
-

L'intranet est en version beta, aidez-nous à - l'améliorer en nous envoyant vos remarques et en nous signalant tout - problème à $bugMail. - S'il s'agit d'un bug lié à un fichier particulier, veuillez preciser son nom et si vous acceptez que nous l'examinions. - S'il s'agit d'un bourrage, adressez-vous à impression@lists.crans.org. - Si vous souhaitez etre recrédité, donnez un maximum de détails, le detail des fichiers et la somme totale.

-
-
-#if $environment == 'development' - -#end if - -