This commit is contained in:
xdrm-brackets 2016-05-18 10:08:34 +02:00
parent 38b05ae634
commit 3ecfae2831
5 changed files with 54 additions and 60 deletions

View File

@ -87,26 +87,7 @@
// }
$db = new lightdb('phone_storage/db');
for( $i = 0 ; $i < 10 ; $i ++)
$db->insert("i$i", 'test'.$i);
var_dump( $db->fetch('i0') );
var_dump( $db->fetch('i1') );
var_dump( $db->fetch('i2') );
var_dump( $db->fetch('i3') );
$last = $db->index();
$db->delete('i2');
$db->delete('i3');
$db->delete('i6');
foreach($last as $i=>$d)
echo $i.' -> '.$d['line'].' -> '.( isset($db->index()[$i]) ? $db->index()[$i]['line'] : '.').'<br>';
$db->close();
$req = new ModuleRequest('download/phone', array('subjects'=>array(1)));
$req->download();
?>

View File

@ -109,8 +109,6 @@
$this->line++;
$written = $this->driver->fwrite( $json_data.PHP_EOL );
var_dump($written);
// Si erreur d'écriture, on retourne FALSE
if( is_null($written) )
return false;

View File

@ -7,6 +7,7 @@
use \manager\ModuleRequest;
use \manager\ManagerError;
use \manager\Repo;
use \manager\lightdb;
class download{
@ -118,41 +119,53 @@
public static function phone($params){
extract($params);
// TODO: Implémenter proprement en utilisant le système de retour + utilisant la liste de sujets dans les paramètres
$file_name = sessionManager::sha1($subjects[0]);
$phone_log = json_decode( file_get_contents(__ROOT__.'/src/upload/phone_storage/'.$file_name.'.json'), true );
// Si erreur
if( $phone_log == null )
return array( 'ModuleError' => ManagerError::ParsingFailed );
$dict = json_decode( file_get_contents(__ROOT__.'/src/upload/phone_storage/dictionary.json'), true );
// Si erreur
if( $dict == null )
return array( 'ModuleError' => ManagerError::ParsingFailed );
/* [2] On construit le CSV
/* [0] On récupère le dictionnaire
=========================================================*/
$output = array(
'logs' => self::parseCSV($phone_log['logs'], $dict['logs']),
'contacts' => self::parseCSV($phone_log['contacts'], $dict['contacts']),
'relations' => self::parseCSV($phone_log['relations'], null),
$dict = json_decode( file_get_contents( __ROOT__.'/src/upload/phone_storage/dictionary.json'), true );
// Si erreur de lecture
if( is_null($dict) )
return array( 'ModuleError' => ManagerError::ParsingFailed );
// Contiendra les données de tous les sujets
$output = array();
// On ouvre une instance de la base de données
$db = new lightdb('phone_storage/db');
/* [1] On construit les fichiers de 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 construit le CSV */
$output[$s] = array(
'logs' => self::parseCSV($subjectData['logs'], $dict['logs']),
'contacts' => self::parseCSV($subjectData['contacts'], $dict['contacts']),
'relations' => self::parseCSV($subjectData['relations'], array()),
'dict' => ''
);
/* [3] On construit le fichier du dictionnaire
=========================================================*/
$output['dict'] .= "\"sheet\";\"field\";\"key\";\"value\"\r\n";
/* (3) On construit le fichier du dictionnaire */
$output[$s]['dict'] .= "\"sheet\";\"field\";\"key\";\"value\"\r\n";
foreach($dict as $ds=>$dataset)
foreach($dataset as $f=>$field)
foreach($field as $key=>$value)
$output['dict'] .= "\"$ds\";\"$f\";\"$key\";\"$value\"\r\n";
$output[$s]['dict'] .= "\"$ds\";\"$f\";\"$key\";\"$value\"\r\n";
}
// On ferme l'instance de la base de données
$db->close();
/* [4] Création de l'archive
@ -161,8 +174,11 @@
$fname = '/tmp/'.time().'.zip';
$zip->open($fname, \ZipArchive::CREATE);
foreach($output as $name=>$content)
$zip->addFromString($name.'.csv', $content);
foreach($output as $subjectId=>$files){
foreach($files as $file=>$content)
$zip->addFromString($subjects[$subjectId].'/'.$file.'.csv', $content);
}
$zip->close();

View File

@ -76,11 +76,12 @@
// Décalage à appliquer à tous les ids
$offset = intval($uniqid) + 2;
// Contiendra la valeur de l'id maximum
$maxId = $offset;
// on enregistre l'id du sujet
$subject_id = $offset - 1;
$subject_id = intval($uniqid) + 1;
// Contiendra la valeur de l'id maximum
$maxId = 0;
@ -108,6 +109,7 @@
// On incrémente tous les ids de l'offset
foreach($file['logs'] as $i=>$log){
$file['logs'][$i]['id'] = $offset + $log['id'];
if( $log['id'] > $maxId )
$maxId = (int) $log['id'];
}
@ -206,9 +208,9 @@
/* [7] On met à jour le nouvel ID unique
=========================================================*/
$maxId += $offset;
// $maxId += $offset;
rewind($funiq); // On revient au début du fichier
fwrite($funiq, $maxId); // On écrit la nouvelle valeur (forcément plus grande)
fwrite($funiq, $offset+$maxId); // On écrit la nouvelle valeur (forcément plus grande)
flock($funiq, LOCK_UN); // On débloque le verrou
fclose($funiq);
@ -223,7 +225,6 @@
return array(
'ModuleError' => ManagerError::Success,
'subject_id' => $subject_id
);
}

File diff suppressed because one or more lines are too long