=time()-120) // si le fichier status est trop vieux c'est un abandon return _T("dump:erreur_".$action."_deja_en_cours"); if (!$type_serveur = dump_type_serveur()) return _T('dump:erreur_sqlite_indisponible'); if (!$tables) list($tables,) = base_liste_table_for_dump(lister_tables_noexport()); $status = array('tables'=>$tables,'where'=>$where,'archive'=>$archive); $status['connect'] = dump_connect_args($archive); dump_serveur($status['connect']); if (!spip_connect('dump')) return _T('dump:erreur_creation_base_sqlite'); // la constante sert a verifier qu'on utilise bien le connect/dump du plugin, // et pas une base externe homonyme if (!defined('_DUMP_SERVEUR_OK')) return _T('erreur_connect_dump', array('dump' => 'dump')); $status['etape'] = 'init'; if (!ecrire_fichier($status_file, serialize($status))) return _T('dump:avis_probleme_ecriture_fichier',array('fichier'=>$status_file)); return true; } /** * Afficher l'avancement de la copie * @staticvar int $etape * @param $courant * @param $total * @param $table */ function dump_afficher_progres($courant,$total,$table) { static $etape = 1; if (unique($table)) { if ($total<0 OR !is_numeric($total)) echo "
".$etape. '. '."$table "; else echo "
".$etape. '. '."$table ".($courant?" ($courant) ":""); $etape++; } if (is_numeric($total) AND $total>=0) echo ". "; else echo "(". (-intval($total)).")"; flush(); } /** * Ecrire le js pour relancer la procedure de dump * @param string $redirect * @return string */ function dump_relance($redirect){ // si Javascript est dispo, anticiper le Time-out return "\n"; } /** * Marquer la procedure de dump comme finie * @param string $status_file * @return */ function dump_end($status_file, $action=''){ $status_file = _DIR_TMP.basename($status_file).".txt"; if (!lire_fichier($status_file, $status) OR !$status = unserialize($status)) return; switch($action) { case 'restaurer': // supprimer la structure qui etait stockee dans le dump sql_delete('spip_meta',"nom='dump_structure_temp'"); break; case 'sauvegarder': // stocker dans le dump la structure de la base source $structure = array(); foreach($status['tables_copiees'] as $t=>$n) $structure[$t] = sql_showtable($t,true); dump_serveur($status['connect']); spip_connect('dump'); sql_delete('spip_meta',"nom='dump_structure_temp'",'dump'); #enlever une vieille structure deja la, au cas ou sql_insertq('spip_meta',array('nom'=>'dump_structure_temp','valeur'=>serialize($structure),'impt'=>'non'),array(),'dump'); break; } $status['etape'] = 'fini'; ecrire_fichier($status_file, serialize($status)); } /** * Lister les fichiers de sauvegarde existant dans un repertoire * trie par nom, date ou taille * * @param string $dir * @param string $tri * @param string $extension * @param int $limit * @return array */ function dump_lister_sauvegardes($dir,$tri='nom',$extension="sqlite",$limit = 100) { $liste_dump = preg_files($dir,'\.'.$extension.'$',$limit,false); $n = strlen($dir); $tn = $tl = $tt = $td = array(); foreach($liste_dump as $fichier){ $d = filemtime($fichier); $t = filesize($fichier); $fichier = substr($fichier, $n); $tl[]= array('fichier'=>$fichier,'taille'=>$t,'date'=>$d); $td[] = $d; $tt[] = $t; $tn[] = $fichier; } if ($tri == 'taille') array_multisort($tt, SORT_ASC, $tl); elseif ($tri == 'date') array_multisort($td, SORT_ASC, $tl); else array_multisort($tn, SORT_ASC, $tl); return $tl; } function dump_lire_status($status_file) { $status_file = _DIR_TMP.basename($status_file).".txt"; if (!lire_fichier($status_file, $status) OR !$status = unserialize($status)) return ''; return $status; } function dump_verifie_sauvegarde_finie($status_file) { if (!$status=dump_lire_status($status_file) OR $status['etape']!=='fini') return ''; return ' '; } function dump_nom_sauvegarde($status_file) { if (!$status=dump_lire_status($status_file) OR !file_exists($f=$status['archive'].".sqlite")) return ''; return $f; } function dump_taille_sauvegarde($status_file) { if (!$f=dump_nom_sauvegarde($status_file) OR !$s = filesize($f)) return ''; return $s; } function dump_date_sauvegarde($status_file) { if (!$f=dump_nom_sauvegarde($status_file) OR !$d = filemtime($f)) return ''; return date('Y-m-d',$d); } ?>