Tableau contenant les données du sujet * @contacts Tableau contenant les données des contacts * @mini Tableau contenant les données des mini fiches relation * @fiches Tableau contenant les données des fiches relation * * @return subject_id Retourne l'id sujet de l'enquête * */ public static function phone($params){ extract($params); /* [1] On récupère l'id unique actuel =========================================================*/ $funiq = fopen( __BUILD__.'/lightdb/storage/uniqid', 'r+' ); flock($funiq, LOCK_EX); // On verrouille le fichier $uniqid = fgets( $funiq ); if( !is_numeric($uniqid) ) $uniqid = 0; // Décalage à appliquer à tous les ids $offset = intval($uniqid) + 1; // on enregistre l'id du sujet $subject_id = intval($subject['subject_id']); // Contiendra la valeur de l'id maximum $maxId = $offset; /* [2] On initialise nos variables (lightdb + autres) =========================================================*/ /* (1) Fichiers de sortie */ $file = [ "subject" => "", "relations" => [] ]; /* (2) Bases de données */ $subjectdb = new lightdb('subject'); $contactdb = new lightdb('contact'); /* [3] Données du sujet =========================================================*/ $subject_set = $subjectdb->fetch($subject_id); /* (1) Si le sujet n'existe pas -> ERROR */ if( $subject_set === false ) return ['ModuleError'=>ManagerError::UnreachableResource]; /* (2) Initialisation des contacts si vide */ if( !isset($subject_set['contacts']) ) $subject_set['contacts'] = []; /* (3) Initialisation des relations si vide */ if( !isset($subject_set['relations']) ) $subject_set['relations'] = []; /* (4) On récupère les noms des contacts */ $contactsById = []; // idContact -> nomContact foreach($subject_set['contacts'] as $contactId){ $contactId = intval($contactId); $contactData = $contactdb->fetch( $contactId ); $contactsById[$contactId] = $contactData['name']; } /* [4] On saisit les fiches + les contacts des fiches =========================================================*/ $contactsDone = [ "existing" => [], // Contacts exportés déja enregistrés "username" => [] // Nouveaux contacts déja enregistrés ]; $finalid = []; // id_contact -> id_final_contact (existant ou nouveau) foreach($fiches as $f=>$ficheData){ /* (1) On récupère les données du contact associé */ if( !isset($contacts[$ficheData['contact']]) ) break; $contact = $contacts[ $ficheData['contact'] ]; /* (2) Si le contact a été importé d'une autre enquête */ if( isset($contact['existing']) && is_numeric($contact['existing']) ){ $newId = (int) $contact['existing']; $uname = $contactsById[ intval($contact['existing']) ]; $existingData = $dbcontact->fetch( intval($contact['existing']) ); $finalid[ intval($contact['uid']) ] = $newId; // S'il a déja une fiche ou qu'on a déja fait une fiche, on quitte if( is_array($existingData) && isset($existingData['studies2']) || in_array($contact['existing'], $contactsDone['existing']) ) break; /* (3) Si nouveau contact */ }else{ $newId = (int) ($offset+$contact['uid']); $uname = $contact['username']; $finalid[ intval($contact['uid']) ] = $newId; // S'il a déja été saisi, on quitte if( in_array($contact['username'], $contactsDone['username']) ) break; } /* (4) Update du @maxId */ if( $newId > $maxId ) $maxId = (int) $newId; /* (5) On enregistre les données du contact */ $contactdb->insert($newId, [ 'id' => $newId, 'name' => $uname, 'sexe' => $ficheData['sexe'], 'age' => $ficheData['age'], 'studies2' => $ficheData['studies'], 'reltype' => ($ficheData['reltype']==10) ? $ficheData['reltypeSpecial'] : $ficheData['reltype'], // si 'autre' -> valeur, sinon le code 'dist' => $ficheData['loc'], 'job' => $ficheData['job'], 'famsit' => $ficheData['famsit'], 'city' => $ficheData['city'], 'cp' => $ficheData['cp'], 'quartier' => $ficheData['quartier'], 'duration' => $ficheData['duration'], 'context' => $ficheData['context'], 'contextExtra' => $ficheData['contextSpecial'], 'freq' => $ficheData['freq'], 'connect' => $ficheData['connect'], 'connectExtra' => $ficheData['connectSpecial'] ] ); // On ajoute le contact dans la liste des contacts du sujet (si pas déja) if( !in_array($newId, $subject_set['contacts']) ) $subject_set['contacts'][] = $newId; // On enregistre la relation avec EGO $subject_set['relations'][] = [ 'idA' => $subject_id, 'idB' => $newId, 'type' => ($f<20) ? 4 : 5 // 4->appels 5->sms ]; /* (x) Si le contact a été importé d'une autre enquête */ if( isset($contact['existing']) && is_numeric($contact['existing']) ) $contactsDone['existing'][] = $contact['existing']; /* (x+1) Si nouveau contact */ else $contactsDone['username'][] = $contact['username']; } /* [5] On enregistre les mini + les contacts des mini =========================================================*/ foreach($mini as $miniData){ /* (1) On récupère les données du contact associé */ if( !isset($contacts[$miniData['contact']]) ) break; $contact = $contacts[ $miniData['contact'] ]; /* (2) Si le contact a été importé d'une autre enquête */ if( isset($contact['existing']) && is_numeric($contact['existing']) ){ $newId = (int) $contact['existing']; $uname = $contactsById[ intval($contact['existing']) ]; $existingData = $dbcontact->fetch( intval($contact['existing']) ); $finalid[ intval($contact['uid']) ] = $newId; // S'il a déja une fiche ou qu'on a déja fait une fiche (ou mini), on quitte if( is_array($existingData) && isset($existingData['studies2']) || in_array($contact['existing'], $contactsDone['existing']) ) break; /* (3) Si nouveau contact */ }else{ $newId = (int) ($offset+$miniData['uid']); $uname = $contact['username']; $finalid[ intval($contact['uid']) ] = $newId; // S'il a déja été saisi, on quitte if( in_array($contact['username'], $contactsDone['username']) ) break; } /* (4) Update du @maxId */ if( $newId > $maxId ) $maxId = (int) $newId; // On remplit les données qui iront dans le fichier pour ce contact $contactdb->insert($newId, [ 'id' => $newId, 'name' => $uname, 'sexe' => $miniData['sexe'], 'age' => $miniData['age'], 'studies1' => $miniData['studies'], 'reltype' => ($miniData['reltype']==10) ? $miniData['reltypeSpecial'] : $miniData['reltype'], // si 'autre' -> valeur, sinon le code 'dist' => $miniData['loc'] ] ); // On ajoute le contact dans la liste des contacts du sujet (si pas déja) if( !in_array($newId, $subject_set['contacts']) ) $subject_set['contacts'][] = $newId; // On enregistre la relation avec EGO $subject_set['relations'][] = [ 'idA' => $subject_id, 'idB' => $newId, 'type' => 2 // relation cellulaire mineure ]; /* (x) Si le contact a été importé d'une autre enquête */ if( isset($contact['existing']) && is_numeric($contact['existing']) ) $contactsDone['existing'][] = $contact['existing']; /* (x+1) Si nouveau contact */ else $contactsDone['username'][] = $contact['username']; } /* [6] On enregistre les relations de la MATRICE =========================================================*/ $clen = count($finalid); /* (1) On récupére les ids des contacts */ $cIdList = []; foreach($finalid as $lastid=>$newid){ $id = (int) $lastid; if( !in_array($id, $cIdList) ) $cIdList[$id] = null; } ksort($cIdList); /* (2) On remplit les relations */ foreach($cIdList as $y=>$yNull){ foreach($cIdList as $x=>$xNull) if( $x < $y ){ // On affiche que sous la diagonale $idY = $finalid[$y]['id'] - $offset; $idX = $finalid[$x]['id'] - $offset; // Si relation alter-alter $relationXY = isset($matrice[$y]) && in_array($x, $matrice[$y]) || ( isset($matrice[$x]) && in_array($y, $matrice[$x]) ); $subject_set['relations'][] = [ 'idA' => $offset + $x, 'idB' => $offset + $y, 'type' => $relationXY ? 1 : 0 // 0->aucune relation 1->relation alter alter ]; } } /* [6] On les données du sujet =========================================================*/ $subjectdb->insert($subject_id, $subject_set); /* [7] On enregistre les données des contacts =========================================================*/ /* (1) Pour chaque données de contact enregistré */ foreach($file['contacts'] as $c=>$contactData){ } $db = new lightdb('phone_db'); $db->insert( $subject_id, $file ); $db->close(); /* [7] On met à jour le nouvel ID unique =========================================================*/ // $maxId += $offset; rewind($funiq); // On revient au début du fichier fwrite($funiq, $maxId); // On écrit la nouvelle valeur (forcément plus grande) flock($funiq, LOCK_UN); // On débloque le verrou fclose($funiq); // /* [8] On supprime le fichier temporaire si existe // =========================================================*/ // if( file_exists($tmpfile) ) // unlink($tmpfile); /* [9] Gestion du retour =========================================================*/ return [ 'ModuleError' => ManagerError::Success, 'subject_id' => $subject_id ]; } /* TRAITE LES DONNÉES D'UN FORMULAIRE DE TYPE TÉLÉPHONIQUE * * @subject Tableau contenant les données du sujet * @contacts Tableau contenant les données des contacts * @mini Tableau contenant les données des mini fiches relation * @fiches Tableau contenant les données des fiches relation * * @return subject_id Retourne l'id sujet de l'enquête * */ public static function xphone($params){ extract($params); /* [0] On récupère l'id unique actuel =========================================================*/ $funiq = fopen( __BUILD__.'/lightdb/storage/uniqid', 'r+' ); flock($funiq, LOCK_EX); // On verrouille le fichier $uniqid = fgets( $funiq ); if( !is_numeric($uniqid) ) $uniqid = 0; // Décalage à appliquer à tous les ids $offset = intval($uniqid) + 1; // on enregistre l'id du sujet $subject_id = $subject['subject_id']; // Contiendra la valeur de l'id maximum $maxId = $offset; // /* [1] On récupère les logs s'ils existent // =========================================================*/ // // Contiendra le contenu du fichier $file = [ "subject" => "", "contacts" => [], "relations" => [] ]; /* [2] On enregistre les données du sujet =========================================================*/ /* (1) On crée le sujet */ $file['subject'] = [ 'id' => $subject_id ]; /* (2) On récupère ses contacts facebook */ // {2.1} On récupère les données du sujet // $lfacebook = new lightdb('facebook_db'); $lfacebook = $lfacebook->fetch($subject_id); // {2.2} si n'existe pas, on a un tableau vide // if( $lfacebook === false ) $lfacebook = [ 'contacts' => [] ]; if( !isset($lfacebook['contacts']) ) $lfacebook['contacts'] = []; /* (3) On récupère ses contacts lab-surveys */ // {3.1} On récupère les données du sujet // $lsurvey = new lightdb('survey_db'); $lsurvey = $lsurvey->fetch($subject_id); // {3.2} si n'existe pas, on a un tableau vide // if( $lsurvey === false ) $lsurvey = [ 'contacts' => [] ]; if( !isset($lsurvey['contacts']) ) $lsurvey['contacts'] = []; /* (4) On récupère uniquement la liste des contacts avec le type de fiche qu'ils ont */ // {4.1} Contiendra les contacts exportés // $exported = [ 'fiche' => [], 'mini' => [] ]; // {4.2} Contiendra les username des contacts exportés // $exportedU = []; // {4.3} On récupère les contacts facebook // foreach($lfacebook['contacts'] as $c=>$data){ if( isset($data['studies2']) ){ $exported['fiche'][] = $data['id']; $exportedU[$data['id']] = $data['name']; }else // S'il n'est pas déja dans les fiches if( !in_array($data['id'], $exported['fiche']) ){ $exported['mini'][] = $data['id']; $exportedU[$data['id']] = $data['name']; } } // {4.4} On récupère les contacts lab-surveys // foreach($lsurvey['contacts'] as $c=>$data){ if( isset($data['studies2']) ) // On ajoute le contact s'il n'y est pas déja if( !in_array($data['id'], $exported['fiche']) ){ $exported['fiche'][] = $data['id']; $exportedU['fiche'][] = $data['username']; } else // On ajoute le contact s'il n'y est pas déja (ni dans mini ni dans fiche) if( !in_array($data['id'], $exported['mini']) && !in_array($data['id'], $exported['fiche']) ){ $exported['mini'][] = $data['id']; $exportedU['mini'][] = $data['username']; } } /* [3] On enregistre les contacts des FICHES =========================================================*/ $contactsDone = [ "existing" => [], // Contacts exportés déja enregistrés "username" => [] // Nouveaux contacts déja enregistrés ]; foreach($fiches as $f=>$ficheData){ /* (1) On récupère les données du contact associé */ if( !isset($contacts[$ficheData['uid']]) ) break; $contact = $contacts[ $ficheData['uid'] ]; /* (2) Si le contact a été importé d'une autre enquête */ if( isset($contact['existing']) && is_numeric($contact['existing']) ){ $newId = (int) $contact['existing']; $uname = $exportedU[intval($contact['existing'])]; // {2.1} S'il a déja une fiche ou qu'on a déja fait une fiche, on quitte // if( in_array(intval($contact['existing']), $exported['fiche']) || in_array($contact['existing'], $contactsDone['existing']) ) break; /* (3) Si nouveau contact */ }else{ $newId = (int) ($offset+$ficheData['uid']); $uname = $contact['username']; // {3.1} S'il a déja été saisi, on quitte // if( in_array($contact['username'], $contactsDone['username']) ) break; } /* (4) Update du @maxId */ if( $newId > $maxId ) $maxId = (int) $newId; // On remplit les données qui iront dans le fichier pour ce contact $file['contacts'][] = [ 'id' => $newId, 'name' => $uname, 'sexe' => $ficheData['sexe'], 'age' => $ficheData['age'], 'studies2' => $ficheData['studies'], 'reltype' => ($ficheData['reltype']==10) ? $ficheData['reltypeSpecial'] : $ficheData['reltype'], // si 'autre' -> valeur, sinon le code 'dist' => $ficheData['loc'], 'job' => $ficheData['job'], 'famsit' => $ficheData['famsit'], 'city' => $ficheData['city'], 'cp' => $ficheData['cp'], 'quartier' => $ficheData['quartier'], 'duration' => $ficheData['duration'], 'context' => $ficheData['context'], 'contextExtra' => $ficheData['contextSpecial'], 'freq' => $ficheData['freq'], 'connect' => $ficheData['connect'], 'connectExtra' => $ficheData['connectSpecial'] ]; // On enregistre la relation avec EGO $file['relations'][] = [ 'idA' => $subject_id, 'idB' => $newId, 'type' => ($f<20) ? 4 : 5 // 4->appels 5->sms ]; /* (x) Si le contact a été importé d'une autre enquête */ if( isset($contact['existing']) && is_numeric($contact['existing']) ) $contactsDone['existing'][] = $contact['existing']; /* (x+1) Si nouveau contact */ else $contactsDone['username'][] = $contact['username']; } /* [4] On enregistre les contacts des MINI =========================================================*/ foreach($mini as $miniData){ /* (1) On récupère les données du contact associé */ if( !isset($contacts[$miniData['uid']]) ) break; $contact = $contacts[ $miniData['uid'] ]; /* (2) Si le contact a été importé d'une autre enquête */ if( isset($contact['existing']) && is_numeric($contact['existing']) ){ $newId = (int) $contact['existing']; $uname = $exportedU[intval($contact['existing'])]; // {2.1} S'il a déja une fiche ou qu'on a déja fait une fiche (ou mini), on quitte // if( in_array(intval($contact['existing']), $exported['fiche']) || in_array($contact['existing'], $contactsDone['existing']) ) break; /* (3) Si nouveau contact */ }else{ $newId = (int) ($offset+$miniData['uid']); $uname = $contact['username']; // {3.1} S'il a déja été saisi, on quitte // if( in_array($contact['username'], $contactsDone['username']) ) break; } /* (4) Update du @maxId */ if( $newId > $maxId ) $maxId = (int) $newId; // On remplit les données qui iront dans le fichier pour ce contact $file['contacts'][] = [ 'id' => $newId, 'name' => $uname, 'sexe' => $miniData['sexe'], 'age' => $miniData['age'], 'studies1' => $miniData['studies'], 'reltype' => ($miniData['reltype']==10) ? $miniData['reltypeSpecial'] : $miniData['reltype'], // si 'autre' -> valeur, sinon le code 'dist' => $miniData['loc'] ]; // On enregistre la relation avec EGO $file['relations'][] = [ 'idA' => $subject_id, 'idB' => $newId, 'type' => 2 // relation cellulaire mineure ]; /* (x) Si le contact a été importé d'une autre enquête */ if( isset($contact['existing']) && is_numeric($contact['existing']) ) $contactsDone['existing'][] = $contact['existing']; /* (x+1) Si nouveau contact */ else $contactsDone['username'][] = $contact['username']; } /* [5] On enregistre les relations de la MATRICE =========================================================*/ $clen = count($file['contacts']); /* (1) On récupére les ids des contacts */ $cIdList = []; foreach($file['contacts'] as $c=>$contact){ $id = (int) $c; if( !in_array($id, $cIdList) ) $cIdList[$id] = null; } ksort($cIdList); /* (2) On remplit les relations */ foreach($cIdList as $y=>$yNull){ foreach($cIdList as $x=>$xNull) if( $x < $y ){ // On affiche que sous la diagonale $idY = $file['contacts'][$y]['id'] - $offset; $idX = $file['contacts'][$x]['id'] - $offset; // Si relation alter-alter $relationXY = isset($matrice[$y]) && in_array($x, $matrice[$y]) || ( isset($matrice[$x]) && in_array($y, $matrice[$x]) ); array_push($file['relations'], [ 'idA' => $offset + $x, 'idB' => $offset + $y, 'type' => $relationXY ? 1 : 0 // 0->aucune relation 1->relation alter alter ]); } } /* [6] On enregistre tout dans 'lightdb' =========================================================*/ $db = new lightdb('phone_db'); $db->insert( $subject_id, $file ); $db->close(); /* [7] On met à jour le nouvel ID unique =========================================================*/ // $maxId += $offset; rewind($funiq); // On revient au début du fichier fwrite($funiq, $maxId); // On écrit la nouvelle valeur (forcément plus grande) flock($funiq, LOCK_UN); // On débloque le verrou fclose($funiq); // /* [8] On supprime le fichier temporaire si existe // =========================================================*/ // if( file_exists($tmpfile) ) // unlink($tmpfile); /* [9] Gestion du retour =========================================================*/ return [ 'ModuleError' => ManagerError::Success, 'subject_id' => $subject_id ]; } /* TRAITE LES DONNÉES D'UN FORMULAIRE DE TYPE FACEBOOK * * @subject Tableau contenant les données du sujet * @contacts Tableau contenant les données des contacts * @mini Tableau contenant les données des mini fiches relation * @fiches Tableau contenant les données des fiches relation * * @return subject_id Retourne l'id sujet de l'enquête * */ public static function xfacebook($params){ extract($params); /* [0] On récupère l'id unique actuel =========================================================*/ $funiq = fopen( __BUILD__.'/lightdb/storage/uniqid', 'r+' ); flock($funiq, LOCK_EX); // On verrouille le fichier $uniqid = fgets( $funiq ); if( !is_numeric($uniqid) ) $uniqid = 0; // Décalage à appliquer à tous les ids $offset = intval($uniqid) + 1; // on enregistre l'id du sujet $subject_id = $subject['subject_id']; // Contiendra la valeur de l'id maximum $maxId = $offset; // /* [1] On récupère les logs s'ils existent // =========================================================*/ // // Contiendra le contenu du fichier $file = [ "subject" => "", "contacts" => [], "relations" => [] ]; /* [2] On enregistre les données du sujet =========================================================*/ /* (1) On crée le sujet */ $file['subject'] = [ 'id' => $subject_id ]; /* (2) On récupère ses contacts phone */ // {2.1} On récupère les données du sujet // $lphone = new lightdb('phone_db'); $lphone = $lphone->fetch($subject_id); // {2.2} si n'existe pas, on a un tableau vide // if( $lphone === false ) $lphone = [ 'contacts' => [] ]; if( !isset($lphone['contacts']) ) $lphone['contacts'] = []; /* (3) On récupère ses contacts lab-surveys */ // {3.1} On récupère les données du sujet // $lsurvey = new lightdb('survey_db'); $lsurvey = $lsurvey->fetch($subject_id); // {3.2} si n'existe pas, on a un tableau vide // if( $lsurvey === false ) $lsurvey = [ 'contacts' => [] ]; if( !isset($lsurvey['contacts']) ) $lsurvey['contacts'] = []; /* (4) On récupère uniquement la liste des contacts avec le type de fiche qu'ils ont */ // {4.1} Contiendra les contacts exportés // $exported = [ 'fiche' => [], 'mini' => [] ]; // {4.2} Contiendra les username des contacts exportés // $exportedU = []; // {4.3} On récupère les contacts facebook // foreach($lphone['contacts'] as $c=>$data){ if( isset($data['studies2']) ){ $exported['fiche'][] = $data['id']; $exportedU[$data['id']] = $data['name']; }else // S'il n'est pas déja dans les fiches if( !in_array($data['id'], $exported['fiche']) ){ $exported['mini'][] = $data['id']; $exportedU[$data['id']] = $data['name']; } } // {4.4} On récupère les contacts lab-surveys // foreach($lsurvey['contacts'] as $c=>$data){ if( isset($data['studies2']) ) // On ajoute le contact s'il n'y est pas déja if( !in_array($data['id'], $exported['fiche']) ){ $exported['fiche'][] = $data['id']; $exportedU['fiche'][] = $data['username']; } else // On ajoute le contact s'il n'y est pas déja (ni dans mini ni dans fiche) if( !in_array($data['id'], $exported['mini']) && !in_array($data['id'], $exported['fiche']) ){ $exported['mini'][] = $data['id']; $exportedU['mini'][] = $data['username']; } } /* [3] On enregistre les contacts des FICHES =========================================================*/ $contactsDone = [ "existing" => [], // Contacts exportés déja enregistrés "username" => [] // Nouveaux contacts déja enregistrés ]; foreach($fiches as $f=>$ficheData){ /* (1) On récupère les données du contact associé */ if( !isset($contacts[$ficheData['uid']]) ) continue; $contact = $contacts[ $ficheData['uid'] ]; /* (2) Si le contact a été importé d'une autre enquête */ if( isset($contact['existing']) && is_numeric($contact['existing']) ){ $newId = (int) $contact['existing']; $uname = $exportedU[intval($contact['existing'])]; // {2.1} S'il a déja une fiche ou qu'on a déja fait une fiche, on quitte // if( in_array(intval($contact['existing']), $exported['fiche']) || in_array($contact['existing'], $contactsDone['existing']) ) continue; /* (3) Si nouveau contact */ }else{ $newId = (int) ($offset+$ficheData['uid']); $uname = $contact['username']; // {3.1} S'il a déja été saisi, on quitte // if( in_array($contact['username'], $contactsDone['username']) ) continue; } /* (4) Update du @maxId */ if( $newId > $maxId ) $maxId = (int) $newId; // On remplit les données qui iront dans le fichier pour ce contact $file['contacts'][] = [ 'id' => $newId, 'name' => $uname, 'sexe' => $ficheData['sexe'], 'age' => $ficheData['age'], 'studies2' => $ficheData['studies'], 'reltype' => ($ficheData['reltype']==10) ? $ficheData['reltypeSpecial'] : $ficheData['reltype'], // si 'autre' -> valeur, sinon le code 'dist' => $ficheData['loc'], 'job' => $ficheData['job'], 'famsit' => $ficheData['famsit'], 'city' => $ficheData['city'], 'cp' => $ficheData['cp'], 'quartier' => $ficheData['quartier'], 'duration' => $ficheData['duration'], 'context' => $ficheData['context'], 'contextExtra' => $ficheData['contextSpecial'], 'freq' => $ficheData['freq'], 'connect' => $ficheData['connect'], 'connectExtra' => $ficheData['connectSpecial'] ]; // On enregistre la relation avec EGO $file['relations'][] = [ 'idA' => $subject_id, 'idB' => $newId, 'type' => ($f<20) ? 4 : 5 // 4->appels 5->sms ]; /* (x) Si le contact a été importé d'une autre enquête */ if( isset($contact['existing']) && is_numeric($contact['existing']) ) $contactsDone['existing'][] = $contact['existing']; /* (x+1) Si nouveau contact */ else $contactsDone['username'][] = $contact['username']; } /* [4] On enregistre les contacts des MINI =========================================================*/ foreach($mini as $miniData){ /* (1) On récupère les données du contact associé */ if( !isset($contacts[$miniData['uid']]) ) continue; $contact = $contacts[ $miniData['uid'] ]; /* (2) Si le contact a été importé d'une autre enquête */ if( isset($contact['existing']) && is_numeric($contact['existing']) ){ $newId = (int) $contact['existing']; $uname = $exportedU[intval($contact['existing'])]; // {2.1} S'il a déja une fiche ou qu'on a déja fait une fiche (ou mini), on quitte // if( in_array(intval($contact['existing']), $exported['fiche']) || in_array($contact['existing'], $contactsDone['existing']) ) continue; /* (3) Si nouveau contact */ }else{ $newId = (int) ($offset+$miniData['uid']); $uname = $contact['username']; // {3.1} S'il a déja été saisi, on quitte // if( in_array($contact['username'], $contactsDone['username']) ) continue; } /* (4) Update du @maxId */ if( $newId > $maxId ) $maxId = (int) $newId; // On remplit les données qui iront dans le fichier pour ce contact $file['contacts'][] = [ 'id' => $newId, 'name' => $uname, 'sexe' => $miniData['sexe'], 'age' => $miniData['age'], 'studies1' => $miniData['studies'], 'reltype' => ($miniData['reltype']==10) ? $miniData['reltypeSpecial'] : $miniData['reltype'], // si 'autre' -> valeur, sinon le code 'dist' => $miniData['loc'] ]; // On enregistre la relation avec EGO $file['relations'][] = [ 'idA' => $subject_id, 'idB' => $newId, 'type' => 2 // relation cellulaire mineure ]; /* (x) Si le contact a été importé d'une autre enquête */ if( isset($contact['existing']) && is_numeric($contact['existing']) ) $contactsDone['existing'][] = $contact['existing']; /* (x+1) Si nouveau contact */ else $contactsDone['username'][] = $contact['username']; } /* [5] On enregistre les relations de la MATRICE =========================================================*/ $clen = count($file['contacts']); // var_dump($file['contacts']); /* (1) On récupére les ids des contacts */ $cIdList = []; foreach($file['contacts'] as $c=>$contact){ $id = (int) $c; if( !in_array($id, $cIdList) ) $cIdList[$id] = null; } ksort($cIdList); /* (2) On remplit les relations */ foreach($cIdList as $y=>$yNull){ foreach($cIdList as $x=>$xNull) if( $x < $y ){ // On affiche que sous la diagonale $idY = $file['contacts'][$y]['id'] - $offset; $idX = $file['contacts'][$x]['id'] - $offset; // Si relation alter-alter $relationXY = isset($matrice[$y]) && in_array($x, $matrice[$y]) || ( isset($matrice[$x]) && in_array($y, $matrice[$x]) ); $file['relations'][] = [ 'idA' => $offset + $x, 'idB' => $offset + $y, 'type' => $relationXY ? 1 : 0 // 0->aucune relation 1->relation alter alter ]; } } /* [6] On enregistre tout dans 'lightdb' =========================================================*/ $db = new lightdb('facebook_db'); $db->insert( $subject_id, $file ); $db->close(); /* [7] On met à jour le nouvel ID unique =========================================================*/ // $maxId += $offset; rewind($funiq); // On revient au début du fichier fwrite($funiq, $maxId); // On écrit la nouvelle valeur (forcément plus grande) flock($funiq, LOCK_UN); // On débloque le verrou fclose($funiq); // /* [8] On supprime le fichier temporaire si existe // =========================================================*/ // if( file_exists($tmpfile) ) // unlink($tmpfile); /* [9] Gestion du retour =========================================================*/ return [ 'ModuleError' => ManagerError::Success, 'subject_id' => $subject_id ]; } } ?>