diff --git a/scripts/.htaccess b/scripts/.htaccess
index 3418e55a68383c1cbc687c52a2994d1e8ed83800..d30cea213643e8ff80f3ebf8ab6163c937547761 100644
--- a/scripts/.htaccess
+++ b/scripts/.htaccess
@@ -1 +1,2 @@
+allow from 127.0.0.1
 deny from all
\ No newline at end of file
diff --git a/scripts/migration_date.php b/scripts/migration_date.php
deleted file mode 100644
index b6b5c77391803010248418b9c2fc6568981d1cd6..0000000000000000000000000000000000000000
--- a/scripts/migration_date.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
- * This software is governed by the CeCILL-B license. If a copy of this license
- * is not distributed with this file, you can obtain one at
- * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt
- *
- * Authors of STUdS (initial project): Guilhem BORGHESI (borghesi@unistra.fr) and Raphaël DROZ
- * Authors of Framadate/OpenSondate: Framasoft (https://github.com/framasoft)
- *
- * =============================
- *
- * Ce logiciel est régi par la licence CeCILL-B. Si une copie de cette licence
- * ne se trouve pas avec ce fichier vous pouvez l'obtenir sur
- * http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt
- *
- * Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphaël DROZ
- * Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft)
- */
-
-//ouverture de la connection avec la base SQL
-$connect = pg_connect("host= dbname= user=");
-
-$sondage=pg_exec($connect, "select * from sondage where format='D' or format='D+'");
-
-for ($i=0;$i<pg_numrows($sondage);$i++) {
-  $dsondage=pg_fetch_object($sondage,$i);
-
-  //  print "Pour le sondage ".$dsondage->id_sondage." ";
-  $sujets=pg_exec($connect, "select sujet from sujet_studs where id_sondage='$dsondage->id_sondage'");
-  $dsujets=pg_fetch_object($sujets,0);
-
-  $nouvelledateaffiche="";
-  $anciensujethoraires=explode(",",$dsujets->sujet);
-
-  for ($j=0;$j<count($anciensujethoraires);$j++) {
-    if (strpos('@',$anciensujethoraires[$j]) !== false) {
-      $ancientsujet=explode("@",$anciensujethoraires[$j]);
-      //;([0-2]\d)/([0-2]\d)/(\d{4});
-      if (preg_match(";(\d{1,2})/(\d{1,2})/(\d{4});",$ancientsujet[0],$registredate)) {
-        $nouvelledate=mktime(0,0,0,$registredate[2],$registredate[1],$registredate[3]);
-        //        echo $ancientsujet[0].'@'.$ancientsujet[1].' ---> '.$nouvelledate.'@'.$ancientsujet[1].'<br> ';
-        $nouvelledateaffiche.=$nouvelledate.'@'.$ancientsujet[1].',';
-      }
-    } else {
-      if (preg_match(";(\d{1,2})/(\d{1,2})/(\d{4});",$anciensujethoraires[$j],$registredate)) {
-        $nouvelledate=mktime(0,0,0,$registredate[2],$registredate[1],$registredate[3]);
-        //          echo $anciensujethoraires[$j].' ---- > '.$nouvelledate.'<br>';
-        $nouvelledateaffiche.=$nouvelledate.',';
-      }
-    }
-  }
-
-  $nouvelledateaffiche=substr($nouvelledateaffiche,0,-1);
-  print $dsujets->sujet.' donne  '.$nouvelledateaffiche.'\n\n';
-  //    pg_exec($connect,"update sujet_studs set sujet='$nouvelledateaffiche' where id_sondage='$dsondage->id_sondage'");
-}
diff --git a/scripts/packaging.php b/scripts/packaging.php
new file mode 100644
index 0000000000000000000000000000000000000000..f851c3191765819f97060f754dde655f5625cf4d
--- /dev/null
+++ b/scripts/packaging.php
@@ -0,0 +1,202 @@
+<?php
+/**
+ * This software is governed by the CeCILL-B license. If a copy of this license
+ * is not distributed with this file, you can obtain one at
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt
+ *
+ * Authors of STUdS (initial project): Guilhem BORGHESI (borghesi@unistra.fr) and Rapha?l DROZ
+ * Authors of Framadate/OpenSondate: Framasoft (https://github.com/framasoft)
+ *
+ * =============================
+ *
+ * Ce logiciel est r?gi par la licence CeCILL-B. Si une copie de cette licence
+ * ne se trouve pas avec ce fichier vous pouvez l'obtenir sur
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt
+ *
+ * Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Rapha?l DROZ
+ * Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft)
+ */
+
+function d($thing) {
+    echo $thing . "\n";
+}
+
+function i($if, $thing, $copied = ' copied') {
+    if ($if) {
+        echo $thing . $copied . "\n";
+    } else {
+        echo '[fail] ' . $thing . "\n";
+    }
+}
+
+function rcopy($src, $dst) {
+    $dir = opendir($src);
+    @mkdir($dst);
+    $copied = true;
+    while (false !== ($file = readdir($dir))) {
+        if (($file != '.') && ($file != '..')) {
+            if (is_dir($src . '/' . $file)) {
+                $copied &= rcopy($src . '/' . $file, $dst . '/' . $file);
+            } else {
+                $copied &= copy($src . '/' . $file, $dst . '/' . $file);
+            }
+        }
+    }
+    closedir($dir);
+    return !!$copied;
+}
+
+function rrmdir($dir) {
+    $files = array_diff(scandir($dir), array('.', '..'));
+    foreach ($files as $file) {
+        (is_dir("$dir/$file")) ? rrmdir("$dir/$file") : unlink("$dir/$file");
+    }
+    return rmdir($dir);
+}
+
+function copyDependencyToBuild($dirname) {
+    return @mkdir(BUILD_VENDOR . $dirname, 755, true) && @rcopy(VENDOR . $dirname, BUILD_VENDOR . $dirname);
+}
+
+function copyFiles($files, &$result) {
+    foreach ($files as $key => $file) {
+        if (is_int($key)) {
+            $key = $file;
+        }
+
+        if (is_dir(ROOT . '/' . $key)) {
+            $result->$key = @rcopy(ROOT . '/' . $key, BUILD . '/' . $file);
+        } elseif (is_file(ROOT . '/' . $key)) {
+            $result->$key = @copy(ROOT . '/' . $key, BUILD . '/' . $file);
+        }
+
+        i($result->$key, $key);
+    }
+}
+
+function zip($source, $destination) {
+    if (extension_loaded('zip')) {
+        if (file_exists($source)) {
+            $zip = new ZipArchive();
+            if ($zip->open($destination, ZIPARCHIVE::CREATE)) {
+                $source = realpath($source);
+                if (is_dir($source)) {
+                    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
+                    foreach ($files as $file) {
+                        if (in_array(basename($file), array('.', '..'))) {
+                            continue;
+                        }
+                        $file = realpath($file);
+                        if ($file !== $source && is_dir($file)) {
+                            $zip->addEmptyDir(str_replace($source . '\\', '', str_replace($source . '/', '', $file)));
+                        } else if (is_file($file)) {
+                            $zip->addFromString(str_replace($source . '\\', '', str_replace($source . '/', '', $file)), file_get_contents($file));
+                        }
+                    }
+                } else if (is_file($source)) {
+                    $zip->addFromString(basename($source), file_get_contents($source));
+                }
+            }
+            return $zip->close();
+        }
+    }
+    return false;
+}
+
+ini_set('max_execution_time', 600);
+ini_set('memory_limit', '1024M');
+
+define('ROOT', realpath(__DIR__ . '/..'));
+define('VENDOR', ROOT . '/vendor');
+define('DIST', ROOT . '/dist');
+define('BUILD', ROOT . '/build');
+define('BUILD_VENDOR', BUILD . '/vendor');
+
+include ROOT . '/app/inc/constants.php';
+
+$result = new stdClass();
+
+echo '<pre>';
+
+// Delete old dist>build directories
+
+if (file_exists(DIST)) {
+    $result->rmdirDist = rrmdir(DIST);
+    i($result->rmdirDist, 'Dist', ' deleted');
+}
+if (file_exists(BUILD)) {
+    $result->rmdirBuild = rrmdir(BUILD);
+    i($result->rmdirBuild, 'Build', ' deleted');
+}
+
+// Create dist>build directories
+
+$result->mkdirDist = mkdir(DIST, 755);
+i($result->mkdirDist, 'Dist', ' created');
+$result->mkdirBuild = mkdir(BUILD, 755);
+i($result->mkdirBuild, 'Build', ' created');
+
+// Copy dependencies files
+
+d('# Dependencies');
+
+$result->composer = copyDependencyToBuild('/composer');
+i($result->composer, 'composer');
+
+$result->o80 = copyDependencyToBuild('/o80/i18n/src');
+i($result->o80, 'o80-i18n');
+
+$result->smarty = copyDependencyToBuild('/smarty/smarty/libs');
+i($result->smarty, 'smarty');
+
+$result->autoload = @copy(VENDOR . '/autoload.php', BUILD_VENDOR . '/autoload.php');
+i($result->autoload, 'autoload');
+
+// Copy assets
+
+d('# Assets');
+copyFiles(array('css', 'fonts', 'images', 'js'), $result);
+
+// Copy sources
+
+d('# Source directories');
+copyFiles(array('admin', 'app', 'locale', 'tpl'), $result);
+
+d('# Source files');
+$files = array(
+    'adminstuds.php',
+    'bandeaux.php',
+    'create_classic_poll.php',
+    'create_date_poll.php',
+    'create_poll.php',
+    'exportcsv.php',
+    'favicon.ico',
+    'htaccess.txt',
+    'index.php',
+    'INSTALL.md',
+    'LICENCE.fr.txt',
+    'LICENSE.en.txt',
+    'maintenance.php',
+    'php.ini',
+    'README.md',
+    'robots.txt',
+    'studs.php'
+);
+copyFiles($files, $result);
+
+// Zip Dist
+$output = DIST . '/framadate-' . VERSION . '-' . date('Ymd') . '.zip';
+zip(BUILD, $output);
+rrmdir(BUILD);
+
+if (isset($_GET['verbose'])) {
+    var_dump($result);
+}
+
+d('--------');
+d('Distribution file: ' . realpath($output));
+
+$generatedIn = round((microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']), 4);
+d('========');
+d('Generated in: ' . $generatedIn . ' secondes');
+echo '</pre>';
diff --git a/scripts/phpVar2getText.php b/scripts/phpVar2getText.php
deleted file mode 100644
index 597735c393214393a16e7c319095aa77622a215c..0000000000000000000000000000000000000000
--- a/scripts/phpVar2getText.php
+++ /dev/null
@@ -1,153 +0,0 @@
-<?php
-/**
- * This software is governed by the CeCILL-B license. If a copy of this license
- * is not distributed with this file, you can obtain one at
- * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt
- *
- * Authors of STUdS (initial project): Guilhem BORGHESI (borghesi@unistra.fr) and Raphaël DROZ
- * Authors of Framadate/OpenSondate: Framasoft (https://github.com/framasoft)
- *
- * =============================
- *
- * Ce logiciel est régi par la licence CeCILL-B. Si une copie de cette licence
- * ne se trouve pas avec ce fichier vous pouvez l'obtenir sur
- * http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt
- *
- * Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphaël DROZ
- * Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft)
- */
-
- /*
- raphael.droz@gmail.com, dwtfywwi licence , 2010 :
-
- choppe un fichier $vara="traduction"; dans <lang>.inc
- build un assoc array
- preg_replace les appels wrappés dans gettext() dans le php principal
- generate un .po
-
- (
- echo -e "<?php\n\$l = array (";
- sed -n '/^$.*$/s/^$\([^=]\+\)=.\(.*\).;/"\1"=>\x27\2\x27,/p' lang/en.inc;
- echo '); ?>'
- ) > /tmp/lang.mod
- (manually tweak 2 double quotes)
-*/
-
-// drop a $l which contain the array
-if(isset($_SERVER['PHP_SELF'])) {
-  die(); // die if not run with php-cli
-}
-
-require_once('/tmp/lang.mod');
-$mypath = '/var/www/studs';
-
-/* Language, country need to be adapted */
-$header = 'msgid ""
-msgstr ""
-"Project-Id-Version: Studs 0.6.4\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-01 18:32+0100\n"
-"PO-Revision-Date: 2010-05-01 18:32+0100\n"
-"Last-Translator: Raphaël Droz <raphael.droz@gmail.com>\n"
-"Language-Team: Guilhem Borghesi, Raphaël Droz\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: FR\n"
-"X-Poedit-Country: FRANCE\n"
-"X-Poedit-SourceCharset: utf-8\n"
-"X-Poedit-KeywordsList: _\n"
-"X-Poedit-Basepath: /var/www/studs\n"
-"X-Poedit-SearchPath-0: .\n"
-
-';
-
-/* helpers */
-function stripN($a)
-{
-  return preg_replace("/\n/","\\n", $a);
-}
-
-function addDQ($a)
-{
-  return addcslashes($a,'"');
-}
-
-/* low priority for weak regexps (small variable length) at the end, please */
-function cmp($a, $b)
-{
-  return (mb_strlen($a) < mb_strlen($b));
-}
-
-uksort($l, 'cmp');
-
-/*
- 0: surely direct, like in: echo 'text ' . $var;
- 1: wrap in, like in: echo "$var";
- 2: direct, like in: echo $var . "text";
-*/
-$match0 = $repl0 = $match1 = $repl1 = $match2 = $repl2 = $match3 = $repl3 = array();
-foreach($l as $k => $v) {
-  $match0[] = ';([\'"][ \.]|echo|print) *\$' . $k . ' *([\. ][\'"]|\;);' ;
-  $repl0[] = '\1 _("' . stripN(stripcslashes($v)) . '") \2' ;
-
-  $match1[] = ';(["\'])(.*?)\$' . $k . ';' ;
-  $repl1[] = '\1\2" . _("' . stripN(addcslashes(stripcslashes($v),'"')) . '") . \1' ;
-
-  $match2[] = ';\$' . $k . ';' ;
-  $repl2[] = '_("' . stripN(stripcslashes($v)) . '")' ;
-
-  $match3[] = ';\. *\$GLOBALS\["' . $k . '"\] *\.;' ;
-  $repl3[] = '. _("' . stripN(stripcslashes($v)) . '") .' ;
-}
-
-foreach (new DirectoryIterator('.') as $fileInfo) {
-  if($fileInfo->isDot()) {
-    continue;
-  }
-
-  $name = $fileInfo->getFilename();
-  // process php files
-  if(!preg_match('/\.php$/' , $name) || preg_match('/phpVar2getText/', $name)) {
-    continue;
-  }
-
-  $orig = file_get_contents($name);
-  $a = preg_replace($match0, $repl0, $orig, -1, $b);
-  $a = preg_replace($match1, $repl1, $a, -1, $c);
-  $a = preg_replace($match2, $repl2, $a, -1, $d);
-  $a = preg_replace($match3, $repl3, $a, -1, $e);
-  $tot = $b + $c + $e;
-  echo $name . ' --- ' . $tot . " (match1: $c)" . "\n";
-  if($tot > 0) {
-    file_put_contents($name . '.save', $orig);
-    file_put_contents($name, $a);
-  }
-}
-
-
-foreach(array('fr_FR','es_ES','de_DE', 'en_GB') as $i) {
-  $ii = explode('_', $i);
-  $f = $ii[0]; $g = $ii[1];
-
-  // de.inc corrupted the whole process !
-  unset($tt_adminstuds_mail_corps_changemail);
-  // now define each of the strings with a new langague
-  require_once($mypath . '/lang/' . $f . '.inc');
-  $a = '';
-
-  /* duplicates are fatal to poedit */
-  foreach(array_unique($l) as $k => $v) {
-    /* poedit is strict with its syntax */
-    $po_ready_v = stripN(addDQ($v));
-    if($f == 'en') {
-      $a .= 'msgid "' . $po_ready_v . '"' . "\n" . 'msgstr "' . $po_ready_v . '"' . "\n\n";
-    } else {
-      $a .= 'msgid "' . $po_ready_v . '"' . "\n" .
-	/* ${$k} the key (var name) in the orig (EN) array
-	 to look for as a raw $var while the <lang>.inc is included in the context */
-	'msgstr "' .  stripN(addDQ(${$k})) . '"' . "\n\n";
-    }
-  }
-  file_put_contents('locale/' . $f . '_' . $g . '/LC_MESSAGES/Studs.po', $header . $a);
-}
diff --git a/scripts/recherche_adresse.pl b/scripts/recherche_adresse.pl
deleted file mode 100644
index 0c5886d5df2ebe16f33dbf0b6a3ca30f0245652f..0000000000000000000000000000000000000000
--- a/scripts/recherche_adresse.pl
+++ /dev/null
@@ -1,46 +0,0 @@
-#/==========================================================================
-#/
-#/Université de Strasbourg - Direction Informatique
-#/Auteur : Guilhem BORGHESI
-#/Création : Février 2008
-#/
-#/borghesi@unistra.fr
-#/
-#/Ce logiciel est régi par la licence CeCILL-B soumise au droit français et
-#/respectant les principes de diffusion des logiciels libres. Vous pouvez
-#/utiliser, modifier et/ou redistribuer ce programme sous les conditions
-#/de la licence CeCILL-B telle que diffusée par le CEA, le CNRS et l'INRIA 
-#/sur le site "http://www.cecill.info".
-#/
-#/Le fait que vous puissiez accéder à cet en-tête signifie que vous avez 
-#/pris connaissance de la licence CeCILL-B, et que vous en avez accepté les
-#/termes. Vous pouvez trouver une copie de la licence dans le fichier LICENCE.
-#/
-#/==========================================================================
-#/
-#/Université de Strasbourg - Direction Informatique
-#/Author : Guilhem BORGHESI
-#/Creation : Feb 2008
-#/
-#/borghesi@unistra.fr
-#/
-#/This software is governed by the CeCILL-B license under French law and
-#/abiding by the rules of distribution of free software. You can  use, 
-#/modify and/ or redistribute the software under the terms of the CeCILL-B
-#/license as circulated by CEA, CNRS and INRIA at the following URL
-#/"http://www.cecill.info". 
-#/
-#/The fact that you are presently reading this means that you have had
-#/knowledge of the CeCILL-B license and that you accept its terms. You can
-#/find a copy of this license in the file LICENSE.
-#/
-#/==========================================================================
-
-#!/usr/bin/perl
-
-open (FILE,"../admin/logs_studs.txt");
-
-while (<FILE>) {
-  /.*\t(.*u-strasbg.fr)\t.*/;
-  print $1."\n";
-}
diff --git a/scripts/recherche_adresse_admin.php b/scripts/recherche_adresse_admin.php
deleted file mode 100644
index 17be22987526cf4adcb83703de8abc6f596fac9c..0000000000000000000000000000000000000000
--- a/scripts/recherche_adresse_admin.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * This software is governed by the CeCILL-B license. If a copy of this license
- * is not distributed with this file, you can obtain one at
- * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt
- *
- * Authors of STUdS (initial project): Guilhem BORGHESI (borghesi@unistra.fr) and Raphaël DROZ
- * Authors of Framadate/OpenSondate: Framasoft (https://github.com/framasoft)
- *
- * =============================
- *
- * Ce logiciel est régi par la licence CeCILL-B. Si une copie de cette licence
- * ne se trouve pas avec ce fichier vous pouvez l'obtenir sur
- * http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt
- *
- * Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphaël DROZ
- * Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft)
- */
-
-//ouverture de la connection avec la base SQL
-$connect = pg_connect("host= dbname= user=");
-
-$sondage=pg_exec($connect, "select distinct mail_admin from sondage ");
-
-for ($i=0;$i<pg_numrows($sondage);$i++){
-  $dsondage=pg_fetch_object($sondage,$i);
-  print "$dsondage->mail_admin, ";
-  //	print "$dsondage->mail_admin\n";
-}