From b69f8c03b63aa9d6d7dcc7190e48babd0a5c4321 Mon Sep 17 00:00:00 2001 From: www Date: Mon, 16 Mar 2015 14:20:24 +0100 Subject: [PATCH] modified: SRC/config/mail.php --- .bash_history | 29 +++ INITBASE/loader.py | 406 ++++++++++++++++++------------------- SRC/config/mail.php | 28 +-- SRC/public/imgs/puzzle.JPG | Bin 18235 -> 0 bytes 4 files changed, 236 insertions(+), 227 deletions(-) delete mode 100644 SRC/public/imgs/puzzle.JPG diff --git a/.bash_history b/.bash_history index 7bbc23a..f69ce60 100755 --- a/.bash_history +++ b/.bash_history @@ -451,3 +451,32 @@ git status git status git status git pull +ls +rm +rm --help +rm ./* +rmdir ./* +rm -rf * +ls +ls +cd .. +ls +ls +sudo chmod -R gu+w +chmod -R gu+w +chmod -R gu+w ./ +php artisan migrate +ls +cd SRC +ls +php artisan migrate +cd ;; +CD .. +cd .. +ls +cd initbase +cd INITBASE +ls +python loader +python loader.py +python loader.py diff --git a/INITBASE/loader.py b/INITBASE/loader.py index 3bac403..55cd5e0 100644 --- a/INITBASE/loader.py +++ b/INITBASE/loader.py @@ -1,203 +1,203 @@ -# -*- coding: utf-8 -*- -import xml.etree.ElementTree as ET -import MySQLdb as mdb -import sys -import re - - -def insert (cur, table, dict) : - keys = "" - datas = "" - for key , data in dict.items() : - keys += key + "," - datas += "\"" + str(data) + "\"," - - req = "INSERT INTO " + table + "(" + keys[:-1] + ")" + " VALUES (" + datas[:-1] + ")" - #print(req) - cur.execute(req) - return cur.lastrowid - - - -try : - listeTechnique = {} - listeMatiere= {} - listeDomaine = {} - listeDesignation = {} - listeAuteur = {} - listeDatation = {} - - con = mdb.connect('127.0.0.1', 'root', '', 'moduleweb',charset='utf8') - cur = con.cursor() - # Suppresion des données existantes dan la bd - cur.execute("TRUNCATE table auteurs") - cur.execute("TRUNCATE table matieres") - cur.execute("TRUNCATE table techniques") - cur.execute("TRUNCATE table domaines") - cur.execute("TRUNCATE table datations") - cur.execute("TRUNCATE table oeuvres") - - # On parcourt le fichier xml - tree = ET.parse('inventaire.xml') - root = tree.getroot() - - # Pour chaque oeuvre - for o in root.iter('oeuvre'): - idtechnique = "NULL" - idmatiere = "NULL" - iddomaine= "NULL" - iddesignation = "NULL" - iddesignation2 = "NULL" - iddesignation3 = "NULL" - idauteur = "NULL" - idauteur2 = "NULL" - image = "NULL" - iddatation = "NULL" - - technique = None - matiere = None - domaine = None - designation = None - designation2 = None - designation3 = None - auteur = None - auteur2 = None - datation = None - datation2 = None - - # On parcourt tout les tags - for child in o : - if child.tag == 'auteur1' : - auteur = child.text.encode('utf-8') - - elif child.tag == 'auteur2' : - auteur2 = child.text.encode('utf-8') - - elif child.tag == 'datation1': - datation = child.text.encode('utf-8') - - elif child.tag == 'datation2': - datation2 = child.text.encode('utf-8') - - elif child.tag == 'designation': - designation1 = child.text.encode('utf-8') - - elif child.tag == 'designation2': - designation2 = child.text.encode('utf-8') - - elif child.tag == 'designation3': - designation3 = child.text.encode('utf-8') - - elif child.tag == 'domaine': - domaine = child.text.encode('utf-8') - - elif child.tag == 'matiere': - matiere = child.text.encode('utf-8') - - elif child.tag == 'technique': - technique = child.text.encode('utf-8') - - elif child.tag == 'image' : - image = child.text.encode('utf-8') - - # On s'interesee qu'aux oeuvres ayant une image - if image != "NULL" : - if str(datation)+str(datation2) in listeDatation : - iddatation = listeDatation[str(datation)+str(datation2)] - else : - if datation is not None and datation2 is not None : - if re.compile("vers").search(datation.lower()) or re.compile("avant").search(datation.lower()): - try: - datas = {"dateDebut" : datation2.split("-")[0] + "-01-01", "dateFin" : datation2.split("-")[1] + "-12-31"} - iddatation = insert(cur,"datations",datas) - except Exception, e: - if re.compile("^[0-9]{4}[ ]").match(datation.lower()) : - datas = {"dateDebut" : datation.split(" ")[0] + "-01-01", "dateFin" : datation.split(" ")[0] + "-12-31"} - iddatation = insert(cur,"datations",datas) - - elif re.compile("^[0-9]{4}-[0-9]{4}$").search(datation.lower()) and re.compile("^[0-9]{4}-[0-9]{4}$").search(datation2.lower()) : - datas = {"dateDebut" : datation.split("-")[0] + "-01-01", "dateFin" : datation2.split("-")[1] + "-12-31"} - iddatation = insert(cur,"datations",datas) - - elif re.compile("^[0-9]{4}[ ]").match(datation.lower()) and re.compile("^[0-9]{4}[ ]").match(datation2.lower()) : - datas = {"dateDebut" : datation.split(" ")[0] + "-01-01", "dateFin" : datation2.split(" ")[0] + "-12-31"} - iddatation = insert(cur,"datations",datas) - - elif re.compile("^[0-9]{4}-[0-9]{4}[ ]").match(datation.lower()) and re.compile("^[0-9]{4}-[0-9]{4}[ ]").match(datation2.lower()) : - datas = {"dateDebut" : datation.split("-")[0] + "-01-01", "dateFin" : datation2.split("-")[1].split(" ")[0] + "-12-31"} - iddatation = insert(cur,"datations",datas) - - elif re.compile("^[0-9]{4}-[0-9]{4}[ ]").match(datation.lower()) and re.compile("^[0-9]{4}-[0-9]{4}").match(datation2.lower()) : - datas = {"dateDebut" : datation.split("-")[0] + "-01-01", "dateFin" : datation2.split("-")[1].split(" ")[0] + "-12-31"} - iddatation = insert(cur,"datations",datas) - - if datation is not None and datation2 is None : - if re.compile("^[0-9]{4}[ ]").match(datation.lower()) : - datas = {"dateDebut" : datation.split(" ")[0] + "-01-01", "dateFin" : datation.split(" ")[0] + "-12-31"} - iddatation = insert(cur,"datations",datas) - elif re.compile("^[0-9]{4}$").match(datation.lower()) : - datas = {"dateDebut" : datation + "-01-01", "dateFin" : datation + "-12-31"} - iddatation = insert(cur,"datations",datas) - elif re.compile("^[0-9]{4}-[0-9]{4}$").match(datation.lower()) : - datas = {"dateDebut" : datation.split("-")[0] + "-01-01", "dateFin" : datation.split("-")[1] + "-12-31"} - iddatation = insert(cur,"datations",datas) - - if iddatation != "NULL" : - listeDatation[str(datation)+str(datation2) ] = iddatation - - - - - - if technique is not None : - if not technique in listeTechnique : - datas = { "nom" : technique} - idtechnique = insert(cur,"techniques",datas) - listeTechnique[technique] = idtechnique - else : - idtechnique = listeTechnique[technique] - - if matiere is not None : - if not matiere in listeMatiere : - datas = { "nom" : matiere} - idmatiere = insert(cur,"matieres",datas) - listeMatiere[matiere] = idmatiere - else : - idmatiere = listeMatiere[matiere] - - if domaine is not None : - if not domaine in listeDomaine : - datas = { "nom" : domaine} - iddomaine = insert(cur,"domaines",datas) - listeDomaine[domaine] = iddomaine - else : - iddomaine = listeDomaine[domaine] - - if auteur is not None : - if not auteur in listeAuteur : - datas = { "nom" : auteur} - idauteur = insert(cur,"auteurs", datas) - listeAuteur[auteur] = idauteur - else : - idauteur = listeAuteur[auteur] - - - datas = {"technique_id" : idtechnique, "domaine_id" : iddomaine, "matiere_id" : idmatiere, - "image" : image, "designation" : con.escape_string(designation1), "auteur_id" : idauteur} - for key , data in datas.items() : - if data == "NULL" : - del datas[key] - - idoeuvre = insert(cur,"oeuvres",datas) - con.commit() - -except mdb.Error, e: - if con: - con.rollback() - - print("Error %d: %s" % (e.args[0],e.args[1])) - sys.exit(1) - -finally: - if con: - con.close() +# -*- coding: utf-8 -*- +import xml.etree.ElementTree as ET +import MySQLdb as mdb +import sys +import re + + +def insert (cur, table, dict) : + keys = "" + datas = "" + for key , data in dict.items() : + keys += key + "," + datas += "\"" + str(data) + "\"," + + req = "INSERT INTO " + table + "(" + keys[:-1] + ")" + " VALUES (" + datas[:-1] + ")" + #print(req) + cur.execute(req) + return cur.lastrowid + + + +try : + listeTechnique = {} + listeMatiere= {} + listeDomaine = {} + listeDesignation = {} + listeAuteur = {} + listeDatation = {} + + con = mdb.connect('127.0.0.1', 'root', 'l3miashs2015', 'moduleweb',charset='utf8') + cur = con.cursor() + # Suppresion des données existantes dan la bd + cur.execute("TRUNCATE table auteurs") + cur.execute("TRUNCATE table matieres") + cur.execute("TRUNCATE table techniques") + cur.execute("TRUNCATE table domaines") + cur.execute("TRUNCATE table datations") + cur.execute("TRUNCATE table oeuvres") + + # On parcourt le fichier xml + tree = ET.parse('inventaire.xml') + root = tree.getroot() + + # Pour chaque oeuvre + for o in root.iter('oeuvre'): + idtechnique = "NULL" + idmatiere = "NULL" + iddomaine= "NULL" + iddesignation = "NULL" + iddesignation2 = "NULL" + iddesignation3 = "NULL" + idauteur = "NULL" + idauteur2 = "NULL" + image = "NULL" + iddatation = "NULL" + + technique = None + matiere = None + domaine = None + designation = None + designation2 = None + designation3 = None + auteur = None + auteur2 = None + datation = None + datation2 = None + + # On parcourt tout les tags + for child in o : + if child.tag == 'auteur1' : + auteur = child.text.encode('utf-8') + + elif child.tag == 'auteur2' : + auteur2 = child.text.encode('utf-8') + + elif child.tag == 'datation1': + datation = child.text.encode('utf-8') + + elif child.tag == 'datation2': + datation2 = child.text.encode('utf-8') + + elif child.tag == 'designation': + designation1 = child.text.encode('utf-8') + + elif child.tag == 'designation2': + designation2 = child.text.encode('utf-8') + + elif child.tag == 'designation3': + designation3 = child.text.encode('utf-8') + + elif child.tag == 'domaine': + domaine = child.text.encode('utf-8') + + elif child.tag == 'matiere': + matiere = child.text.encode('utf-8') + + elif child.tag == 'technique': + technique = child.text.encode('utf-8') + + elif child.tag == 'image' : + image = child.text.encode('utf-8') + + # On s'interesee qu'aux oeuvres ayant une image + if image != "NULL" : + if str(datation)+str(datation2) in listeDatation : + iddatation = listeDatation[str(datation)+str(datation2)] + else : + if datation is not None and datation2 is not None : + if re.compile("vers").search(datation.lower()) or re.compile("avant").search(datation.lower()): + try: + datas = {"dateDebut" : datation2.split("-")[0] + "-01-01", "dateFin" : datation2.split("-")[1] + "-12-31"} + iddatation = insert(cur,"datations",datas) + except Exception, e: + if re.compile("^[0-9]{4}[ ]").match(datation.lower()) : + datas = {"dateDebut" : datation.split(" ")[0] + "-01-01", "dateFin" : datation.split(" ")[0] + "-12-31"} + iddatation = insert(cur,"datations",datas) + + elif re.compile("^[0-9]{4}-[0-9]{4}$").search(datation.lower()) and re.compile("^[0-9]{4}-[0-9]{4}$").search(datation2.lower()) : + datas = {"dateDebut" : datation.split("-")[0] + "-01-01", "dateFin" : datation2.split("-")[1] + "-12-31"} + iddatation = insert(cur,"datations",datas) + + elif re.compile("^[0-9]{4}[ ]").match(datation.lower()) and re.compile("^[0-9]{4}[ ]").match(datation2.lower()) : + datas = {"dateDebut" : datation.split(" ")[0] + "-01-01", "dateFin" : datation2.split(" ")[0] + "-12-31"} + iddatation = insert(cur,"datations",datas) + + elif re.compile("^[0-9]{4}-[0-9]{4}[ ]").match(datation.lower()) and re.compile("^[0-9]{4}-[0-9]{4}[ ]").match(datation2.lower()) : + datas = {"dateDebut" : datation.split("-")[0] + "-01-01", "dateFin" : datation2.split("-")[1].split(" ")[0] + "-12-31"} + iddatation = insert(cur,"datations",datas) + + elif re.compile("^[0-9]{4}-[0-9]{4}[ ]").match(datation.lower()) and re.compile("^[0-9]{4}-[0-9]{4}").match(datation2.lower()) : + datas = {"dateDebut" : datation.split("-")[0] + "-01-01", "dateFin" : datation2.split("-")[1].split(" ")[0] + "-12-31"} + iddatation = insert(cur,"datations",datas) + + if datation is not None and datation2 is None : + if re.compile("^[0-9]{4}[ ]").match(datation.lower()) : + datas = {"dateDebut" : datation.split(" ")[0] + "-01-01", "dateFin" : datation.split(" ")[0] + "-12-31"} + iddatation = insert(cur,"datations",datas) + elif re.compile("^[0-9]{4}$").match(datation.lower()) : + datas = {"dateDebut" : datation + "-01-01", "dateFin" : datation + "-12-31"} + iddatation = insert(cur,"datations",datas) + elif re.compile("^[0-9]{4}-[0-9]{4}$").match(datation.lower()) : + datas = {"dateDebut" : datation.split("-")[0] + "-01-01", "dateFin" : datation.split("-")[1] + "-12-31"} + iddatation = insert(cur,"datations",datas) + + if iddatation != "NULL" : + listeDatation[str(datation)+str(datation2) ] = iddatation + + + + + + if technique is not None : + if not technique in listeTechnique : + datas = { "nom" : technique} + idtechnique = insert(cur,"techniques",datas) + listeTechnique[technique] = idtechnique + else : + idtechnique = listeTechnique[technique] + + if matiere is not None : + if not matiere in listeMatiere : + datas = { "nom" : matiere} + idmatiere = insert(cur,"matieres",datas) + listeMatiere[matiere] = idmatiere + else : + idmatiere = listeMatiere[matiere] + + if domaine is not None : + if not domaine in listeDomaine : + datas = { "nom" : domaine} + iddomaine = insert(cur,"domaines",datas) + listeDomaine[domaine] = iddomaine + else : + iddomaine = listeDomaine[domaine] + + if auteur is not None : + if not auteur in listeAuteur : + datas = { "nom" : auteur} + idauteur = insert(cur,"auteurs", datas) + listeAuteur[auteur] = idauteur + else : + idauteur = listeAuteur[auteur] + + + datas = {"technique_id" : idtechnique, "domaine_id" : iddomaine, "matiere_id" : idmatiere, + "image" : image, "designation" : con.escape_string(designation1), "auteur_id" : idauteur} + for key , data in datas.items() : + if data == "NULL" : + del datas[key] + + idoeuvre = insert(cur,"oeuvres",datas) + con.commit() + +except mdb.Error, e: + if con: + con.rollback() + + print("Error %d: %s" % (e.args[0],e.args[1])) + sys.exit(1) + +finally: + if con: + con.close() diff --git a/SRC/config/mail.php b/SRC/config/mail.php index 6f9c954..6df70d6 100755 --- a/SRC/config/mail.php +++ b/SRC/config/mail.php @@ -1,7 +1,5 @@ 'smtp', - /* |-------------------------------------------------------------------------- | SMTP Host Address @@ -27,9 +23,7 @@ return [ | the Mailgun mail service which will provide reliable deliveries. | */ - - 'host' => 'smtp.mailgun.org', - + 'host' => 'smtp.gmail.com', /* |-------------------------------------------------------------------------- | SMTP Host Port @@ -40,9 +34,7 @@ return [ | stay compatible with the Mailgun e-mail application by default. | */ - 'port' => 587, - /* |-------------------------------------------------------------------------- | Global "From" Address @@ -53,9 +45,7 @@ return [ | used globally for all e-mails that are sent by your application. | */ - - 'from' => ['address' => null, 'name' => null], - + 'from' => ['address' => "modulewebl3miashs@gmail.com", 'name' => "moduleWeb"], /* |-------------------------------------------------------------------------- | E-Mail Encryption Protocol @@ -66,9 +56,7 @@ return [ | transport layer security protocol should provide great security. | */ - 'encryption' => 'tls', - /* |-------------------------------------------------------------------------- | SMTP Server Username @@ -79,9 +67,7 @@ return [ | connection. You may also set the "password" value below this one. | */ - - 'username' => null, - + 'username' => "modulewebl3miashs@gmail.com", /* |-------------------------------------------------------------------------- | SMTP Server Password @@ -92,9 +78,7 @@ return [ | connection so that the application will be able to send messages. | */ - - 'password' => null, - + 'password' => env('MAIL_PASSWD', ''), /* |-------------------------------------------------------------------------- | Sendmail System Path @@ -105,9 +89,7 @@ return [ | been provided here, which will work well on most of your systems. | */ - 'sendmail' => '/usr/sbin/sendmail -bs', - /* |-------------------------------------------------------------------------- | Mail "Pretend" @@ -118,7 +100,5 @@ return [ | you may inspect the message. This is great for local development. | */ - 'pretend' => false, - ]; diff --git a/SRC/public/imgs/puzzle.JPG b/SRC/public/imgs/puzzle.JPG deleted file mode 100644 index 07d3cbe5df295813909056ca43cb05caac94aae4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18235 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 M5OMsOgA1SgU+2Bj1poj5