Compare commits
No commits in common. "master" and "duplication-prevent" have entirely different histories.
master
...
duplicatio
|
@ -1,11 +1,3 @@
|
||||||
.ftpconfig
|
.ftpconfig
|
||||||
sftp-config.json
|
sftp-config.json
|
||||||
phpunit/coverage/
|
phpunit/coverage/
|
||||||
/public_html/tmp/*
|
|
||||||
<<<<<<< HEAD
|
|
||||||
/build/lightdb/storage/*
|
|
||||||
/config/server.json
|
|
||||||
=======
|
|
||||||
/build/lightdb/storage/*/data
|
|
||||||
**.swp
|
|
||||||
>>>>>>> 255af4d6b03408ab9f840db1fea74a35b7bc28c4
|
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
/* [1] On definit les chemins absolus si c'est pas deja fait
|
/* [1] On definit les chemins absolus si c'est pas deja fait
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
if( !defined('__ROOT__') ) define('__ROOT__', dirname(__FILE__) );
|
if( !defined('__ROOT__') ) define('__ROOT__', dirname(__FILE__) );
|
||||||
if( !defined('__CONFIG__') ) define('__CONFIG__', __ROOT__.'/config' );
|
if( !defined('__CONFIG__') ) define('__CONFIG__', __ROOT__.'/config' );
|
||||||
if( !defined('__BUILD__') ) define('__BUILD__', __ROOT__.'/build' );
|
if( !defined('__BUILD__') ) define('__BUILD__', __ROOT__.'/build' );
|
||||||
if( !defined('__PUBLIC__') ) define('__PUBLIC__', __ROOT__.'/public_html' );
|
if( !defined('__PUBLIC__') ) define('__PUBLIC__', __ROOT__.'/public_html' );
|
||||||
if( !defined('__TMP__') ) define('__TMP__', __ROOT__.'/public_html/tmp' );
|
if( !defined('__TMP__') ) define('__TMP__', __ROOT__.'/public_html/tmp' );
|
||||||
|
|
||||||
|
|
||||||
/* ACTIVE LE DEBUGGAGE (WARNING + EXCEPTION)
|
/* ACTIVE LE DEBUGGAGE (WARNING + EXCEPTION)
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
|
|
||||||
// Loads the build facade
|
// Loads the build facade
|
||||||
// require_once __BUILD__.'/Builder.php';
|
require_once __BUILD__.'/Builder.php';
|
||||||
|
|
||||||
|
|
||||||
/* AUTOLOADER
|
/* AUTOLOADER
|
||||||
|
@ -52,10 +52,11 @@
|
||||||
\manager\sessionManager::session_start();
|
\manager\sessionManager::session_start();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* [3] Gestion des droits des utilisateurs
|
/* [3] Gestion des droits des utilisateurs
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) Retourne si l'utilisateur est connecte ou non */
|
/* (1) Retourne si l'utilisateur est connecte ou non */
|
||||||
function connected(){ return isset($_SESSION['permission']) && is_array($_SESSION['permission']) && count($_SESSION['permission']) > 0; }
|
function connected(){ return isset($_SESSION['permission']) && count($_SESSION['permission']); }
|
||||||
|
|
||||||
/* (2) Retourne si l'utilisateur a le status en question */
|
/* (2) Retourne si l'utilisateur a le status en question */
|
||||||
function permission($type){ return connected() && in_array($type, $_SESSION['permission']); }
|
function permission($type){ return connected() && in_array($type, $_SESSION['permission']); }
|
||||||
|
|
|
@ -13,5 +13,5 @@
|
||||||
|
|
||||||
class Builder{
|
class Builder{
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
use \database\core\DatabaseDriver;
|
use \database\core\DatabaseDriver;
|
||||||
use \manager\ManagerError;
|
use \manager\ManagerError;
|
||||||
use \api\core\Checker;
|
use \api\core\Checker;
|
||||||
use \database\core\Repo;
|
|
||||||
|
|
||||||
|
|
||||||
class ModuleRequest{
|
class ModuleRequest{
|
||||||
|
@ -194,12 +193,12 @@
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
if( $fromAjax ){
|
if( $fromAjax ){
|
||||||
|
|
||||||
$tmpfname = 'download_'.uniqid().'.php';
|
|
||||||
$link = '/tmp/'.$tmpfname;
|
$tmpfname = '/tmp/download_'.uniqid().'.php';
|
||||||
$bodyfname = __TMP__.'/content_'.uniqid().'.php';
|
$bodyfname = __BUILD__.'/tmp/content_'.uniqid().'.php';
|
||||||
|
|
||||||
/* (1) On crée le fichier temporaire */
|
/* (1) On crée le fichier temporaire */
|
||||||
$tmpfnameroot = __TMP__.'/'.$tmpfname;
|
$tmpfnameroot = __BUILD__.$tmpfname;
|
||||||
$tmpfile = fopen($tmpfnameroot, 'w');
|
$tmpfile = fopen($tmpfnameroot, 'w');
|
||||||
|
|
||||||
fwrite($tmpfile, '<?php'.PHP_EOL);
|
fwrite($tmpfile, '<?php'.PHP_EOL);
|
||||||
|
@ -228,7 +227,7 @@
|
||||||
chmod($tmpfnameroot, 0775);
|
chmod($tmpfnameroot, 0775);
|
||||||
|
|
||||||
$response = new ModuleResponse(ManagerError::Success);
|
$response = new ModuleResponse(ManagerError::Success);
|
||||||
$response->append('link', $link);
|
$response->append('link', $tmpfname);
|
||||||
|
|
||||||
return $response;
|
return $response;
|
||||||
|
|
||||||
|
|
|
@ -116,9 +116,23 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* DOWNLOAD D'UN FICHIER CONTENANT LES DONNEES SELECTIONNEES
|
/* DOWNLOAD D'UN FICHIER CONTENANT LES DONNEES SELECTIONNEES
|
||||||
*
|
*
|
||||||
* @subjects<Array> Liste des identifiants des sujets à prendre en compte
|
* @subjects<Array> Liste des identifiants des sujets à prendre en compte
|
||||||
|
* @phone<Boolean> Si TRUE, prend en compte les données des questionnaires cellulaires
|
||||||
|
* @facebook<Boolean> Si TRUE, prend en compte les données des questionnaires facebook
|
||||||
|
* @survey<Boolean> Si TRUE, prend en compte les données des questionnaires ResTIC
|
||||||
* @all<Boolean> Si TRUE, prend en compte tous les sujets (annule @subjects)
|
* @all<Boolean> Si TRUE, prend en compte tous les sujets (annule @subjects)
|
||||||
*
|
*
|
||||||
* @return data<File> Retourne une archive .zip contenant toutes les données sélectionnées
|
* @return data<File> Retourne une archive .zip contenant toutes les données sélectionnées
|
||||||
|
@ -128,12 +142,15 @@
|
||||||
extract($params);
|
extract($params);
|
||||||
|
|
||||||
/* (0) Gestion du formattage des paramètres */
|
/* (0) Gestion du formattage des paramètres */
|
||||||
$subjects = !is_array($subjects) ? [] : $subjects;
|
$subjects = !is_array($subjects) ? [] : $subjects;
|
||||||
$all = !is_bool($all) ? false : $all;
|
$phone = !is_bool($phone) ? false : $phone;
|
||||||
|
$facebook = !is_bool($facebook) ? false : $facebook;
|
||||||
|
$survey = !is_bool($survey) ? false : $survey;
|
||||||
|
$all = !is_bool($all) ? false : $all;
|
||||||
|
|
||||||
/* [0] On récupère le dictionnaire
|
/* [0] On récupère le dictionnaire
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$dict = file_get_contents(__BUILD__.'/lightdb/storage/dictionary.json');
|
$dict = file_get_contents(__BUILD__.'/src/dynamic/dictionary.json');
|
||||||
|
|
||||||
/* (2) Si une erreur pour le fichier de conf */
|
/* (2) Si une erreur pour le fichier de conf */
|
||||||
if( $dict === false )
|
if( $dict === false )
|
||||||
|
@ -147,119 +164,158 @@
|
||||||
return [ 'ModuleError' => ManagerError::ParsingFailed ];
|
return [ 'ModuleError' => ManagerError::ParsingFailed ];
|
||||||
|
|
||||||
|
|
||||||
/* [1] Initialisation
|
/* [1] On construit l'arborescence des données
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) Fichiers de sortie */
|
|
||||||
$output = [
|
$output = [
|
||||||
'contacts.fiche' => '', // contiendra les contacts et leurs données fiches
|
'common_' => [
|
||||||
'contacts.mini' => '', // contiendra les contacts et leurs données mini
|
'contacts' => '',
|
||||||
'relations' => '', // contiendra les relations
|
'relations' => '',
|
||||||
'dict' => '' // contiendra le dictionnaire de valeurs
|
'dict' => ''
|
||||||
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
/* (2) Base de données */
|
|
||||||
$subjectdb = new lightdb('subject');
|
|
||||||
$contactdb = new lightdb('contact');
|
|
||||||
|
|
||||||
|
|
||||||
/* [2] On construit la liste des sujets
|
/* [2] On construit les fichiers de chaque sujet DE TELEPHONE
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$subjectindexes = array_keys($subjectdb->index());
|
if( $phone ){ // Si @phone vaut TRUE
|
||||||
$subjectids = [];
|
|
||||||
|
|
||||||
/* (1) On récupère tous les sujets si c'est spécifié */
|
// On ouvre une instance de la base de données
|
||||||
if( $all )
|
$db = new lightdb('phone_db');
|
||||||
|
|
||||||
$subjectids = $subjectindexes;
|
// Si on doit prendre tous les sujets, on les récupère
|
||||||
|
if( $all )
|
||||||
|
$subjects = array_keys( $db->index() );
|
||||||
|
|
||||||
/* (2) Sinon on retire les ids incorrects */
|
// Pour chaque sujet
|
||||||
else
|
foreach($subjects as $s=>$subjectId){
|
||||||
|
|
||||||
foreach($subjects as $i=>$id)
|
/* (1) On récupère les données du sujet en cours */
|
||||||
if( in_array($id, $subjectindexes) )
|
$subjectData = $db->fetch($subjectId);
|
||||||
$subjectids[] = intval($id);
|
|
||||||
|
|
||||||
|
// Si on ne trouve rien, on passe au suivant
|
||||||
|
if( $subjectData === false )
|
||||||
/* (3) Si aucun sujet restant -> error */
|
|
||||||
if( count($subjectids) === 0 )
|
|
||||||
return ['ModuleError' => ManagerError::ParamError];
|
|
||||||
|
|
||||||
|
|
||||||
/* [3] Export contacts/relations des sujets selectionnés
|
|
||||||
=========================================================*/
|
|
||||||
foreach($subjectids as $subid){
|
|
||||||
|
|
||||||
/* (1) On récupère les données du sujet */
|
|
||||||
$subject = $subjectdb->fetch($subid);
|
|
||||||
|
|
||||||
// si pas trouvé -> suivant
|
|
||||||
if( $subject === false )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* (2) Si aucun contact -> suivant */
|
|
||||||
if( !isset($subject['contacts']) || !is_array($subject['contacts']) )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* (3) Pour chaque contact */
|
|
||||||
foreach($subject['contacts'] as $c=>$contactid){
|
|
||||||
|
|
||||||
// {3.1} On récupère le contact //
|
|
||||||
$contact = $contactdb->fetch($contactid);
|
|
||||||
|
|
||||||
// si pas trouvé -> suivant
|
|
||||||
if( $contact === false )
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// {3.2} On ajoute le contact au fichier des FICHES //
|
/* (3) On complète les relations */
|
||||||
if( array_key_exists('studies2', $contact) )
|
$output['common_']['relations'] .= self::parseCSV($subjectData['relations'], [], strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
// On affiche les colonnes pour le premier contact uniquement
|
|
||||||
$output['contacts.fiche'] .= self::parseCSV([$contact], $dict['contacts'], strlen($output['contacts.fiche']) == 0 );
|
|
||||||
|
|
||||||
// {3.3} On ajoute le contact au fichier des MINI //
|
/* (4) On ajoute les contacts à la liste */
|
||||||
if( array_key_exists('studies1', $contact) )
|
$output['common_']['contacts'] .= self::parseCSV($subjectData['contacts'], $dict['contacts'], strlen($output['common_']['contacts']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
// On affiche les colonnes pour le premier contact uniquement
|
|
||||||
$output['contacts.mini'] .= self::parseCSV([$contact], $dict['contacts'], strlen($output['contacts.mini']) == 0 );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// On ajoute le sujet à la liste des contacts
|
// On ferme l'instance de la base de données
|
||||||
$output['contacts.mini'] .= self::parseCSV([[
|
$db->close();
|
||||||
'id' => $subid,
|
|
||||||
'name' => $subject['subject']['name']
|
|
||||||
]], [], strlen($output['contacts.mini']) == 0);
|
|
||||||
|
|
||||||
/* (4) Si aucune relation -> suivant */
|
|
||||||
if( !isset($subject['relations']) || !is_array($subject['relations']) )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* (5) On ajoute les relations */
|
|
||||||
$output['relations'] .= self::parseCSV($subject['relations'], [], strlen($output['relations']) == 0 );
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] On construit les fichiers de chaque sujet DE FACEBOOK
|
||||||
|
=========================================================*/
|
||||||
|
if( $facebook ){ // Si @facebook vaut TRUE
|
||||||
|
|
||||||
|
// On ouvre une instance de la base de données
|
||||||
|
$db = new lightdb('facebook_db');
|
||||||
|
|
||||||
|
// Si on doit prendre tous les sujets, on les récupère
|
||||||
|
if( $all )
|
||||||
|
$subjects = array_keys( $db->index() );
|
||||||
|
|
||||||
|
// Pour chaque sujet
|
||||||
|
foreach($subjects as $s=>$subjectId){
|
||||||
|
|
||||||
|
/* (1) On récupère les données du sujet en cours */
|
||||||
|
$subjectData = $db->fetch($subjectId);
|
||||||
|
|
||||||
|
// Si on ne trouve rien, on passe au suivant
|
||||||
|
if( $subjectData === false )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* (2) On complète les relations */
|
||||||
|
$output['common_']['relations'] .= self::parseCSV($subjectData['relations'], [], strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
|
|
||||||
|
/* (3) On ajoute les contacts à la liste */
|
||||||
|
$output['common_']['contacts'] .= self::parseCSV($subjectData['contacts'], $dict['contacts'], strlen($output['common_']['contacts']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// On ferme l'instance de la base de données
|
||||||
|
$db->close();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [4] On construit les fichiers de chaque sujet DE FORMULAIRE
|
||||||
|
=========================================================*/
|
||||||
|
if( $survey ){ // Si @survey vaut TRUE
|
||||||
|
|
||||||
|
// On ouvre une instance de la base de données
|
||||||
|
$db = new lightdb('survey_db');
|
||||||
|
|
||||||
|
// Si on doit prendre tous les sujets, on les récupère
|
||||||
|
if( $all )
|
||||||
|
$subjects = array_keys( $db->index() );
|
||||||
|
|
||||||
|
// Pour chaque sujet
|
||||||
|
foreach($subjects as $s=>$subjectId){
|
||||||
|
|
||||||
|
/* (1) On récupère les données du sujet en cours */
|
||||||
|
$subjectData = $db->fetch($subjectId);
|
||||||
|
|
||||||
|
// Si on ne trouve rien, on passe au suivant
|
||||||
|
if( $subjectData === false )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* (2) On complète les relations */
|
||||||
|
$output['common_']['relations'] .= self::parseCSV($subjectData['relations'], [], strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
|
|
||||||
|
/* (3) On ajoute les contacts à la liste */
|
||||||
|
$output['common_']['contacts'] .= self::parseCSV($subjectData['contacts'], $dict['contacts'], strlen($output['common_']['contacts']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// On ferme l'instance de la base de données
|
||||||
|
$db->close();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* [5] On ajoute le dictionnaire
|
/* [5] On ajoute le dictionnaire
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$output['dict'] .= "\"sheet\";\"field\";\"key\";\"value\"\r\n";
|
$output['common_']['dict'] .= "\"sheet\";\"field\";\"key\";\"value\"\r\n";
|
||||||
foreach($dict as $ds=>$dataset)
|
foreach($dict as $ds=>$dataset)
|
||||||
foreach($dataset as $f=>$field)
|
foreach($dataset as $f=>$field)
|
||||||
foreach($field as $key=>$value)
|
foreach($field as $key=>$value)
|
||||||
$output['dict'] .= "\"$ds\";\"$f\";\"$key\";\"$value\"\r\n";
|
$output['common_']['dict'] .= "\"$ds\";\"$f\";\"$key\";\"$value\"\r\n";
|
||||||
|
|
||||||
|
|
||||||
/* [6] Création de l'archive
|
/* [6] Création de l'archive
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$zip = new \ZipArchive();
|
$zip = new \ZipArchive();
|
||||||
$fname = __TMP__.'/'.time().'.zip';
|
$fname = '/tmp/'.time().'.zip';
|
||||||
$zip->open($fname, \ZipArchive::CREATE);
|
$zip->open($fname, \ZipArchive::CREATE);
|
||||||
|
|
||||||
|
foreach($output as $folder=>$files){
|
||||||
|
|
||||||
foreach($output as $file=>$content)
|
foreach($files as $file=>$content)
|
||||||
if( strlen($content) > 0 )
|
if( strlen($content) > 0 )
|
||||||
$zip->addFromString($file.'.csv', $content);
|
$zip->addFromString($folder.$file.'.csv', $content);
|
||||||
|
}
|
||||||
|
|
||||||
$zip->close();
|
$zip->close();
|
||||||
|
|
||||||
|
@ -293,6 +349,9 @@
|
||||||
/* EXPORT POUR GEPHI OU AUTRE LOGICIEL SUR LE PRINCIPE NODES+EDGES
|
/* EXPORT POUR GEPHI OU AUTRE LOGICIEL SUR LE PRINCIPE NODES+EDGES
|
||||||
*
|
*
|
||||||
* @subjects<Array> Liste des identifiants des sujets à prendre en compte
|
* @subjects<Array> Liste des identifiants des sujets à prendre en compte
|
||||||
|
* @phone<Boolean> Si TRUE, prend en compte les données des questionnaires cellulaires
|
||||||
|
* @facebook<Boolean> Si TRUE, prend en compte les données des questionnaires facebook
|
||||||
|
* @survey<Boolean> Si TRUE, prend en compte les données des questionnaires ResTIC
|
||||||
* @all<Boolean> Si TRUE, prend en compte tous les sujets (annule @subjects)
|
* @all<Boolean> Si TRUE, prend en compte tous les sujets (annule @subjects)
|
||||||
*
|
*
|
||||||
* @return data<File> Retourne une archive .zip contenant toutes les données sélectionnées
|
* @return data<File> Retourne une archive .zip contenant toutes les données sélectionnées
|
||||||
|
@ -301,12 +360,15 @@
|
||||||
extract($params);
|
extract($params);
|
||||||
|
|
||||||
/* (0) Gestion du formattage des paramètres */
|
/* (0) Gestion du formattage des paramètres */
|
||||||
$subjects = !is_array($subjects) ? [] : $subjects;
|
$subjects = !is_array($subjects) ? [] : $subjects;
|
||||||
$all = !is_bool($all) ? false : $all;
|
$phone = !is_bool($phone) ? false : $phone;
|
||||||
|
$facebook = !is_bool($facebook) ? false : $facebook;
|
||||||
|
$survey = !is_bool($survey) ? false : $survey;
|
||||||
|
$all = !is_bool($all) ? false : $all;
|
||||||
|
|
||||||
/* [0] On récupère le dictionnaire
|
/* [0] On récupère le dictionnaire
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$dict = file_get_contents(__BUILD__.'/lightdb/storage/dictionary.json');
|
$dict = file_get_contents(__BUILD__.'/src/dynamic/dictionary.json');
|
||||||
|
|
||||||
/* (2) Si une erreur pour le fichier de conf */
|
/* (2) Si une erreur pour le fichier de conf */
|
||||||
if( $dict === false )
|
if( $dict === false )
|
||||||
|
@ -320,132 +382,198 @@
|
||||||
return [ 'ModuleError' => ManagerError::ParsingFailed ];
|
return [ 'ModuleError' => ManagerError::ParsingFailed ];
|
||||||
|
|
||||||
|
|
||||||
/* [1] Initialisation
|
/* [1] On construit l'arborescence des données
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) Fichiers de sortie */
|
|
||||||
$output = [
|
$output = [
|
||||||
'gephi.nodes' => '', // contiendra les contacts et leurs données
|
'common_' => [
|
||||||
'gephi.edges' => '', // contiendra les relations
|
'contacts' => '',
|
||||||
'dict' => '' // contiendra le dictionnaire de valeurs
|
'relations' => '',
|
||||||
|
'dict' => ''
|
||||||
|
],
|
||||||
|
'logs/' => [] // Contiendra les journaux d'appels
|
||||||
];
|
];
|
||||||
|
|
||||||
/* (2) Base de données */
|
|
||||||
$subjectdb = new lightdb('subject');
|
|
||||||
$contactdb = new lightdb('contact');
|
|
||||||
|
|
||||||
|
|
||||||
/* [2] On construit la liste des sujets
|
/* [2] On construit les fichiers de chaque sujet DE TELEPHONE
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$subjectindexes = array_keys($subjectdb->index());
|
if( $phone ){ // Si @phone vaut TRUE
|
||||||
$subjectids = [];
|
|
||||||
|
|
||||||
/* (1) On récupère tous les sujets si c'est spécifié */
|
// On ouvre une instance de la base de données
|
||||||
if( $all )
|
$db = new lightdb('phone_db');
|
||||||
|
|
||||||
$subjectids = $subjectindexes;
|
// Si on doit prendre tous les sujets, on les récupère
|
||||||
|
if( $all )
|
||||||
|
$subjects = array_keys( $db->index() );
|
||||||
|
|
||||||
/* (2) Sinon on retire les ids incorrects */
|
// Pour chaque sujet
|
||||||
else
|
foreach($subjects as $s=>$subjectId){
|
||||||
|
|
||||||
foreach($subjects as $i=>$id)
|
/* (1) On récupère les données du sujet en cours */
|
||||||
if( in_array($id, $subjectindexes) )
|
$subjectData = $db->fetch($subjectId);
|
||||||
$subjectids[] = intval($id);
|
|
||||||
|
|
||||||
|
// Si on ne trouve rien, on passe au suivant
|
||||||
|
if( $subjectData === false )
|
||||||
/* (3) Si aucun sujet restant -> error */
|
|
||||||
if( count($subjectids) === 0 )
|
|
||||||
return ['ModuleError' => ManagerError::ParamError];
|
|
||||||
|
|
||||||
|
|
||||||
/* [3] Export contacts/relations des sujets selectionnés
|
|
||||||
=========================================================*/
|
|
||||||
foreach($subjectids as $subid){
|
|
||||||
|
|
||||||
/* (1) On récupère les données du sujet */
|
|
||||||
$subject = $subjectdb->fetch($subid);
|
|
||||||
|
|
||||||
// si pas trouvé -> suivant
|
|
||||||
if( $subject === false )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* (2) Si aucun contact -> suivant */
|
|
||||||
if( !isset($subject['contacts']) || !is_array($subject['contacts']) )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* (3) Pour chaque contact */
|
|
||||||
foreach($subject['contacts'] as $c=>$contactid){
|
|
||||||
|
|
||||||
// {3.1} On récupère le contact //
|
|
||||||
$contact = $contactdb->fetch($contactid);
|
|
||||||
|
|
||||||
// si pas trouvé -> suivant
|
|
||||||
if( $contact === false )
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// {3.2} On ajoute le contact au fichier des FICHES //
|
/* (2) On construit le log s'il existe */
|
||||||
if( array_key_exists('studies2', $contact) ){
|
$output['logs/'][$subjectId] = self::parseCSV($subjectData['logs'], $dict['logs']);
|
||||||
// On affiche les colonnes pour le premier contact uniquement
|
|
||||||
$contact['type'] = 'fiche';
|
|
||||||
$output['gephi.nodes'] .= self::parseCSV([$contact], $dict['contacts'], strlen($output['gephi.nodes']) == 0 );
|
|
||||||
|
|
||||||
// {3.3} On ajoute le contact au fichier des MINI //
|
/* (3) On complète les relations */
|
||||||
}elseif( array_key_exists('studies1', $contact) ){
|
// {1} On retire les valeurs ou le type = 0 //
|
||||||
// On affiche les colonnes pour le premier contact uniquement
|
$formattedRelations = [];
|
||||||
$contact['type'] = 'mini';
|
foreach($subjectData['relations'] as $i=>$relation)
|
||||||
$output['gephi.nodes'] .= self::parseCSV([$contact], $dict['contacts'], strlen($output['gephi.nodes']) == 0 );
|
if( $relation['type'] != 0 )
|
||||||
}
|
array_push($formattedRelations, [
|
||||||
|
'source' => $relation['idA'],
|
||||||
|
'target' => $relation['idB'],
|
||||||
|
'weight' => ($relation['idA']==$subjectId) ? .1 : 1, // plus de poids aux relations alter/alter
|
||||||
|
'type' => 'Undirected'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// {2} On ajoute au contenu //
|
||||||
|
$output['common_']['relations'] .= self::parseCSV($formattedRelations, [], strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
|
|
||||||
|
/* (4) On ajoute les contacts à la liste */
|
||||||
|
$output['common_']['contacts'] .= self::parseCSV($subjectData['contacts'], $dict['contacts'], strlen($output['common_']['contacts']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// On ajoute le sujet à la liste des contacts
|
// On ferme l'instance de la base de données
|
||||||
$output['gephi.nodes'] .= self::parseCSV([[
|
$db->close();
|
||||||
'id' => $subid,
|
|
||||||
'name' => $subject['subject']['name']
|
|
||||||
]], [], strlen($output['gephi.nodes']) == 0);
|
|
||||||
|
|
||||||
/* (4) Si aucune relation -> suivant */
|
|
||||||
if( !isset($subject['relations']) || !is_array($subject['relations']) )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* (5) On ajoute les relations */
|
|
||||||
foreach($subject['relations'] as $r=>$rel)
|
|
||||||
|
|
||||||
$output['gephi.edges'] .= self::parseCSV(
|
|
||||||
[[
|
|
||||||
'source' => $rel['idA'],
|
|
||||||
'target' => $rel['idB'],
|
|
||||||
'weight' => ($rel['idA']==$subid) ? .5 : 1,
|
|
||||||
'type' => 'Undirected'
|
|
||||||
]],
|
|
||||||
[],
|
|
||||||
strlen($output['gephi.edges']) == 0
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] On construit les fichiers de chaque sujet DE FACEBOOK
|
||||||
|
=========================================================*/
|
||||||
|
if( $facebook ){ // Si @facebook vaut TRUE
|
||||||
|
|
||||||
|
// On ouvre une instance de la base de données
|
||||||
|
$db = new lightdb('facebook_db');
|
||||||
|
|
||||||
|
// Si on doit prendre tous les sujets, on les récupère
|
||||||
|
if( $all )
|
||||||
|
$subjects = array_keys( $db->index() );
|
||||||
|
|
||||||
|
// Pour chaque sujet
|
||||||
|
foreach($subjects as $s=>$subjectId){
|
||||||
|
|
||||||
|
/* (1) On récupère les données du sujet en cours */
|
||||||
|
$subjectData = $db->fetch($subjectId);
|
||||||
|
|
||||||
|
// Si on ne trouve rien, on passe au suivant
|
||||||
|
if( $subjectData === false )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* (2) On complète les relations */
|
||||||
|
// {1} On retire les valeurs ou le type = 0 //
|
||||||
|
$formattedRelations = [];
|
||||||
|
foreach($subjectData['relations'] as $i=>$relation)
|
||||||
|
if( $relation['type'] != 0 )
|
||||||
|
array_push($formattedRelations, [
|
||||||
|
'source' => $relation['idA'],
|
||||||
|
'target' => $relation['idB'],
|
||||||
|
'weight' => ($relation['idA']==$subjectId) ? .1 : 1, // plus de poids aux relations alter/alter
|
||||||
|
'type' => 'Undirected'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// {2} On ajoute au contenu //
|
||||||
|
$output['common_']['relations'] .= self::parseCSV($formattedRelations, [], strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
|
|
||||||
|
/* (3) On ajoute les contacts à la liste */
|
||||||
|
$output['common_']['contacts'] .= self::parseCSV($subjectData['contacts'], $dict['contacts'], strlen($output['common_']['contacts']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// On ferme l'instance de la base de données
|
||||||
|
$db->close();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [4] On construit les fichiers de chaque sujet DE FORMULAIRE
|
||||||
|
=========================================================*/
|
||||||
|
if( $survey ){ // Si @survey vaut TRUE
|
||||||
|
|
||||||
|
// On ouvre une instance de la base de données
|
||||||
|
$db = new lightdb('survey_db');
|
||||||
|
|
||||||
|
// Si on doit prendre tous les sujets, on les récupère
|
||||||
|
if( $all )
|
||||||
|
$subjects = array_keys( $db->index() );
|
||||||
|
|
||||||
|
// Pour chaque sujet
|
||||||
|
foreach($subjects as $s=>$subjectId){
|
||||||
|
|
||||||
|
/* (1) On récupère les données du sujet en cours */
|
||||||
|
$subjectData = $db->fetch($subjectId);
|
||||||
|
|
||||||
|
// Si on ne trouve rien, on passe au suivant
|
||||||
|
if( $subjectData === false )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* (2) On complète les relations */
|
||||||
|
// {1} On retire les valeurs ou le type = 0 //
|
||||||
|
$formattedRelations = [];
|
||||||
|
foreach($subjectData['relations'] as $i=>$relation)
|
||||||
|
if( $relation['type'] != 0 ) // On retire les relations ego/alter
|
||||||
|
array_push($formattedRelations, [
|
||||||
|
'source' => $relation['idA'],
|
||||||
|
'target' => $relation['idB'],
|
||||||
|
'weight' => ($relation['idA']==$subjectId) ? .1 : 1, // plus de poids aux relations alter/alter
|
||||||
|
'type' => 'Undirected'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// {2} On ajoute au contenu //
|
||||||
|
$output['common_']['relations'] .= self::parseCSV($formattedRelations, [], strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
|
|
||||||
|
/* (3) On ajoute les contacts à la liste */
|
||||||
|
$output['common_']['contacts'] .= self::parseCSV($subjectData['contacts'], $dict['contacts'], strlen($output['common_']['contacts']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// On ferme l'instance de la base de données
|
||||||
|
$db->close();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* [5] On ajoute le dictionnaire
|
/* [5] On ajoute le dictionnaire
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$output['dict'] .= "\"sheet\";\"field\";\"key\";\"value\"\r\n";
|
$output['common_']['dict'] .= "\"sheet\";\"field\";\"key\";\"value\"\r\n";
|
||||||
foreach($dict as $ds=>$dataset)
|
foreach($dict as $ds=>$dataset)
|
||||||
foreach($dataset as $f=>$field)
|
foreach($dataset as $f=>$field)
|
||||||
foreach($field as $key=>$value)
|
foreach($field as $key=>$value)
|
||||||
$output['dict'] .= "\"$ds\";\"$f\";\"$key\";\"$value\"\r\n";
|
$output['common_']['dict'] .= "\"$ds\";\"$f\";\"$key\";\"$value\"\r\n";
|
||||||
|
|
||||||
|
|
||||||
/* [6] Création de l'archive
|
/* [6] Création de l'archive
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$zip = new \ZipArchive();
|
$zip = new \ZipArchive();
|
||||||
$fname = __TMP__.'/'.time().'.zip';
|
$fname = '/tmp/'.time().'.zip';
|
||||||
$zip->open($fname, \ZipArchive::CREATE);
|
$zip->open($fname, \ZipArchive::CREATE);
|
||||||
|
|
||||||
|
foreach($output as $folder=>$files){
|
||||||
|
|
||||||
foreach($output as $file=>$content)
|
foreach($files as $file=>$content)
|
||||||
if( strlen($content) > 0 )
|
if( strlen($content) > 0 )
|
||||||
$zip->addFromString($file.'.csv', $content);
|
$zip->addFromString($folder.$file.'.csv', $content);
|
||||||
|
}
|
||||||
|
|
||||||
$zip->close();
|
$zip->close();
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -38,7 +38,7 @@
|
||||||
/* [1] On récupére la liste des sujets
|
/* [1] On récupére la liste des sujets
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) On initialise et ouvre la bd */
|
/* (1) On initialise et ouvre la bd */
|
||||||
$db = new lightdb('subject');
|
$db = new lightdb('survey_db');
|
||||||
$ids = array_keys( $db->index() );
|
$ids = array_keys( $db->index() );
|
||||||
|
|
||||||
/* (2) On récupère tous les sujets */
|
/* (2) On récupère tous les sujets */
|
||||||
|
@ -47,19 +47,38 @@
|
||||||
|
|
||||||
$sub['creation'] = date('d/m/Y H:i:s', $sub['creation']);
|
$sub['creation'] = date('d/m/Y H:i:s', $sub['creation']);
|
||||||
$subjects[$id] = $sub;
|
$subjects[$id] = $sub;
|
||||||
|
|
||||||
/* (3) Si enquête PHONE passée */
|
|
||||||
if( isset($sub['surveys']) && is_array($sub['surveys']) && in_array('phone', $sub['surveys']) )
|
|
||||||
$subjects[$id]['phone'] = true;
|
|
||||||
|
|
||||||
/* (4) Si enquête FACEBOOK passée */
|
|
||||||
if( isset($sub['surveys']) && is_array($sub['surveys']) && in_array('facebook', $sub['surveys']) )
|
|
||||||
$subjects[$id]['facebook'] = true;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
$db->close();
|
$db->close();
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] On récupére la liste des sujets pour PHONE
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) On initialise et ouvre la bd */
|
||||||
|
$db = new lightdb('phone_db');
|
||||||
|
$ids = array_keys( $db->index() );
|
||||||
|
$db->close();
|
||||||
|
|
||||||
|
/* (2) Si un des sujets de 'survey' est dans PHONE, on ajoute la mention */
|
||||||
|
foreach($subjects as $id=>$data)
|
||||||
|
if( in_array($id, $ids) ) // Si dans phone
|
||||||
|
$subjects[$id]['phone'] = true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] On récupére la liste des sujets pour FACEBOOK
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) On initialise et ouvre la bd */
|
||||||
|
$db = new lightdb('facebook_db');
|
||||||
|
$ids = array_keys( $db->index() );
|
||||||
|
$db->close();
|
||||||
|
|
||||||
|
/* (2) Si un des sujets de 'survey' est dans FACBEOOK, on ajoute la mention */
|
||||||
|
foreach($subjects as $id=>$data)
|
||||||
|
if( in_array($id, $ids) ) // Si dans facebook
|
||||||
|
$subjects[$id]['facebook'] = true;
|
||||||
|
|
||||||
|
|
||||||
/* [4] Gestion du retour
|
/* [4] Gestion du retour
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
return [
|
return [
|
||||||
|
@ -83,12 +102,12 @@
|
||||||
|
|
||||||
|
|
||||||
// Contiendra les sujets
|
// Contiendra les sujets
|
||||||
$contacts = [];
|
$subjects = [];
|
||||||
|
|
||||||
/* [1] On récupére la liste des sujets
|
/* [1] On récupére la liste des sujets
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) On initialise et ouvre la bd */
|
/* (1) On initialise et ouvre la bd */
|
||||||
$db = new lightdb('subject');
|
$db = new lightdb('survey_db');
|
||||||
$fetch = $db->fetch($subject_id);
|
$fetch = $db->fetch($subject_id);
|
||||||
$db->close();
|
$db->close();
|
||||||
|
|
||||||
|
@ -97,34 +116,44 @@
|
||||||
return [ 'ModuleError' => ManagerError::ModuleError ];
|
return [ 'ModuleError' => ManagerError::ModuleError ];
|
||||||
|
|
||||||
/* (3) On enregistre ses contacts s'il en a */
|
/* (3) On enregistre ses contacts s'il en a */
|
||||||
$db = new lightdb('contact');
|
if( isset($fetch['contacts']) )
|
||||||
|
foreach($fetch['contacts'] as $contact)
|
||||||
|
$subjects[$contact['id']] = $contact;
|
||||||
|
|
||||||
if( isset($fetch['contacts']) ){
|
|
||||||
|
|
||||||
foreach($fetch['contacts'] as $contactId){
|
/* [2] On récupére la liste des contacts saisis dans PHONE
|
||||||
|
=========================================================*/
|
||||||
$contact = $db->fetch($contactId);
|
/* (1) On initialise et ouvre la bd */
|
||||||
// si le contact n'est pas trouvé -> passe au suivant
|
$db = new lightdb('phone_db');
|
||||||
if( $contact === false )
|
$fetch = $db->fetch($subject_id);
|
||||||
continue;
|
|
||||||
|
|
||||||
$contacts[$contactId] = $contact;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$db->close();
|
$db->close();
|
||||||
|
|
||||||
/* [2] Gestion des relations
|
/* (2) Si on trouve des contacts, on les ajoute */
|
||||||
|
if( $fetch !== false && isset($fetch['contacts']) )
|
||||||
|
foreach($fetch['contacts'] as $contact)
|
||||||
|
$subjects[$contact['id']] = $contact;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] On récupére la liste des sujets pour FACEBOOK
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) On récupère toutes les relations */
|
/* (1) On initialise et ouvre la bd */
|
||||||
//blabla
|
$db = new lightdb('facebook_db');
|
||||||
|
$fetch = $db->fetch($subject_id);
|
||||||
|
$db->close();
|
||||||
|
|
||||||
|
/* (2) Si on trouve des contacts, on les ajoute */
|
||||||
|
if( $fetch !== false && isset($fetch['contacts']) )
|
||||||
|
foreach($fetch['contacts'] as $contact)
|
||||||
|
$subjects[$contact['id']] = $contact;
|
||||||
|
|
||||||
|
|
||||||
/* [4] Gestion du retour
|
/* [4] Gestion du retour
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
return [
|
return [
|
||||||
'ModuleError' => ManagerError::Success,
|
'ModuleError' => ManagerError::Success,
|
||||||
'subjects' => $contacts
|
'subjects' => $subjects
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +174,7 @@
|
||||||
|
|
||||||
/* [1] On récupère l'id unique actuel
|
/* [1] On récupère l'id unique actuel
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$funiq = fopen( __BUILD__.'/lightdb/storage/uniqid', 'r+' );
|
$funiq = fopen( __BUILD__.'/src/dynamic/uniqid', 'r+' );
|
||||||
flock($funiq, LOCK_EX); // On verrouille le fichier
|
flock($funiq, LOCK_EX); // On verrouille le fichier
|
||||||
$uniqid = trim( fgets( $funiq ) );
|
$uniqid = trim( fgets( $funiq ) );
|
||||||
|
|
||||||
|
@ -157,20 +186,16 @@
|
||||||
$newId = intval($uniqid) + 1;
|
$newId = intval($uniqid) + 1;
|
||||||
|
|
||||||
// On crée notre sujet
|
// On crée notre sujet
|
||||||
$data = [
|
$data = [ 'subject' => [
|
||||||
'subject' => [
|
'id' => $newId,
|
||||||
'id' => $newId,
|
'name' => $name,
|
||||||
'name' => $name,
|
'creation' => time()
|
||||||
'creation' => time(),
|
]];
|
||||||
'surveys' => [],
|
|
||||||
'coords' => ''
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
/* [2] On crée le sujet dans SURVEYS
|
/* [2] On crée le sujet dans SURVEYS
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) On initialise et ouvre la bd */
|
/* (1) On initialise et ouvre la bd */
|
||||||
$db = new lightdb('subject');
|
$db = new lightdb('survey_db');
|
||||||
$db->insert( $newId, $data );
|
$db->insert( $newId, $data );
|
||||||
$db->close();
|
$db->close();
|
||||||
|
|
||||||
|
@ -231,7 +256,7 @@
|
||||||
/* [1] On récupére la liste des sujets
|
/* [1] On récupére la liste des sujets
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) On initialise et ouvre la bd */
|
/* (1) On initialise et ouvre la bd */
|
||||||
$db = new lightdb('subject');
|
$db = new lightdb('survey_db');
|
||||||
$ids = array_keys( $db->index() );
|
$ids = array_keys( $db->index() );
|
||||||
|
|
||||||
/* (2) On récupère tous les sujets */
|
/* (2) On récupère tous les sujets */
|
||||||
|
@ -241,18 +266,41 @@
|
||||||
|
|
||||||
$sub['creation'] = date('d/m/Y H:i:s', $sub['creation']);
|
$sub['creation'] = date('d/m/Y H:i:s', $sub['creation']);
|
||||||
$subjects[$id] = $sub;
|
$subjects[$id] = $sub;
|
||||||
|
|
||||||
/* (3) Si enquête PHONE passée */
|
|
||||||
if( isset($sub['surveys']) && is_array($sub['surveys']) && in_array('phone', $sub['surveys']) )
|
|
||||||
$subjects[$id]['phone'] = true;
|
|
||||||
|
|
||||||
/* (4) Si enquête FACEBOOK passée */
|
|
||||||
if( isset($sub['surveys']) && is_array($sub['surveys']) && in_array('facebook', $sub['surveys']) )
|
|
||||||
$subjects[$id]['facebook'] = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$db->close();
|
$db->close();
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] On récupére la liste des sujets pour PHONE
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) On initialise et ouvre la bd */
|
||||||
|
$db = new lightdb('phone_db');
|
||||||
|
$ids = array_keys( $db->index() );
|
||||||
|
$db->close();
|
||||||
|
|
||||||
|
/* (2) Si un des sujets de 'survey' est dans PHONE, on ajoute la mention */
|
||||||
|
foreach($subjects as $id=>$data)
|
||||||
|
if( in_array($id, $ids) ) // Si dans phone
|
||||||
|
$subjects[$id]['phone'] = true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] On récupére la liste des sujets pour FACEBOOK
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) On initialise et ouvre la bd */
|
||||||
|
$db = new lightdb('facebook_db');
|
||||||
|
$ids = array_keys( $db->index() );
|
||||||
|
$db->close();
|
||||||
|
|
||||||
|
/* (2) Si un des sujets de 'survey' est dans FACBEOOK, on ajoute la mention */
|
||||||
|
foreach($subjects as $id=>$data)
|
||||||
|
if( in_array($id, $ids) ) // Si dans facebook
|
||||||
|
$subjects[$id]['facebook'] = true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* [4] Retour des données
|
/* [4] Retour des données
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
return [
|
return [
|
||||||
|
|
|
@ -78,6 +78,13 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
/* [3] Construction du chemin
|
/* [3] Construction du chemin
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) On construit le chemin */
|
/* (1) On construit le chemin */
|
||||||
$path = __PUBLIC__.$uploadAuth['root'].'/'.$prefix.'/';
|
$path = __BUILD__.$uploadAuth['root'].'/'.$prefix.'/';
|
||||||
|
|
||||||
/* (2) On crée le dossier s'il n'existe pas */
|
/* (2) On crée le dossier s'il n'existe pas */
|
||||||
if ( !file_exists($path) ) mkdir($path, 0775, true);
|
if ( !file_exists($path) ) mkdir($path, 0775, true);
|
||||||
|
@ -70,6 +70,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* EFFECTUE UN UPLOAD D'UN fichier
|
/* EFFECTUE UN UPLOAD D'UN fichier
|
||||||
*
|
*
|
||||||
* @prefix<String> Préfixe (dossier parent) du fichier
|
* @prefix<String> Préfixe (dossier parent) du fichier
|
||||||
|
@ -82,8 +84,8 @@
|
||||||
*/
|
*/
|
||||||
private static function simpleFile($prefix, $extension, $file, $tester){
|
private static function simpleFile($prefix, $extension, $file, $tester){
|
||||||
// Si on est pas connecté, on retourne une erreur -> impossible via token
|
// Si on est pas connecté, on retourne une erreur -> impossible via token
|
||||||
if( !connected() ) return ManagerError::PermissionError;
|
if( !connected() ) return [ 'error' => ManagerError::PermissionError ];
|
||||||
if( !file_exists($file['tmp_name']) ) return ManagerError::UnreachableResource;
|
if( !file_exists($file['tmp_name']) ) return [ 'error' => ManagerError::UnreachableResource ];
|
||||||
|
|
||||||
|
|
||||||
/* [1] On récupère le chemin du fichier à créer et vérifie le dossier
|
/* [1] On récupère le chemin du fichier à créer et vérifie le dossier
|
||||||
|
@ -123,6 +125,20 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* IMPORT D'UNE SAUVEGARDE DE FORMULAIRE LOCAL
|
/* IMPORT D'UNE SAUVEGARDE DE FORMULAIRE LOCAL
|
||||||
*
|
*
|
||||||
* @file<FILE> Pointeur vers $_FILES['']
|
* @file<FILE> Pointeur vers $_FILES['']
|
||||||
|
@ -158,7 +174,6 @@
|
||||||
|
|
||||||
/* (3) Vérification du sujet */
|
/* (3) Vérification du sujet */
|
||||||
$checkSubject = isset($json['subject']['subject_id']) && is_numeric($json['subject']['subject_id']);
|
$checkSubject = isset($json['subject']['subject_id']) && is_numeric($json['subject']['subject_id']);
|
||||||
$checkSubject = $checkSubject && isset($json['subject']['coords']) && is_string($json['subject']['coords']);
|
|
||||||
|
|
||||||
// Erreur des attributs du sujet incorrects ou manquants
|
// Erreur des attributs du sujet incorrects ou manquants
|
||||||
if( !$checkSubject )
|
if( !$checkSubject )
|
||||||
|
@ -168,11 +183,10 @@
|
||||||
/* (4) Vérification des contacts */
|
/* (4) Vérification des contacts */
|
||||||
foreach($json['contacts'] as $contact){
|
foreach($json['contacts'] as $contact){
|
||||||
$checkContact = isset($contact['uid']) && is_numeric($contact['uid']);
|
$checkContact = isset($contact['uid']) && is_numeric($contact['uid']);
|
||||||
$checkContact = $checkContact && (
|
$checkContact = $checkContact && isset($contact['username']) && is_string($contact['username']);
|
||||||
( isset($contact['username']) && is_string($contact['username']) )
|
// Existing ou username.length > 0
|
||||||
||
|
$checkContact = $checkContact && isset($contact['existing']);
|
||||||
( isset($contact['existing']) && is_numeric($contact['existing']) )
|
$checkContact = $checkContact && ( strlen($contact['username']) > 0 || intval($contact['existing']) == $contact['existing'] );
|
||||||
);
|
|
||||||
// $checkContact = $checkContact && isset($contact['sms']) && is_numeric($contact['sms']);
|
// $checkContact = $checkContact && isset($contact['sms']) && is_numeric($contact['sms']);
|
||||||
// $checkContact = $checkContact && isset($contact['call']) && is_numeric($contact['call']);
|
// $checkContact = $checkContact && isset($contact['call']) && is_numeric($contact['call']);
|
||||||
// $checkContact = $checkContact && isset($contact['countsms']) && is_numeric($contact['countsms']);
|
// $checkContact = $checkContact && isset($contact['countsms']) && is_numeric($contact['countsms']);
|
||||||
|
@ -184,6 +198,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* (5) Vérification des mini-fiches */
|
/* (5) Vérification des mini-fiches */
|
||||||
foreach($json['mini'] as $mini){
|
foreach($json['mini'] as $mini){
|
||||||
$checkMini = isset($mini['uid']) && is_numeric($mini['uid']);
|
$checkMini = isset($mini['uid']) && is_numeric($mini['uid']);
|
||||||
|
@ -200,21 +215,18 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* (6) Vérification des fiches */
|
/* (6) Vérification des fiches */
|
||||||
foreach($json['fiches'] as $fiches){
|
foreach($json['fiches'] as $fiches){
|
||||||
$checkFiche = isset($fiches['uid']) && is_numeric($fiches['uid']);
|
$checkFiche = isset($fiches['uid']) && is_numeric($fiches['uid']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['contact']) && is_numeric($fiches['contact']);
|
$checkFiche = $checkFiche && isset($fiches['contact']) && is_numeric($fiches['contact']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['sexe']) && is_numeric($fiches['sexe']);
|
$checkFiche = $checkFiche && isset($fiches['sexe']) && is_numeric($fiches['sexe']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['age']) && is_string($fiches['age']);
|
$checkFiche = $checkFiche && isset($fiches['age']) && is_string($fiches['age']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['interest']) && is_numeric($fiches['interest']);
|
|
||||||
$checkFiche = $checkFiche && isset($fiches['relmark']) && is_numeric($fiches['relmark']);
|
|
||||||
$checkFiche = $checkFiche && isset($fiches['job']) && is_string($fiches['job']);
|
$checkFiche = $checkFiche && isset($fiches['job']) && is_string($fiches['job']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['loc']) && (is_numeric($fiches['loc']) || $fiches['loc']=='.');
|
$checkFiche = $checkFiche && isset($fiches['loc']) && (is_numeric($fiches['loc']) || $fiches['loc']=='.');
|
||||||
$checkFiche = $checkFiche && isset($fiches['studies']) && is_string($fiches['studies']);
|
$checkFiche = $checkFiche && isset($fiches['studies']) && is_string($fiches['studies']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['famsit']) && is_numeric($fiches['famsit']);
|
$checkFiche = $checkFiche && isset($fiches['famsit']) && is_numeric($fiches['famsit']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['reltype']) && is_numeric($fiches['reltype']);
|
$checkFiche = $checkFiche && isset($fiches['reltype']) && is_numeric($fiches['reltype']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['medsoc']) && is_numeric($fiches['medsoc']);
|
|
||||||
$checkFiche = $checkFiche && isset($fiches['medrel']) && is_numeric($fiches['medrel']);
|
|
||||||
$checkFiche = $checkFiche && isset($fiches['reltypeSpecial']) && is_string($fiches['reltypeSpecial']);
|
$checkFiche = $checkFiche && isset($fiches['reltypeSpecial']) && is_string($fiches['reltypeSpecial']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['city']) && is_string($fiches['city']);
|
$checkFiche = $checkFiche && isset($fiches['city']) && is_string($fiches['city']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['cp']) && is_string($fiches['cp']);
|
$checkFiche = $checkFiche && isset($fiches['cp']) && is_string($fiches['cp']);
|
||||||
|
@ -222,7 +234,6 @@
|
||||||
$checkFiche = $checkFiche && isset($fiches['context']) && is_numeric($fiches['context']);
|
$checkFiche = $checkFiche && isset($fiches['context']) && is_numeric($fiches['context']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['contextSpecial']) && is_array($fiches['contextSpecial']);
|
$checkFiche = $checkFiche && isset($fiches['contextSpecial']) && is_array($fiches['contextSpecial']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['freq']) && is_array($fiches['freq']);
|
$checkFiche = $checkFiche && isset($fiches['freq']) && is_array($fiches['freq']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['irlfreq']) && is_array($fiches['irlfreq']);
|
|
||||||
$checkFiche = $checkFiche && isset($fiches['connect']) && is_array($fiches['connect']);
|
$checkFiche = $checkFiche && isset($fiches['connect']) && is_array($fiches['connect']);
|
||||||
$checkFiche = $checkFiche && isset($fiches['connectSpecial']) && is_array($fiches['connectSpecial']);
|
$checkFiche = $checkFiche && isset($fiches['connectSpecial']) && is_array($fiches['connectSpecial']);
|
||||||
|
|
||||||
|
@ -280,6 +291,31 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,198 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace http\core;
|
|
||||||
|
|
||||||
|
|
||||||
class HttpRequest{
|
|
||||||
|
|
||||||
/* [0] Constants
|
|
||||||
=========================================================*/
|
|
||||||
/* (1) Content-Type */
|
|
||||||
const CT_BINARY = 0; // unknown
|
|
||||||
const CT_TEXT = 1;
|
|
||||||
const CT_JSON = 2;
|
|
||||||
const CT_YAML = 3;
|
|
||||||
const CT_MULTIPART_FORM_DATA = 4;
|
|
||||||
const CT_X_WWW_FORM_URLENCODED = 5;
|
|
||||||
|
|
||||||
|
|
||||||
/* [1] Attributes
|
|
||||||
=========================================================*/
|
|
||||||
private $uri;
|
|
||||||
private $headers;
|
|
||||||
private $method;
|
|
||||||
private $postdata;
|
|
||||||
private $getdata;
|
|
||||||
|
|
||||||
private $type;
|
|
||||||
private $body;
|
|
||||||
|
|
||||||
|
|
||||||
/* [2] Constructs an HTTP Request based on environment
|
|
||||||
*
|
|
||||||
* @return instance<HttpRequest> auto-filled HTTP Request
|
|
||||||
*
|
|
||||||
=========================================================*/
|
|
||||||
public function __construct(){
|
|
||||||
/* [1] Define URI & Status Code & method
|
|
||||||
=========================================================*/
|
|
||||||
$this->uri = $_SERVER['REQUEST_URI'];
|
|
||||||
$this->method = $_SERVER['REQUEST_METHOD'];
|
|
||||||
|
|
||||||
|
|
||||||
/* [2] Define headers
|
|
||||||
=========================================================*/
|
|
||||||
$this->headers = \getallheaders();
|
|
||||||
|
|
||||||
|
|
||||||
/* [3] Define default datasets (GET, POST)
|
|
||||||
=========================================================*/
|
|
||||||
$this->getdata = $_GET;
|
|
||||||
$this->postdata = $_POST;
|
|
||||||
|
|
||||||
|
|
||||||
/* [4] Define BODY & its type
|
|
||||||
=========================================================*/
|
|
||||||
/* (1) Default: set plain/text body */
|
|
||||||
$this->body = \file_get_contents('php://input');
|
|
||||||
|
|
||||||
/* (2) Fetch content type */
|
|
||||||
$this->type = self::getContentType($this->headers['Content-Type']);
|
|
||||||
|
|
||||||
|
|
||||||
/* [5] Parse BODY data -> POST
|
|
||||||
=========================================================*/
|
|
||||||
$this->parseBody();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* GET CONSTANT CT_* FROM `Content-Type` HEADER
|
|
||||||
*
|
|
||||||
* @pContentType<String> `Content-Type` header value
|
|
||||||
*
|
|
||||||
* @return type<int> Constant value
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static function getContentType($pContentType=null){
|
|
||||||
/* [1] Checks argv
|
|
||||||
=========================================================*/
|
|
||||||
if( is_null($pContentType) )
|
|
||||||
$pContentType = $_SERVER['CONTENT_TYPE'];
|
|
||||||
|
|
||||||
|
|
||||||
/* [2] Checks types
|
|
||||||
=========================================================*/
|
|
||||||
/* (1) Form Data Types
|
|
||||||
---------------------------------------------------------*/
|
|
||||||
/* (1) multipart/form-data */
|
|
||||||
if( preg_match('/^multipart\/form\-data; boundary=(.+)$/i', $pContentType) )
|
|
||||||
return self::CT_MULTIPART_FORM_DATA;
|
|
||||||
|
|
||||||
/* (2) application/x-www-form-urlencoded */
|
|
||||||
if( preg_match('/^application\/x\-www\-form\-urlencoded/i', $pContentType) )
|
|
||||||
return self::CT_X_WWW_FORM_URLENCODED;
|
|
||||||
|
|
||||||
|
|
||||||
/* (2) Data types
|
|
||||||
---------------------------------------------------------*/
|
|
||||||
/* (1) Basic JSON content type */
|
|
||||||
if( preg_match('/^application\/json/i', $pContentType) )
|
|
||||||
return self::CT_JSON;
|
|
||||||
|
|
||||||
/* (2) Basic YAML content type */
|
|
||||||
if( preg_match('/^application\/yaml/i', $pContentType) )
|
|
||||||
return self::CT_YAML;
|
|
||||||
|
|
||||||
/* (3) Basic TEXT content type */
|
|
||||||
if( preg_match('/text\/[a-z]+/', $pContentType) )
|
|
||||||
return self::CT_TEXT;
|
|
||||||
|
|
||||||
|
|
||||||
/* (3) Default Type
|
|
||||||
---------------------------------------------------------*/
|
|
||||||
return self::CT_BINARY;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* PARSES BODY DATA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private function parseBody(){
|
|
||||||
/* [1] If empty body -> do nothing
|
|
||||||
=========================================================*/
|
|
||||||
if( strlen($this->body) === 0 )
|
|
||||||
return true;
|
|
||||||
|
|
||||||
|
|
||||||
/* [2] Management for each ContentType
|
|
||||||
=========================================================*/
|
|
||||||
switch($this->type){
|
|
||||||
|
|
||||||
/* (1) multipart/form-data -> parse for not-POST methods
|
|
||||||
---------------------------------------------------------*/
|
|
||||||
case self::CT_MULTIPART_FORM_DATA:
|
|
||||||
/* (1) Fetch the boundary */
|
|
||||||
if( !preg_match('/boundary=(.+)$/i', $this->headers['Content-Type'], $match) )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
$boundary = $match[1];
|
|
||||||
|
|
||||||
/* (2) Break body into parts */
|
|
||||||
$splitter = "/(?:\n|\r\n|--)*$boundary(?:\n|\r\n|--)?/im";
|
|
||||||
$parts = preg_split($splitter, $this->body);
|
|
||||||
|
|
||||||
/* (3) Process parts */
|
|
||||||
foreach($parts as $part)
|
|
||||||
if( preg_match('/^Content\-Disposition: form\-data; name=\"([^"]+)\"(?:\n|\r\n){2}(.+)$/mi', $part, $match) )
|
|
||||||
$this->postdata[$match[1]] = $match[2];
|
|
||||||
|
|
||||||
/* (4) Erases body */
|
|
||||||
$this->body = '';
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
/* (2) application/x-www-form-urlencoded -> parse for not-POST methods
|
|
||||||
---------------------------------------------------------*/
|
|
||||||
case self::CT_X_WWW_FORM_URLENCODED:
|
|
||||||
/* Auto parse builtin-php function */
|
|
||||||
parse_str($this->body, $this->postdata);
|
|
||||||
|
|
||||||
/* Erases body */
|
|
||||||
$this->body = '';
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
/* (3) application/json -> parse if no error
|
|
||||||
---------------------------------------------------------*/
|
|
||||||
case self::CT_JSON:
|
|
||||||
/* (1) Decode body content */
|
|
||||||
$decoded = json_decode($this->body, true);
|
|
||||||
|
|
||||||
/* (2) If error -> do nothing */
|
|
||||||
if( is_null($decoded) )
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* (3) Parse body into body */
|
|
||||||
$this->body = $decoded;
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
/* (4) application/yaml -> parse if no error
|
|
||||||
---------------------------------------------------------*/
|
|
||||||
case self::CT_YAML:
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function BODY(){ return $this->body; }
|
|
||||||
public function POST(){ return $this->postdata; }
|
|
||||||
public function GET(){ return $this->getdata; }
|
|
||||||
public function HEADERS(){ return $this->headers; }
|
|
||||||
public function METHOD(){ return $this->method; }
|
|
||||||
public function URI(){ return $this->uri; }
|
|
||||||
}
|
|
|
@ -2,17 +2,17 @@
|
||||||
|
|
||||||
namespace lightdb\core;
|
namespace lightdb\core;
|
||||||
|
|
||||||
|
|
||||||
class lightdb{
|
class lightdb{
|
||||||
|
|
||||||
// REPERTOIRE RACINE DE TOUTES LES BDD
|
// REPERTOIRE RACINE DE TOUTES LES BDD
|
||||||
public static function default_root(){ return __BUILD__.'/lightdb/storage'; }
|
public static function default_root(){ return __BUILD__.'/lightdb/storage/'; }
|
||||||
|
|
||||||
// ATTRIBUTS
|
// ATTRIBUTS
|
||||||
private $root;
|
private $root;
|
||||||
private $dbname;
|
private $dbname;
|
||||||
private $dir;
|
private $dir;
|
||||||
private $index;
|
private $index;
|
||||||
private $date;
|
|
||||||
private $driver;
|
private $driver;
|
||||||
private $line;
|
private $line;
|
||||||
|
|
||||||
|
@ -53,62 +53,41 @@
|
||||||
$index = json_decode( $fIndex->fgets(), true );
|
$index = json_decode( $fIndex->fgets(), true );
|
||||||
|
|
||||||
// Si erreur de parsage, on retourne une erreur
|
// Si erreur de parsage, on retourne une erreur
|
||||||
if( is_null($index) ) throw new \Exception('[lightdb] index is null');
|
if( is_null($index) ) return;
|
||||||
$this->index = $index;
|
$this->index = $index;
|
||||||
|
|
||||||
/* [3] Initialisation du gestionnaire d'acces (SplFileObject)
|
/* [3] Initialisation du gestionnaire d'acces (SplFileObject)
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) Si le fichier n'existe pas, on le crée */
|
/* (1) Si le fichier n'existe pas, on le crée */
|
||||||
$this->data = $this->dir.'data';
|
if( !file_exists($this->dir.'data') )
|
||||||
if( !file_exists($this->data) )
|
file_put_contents($this->dir.'data', '' );
|
||||||
file_put_contents($this->data, '' );
|
|
||||||
|
|
||||||
/* (2) On place un 'driver' sur le fichier */
|
/* (2) On place un 'driver' sur le fichier */
|
||||||
$this->driver = new \SplFileObject($this->data, 'r+');
|
$this->driver = new \SplFileObject($this->dir.'data', 'r+');
|
||||||
// $this->driver->setFlags( \SplFileObject::SKIP_EMPTY );
|
// $this->driver->setFlags( \SplFileObject::SKIP_EMPTY );
|
||||||
|
|
||||||
/* (3) On récupère le nombre de lignes */
|
/* (3) On récupère le nombre de lignes */
|
||||||
$this->line = -1;
|
$this->line = -1;
|
||||||
while( $this->driver->valid() ){
|
while( !$this->driver->eof() ){
|
||||||
$this->line++;
|
$this->line++;
|
||||||
$this->driver->fgetcsv();
|
$this->driver->fgetcsv();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function close(){ $this->driver = null; }
|
public function close(){ $this->driver = null; }
|
||||||
|
|
||||||
|
/* RETOURNE LA LISTE DES INDEX
|
||||||
|
|
||||||
|
|
||||||
/* FLUSH LA BDD (erase all)
|
|
||||||
*
|
*
|
||||||
*/
|
* @i<String> Index pour lequel on veut la ligne et le hash
|
||||||
public function flush(){
|
|
||||||
/* (1) On flush les index */
|
|
||||||
$fIndex = new \SplFileObject($this->dir.'index', 'w');
|
|
||||||
$fIndex->fwrite('[]');
|
|
||||||
$fIndex = null;
|
|
||||||
$this->line = 0;
|
|
||||||
$this->index = [];
|
|
||||||
|
|
||||||
/* (2) On flush les data */
|
|
||||||
file_put_contents($this->dir.'data', '' );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* RETOURNE UN INDEX
|
|
||||||
*
|
|
||||||
* @i<String> [OPT] Index pour lequel on veut la ligne et le hash
|
|
||||||
*
|
*
|
||||||
* @return Index<Array> Tableau associatif contenant le hash et la ligne
|
* @return Index<Array> Tableau associatif contenant le hash et la ligne
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function index($i=null){
|
public function index($i=null){
|
||||||
return is_numeric($i) ? $this->index[$i] : $this->index;
|
return is_numeric($i) ? $this->index : $this->index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -123,21 +102,25 @@
|
||||||
public function insert($key, $data){
|
public function insert($key, $data){
|
||||||
/* (1) On vérifie que la clé est unique */
|
/* (1) On vérifie que la clé est unique */
|
||||||
if( array_key_exists($key, $this->index) )
|
if( array_key_exists($key, $this->index) )
|
||||||
return false;
|
return true;
|
||||||
|
|
||||||
$key = (string) $key;
|
$key = (string) $key;
|
||||||
|
|
||||||
/* (2) On ajoute les données aux fichier */
|
/* (2) On ajoute les données aux fichier */
|
||||||
$json_data = json_encode($data);
|
$json_data = json_encode($data);
|
||||||
$this->driver->seek($this->line);
|
$this->driver->seek($this->line);
|
||||||
$written = $this->driver->fwrite( $json_data."\n" );
|
$this->line++;
|
||||||
|
$written = $this->driver->fwrite( $json_data.PHP_EOL );
|
||||||
|
|
||||||
// Si erreur d'écriture, on retourne FALSE
|
// Si erreur d'écriture, on retourne FALSE
|
||||||
if( is_null($written) )
|
if( is_null($written) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* (3) On enregistre l'index */
|
/* (3) On enregistre l'index */
|
||||||
$this->index[$key] = [ 'line' => $this->line++ ];
|
$this->index[$key] = [
|
||||||
|
'line' => $this->line - 1,
|
||||||
|
'hash' => sha1($json_data)
|
||||||
|
];
|
||||||
|
|
||||||
/* (4) On enregistre le fichier index */
|
/* (4) On enregistre le fichier index */
|
||||||
$fIndex = new \SplFileObject($this->dir.'index', 'w');
|
$fIndex = new \SplFileObject($this->dir.'index', 'w');
|
||||||
|
@ -168,13 +151,13 @@
|
||||||
foreach($dataset as $key=>$data){
|
foreach($dataset as $key=>$data){
|
||||||
$json_data = json_encode($data);
|
$json_data = json_encode($data);
|
||||||
$this->line++;
|
$this->line++;
|
||||||
$written = $this->driver->fwrite( $json_data."\n" );
|
$written = $this->driver->fwrite( $json_data.PHP_EOL );
|
||||||
|
|
||||||
|
|
||||||
/* (3) On enregistre les index */
|
/* (3) On enregistre les index */
|
||||||
$this->index[$key] = [
|
$this->index[$key] = [
|
||||||
'line' => $this->line - 1//,
|
'line' => $this->line - 1,
|
||||||
//'hash' => sha1($json_data)
|
'hash' => sha1($json_data)
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,7 +244,7 @@
|
||||||
public function delete($key){
|
public function delete($key){
|
||||||
/* (1) On vérifie l'existence de la clé */
|
/* (1) On vérifie l'existence de la clé */
|
||||||
if( !array_key_exists($key, $this->index) )
|
if( !array_key_exists($key, $this->index) )
|
||||||
return false; // On considère que l'action souhaitée est effectuée
|
return true; // On considère que l'action souhaitée est effectuée
|
||||||
|
|
||||||
$line = $this->index[$key]['line'];
|
$line = $this->index[$key]['line'];
|
||||||
|
|
||||||
|
@ -271,15 +254,12 @@
|
||||||
$this->driver->seek(0);
|
$this->driver->seek(0);
|
||||||
|
|
||||||
// On recopie toutes les lignes sauf celle à supprimer dans un fichier temporaire
|
// On recopie toutes les lignes sauf celle à supprimer dans un fichier temporaire
|
||||||
foreach($this->driver as $k=>$content){
|
while( $this->driver->key() < $this->line ){
|
||||||
// Only valuable lines (not the last linebreak)
|
|
||||||
if( $k >= $this->line )
|
|
||||||
break;
|
|
||||||
|
|
||||||
// On n'écrit pas la ligne à supprimer
|
if( $this->driver->key() != $line )
|
||||||
if( $k != $line )
|
$tmpfile->fwrite( $this->driver->current() );
|
||||||
$tmpfile->fwrite( $content );
|
|
||||||
|
|
||||||
|
$this->driver->next();
|
||||||
}
|
}
|
||||||
|
|
||||||
// On décrémente le nb de lignes
|
// On décrémente le nb de lignes
|
||||||
|
@ -333,9 +313,6 @@
|
||||||
$keyLines[$key] = $this->index[$key]['line'];
|
$keyLines[$key] = $this->index[$key]['line'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if( count($keyLines) == 0 )
|
|
||||||
return true;
|
|
||||||
|
|
||||||
/* [2] On trie les clés en fonction de leur ligne
|
/* [2] On trie les clés en fonction de leur ligne
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$sorted = [];
|
$sorted = [];
|
||||||
|
@ -366,14 +343,13 @@
|
||||||
$this->driver->seek(0);
|
$this->driver->seek(0);
|
||||||
|
|
||||||
/* (2) On recopie toutes les lignes sauf celles à supprimer dans un fichier temporaire */
|
/* (2) On recopie toutes les lignes sauf celles à supprimer dans un fichier temporaire */
|
||||||
foreach($this->driver as $key=>$content){
|
while( $this->driver->key() < $this->line ){
|
||||||
// Only valuable lines (not the last linebreak)
|
|
||||||
if( $key >= $this->line ) break;
|
|
||||||
|
|
||||||
// On n'écrit pas la ligne à supprimer
|
// Si la ligne en cours n'est pas dans la liste des lignes à supprimer
|
||||||
if( !in_array($key, $sorted) )
|
if( !in_array($this->driver->key(), $sorted) )
|
||||||
$tmpfile->fwrite( $content );
|
$tmpfile->fwrite( $this->driver->current() ); // On l'écrit dans le nouveau fichier
|
||||||
|
|
||||||
|
$this->driver->next();
|
||||||
}
|
}
|
||||||
|
|
||||||
$tmpfile = null;
|
$tmpfile = null;
|
||||||
|
@ -412,7 +388,46 @@
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* RENVOIE LES DONNEES ASSOCIEES A UN CHAMP DE RECHERCHE
|
||||||
|
*
|
||||||
|
* @nomParam<typeParam> Description du param
|
||||||
|
*
|
||||||
|
* @return nomRetour<typeRetour> Description du retour
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function filter($data){
|
||||||
|
/* (1) Si @data est un tableau associatif */
|
||||||
|
if( is_array($data) ){
|
||||||
|
|
||||||
|
$filtered = [];
|
||||||
|
foreach($this->index as $i=>$indexData){
|
||||||
|
$this->driver->seek( $indexData['line'] );
|
||||||
|
$dbData = json_decode( $this->driver->fgets(), true );
|
||||||
|
|
||||||
|
foreach($data as $key=>$value)
|
||||||
|
if( isset($dbData[$key]) && preg_match("#$value#", $dbData[$key]) ){
|
||||||
|
$filtered[$i] = $dbData;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $filtered;
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) Sinon on compare @data en tant que valeur simple */
|
||||||
|
}else{
|
||||||
|
|
||||||
|
$this->tmp = sha1( json_encode($data) );
|
||||||
|
return array_filter($this->index, [$this, 'simpleFilter']);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected function simpleFilter($e){ return $e['hash'] == $this->tmp; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,86 +0,0 @@
|
||||||
{"id":16,"name":"contact-x","sexe":"1","age":"6","studies2":"1","reltype":"1","dist":"1","job":"12","famsit":"1","city":"35","cp":"10025","quartier":"25","duration":["25","125"],"context":"11","contextExtra":["internet","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"0","irlfreq":["1","6","11","16","21"],"relmark":"0","medrel":"1"}
|
|
||||||
{"id":17,"name":"contact-1","sexe":"0","age":"6","studies2":"6","reltype":"6","dist":"2","job":"6","famsit":"2","city":"16","cp":"10006","quartier":"6","duration":["6","16"],"context":"6","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"1","irlfreq":["2","7","12","17","22"],"relmark":"1","medrel":"0"}
|
|
||||||
{"id":18,"name":"contact-2","sexe":"1","age":"7","studies2":"7","reltype":"autre","dist":"3","job":"7","famsit":"3","city":"17","cp":"10007","quartier":"7","duration":["7","17"],"context":"7","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"2","irlfreq":["3","8","13","18","23"],"relmark":"2","medrel":"1"}
|
|
||||||
{"id":19,"name":"contact-3","sexe":"2","age":"8","studies2":"0","reltype":"0","dist":"0","job":"8","famsit":"0","city":"18","cp":"10008","quartier":"8","duration":["8","18"],"context":"8","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"3","irlfreq":["0","5","10","15","20"],"relmark":"3","medrel":"2"}
|
|
||||||
{"id":20,"name":"contact-4","sexe":"0","age":"9","studies2":"1","reltype":"1","dist":"1","job":"9","famsit":"1","city":"19","cp":"10009","quartier":"9","duration":["9","19"],"context":"9","contextExtra":["","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"4","irlfreq":["1","6","11","16","21"],"relmark":"4","medrel":"0"}
|
|
||||||
{"id":21,"name":"contact-5","sexe":"1","age":"10","studies2":"2","reltype":"2","dist":"2","job":"10","famsit":"2","city":"20","cp":"10010","quartier":"10","duration":["10","110"],"context":"10","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"0","irlfreq":["2","7","12","17","22"],"relmark":"0","medrel":"1"}
|
|
||||||
{"id":22,"name":"contact-6","sexe":"2","age":"11","studies2":"3","reltype":"3","dist":"3","job":"11","famsit":"3","city":"21","cp":"10011","quartier":"11","duration":["11","111"],"context":"11","contextExtra":["internet","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"1","irlfreq":["3","8","13","18","23"],"relmark":"1","medrel":"2"}
|
|
||||||
{"id":23,"name":"contact-7","sexe":"0","age":"12","studies2":"4","reltype":"4","dist":"0","job":"12","famsit":"0","city":"22","cp":"10012","quartier":"12","duration":["12","112"],"context":"12","contextExtra":["","association",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"2","irlfreq":["0","5","10","15","20"],"relmark":"2","medrel":"0"}
|
|
||||||
{"id":24,"name":"contact-8","sexe":"1","age":"13","studies2":"5","reltype":"5","dist":"1","job":"0","famsit":"1","city":"23","cp":"10013","quartier":"13","duration":["13","113"],"context":"13","contextExtra":["","","autre"],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"3","irlfreq":["1","6","11","16","21"],"relmark":"3","medrel":"1"}
|
|
||||||
{"id":25,"name":"contact-9","sexe":"2","age":"14","studies2":"6","reltype":"6","dist":"2","job":"1","famsit":"2","city":"24","cp":"10014","quartier":"14","duration":["14","114"],"context":"0","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"4","irlfreq":["2","7","12","17","22"],"relmark":"4","medrel":"2"}
|
|
||||||
{"id":26,"name":"contact-10","sexe":"0","age":"15","studies2":"7","reltype":"autre","dist":"3","job":"2","famsit":"3","city":"25","cp":"10015","quartier":"15","duration":["15","115"],"context":"1","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"0","irlfreq":["3","8","13","18","23"],"relmark":"0","medrel":"0"}
|
|
||||||
{"id":27,"name":"contact-11","sexe":"1","age":"16","studies2":"0","reltype":"0","dist":"0","job":"3","famsit":"0","city":"26","cp":"10016","quartier":"16","duration":["16","116"],"context":"2","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"1","irlfreq":["0","5","10","15","20"],"relmark":"1","medrel":"1"}
|
|
||||||
{"id":28,"name":"contact-12","sexe":"2","age":"17","studies2":"1","reltype":"1","dist":"1","job":"4","famsit":"1","city":"27","cp":"10017","quartier":"17","duration":["17","117"],"context":"3","contextExtra":["","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"2","irlfreq":["1","6","11","16","21"],"relmark":"2","medrel":"2"}
|
|
||||||
{"id":29,"name":"contact-13","sexe":"0","age":"18","studies2":"2","reltype":"2","dist":"2","job":"5","famsit":"2","city":"28","cp":"10018","quartier":"18","duration":["18","118"],"context":"4","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"3","irlfreq":["2","7","12","17","22"],"relmark":"3","medrel":"0"}
|
|
||||||
{"id":30,"name":"contact-14","sexe":"1","age":"0","studies2":"3","reltype":"3","dist":"3","job":"6","famsit":"3","city":"29","cp":"10019","quartier":"19","duration":["19","119"],"context":"5","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"4","irlfreq":["3","8","13","18","23"],"relmark":"4","medrel":"1"}
|
|
||||||
{"id":31,"name":"contact-15","sexe":"2","age":"1","studies2":"4","reltype":"4","dist":"0","job":"7","famsit":"0","city":"30","cp":"10020","quartier":"20","duration":["20","120"],"context":"6","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"0","irlfreq":["0","5","10","15","20"],"relmark":"0","medrel":"2"}
|
|
||||||
{"id":32,"name":"contact-16","sexe":"0","age":"2","studies2":"5","reltype":"5","dist":"1","job":"8","famsit":"1","city":"31","cp":"10021","quartier":"21","duration":["21","121"],"context":"7","contextExtra":["","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"1","irlfreq":["1","6","11","16","21"],"relmark":"1","medrel":"0"}
|
|
||||||
{"id":33,"name":"contact-17","sexe":"1","age":"3","studies2":"6","reltype":"6","dist":"2","job":"9","famsit":"2","city":"32","cp":"10022","quartier":"22","duration":["22","122"],"context":"8","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"2","irlfreq":["2","7","12","17","22"],"relmark":"2","medrel":"1"}
|
|
||||||
{"id":34,"name":"contact-18","sexe":"2","age":"4","studies2":"7","reltype":"autre","dist":"3","job":"10","famsit":"3","city":"33","cp":"10023","quartier":"23","duration":["23","123"],"context":"9","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"3","irlfreq":["3","8","13","18","23"],"relmark":"3","medrel":"2"}
|
|
||||||
{"id":35,"name":"contact-19","sexe":"0","age":"5","studies2":"0","reltype":"0","dist":"0","job":"11","famsit":"0","city":"34","cp":"10024","quartier":"24","duration":["24","124"],"context":"10","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"4","irlfreq":["0","5","10","15","20"],"relmark":"4","medrel":"0"}
|
|
||||||
{"id":37,"name":"contact-21","sexe":"2","age":"7","studies2":"2","reltype":"2","dist":"2","job":"0","famsit":"2","city":"36","cp":"10026","quartier":"26","duration":["26","126"],"context":"12","contextExtra":["","association",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"1","irlfreq":["2","7","12","17","22"],"relmark":"1","medrel":"2"}
|
|
||||||
{"id":38,"name":"contact-22","sexe":"0","age":"8","studies2":"3","reltype":"3","dist":"3","job":"1","famsit":"3","city":"37","cp":"10027","quartier":"27","duration":["27","127"],"context":"13","contextExtra":["","","autre"],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"2","irlfreq":["3","8","13","18","23"],"relmark":"2","medrel":"0"}
|
|
||||||
{"id":39,"name":"contact-23","sexe":"1","age":"9","studies2":"4","reltype":"4","dist":"0","job":"2","famsit":"0","city":"38","cp":"10028","quartier":"28","duration":["28","128"],"context":"0","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"3","irlfreq":["0","5","10","15","20"],"relmark":"3","medrel":"1"}
|
|
||||||
{"id":40,"name":"contact-24","sexe":"2","age":"10","studies2":"5","reltype":"5","dist":"1","job":"3","famsit":"1","city":"39","cp":"10029","quartier":"29","duration":["29","129"],"context":"1","contextExtra":["","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"4","irlfreq":["1","6","11","16","21"],"relmark":"4","medrel":"2"}
|
|
||||||
{"id":41,"name":"contact-25","sexe":"0","age":"11","studies2":"6","reltype":"6","dist":"2","job":"4","famsit":"2","city":"40","cp":"10030","quartier":"30","duration":["30","130"],"context":"2","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"0","irlfreq":["2","7","12","17","22"],"relmark":"0","medrel":"0"}
|
|
||||||
{"id":42,"name":"contact-26","sexe":"1","age":"12","studies2":"7","reltype":"autre","dist":"3","job":"5","famsit":"3","city":"41","cp":"10031","quartier":"31","duration":["31","131"],"context":"3","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"1","irlfreq":["3","8","13","18","23"],"relmark":"1","medrel":"1"}
|
|
||||||
{"id":43,"name":"contact-27","sexe":"2","age":"13","studies2":"0","reltype":"0","dist":"0","job":"6","famsit":"0","city":"42","cp":"10032","quartier":"32","duration":["32","132"],"context":"4","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"2","irlfreq":["0","5","10","15","20"],"relmark":"2","medrel":"2"}
|
|
||||||
{"id":44,"name":"contact-28","sexe":"0","age":"14","studies2":"1","reltype":"1","dist":"1","job":"7","famsit":"1","city":"43","cp":"10033","quartier":"33","duration":["33","133"],"context":"5","contextExtra":["","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"3","irlfreq":["1","6","11","16","21"],"relmark":"3","medrel":"0"}
|
|
||||||
{"id":45,"name":"contact-29","sexe":"1","age":"15","studies2":"2","reltype":"2","dist":"2","job":"8","famsit":"2","city":"44","cp":"10034","quartier":"34","duration":["34","134"],"context":"6","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"4","irlfreq":["2","7","12","17","22"],"relmark":"4","medrel":"1"}
|
|
||||||
{"id":46,"name":"contact-30","sexe":"2","age":"16","studies2":"3","reltype":"3","dist":"3","job":"9","famsit":"3","city":"45","cp":"10035","quartier":"35","duration":["35","135"],"context":"7","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"0","irlfreq":["3","8","13","18","23"],"relmark":"0","medrel":"2"}
|
|
||||||
{"id":47,"name":"contact-31","sexe":"0","age":"17","studies2":"4","reltype":"4","dist":"0","job":"10","famsit":"0","city":"46","cp":"10036","quartier":"36","duration":["36","136"],"context":"8","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"1","irlfreq":["0","5","10","15","20"],"relmark":"1","medrel":"0"}
|
|
||||||
{"id":48,"name":"contact-32","sexe":"1","age":"18","studies2":"5","reltype":"5","dist":"1","job":"11","famsit":"1","city":"47","cp":"10037","quartier":"37","duration":["37","137"],"context":"9","contextExtra":["","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"2","irlfreq":["1","6","11","16","21"],"relmark":"2","medrel":"1"}
|
|
||||||
{"id":49,"name":"contact-33","sexe":"2","age":"0","studies2":"6","reltype":"6","dist":"2","job":"12","famsit":"2","city":"48","cp":"10038","quartier":"38","duration":["38","138"],"context":"10","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"3","irlfreq":["2","7","12","17","22"],"relmark":"3","medrel":"2"}
|
|
||||||
{"id":50,"name":"contact-34","sexe":"0","age":"1","studies2":"7","reltype":"autre","dist":"3","job":"0","famsit":"3","city":"49","cp":"10039","quartier":"39","duration":["39","139"],"context":"11","contextExtra":["internet","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"4","irlfreq":["3","8","13","18","23"],"relmark":"4","medrel":"0"}
|
|
||||||
{"id":51,"name":"contact-35","sexe":"1","age":"2","studies2":"0","reltype":"0","dist":"0","job":"1","famsit":"0","city":"50","cp":"10040","quartier":"40","duration":["40","140"],"context":"12","contextExtra":["","association",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"0","irlfreq":["0","5","10","15","20"],"relmark":"0","medrel":"1"}
|
|
||||||
{"id":52,"name":"contact-36","sexe":"2","age":"3","studies2":"1","reltype":"1","dist":"1","job":"2","famsit":"1","city":"51","cp":"10041","quartier":"41","duration":["41","141"],"context":"13","contextExtra":["","","autre"],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"1","irlfreq":["1","6","11","16","21"],"relmark":"1","medrel":"2"}
|
|
||||||
{"id":53,"name":"contact-37","sexe":"0","age":"4","studies2":"2","reltype":"2","dist":"2","job":"3","famsit":"2","city":"52","cp":"10042","quartier":"42","duration":["42","142"],"context":"0","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"2","irlfreq":["2","7","12","17","22"],"relmark":"2","medrel":"0"}
|
|
||||||
{"id":54,"name":"contact-38","sexe":"1","age":"5","studies2":"3","reltype":"3","dist":"3","job":"4","famsit":"3","city":"53","cp":"10043","quartier":"43","duration":["43","143"],"context":"1","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"3","irlfreq":["3","8","13","18","23"],"relmark":"3","medrel":"1"}
|
|
||||||
{"id":55,"name":"contact-39","sexe":"2","age":"6","studies2":"4","reltype":"4","dist":"0","job":"5","famsit":"0","city":"54","cp":"10044","quartier":"44","duration":["44","144"],"context":"2","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"4","irlfreq":["0","5","10","15","20"],"relmark":"4","medrel":"2"}
|
|
||||||
{"id":57,"name":"contact-41","sexe":"1","age":"","studies1":"2","reltype":"1","dist":"0"}
|
|
||||||
{"id":58,"name":"contact-42","sexe":"0","age":"2","studies1":"3","reltype":"2","dist":"1"}
|
|
||||||
{"id":59,"name":"contact-43","sexe":"1","age":"3","studies1":"4","reltype":"3","dist":"2"}
|
|
||||||
{"id":60,"name":"contact-44","sexe":"0","age":"4","studies1":"5","reltype":"4","dist":"3"}
|
|
||||||
{"id":63,"name":"contact-x","sexe":"1","age":"6","studies2":"1","reltype":"1","dist":"1","job":"12","famsit":"1","city":"35","cp":"10025","quartier":"25","duration":["25","125"],"context":"11","contextExtra":["internet","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"0","irlfreq":["1","6","11","16","21"],"relmark":"0","medrel":"1"}
|
|
||||||
{"id":64,"name":"contact-1","sexe":"0","age":"6","studies2":"6","reltype":"6","dist":"2","job":"6","famsit":"2","city":"16","cp":"10006","quartier":"6","duration":["6","16"],"context":"6","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"1","irlfreq":["2","7","12","17","22"],"relmark":"1","medrel":"0"}
|
|
||||||
{"id":65,"name":"contact-2","sexe":"1","age":"7","studies2":"7","reltype":"autre","dist":"3","job":"7","famsit":"3","city":"17","cp":"10007","quartier":"7","duration":["7","17"],"context":"7","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"2","irlfreq":["3","8","13","18","23"],"relmark":"2","medrel":"1"}
|
|
||||||
{"id":66,"name":"contact-3","sexe":"2","age":"8","studies2":"0","reltype":"0","dist":"0","job":"8","famsit":"0","city":"18","cp":"10008","quartier":"8","duration":["8","18"],"context":"8","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"3","irlfreq":["0","5","10","15","20"],"relmark":"3","medrel":"2"}
|
|
||||||
{"id":67,"name":"contact-4","sexe":"0","age":"9","studies2":"1","reltype":"1","dist":"1","job":"9","famsit":"1","city":"19","cp":"10009","quartier":"9","duration":["9","19"],"context":"9","contextExtra":["","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"4","irlfreq":["1","6","11","16","21"],"relmark":"4","medrel":"0"}
|
|
||||||
{"id":68,"name":"contact-5","sexe":"1","age":"10","studies2":"2","reltype":"2","dist":"2","job":"10","famsit":"2","city":"20","cp":"10010","quartier":"10","duration":["10","110"],"context":"10","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"0","irlfreq":["2","7","12","17","22"],"relmark":"0","medrel":"1"}
|
|
||||||
{"id":69,"name":"contact-6","sexe":"2","age":"11","studies2":"3","reltype":"3","dist":"3","job":"11","famsit":"3","city":"21","cp":"10011","quartier":"11","duration":["11","111"],"context":"11","contextExtra":["internet","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"1","irlfreq":["3","8","13","18","23"],"relmark":"1","medrel":"2"}
|
|
||||||
{"id":70,"name":"contact-7","sexe":"0","age":"12","studies2":"4","reltype":"4","dist":"0","job":"12","famsit":"0","city":"22","cp":"10012","quartier":"12","duration":["12","112"],"context":"12","contextExtra":["","association",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"2","irlfreq":["0","5","10","15","20"],"relmark":"2","medrel":"0"}
|
|
||||||
{"id":71,"name":"contact-8","sexe":"1","age":"13","studies2":"5","reltype":"5","dist":"1","job":"0","famsit":"1","city":"23","cp":"10013","quartier":"13","duration":["13","113"],"context":"13","contextExtra":["","","autre"],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"3","irlfreq":["1","6","11","16","21"],"relmark":"3","medrel":"1"}
|
|
||||||
{"id":72,"name":"contact-9","sexe":"2","age":"14","studies2":"6","reltype":"6","dist":"2","job":"1","famsit":"2","city":"24","cp":"10014","quartier":"14","duration":["14","114"],"context":"0","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"4","irlfreq":["2","7","12","17","22"],"relmark":"4","medrel":"2"}
|
|
||||||
{"id":73,"name":"contact-10","sexe":"0","age":"15","studies2":"7","reltype":"autre","dist":"3","job":"2","famsit":"3","city":"25","cp":"10015","quartier":"15","duration":["15","115"],"context":"1","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"0","irlfreq":["3","8","13","18","23"],"relmark":"0","medrel":"0"}
|
|
||||||
{"id":74,"name":"contact-11","sexe":"1","age":"16","studies2":"0","reltype":"0","dist":"0","job":"3","famsit":"0","city":"26","cp":"10016","quartier":"16","duration":["16","116"],"context":"2","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"1","irlfreq":["0","5","10","15","20"],"relmark":"1","medrel":"1"}
|
|
||||||
{"id":75,"name":"contact-12","sexe":"2","age":"17","studies2":"1","reltype":"1","dist":"1","job":"4","famsit":"1","city":"27","cp":"10017","quartier":"17","duration":["17","117"],"context":"3","contextExtra":["","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"2","irlfreq":["1","6","11","16","21"],"relmark":"2","medrel":"2"}
|
|
||||||
{"id":76,"name":"contact-13","sexe":"0","age":"18","studies2":"2","reltype":"2","dist":"2","job":"5","famsit":"2","city":"28","cp":"10018","quartier":"18","duration":["18","118"],"context":"4","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"3","irlfreq":["2","7","12","17","22"],"relmark":"3","medrel":"0"}
|
|
||||||
{"id":77,"name":"contact-14","sexe":"1","age":"0","studies2":"3","reltype":"3","dist":"3","job":"6","famsit":"3","city":"29","cp":"10019","quartier":"19","duration":["19","119"],"context":"5","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"4","irlfreq":["3","8","13","18","23"],"relmark":"4","medrel":"1"}
|
|
||||||
{"id":78,"name":"contact-15","sexe":"2","age":"1","studies2":"4","reltype":"4","dist":"0","job":"7","famsit":"0","city":"30","cp":"10020","quartier":"20","duration":["20","120"],"context":"6","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"0","irlfreq":["0","5","10","15","20"],"relmark":"0","medrel":"2"}
|
|
||||||
{"id":79,"name":"contact-16","sexe":"0","age":"2","studies2":"5","reltype":"5","dist":"1","job":"8","famsit":"1","city":"31","cp":"10021","quartier":"21","duration":["21","121"],"context":"7","contextExtra":["","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"1","irlfreq":["1","6","11","16","21"],"relmark":"1","medrel":"0"}
|
|
||||||
{"id":80,"name":"contact-17","sexe":"1","age":"3","studies2":"6","reltype":"6","dist":"2","job":"9","famsit":"2","city":"32","cp":"10022","quartier":"22","duration":["22","122"],"context":"8","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"2","irlfreq":["2","7","12","17","22"],"relmark":"2","medrel":"1"}
|
|
||||||
{"id":81,"name":"contact-18","sexe":"2","age":"4","studies2":"7","reltype":"autre","dist":"3","job":"10","famsit":"3","city":"33","cp":"10023","quartier":"23","duration":["23","123"],"context":"9","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"3","irlfreq":["3","8","13","18","23"],"relmark":"3","medrel":"2"}
|
|
||||||
{"id":82,"name":"contact-19","sexe":"0","age":"5","studies2":"0","reltype":"0","dist":"0","job":"11","famsit":"0","city":"34","cp":"10024","quartier":"24","duration":["24","124"],"context":"10","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"4","irlfreq":["0","5","10","15","20"],"relmark":"4","medrel":"0"}
|
|
||||||
{"id":84,"name":"contact-21","sexe":"2","age":"7","studies2":"2","reltype":"2","dist":"2","job":"0","famsit":"2","city":"36","cp":"10026","quartier":"26","duration":["26","126"],"context":"12","contextExtra":["","association",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"1","irlfreq":["2","7","12","17","22"],"relmark":"1","medrel":"2"}
|
|
||||||
{"id":85,"name":"contact-22","sexe":"0","age":"8","studies2":"3","reltype":"3","dist":"3","job":"1","famsit":"3","city":"37","cp":"10027","quartier":"27","duration":["27","127"],"context":"13","contextExtra":["","","autre"],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"2","irlfreq":["3","8","13","18","23"],"relmark":"2","medrel":"0"}
|
|
||||||
{"id":86,"name":"contact-23","sexe":"1","age":"9","studies2":"4","reltype":"4","dist":"0","job":"2","famsit":"0","city":"38","cp":"10028","quartier":"28","duration":["28","128"],"context":"0","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"3","irlfreq":["0","5","10","15","20"],"relmark":"3","medrel":"1"}
|
|
||||||
{"id":87,"name":"contact-24","sexe":"2","age":"10","studies2":"5","reltype":"5","dist":"1","job":"3","famsit":"1","city":"39","cp":"10029","quartier":"29","duration":["29","129"],"context":"1","contextExtra":["","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"4","irlfreq":["1","6","11","16","21"],"relmark":"4","medrel":"2"}
|
|
||||||
{"id":88,"name":"contact-25","sexe":"0","age":"11","studies2":"6","reltype":"6","dist":"2","job":"4","famsit":"2","city":"40","cp":"10030","quartier":"30","duration":["30","130"],"context":"2","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"0","irlfreq":["2","7","12","17","22"],"relmark":"0","medrel":"0"}
|
|
||||||
{"id":89,"name":"contact-26","sexe":"1","age":"12","studies2":"7","reltype":"autre","dist":"3","job":"5","famsit":"3","city":"41","cp":"10031","quartier":"31","duration":["31","131"],"context":"3","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"1","irlfreq":["3","8","13","18","23"],"relmark":"1","medrel":"1"}
|
|
||||||
{"id":90,"name":"contact-27","sexe":"2","age":"13","studies2":"0","reltype":"0","dist":"0","job":"6","famsit":"0","city":"42","cp":"10032","quartier":"32","duration":["32","132"],"context":"4","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"2","irlfreq":["0","5","10","15","20"],"relmark":"2","medrel":"2"}
|
|
||||||
{"id":91,"name":"contact-28","sexe":"0","age":"14","studies2":"1","reltype":"1","dist":"1","job":"7","famsit":"1","city":"43","cp":"10033","quartier":"33","duration":["33","133"],"context":"5","contextExtra":["","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"3","irlfreq":["1","6","11","16","21"],"relmark":"3","medrel":"0"}
|
|
||||||
{"id":92,"name":"contact-29","sexe":"1","age":"15","studies2":"2","reltype":"2","dist":"2","job":"8","famsit":"2","city":"44","cp":"10034","quartier":"34","duration":["34","134"],"context":"6","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"4","irlfreq":["2","7","12","17","22"],"relmark":"4","medrel":"1"}
|
|
||||||
{"id":93,"name":"contact-30","sexe":"2","age":"16","studies2":"3","reltype":"3","dist":"3","job":"9","famsit":"3","city":"45","cp":"10035","quartier":"35","duration":["35","135"],"context":"7","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"0","irlfreq":["3","8","13","18","23"],"relmark":"0","medrel":"2"}
|
|
||||||
{"id":94,"name":"contact-31","sexe":"0","age":"17","studies2":"4","reltype":"4","dist":"0","job":"10","famsit":"0","city":"46","cp":"10036","quartier":"36","duration":["36","136"],"context":"8","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"1","irlfreq":["0","5","10","15","20"],"relmark":"1","medrel":"0"}
|
|
||||||
{"id":95,"name":"contact-32","sexe":"1","age":"18","studies2":"5","reltype":"5","dist":"1","job":"11","famsit":"1","city":"47","cp":"10037","quartier":"37","duration":["37","137"],"context":"9","contextExtra":["","",""],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"2","irlfreq":["1","6","11","16","21"],"relmark":"2","medrel":"1"}
|
|
||||||
{"id":96,"name":"contact-33","sexe":"2","age":"0","studies2":"6","reltype":"6","dist":"2","job":"12","famsit":"2","city":"48","cp":"10038","quartier":"38","duration":["38","138"],"context":"10","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"3","irlfreq":["2","7","12","17","22"],"relmark":"3","medrel":"2"}
|
|
||||||
{"id":97,"name":"contact-34","sexe":"0","age":"1","studies2":"7","reltype":"autre","dist":"3","job":"0","famsit":"3","city":"49","cp":"10039","quartier":"39","duration":["39","139"],"context":"11","contextExtra":["internet","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"4","irlfreq":["3","8","13","18","23"],"relmark":"4","medrel":"0"}
|
|
||||||
{"id":98,"name":"contact-35","sexe":"1","age":"2","studies2":"0","reltype":"0","dist":"0","job":"1","famsit":"0","city":"50","cp":"10040","quartier":"40","duration":["40","140"],"context":"12","contextExtra":["","association",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"0","irlfreq":["0","5","10","15","20"],"relmark":"0","medrel":"1"}
|
|
||||||
{"id":99,"name":"contact-36","sexe":"2","age":"3","studies2":"1","reltype":"1","dist":"1","job":"2","famsit":"1","city":"51","cp":"10041","quartier":"41","duration":["41","141"],"context":"13","contextExtra":["","","autre"],"freq":["1","6","11","16","21"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"1","interest":"1","irlfreq":["1","6","11","16","21"],"relmark":"1","medrel":"2"}
|
|
||||||
{"id":100,"name":"contact-37","sexe":"0","age":"4","studies2":"2","reltype":"2","dist":"2","job":"3","famsit":"2","city":"52","cp":"10042","quartier":"42","duration":["42","142"],"context":"0","contextExtra":["","",""],"freq":["2","7","12","17","22"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"2","interest":"2","irlfreq":["2","7","12","17","22"],"relmark":"2","medrel":"0"}
|
|
||||||
{"id":101,"name":"contact-38","sexe":"1","age":"5","studies2":"3","reltype":"3","dist":"3","job":"4","famsit":"3","city":"53","cp":"10043","quartier":"43","duration":["43","143"],"context":"1","contextExtra":["","",""],"freq":["3","8","13","18","23"],"connect":["1","3","5","7","9","11"],"connectExtra":["",""],"medsoc":"3","interest":"3","irlfreq":["3","8","13","18","23"],"relmark":"3","medrel":"1"}
|
|
||||||
{"id":102,"name":"contact-39","sexe":"2","age":"6","studies2":"4","reltype":"4","dist":"0","job":"5","famsit":"0","city":"54","cp":"10044","quartier":"44","duration":["44","144"],"context":"2","contextExtra":["","",""],"freq":["0","5","10","15","20"],"connect":["0","2","4","6","8","10"],"connectExtra":["",""],"medsoc":"0","interest":"4","irlfreq":["0","5","10","15","20"],"relmark":"4","medrel":"2"}
|
|
||||||
{"id":104,"name":"contact-41","sexe":"1","age":"","studies1":"2","reltype":"1","dist":"0"}
|
|
||||||
{"id":105,"name":"contact-42","sexe":"0","age":"2","studies1":"3","reltype":"2","dist":"1"}
|
|
||||||
{"id":106,"name":"contact-43","sexe":"1","age":"3","studies1":"4","reltype":"3","dist":"2"}
|
|
||||||
{"id":107,"name":"contact-44","sexe":"0","age":"4","studies1":"5","reltype":"4","dist":"3"}
|
|
|
@ -1 +0,0 @@
|
||||||
{"16":{"line":0},"17":{"line":1},"18":{"line":2},"19":{"line":3},"20":{"line":4},"21":{"line":5},"22":{"line":6},"23":{"line":7},"24":{"line":8},"25":{"line":9},"26":{"line":10},"27":{"line":11},"28":{"line":12},"29":{"line":13},"30":{"line":14},"31":{"line":15},"32":{"line":16},"33":{"line":17},"34":{"line":18},"35":{"line":19},"37":{"line":20},"38":{"line":21},"39":{"line":22},"40":{"line":23},"41":{"line":24},"42":{"line":25},"43":{"line":26},"44":{"line":27},"45":{"line":28},"46":{"line":29},"47":{"line":30},"48":{"line":31},"49":{"line":32},"50":{"line":33},"51":{"line":34},"52":{"line":35},"53":{"line":36},"54":{"line":37},"55":{"line":38},"57":{"line":39},"58":{"line":40},"59":{"line":41},"60":{"line":42},"63":{"line":43},"64":{"line":44},"65":{"line":45},"66":{"line":46},"67":{"line":47},"68":{"line":48},"69":{"line":49},"70":{"line":50},"71":{"line":51},"72":{"line":52},"73":{"line":53},"74":{"line":54},"75":{"line":55},"76":{"line":56},"77":{"line":57},"78":{"line":58},"79":{"line":59},"80":{"line":60},"81":{"line":61},"82":{"line":62},"84":{"line":63},"85":{"line":64},"86":{"line":65},"87":{"line":66},"88":{"line":67},"89":{"line":68},"90":{"line":69},"91":{"line":70},"92":{"line":71},"93":{"line":72},"94":{"line":73},"95":{"line":74},"96":{"line":75},"97":{"line":76},"98":{"line":77},"99":{"line":78},"100":{"line":79},"101":{"line":80},"102":{"line":81},"104":{"line":82},"105":{"line":83},"106":{"line":84},"107":{"line":85}}
|
|
|
@ -7,53 +7,10 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
"questions": {
|
|
||||||
"sexe": { "x": "Civilité" },
|
|
||||||
"age": { "x": "Age" },
|
|
||||||
"studies1": { "x": "Niveau d'études maximal (fiche rapide)" },
|
|
||||||
"studies2": { "x": "Niveau d'études maximal (fiche complète)" },
|
|
||||||
"job": { "x": "Dernière profession exercée" },
|
|
||||||
"city": { "x": "Où habite t-elle/il ? (ville)" },
|
|
||||||
"cp": { "x": "Où habite t-elle/il ? (code postal)" },
|
|
||||||
"quartier": { "x": "Où habite t-elle/il ? (quartier)" },
|
|
||||||
"context": { "x": "Contexte de rencontre" },
|
|
||||||
"contextExtra": { "0": "Internet (quel contexte ? préciser)",
|
|
||||||
"1": "Par une association (quel type ? préciser)",
|
|
||||||
"2": "Autre" },
|
|
||||||
"famsit": { "x": "Situation familiale" },
|
|
||||||
"reltype": { "x": "Type de relation" },
|
|
||||||
"dist": { "x": "À combien de temps est-ce de chez vous (en voiture) ? (si deux domiciles, le plus proche)" },
|
|
||||||
"duration": { "0": "Depuis quand connaissez-vous cette personne ? (mois)",
|
|
||||||
"1": "Depuis quand connaissez-vous cette personne ? (années)" },
|
|
||||||
"freq": { "0": "Avec quelle fréquence discutez-vous avec cette personne face à face ?",
|
|
||||||
"1": "Avec quelle fréquence discutez-vous avec cette personne via téléphone ou skype et équivalent ?",
|
|
||||||
"2": "Avec quelle fréquence discutez-vous avec cette personne via SMS et équivalents ?",
|
|
||||||
"3": "Avec quelle fréquence discutez-vous avec cette personne via courrier éléctronique ?",
|
|
||||||
"4": "Avec quelle fréquence discutez-vous avec cette personne via facebook ou autre réseau social ?" },
|
|
||||||
"irlfreq": { "0": "Selon vous, à quelle fréquence cette personne publie des commentaires personnels ou réagit aux publications des autres ?",
|
|
||||||
"1": "Selon vous, à quelle fréquence cette personne publie des photos personnelles (profil, voyages, etc.) ?",
|
|
||||||
"2": "Selon vous, à quelle fréquence cette personne partage de la musique ou des clips musicaux ?",
|
|
||||||
"3": "Selon vous, à quelle fréquence cette personne partage des informations culturelles (concert, exposition, etc.) ?",
|
|
||||||
"4": "Selon vous, à quelle fréquence cette personne partage des articles, des informations, des contenus avec une portée politique ?" },
|
|
||||||
"connect": { "0": "Ses coordonnées sont dans votre carnet d'adresse",
|
|
||||||
"1": "Son numéro de mobile est enregistré sur votre mobile (ou vous-mêmes êtes sur le sien)",
|
|
||||||
"2": "Elle figure parmi vos amis facebook (idem)",
|
|
||||||
"3": "Elle figure parmi vos amis facebook et vous interagissez avec elle sur ce dispositif régulièrement (idem)",
|
|
||||||
"4": "Vous le suivez sur Twitter (ou elle vous suit)",
|
|
||||||
"5": "Vous communiquez avec cette personne sur Twitter (idem)" },
|
|
||||||
"connectExtra": { "0": "Vous communiquez dans autre réseau",
|
|
||||||
"1": "Vous communiquez dans un autre dispositif (blogs, jeu vidéo ou autre)" },
|
|
||||||
"medsoc": { "x": "Comment cette personne utilise-t-elle les médias sociaux de votre point de vue ?" },
|
|
||||||
"medrel": { "x": "Considérez-vous que vos échange avec cette personne à travers les médias sociaux" },
|
|
||||||
"interest": { "x": "Sur une échelle de 1 à 5, préciser l'intérêt que vous accordez aux contenue qu'elle partage via les médias sociaux" },
|
|
||||||
"relmark": { "x": "Sur une échelle de 1 à 5, comment jugez-vous votre relation à cette personne ?" }
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"contacts": {
|
"contacts": {
|
||||||
|
|
||||||
"sexe": { "0":"Homme", "1":"Femme", "2":"Indéterminé" },
|
"sexe": { "0":"Homme", "1":"Femme", "2":"Indéterminé" },
|
||||||
"age": {
|
"age": {
|
||||||
".": "NA",
|
".": "NA",
|
||||||
|
@ -74,32 +31,49 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
"studies2": {
|
"studies2": {
|
||||||
".": "NA",
|
".": "NA",
|
||||||
"0": "Aucun diplôme, CEP, BEPC",
|
"0": "Inconnue",
|
||||||
"1": "CAP, CAPA, BEP, BEPA, Brevet de compagnon, Diplômes sociaux (aide-soignante, auxiliaire de puériculture, travailleuse familiale)",
|
"01": "Pas de scolarité",
|
||||||
"2": "Bac technologique ou professionnel, brevet professionnel ou de technicien",
|
"02": "Aucun diplôme mais scolarité jusqu'en école primaire ou au collège",
|
||||||
"3": "Baccalauréat général, brevet supérieur",
|
"03": "Aucun diplôme mais scolarité au-delà du collège",
|
||||||
"4": "Diplôme universitaire de 1er cycle: Licence, BTS, DUT",
|
"04": "Certificat d'études primaires (CEP)",
|
||||||
"5": "Diplôme universitaire de 2ème cycle : MASTER, Maîtrise ou DEA, CAPES",
|
"05": "BEPC, brevet élémentaire, brevet des collèges",
|
||||||
"6": "Doctorat (y compris médecine, pharmacie, dentaire)",
|
"06": "Certificat d'aptitudes professionnelles (CAP), brevet de compagnon, y compris CAPA",
|
||||||
"7": "Diplôme d'ingénieur, diplôme d'une grande école de commerce"
|
"07": "Brevet d'études professionnelles (BEP), y compris BEPA et diplômes agricoles (BAA, BPA) Diplômes sociaux (aide-soignante, auxiliaire de puériculture, travailleuse familiale)",
|
||||||
|
"08": "Baccalauréat général, brevet supérieur BAC ( L, ES, S ou A, B , C, D, D’, E )",
|
||||||
|
"09": "Bac technologique ou professionnel, brevet professionnel ou de technicien BAC (STI, STL, SMS, STT ou F, G, H) BEC, BEI, BEH, capacité en droit Brevet de technicien agricole (BTA)",
|
||||||
|
"10": "Diplôme universitaire de 1er cycle BTS, DUT, DEUG Diplôme des professions sociales ou de santé, d'infirmier(ère) Diplôme universitaire propédeutique, DUEL, DUES, DEUG, PCEM",
|
||||||
|
"11": "Diplôme universitaire de 2ème ou 3ème cycle MASTER, DOCTORAT (y compris médecine, pharmacie, dentaire), Maîtrise, DEA, DESS, CAPES, CAPET, agrégation Diplôme d'ingénieur, d'une grande école, etc."
|
||||||
},
|
},
|
||||||
|
|
||||||
"job": {
|
"job": {
|
||||||
".": "NA",
|
".": "NA",
|
||||||
"0": "Agriculateur exploitants",
|
"10": "Agriculteurs exploitants (Agriculteurs, maraîchers, viticulteurs…)",
|
||||||
"1": "Artisans",
|
"21": "Artisans (Maçons, électriciens, couturiers, boulangers, garagistes, coiffeurs…)",
|
||||||
"2": "Commerçants et assimilés",
|
"22": "Commerçants et assimilés (Commerçants en détail ou en gros, buralistes, cafetiers, agents immobiliers…)",
|
||||||
"3": "Chefs d'entreprise de 10 salariés ou plus",
|
"23": "Chefs d'entreprise de 10 salariés ou plus",
|
||||||
"4": "Professions libérales et assimilés",
|
"31": "Professions libérales et assimilés (Médecins, avocats, notaires, architectes libéraux…)",
|
||||||
"5": "Cadres de la fonction publique, professions intellectuelles et artistiques",
|
"32": "Cadres de la fonction publique, professions intellectuelles et artistiques (Personnels administratifs de catégorie A, professeurs de l’enseignement secondaire ou supérieur, médecins hospitaliers, artistes…)",
|
||||||
"6": "Cadres d'entreprise",
|
"36": "Cadres d'entreprise (Cadres administratifs, cadres commerciaux, ingénieurs…)",
|
||||||
"7": "Professions intermétiaires de l'enseignement, de la santé, de la fonction publique et assimilés",
|
"41": "Professions intermédiaires de l'enseignement, de la santé, de la fonction publique et assimilés (Personnels administratifs de catégorie B, instituteurs, infirmiers, travailleurs sociaux…)",
|
||||||
"8": "Professions intermédiaires administratives et commerciales des entreprises",
|
"46": "Professions intermédiaires administratives et commerciales des entreprises (Comptables, chargés de clientèles…)",
|
||||||
"9": "Techniciens",
|
"47": "Techniciens (Techniciens d’études, techniciens de contrôle, dessinateurs en bâtiment, géomètres…)",
|
||||||
"10": "Contremaîtres, agents de maîtrise",
|
"48": "Contremaîtres, agents de maîtrise (Conducteurs de travaux, chefs d’équipe…)",
|
||||||
"11": "Employés",
|
"51": "Employés de la fonction publique (Personnels de catégorie C, agents administratifs, agents de service…)",
|
||||||
"12": "Ouvriers"
|
"54": "Employés administratifs d'entreprise (Secrétaires, agents d’accueil…)",
|
||||||
|
"55": "Employés de commerce (Vendeurs, caissiers…)",
|
||||||
|
"56": "Personnels des services directs aux particuliers (Serveurs, coiffeurs, assistantes maternelles…)",
|
||||||
|
"61": "Ouvriers qualifiés de type industriel ou artisanal (Mécaniciens, chauffeurs, cuisiniers…)",
|
||||||
|
"66": "Ouvriers non qualifiés de type industriel ou artisanal (Ouvrier de production, manœuvres…)",
|
||||||
|
"69": "Ouvriers agricoles (Bergers, ouvriers de la viticulture, bûcherons, ouvrier forestiers…)",
|
||||||
|
"71": "Anciens agriculteurs exploitants",
|
||||||
|
"72": "Anciens artisans, commerçants, chefs d'entreprise",
|
||||||
|
"73": "Anciens cadres",
|
||||||
|
"74": "Anciennes professions intermédiaires",
|
||||||
|
"75": "Anciens employés",
|
||||||
|
"76": "Anciens ouvriers",
|
||||||
|
"81": "Chômeurs n'ayant jamais travaillé",
|
||||||
|
"82": "Inactifs divers (autres que retraités)"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
@ -127,6 +101,8 @@
|
||||||
"3": "En couple avec enfants"
|
"3": "En couple avec enfants"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"reltype": {
|
"reltype": {
|
||||||
"0": "Père, mère ou équivalent",
|
"0": "Père, mère ou équivalent",
|
||||||
"1": "Frère ou soeur",
|
"1": "Frère ou soeur",
|
||||||
|
@ -156,46 +132,9 @@
|
||||||
"4": "Jamais"
|
"4": "Jamais"
|
||||||
},
|
},
|
||||||
|
|
||||||
"irlfreq": {
|
|
||||||
"0": "plusieurs fois par semaine",
|
|
||||||
"1": "1 fois par semaine",
|
|
||||||
"2": "1 fois par mois",
|
|
||||||
"3": "1 fois par an ou moins",
|
|
||||||
"4": "Jamais"
|
|
||||||
},
|
|
||||||
|
|
||||||
"connect": {
|
"connect": {
|
||||||
"0": "Oui",
|
"0": "Oui",
|
||||||
"1": "Non"
|
"1": "Non"
|
||||||
},
|
|
||||||
|
|
||||||
"medsoc": {
|
|
||||||
"0": "D'une personne qui n'utilise pas ou peu les médias sociaux",
|
|
||||||
"1": "D'une personne qui consulte des publications mais partage peu de contenus",
|
|
||||||
"2": "D'une personne qui consulte des publication et partage des contenus de temps en temps",
|
|
||||||
"3": "D'une personne qui partage beaucoup de contenus et s'exprime fréquemment"
|
|
||||||
},
|
|
||||||
|
|
||||||
"medrel": {
|
|
||||||
"0": "N'ont aucun effet sur votre relation",
|
|
||||||
"1": "Vous ont rapproché d'elle",
|
|
||||||
"2": "Vous ont éloigné d'elle"
|
|
||||||
},
|
|
||||||
|
|
||||||
"interest": {
|
|
||||||
"0": "1",
|
|
||||||
"1": "2",
|
|
||||||
"2": "3",
|
|
||||||
"3": "4",
|
|
||||||
"4": "5"
|
|
||||||
},
|
|
||||||
|
|
||||||
"relmark": {
|
|
||||||
"0": "1",
|
|
||||||
"1": "2",
|
|
||||||
"2": "3",
|
|
||||||
"3": "4",
|
|
||||||
"4": "5"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
||||||
|
{"1":{"line":0,"hash":"ae55953b70b63b6665ea13aef65aef8da8b8c834"},"3":{"line":1,"hash":"e264f35e79e354f1dcadc0bc6b9c2b07dc214ee2"}}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
||||||
|
{"3":{"line":0,"hash":"e9aff02e50eb56a848c3580c8a119a5cbe0ec64b"}}
|
File diff suppressed because one or more lines are too long
|
@ -1,7 +0,0 @@
|
||||||
Contient les équivalences :
|
|
||||||
|
|
||||||
id_subject => {
|
|
||||||
"subject": [données du sujet]
|
|
||||||
"contact": [liste des id des contacts],
|
|
||||||
"relations": [liste des relations]
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
{"2":{"line":0},"4":{"line":1},"5":{"line":2},"6":{"line":3},"7":{"line":4},"8":{"line":5},"9":{"line":6},"10":{"line":7},"11":{"line":8},"12":{"line":9},"13":{"line":10},"14":{"line":11},"15":{"line":12},"1":{"line":13},"3":{"line":14}}
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
{"subject":{"id":1,"name":"Caroline","creation":1464788890}}
|
||||||
|
{"subject":{"id":2,"name":"Cl\u00e9ment","creation":1464788893}}
|
||||||
|
{"subject":{"id":3,"name":"Coralie","creation":1464788897}}
|
||||||
|
{"subject":{"id":4,"name":"Laurent","creation":1464788899}}
|
||||||
|
{"subject":{"id":5,"name":"Emilie","creation":1464788903}}
|
||||||
|
{"subject":{"id":6,"name":"C\u00e9line","creation":1464788905}}
|
||||||
|
{"subject":{"id":7,"name":"Pierre","creation":1464788908}}
|
||||||
|
{"subject":{"id":8,"name":"Boris","creation":1464788910}}
|
|
@ -0,0 +1 @@
|
||||||
|
{"1":{"line":0,"hash":"9798c2b945e222c48bff804d9819c0d98e88d257"},"2":{"line":1,"hash":"8192621a7f0013e137e63edffdadea6ab7f69565"},"3":{"line":2,"hash":"a7b9d5cf6cfb41c0b100d91d053032bdad3a80da"},"4":{"line":3,"hash":"ef73002b8217c3c3b87a62b8ae4c69b3994c114f"},"5":{"line":4,"hash":"5cf77d4e920f1b418bf78484bc1766fb84baabb9"},"6":{"line":5,"hash":"356e841ad04cb0f553fe47eab88bf550d6853c60"},"7":{"line":6,"hash":"7d070210aed5df40ee7e2ca4b54f29c672d32a89"},"8":{"line":7,"hash":"9e4936de2cf03d46135bbac3589a1e3ce68fb406"}}
|
|
@ -1 +1 @@
|
||||||
107
|
3901
|
|
@ -75,9 +75,6 @@
|
||||||
/* Erreur au niveau javascript */
|
/* Erreur au niveau javascript */
|
||||||
//const JavascriptError = 19; // -> géré en js
|
//const JavascriptError = 19; // -> géré en js
|
||||||
|
|
||||||
// Already done error
|
|
||||||
const Already = 20;
|
|
||||||
|
|
||||||
|
|
||||||
/* EXPLICITE UN CODE D'ERREUR
|
/* EXPLICITE UN CODE D'ERREUR
|
||||||
*
|
*
|
||||||
|
@ -88,33 +85,32 @@
|
||||||
*/
|
*/
|
||||||
public static function explicit($error){
|
public static function explicit($error){
|
||||||
switch($error){
|
switch($error){
|
||||||
case self::Success: return "All right."; break;
|
case self::Success: return "Tout s'est bien deroulé."; break;
|
||||||
|
|
||||||
case self::ParsingFailed: return "JSON/XML file format error."; break;
|
case self::ParsingFailed: return "La lecture du fichier JSON ou XML a echouée."; break;
|
||||||
|
|
||||||
case self::InvalidFlags: return "Flags are incorrect."; break;
|
case self::InvalidFlags: return "Les spécifications (drapeaux) sont incorrects."; break;
|
||||||
case self::UnreachableResource: return "Resource unreachable (404)."; break;
|
case self::UnreachableResource: return "La ressource n'existe pas (404)."; break;
|
||||||
case self::MissingPath: return "Path missing."; break;
|
case self::MissingPath: return "Le chemin de délégation n'a pas été renseigné."; break;
|
||||||
case self::WrongPathModule: return "Module path incorrect 'module/method'."; break;
|
case self::WrongPathModule: return "Le chemin de délégation est incorrect ('nomModule/nomMethode')."; break;
|
||||||
case self::WrongPathRepo: return "Repository path incorrect 'repo/method'."; break;
|
case self::WrongPathRepo: return "Le chemin de délégation est incorrect ('nomRepo/nomMethode')."; break;
|
||||||
case self::UnknownModule: return "Requested module not found."; break;
|
case self::UnknownModule: return "Le module n'existe pas."; break;
|
||||||
case self::UnknownRepo: return "Requested repository not found."; break;
|
case self::UnknownRepo: return "Le repo n'existe pas."; break;
|
||||||
case self::UnknownMethod: return "Requested method not found."; break;
|
case self::UnknownMethod: return "Le methode n'existe pas."; break;
|
||||||
case self::UncallableMethod: return "Cannot call requested method."; break;
|
case self::UncallableMethod: return "Le methode n'est pas amorçable."; break;
|
||||||
|
|
||||||
case self::ParamError: return "Wrong or missing parameter(s)."; break;
|
case self::ParamError: return "Un ou plusieurs paramètres sont manquants ou incorrects."; break;
|
||||||
case self::ModuleError: return "Module error."; break;
|
case self::ModuleError: return "Erreur lors du traitement du module."; break;
|
||||||
case self::RepoError: return "Repository error."; break;
|
case self::RepoError: return "Erreur lors du traitement du repo."; break;
|
||||||
|
|
||||||
case self::PDOConnection: return "Database connection failed."; break;
|
case self::PDOConnection: return "La connexion avec la base de données a echouée."; break;
|
||||||
|
|
||||||
case self::TokenError: return "Access token wrong, missing or expired."; break;
|
case self::TokenError: return "Le token de connection est absent, érroné ou expiré."; break;
|
||||||
case self::PermissionError: return "Not granted to do so."; break;
|
case self::PermissionError: return "Vous n'avez pas la permission d'effectuer cette action."; break;
|
||||||
case self::UploadError: return "Upload error."; break;
|
case self::UploadError: return "Une erreur d'upload est survenue."; break;
|
||||||
case self::FormatError: return "Format error."; break;
|
case self::FormatError: return "Le fichier n'est pas au bon format."; break;
|
||||||
case self::Already: return "Already done."; break;
|
|
||||||
|
|
||||||
default: return "Unknown debug error"; break;
|
default: return "Description d'erreur inconnue..."; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Erreur inconnue
|
// Erreur inconnue
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
// On definit l'id session si donne en argument
|
// On definit l'id session si donne en argument
|
||||||
if( $session_id != null )
|
if( $session_id != null )
|
||||||
session_id( $session_id );
|
session_id( $session_id );
|
||||||
|
|
||||||
// Precaution: on met a jour le cookie
|
// Precaution: on met a jour le cookie
|
||||||
setcookie( 'PHPSESSID', session_id(), time()+60*30, '/');
|
setcookie( 'PHPSESSID', session_id(), time()+60*30, '/');
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@
|
||||||
/*******************/
|
/*******************/
|
||||||
private static function update_token(){
|
private static function update_token(){
|
||||||
$token = self::$prefix.self::sha1(uniqid());
|
$token = self::$prefix.self::sha1(uniqid());
|
||||||
|
|
||||||
// On definit le token en session
|
// On definit le token en session
|
||||||
$_SESSION['session_token'] = $token;
|
$_SESSION['session_token'] = $token;
|
||||||
|
|
||||||
|
@ -53,12 +53,13 @@
|
||||||
$_COOKIE['session_token'] = $_SESSION['session_token'];
|
$_COOKIE['session_token'] = $_SESSION['session_token'];
|
||||||
setcookie( 'session_token', $_COOKIE['session_token'], time()+60*30, '/');
|
setcookie( 'session_token', $_COOKIE['session_token'], time()+60*30, '/');
|
||||||
}
|
}
|
||||||
|
|
||||||
/************/
|
/************/
|
||||||
/* AMORCEUR */
|
/* AMORCEUR */
|
||||||
/************/
|
/************/
|
||||||
public static function session_start(){
|
public static function session_start(){
|
||||||
return \session_start();
|
\session_start();
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
/* [1] Génération et Gestion des donnees a utiliser
|
/* [1] Génération et Gestion des donnees a utiliser
|
||||||
|
@ -84,12 +85,12 @@
|
||||||
// On verifie l'id session (5 premiers chars du hash des donnees perso)
|
// On verifie l'id session (5 premiers chars du hash des donnees perso)
|
||||||
$valid_sessid = strpos( session_id(), substr(self::$prefix,0,5) ) === 0;
|
$valid_sessid = strpos( session_id(), substr(self::$prefix,0,5) ) === 0;
|
||||||
|
|
||||||
// Si id session incorrect ou pas de token
|
// Si id session incorrect ou pas de token
|
||||||
if( !$valid_sessid )
|
if( !$valid_sessid )
|
||||||
self::reset_session( $sessid ); // On initialise la session (bon id session)
|
self::reset_session( $sessid ); // On initialise la session (bon id session)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* [3] Verification du token
|
/* [3] Verification du token
|
||||||
==============================================================*/
|
==============================================================*/
|
||||||
// On verifie que le token est valide
|
// On verifie que le token est valide
|
||||||
|
|
|
@ -332,7 +332,7 @@
|
||||||
|
|
||||||
foreach($this->schema['columns'] as $f=>$c)
|
foreach($this->schema['columns'] as $f=>$c)
|
||||||
if( !isset($this->select[$f]) )
|
if( !isset($this->select[$f]) )
|
||||||
$this->select[$f] = [$func, $distinct, $f];
|
$this->select[$f] = [$func, $distinct, $alias];
|
||||||
|
|
||||||
/* (2) Si aucun SELECT pour ce champ, on le crée */
|
/* (2) Si aucun SELECT pour ce champ, on le crée */
|
||||||
}else{
|
}else{
|
||||||
|
@ -985,7 +985,6 @@
|
||||||
|
|
||||||
/* (2) On compose la requête */
|
/* (2) On compose la requête */
|
||||||
$requestString = SQLBuilder::BUILD($requestS).';';
|
$requestString = SQLBuilder::BUILD($requestS).';';
|
||||||
// var_dump($requestString);
|
|
||||||
|
|
||||||
/* (3) On prépare la requête */
|
/* (3) On prépare la requête */
|
||||||
$request = DatabaseDriver::getPDO($this->driver)->prepare($requestString);
|
$request = DatabaseDriver::getPDO($this->driver)->prepare($requestString);
|
||||||
|
|
|
@ -7,25 +7,25 @@
|
||||||
"password" : "Qt358nUdyeTxLDM8"
|
"password" : "Qt358nUdyeTxLDM8"
|
||||||
},
|
},
|
||||||
"remote": {
|
"remote": {
|
||||||
"host" : "localhost",
|
"host" : "xdrm.io",
|
||||||
"dbname" : "nxtic",
|
"dbname" : "nxtic",
|
||||||
"user" : "nxtic-php",
|
"user" : "php",
|
||||||
"password" : "wxcvbn"
|
"password" : "QbzjZACndQM6NmuD"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"lab-surveys": {
|
"lab-surveys": {
|
||||||
"local": {
|
"local": {
|
||||||
"host" : "listic-lab-surveys.irit.fr",
|
"host" : "shadowx-dev.com",
|
||||||
"dbname" : "lab-surveys",
|
"dbname" : "cnrs",
|
||||||
"user" : "lab-surveys",
|
"user" : "cnrs",
|
||||||
"password" : "wxcvbn"
|
"password" : "yEHsPxCurd7RsynE"
|
||||||
},
|
},
|
||||||
"remote": {
|
"remote": {
|
||||||
"host" : "listic-lab-surveys.irit.fr",
|
"host" : "shadowx-dev.com",
|
||||||
"dbname" : "lab-surveys",
|
"dbname" : "cnrs",
|
||||||
"user" : "lab-surveys",
|
"user" : "cnrs",
|
||||||
"password" : "wxcvbn"
|
"password" : "yEHsPxCurd7RsynE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
"parameters": {}
|
"parameters": {}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
"markdown": {
|
"markdown": {
|
||||||
"description": "Retourne une description en markdown des différents modules de l'API",
|
"description": "Retourne une description en markdown des différents modules de l'API",
|
||||||
"permissions": [],
|
"permissions": [],
|
||||||
|
@ -41,6 +42,7 @@
|
||||||
"parameters": {}
|
"parameters": {}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
"apiBlueprint": {
|
"apiBlueprint": {
|
||||||
"description": "Retourne une documentation de l'API au format API Blueprint.",
|
"description": "Retourne une documentation de l'API au format API Blueprint.",
|
||||||
"permissions": [],
|
"permissions": [],
|
||||||
|
@ -68,6 +70,7 @@
|
||||||
"parameters": {}
|
"parameters": {}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
"getById": {
|
"getById": {
|
||||||
"description": "Retourne les informations d'un utilisateur.",
|
"description": "Retourne les informations d'un utilisateur.",
|
||||||
"permissions": ["admin"],
|
"permissions": ["admin"],
|
||||||
|
@ -79,6 +82,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
"getAll": {
|
"getAll": {
|
||||||
"description": "Retourne les informations de tous les utilisateurs.",
|
"description": "Retourne les informations de tous les utilisateurs.",
|
||||||
"permissions": ["admin"],
|
"permissions": ["admin"],
|
||||||
|
@ -88,6 +92,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
"create": {
|
"create": {
|
||||||
"description": "Creation d'un nouvel administrateur.",
|
"description": "Creation d'un nouvel administrateur.",
|
||||||
"permissions": ["admin"],
|
"permissions": ["admin"],
|
||||||
|
@ -101,6 +106,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
"remove": {
|
"remove": {
|
||||||
"description": "Suppression d'un utilisateur.",
|
"description": "Suppression d'un utilisateur.",
|
||||||
"permissions": ["admin"],
|
"permissions": ["admin"],
|
||||||
|
@ -121,6 +127,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
"generate": {
|
"generate": {
|
||||||
"description": "Création d'un token de nom et de durée donnée",
|
"description": "Création d'un token de nom et de durée donnée",
|
||||||
"permissions": ["admin"],
|
"permissions": ["admin"],
|
||||||
|
@ -167,6 +174,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
"create": {
|
"create": {
|
||||||
"description": "Creation d'un nouveau sujet.",
|
"description": "Creation d'un nouveau sujet.",
|
||||||
"permissions": ["admin"],
|
"permissions": ["admin"],
|
||||||
|
@ -182,26 +190,11 @@
|
||||||
|
|
||||||
"input": {
|
"input": {
|
||||||
|
|
||||||
"survey": {
|
|
||||||
"description": "Enregistre les données d'une enquête téléphonique.",
|
|
||||||
"permissions": ["admin"],
|
|
||||||
"parameters": {
|
|
||||||
"subject": { "description": "Données du sujet (id, etc)", "type": "array<mixed>" },
|
|
||||||
"contacts": { "description": "Données des contacts de l'enquête.", "type": "array<array>" },
|
|
||||||
"mini": { "description": "Mini fiches relations sur les contacts de l'enquête.", "type": "array<array>" },
|
|
||||||
"fiches": { "description": "Fiches relation sur les plus proches contacts de l'enquête.", "type": "array<array>" },
|
|
||||||
"matrice": { "description": "Matrice contenant les relations entre les plus proches contacts", "type": "array<array>", "optional": true }
|
|
||||||
},
|
|
||||||
"output": {
|
|
||||||
"subject_id": { "description": "Identifiant du sujet complété", "type": "id" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"phone": {
|
"phone": {
|
||||||
"description": "Enregistre les données d'une enquête téléphonique.",
|
"description": "Enregistre les données d'une enquête téléphonique.",
|
||||||
"permissions": ["admin"],
|
"permissions": ["admin"],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"subject": { "description": "Données du sujet (id, etc)", "type": "array<mixed>" },
|
"subject": { "description": "Données sur le sujet de l'enquête.", "type": "array" },
|
||||||
"contacts": { "description": "Données des contacts de l'enquête.", "type": "array<array>" },
|
"contacts": { "description": "Données des contacts de l'enquête.", "type": "array<array>" },
|
||||||
"mini": { "description": "Mini fiches relations sur les contacts de l'enquête.", "type": "array<array>" },
|
"mini": { "description": "Mini fiches relations sur les contacts de l'enquête.", "type": "array<array>" },
|
||||||
"fiches": { "description": "Fiches relation sur les plus proches contacts de l'enquête.", "type": "array<array>" },
|
"fiches": { "description": "Fiches relation sur les plus proches contacts de l'enquête.", "type": "array<array>" },
|
||||||
|
@ -216,7 +209,7 @@
|
||||||
"description": "Enregistre les données d'une enquête facebook.",
|
"description": "Enregistre les données d'une enquête facebook.",
|
||||||
"permissions": ["admin"],
|
"permissions": ["admin"],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"subject": { "description": "Données du sujet (id, etc)", "type": "array<mixed>" },
|
"subject": { "description": "Données sur le sujet de l'enquête.", "type": "array" },
|
||||||
"contacts": { "description": "Données des contacts de l'enquête.", "type": "array<array>" },
|
"contacts": { "description": "Données des contacts de l'enquête.", "type": "array<array>" },
|
||||||
"mini": { "description": "Mini fiches relations sur les contacts de l'enquête.", "type": "array<array>" },
|
"mini": { "description": "Mini fiches relations sur les contacts de l'enquête.", "type": "array<array>" },
|
||||||
"fiches": { "description": "Fiches relation sur les plus proches contacts de l'enquête.", "type": "array<array>" },
|
"fiches": { "description": "Fiches relation sur les plus proches contacts de l'enquête.", "type": "array<array>" },
|
||||||
|
@ -253,6 +246,9 @@
|
||||||
"options": { "download": true },
|
"options": { "download": true },
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"subjects": { "description": "Identifiants des sujets d'enquêtes à intégrer.", "type": "array<id>", "optional": true },
|
"subjects": { "description": "Identifiants des sujets d'enquêtes à intégrer.", "type": "array<id>", "optional": true },
|
||||||
|
"phone": { "description": "Si vaut TRUE, renvoie les sujets cellulaires.", "type": "boolean", "optional": true },
|
||||||
|
"facebook": { "description": "Si vaut TRUE, renvoie les sujet facebook.", "type": "boolean", "optional": true },
|
||||||
|
"survey": { "description": "Si vaut TRUE, renvoie les sujets ResTIC.", "type": "boolean", "optional": true },
|
||||||
"all": { "description": "Si vaut TRUE, renvoie tous les sujets enregistrés.", "type": "boolean", "optional": true }
|
"all": { "description": "Si vaut TRUE, renvoie tous les sujets enregistrés.", "type": "boolean", "optional": true }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -263,6 +259,9 @@
|
||||||
"options": { "download": true },
|
"options": { "download": true },
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"subjects": { "description": "Identifiants des sujets d'enquêtes à intégrer.", "type": "array<id>", "optional": true },
|
"subjects": { "description": "Identifiants des sujets d'enquêtes à intégrer.", "type": "array<id>", "optional": true },
|
||||||
|
"phone": { "description": "Si vaut TRUE, renvoie les sujets cellulaires.", "type": "boolean", "optional": true },
|
||||||
|
"facebook": { "description": "Si vaut TRUE, renvoie les sujet facebook.", "type": "boolean", "optional": true },
|
||||||
|
"survey": { "description": "Si vaut TRUE, renvoie les sujets ResTIC.", "type": "boolean", "optional": true },
|
||||||
"all": { "description": "Si vaut TRUE, renvoie tous les sujets enregistrés.", "type": "boolean", "optional": true }
|
"all": { "description": "Si vaut TRUE, renvoie tous les sujets enregistrés.", "type": "boolean", "optional": true }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
Before Width: | Height: | Size: 324 KiB After Width: | Height: | Size: 324 KiB |
|
@ -53,5 +53,5 @@ $header-height: 4em;
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
// Transforme une couleur hex en string sans le #
|
// Transforme une couleur hex en string sans le #
|
||||||
@function color-str($color){
|
@function color-str($color){
|
||||||
@return str-slice("#{$color}", 2, str-length("#{$color}"));
|
@return str-slice(#{$color}, 2, str-length(#{$color}));
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue