";
echo "",
gros_titre(_T('titre_admin_tech'),'',false),
'
';
if ($GLOBALS['connect_toutes_rubriques']) {
echo barre_onglets("administration", "sauver") . " ";
echo debut_gauche('',true);
echo debut_boite_info(true);
echo _T('info_gauche_admin_tech');
echo fin_boite_info(true);
$repertoire = _DIR_DUMP;
if (!@file_exists($repertoire)
AND !$repertoire = sous_repertoire(_DIR_DUMP,'',false,true)
) {
$repertoire = preg_replace(','._DIR_TMP.',', '', _DIR_DUMP);
$repertoire = sous_repertoire(_DIR_TMP, $repertoire);
}
$dir_dump = $repertoire;
} else {
echo debut_gauche('', true);
$dir_dump = determine_upload();
}
echo debut_droite('',true);
//
// Sauvegarde de la base
//
echo debut_cadre_trait_couleur('',true,'',_T('texte_sauvegarde'),'sauvegarder');
// a passer en fonction
if (substr(_DIR_IMG, 0, strlen(_DIR_RACINE)) === _DIR_RACINE)
$dir_img = substr(_DIR_IMG,strlen(_DIR_RACINE));
else
$dir_img = _DIR_IMG;
$dir_dump = joli_repertoire($dir_dump);
$res =
"\n" .
http_img_pack('warning.gif', _T('info_avertissement'),
"style='width: 48px; height: 48px; float: right;margin: 10px;'") .
_T('texte_admin_tech_01',
array('dossier' => ''.$dir_dump.' ', 'img'=>''.$dir_img.' ')) .
' ' .
_T('texte_admin_tech_02',
array('spipnet' => $GLOBALS['home_server']
. '/' . $GLOBALS['spip_lang'] . '_article1489.html'
)) .
"
";
$chercher_rubrique = charger_fonction('chercher_rubrique', 'inc');
$form = $chercher_rubrique(0, 'rubrique', !$GLOBALS['connect_toutes_rubriques'], 0, 'admin_tech');
if ($form) {
$res .= "\n" .
_T('texte_admin_tech_04') .
" " .
$form . ' ';
}
$file = nom_fichier_dump();
$nom = "\n ";
$znom = "\n ";
$res .=
_T('texte_admin_tech_03') .
"\n\n"
. "\n ";
$res .= options_avancees_dump();
echo
generer_form_ecrire('export_all', $res, '', _T('texte_sauvegarde_base')),
fin_cadre_trait_couleur(true);
//
// Restauration de la base
//
// restaurer est equivalent a detruire, ou pas (cas des restaurations partielles, a affiner ?)
if (autoriser('detruire')) {
echo debut_cadre_trait_couleur('',true,'', _T('texte_restaurer_base'),'restaurer');
echo admin_sauvegardes($dir_dump, _request('tri'));
echo fin_cadre_trait_couleur(true);
//
// Lien vers la reparation
//
if (!_request('reinstall') AND version_compare(sql_version(),'3.23.14','>=')) {
$res = "\n".
_T('texte_crash_base') .
"\n
";
echo
debut_cadre_trait_couleur('',true,'',_T('texte_recuperer_base'),'reparer'),
generer_form_ecrire('admin_repair', $res, '', _T('bouton_tenter_recuperation')),
fin_cadre_trait_couleur(true);
}
}
echo " ";
echo fin_gauche(), fin_page();
}
}
function admin_sauvegardes($dir_dump, $tri)
{
$liste_dump = preg_files(_DIR_DUMP,'\.xml(\.gz)?$',50,false);
$selected = end($liste_dump);
$n = strlen(_DIR_DUMP);
$tl = $tt = $td = array();
$f = "";
$i = 0;
foreach($liste_dump as $fichier){
$i++;
$d = filemtime($fichier);
$t = filesize($fichier);
$s = ($fichier==$selected);
$class = 'row_'.alterner($i, 'even', 'odd');
$fichier = substr($fichier, $n);
$tl[]= liste_sauvegardes($i, $fichier, $class, $s, $d, $t);
$td[] = $d;
$tt[] = $t;
}
if ($tri == 'taille')
array_multisort($tt, SORT_ASC, $tl);
elseif ($tri == 'date')
array_multisort($td, SORT_ASC, $tl);
$fichier_defaut = $f ? basename($f) : str_replace(array("@stamp@","@nom_site@"),array("",""),_SPIP_DUMP);
$self = self();
$class = 'row_'.alterner($i+1, 'even', 'odd');
$head = !$tl ? '' : (
"\n"
. ''
. _T('info_nom')
. " \n" . ''
. _T('taille_octets', array('taille' => ''))
. " \n" . ''
. _T('public:date')
. ' ');
$texte = _T('texte_compresse_ou_non')." ";
$h = _T('texte_restaurer_sauvegarde', array('dossier' => ''.$dir_dump.' '));
$res = "\n "
. $h
. '
'
. _T('entree_nom_fichier', array('texte_compresse' => $texte))
. "\n ';
$plie = _T('info_options_avancees');
// restauration partielle / fusion
$opt = debut_cadre_enfonce('',true) .
"\n" .
" ".
_T('sauvegarde_fusionner') .
" \n" .
" \n".
_T('sauvegarde_fusionner_depublier') .
" \n" .
"" .
_T('sauvegarde_url_origine') .
" " .
" \n " .
'
' .
fin_cadre_enfonce(true);
$res .= block_parfois_visible('import_tables', $plie, $opt, '', false);
return generer_form_ecrire('import_all', $res, '', _T('bouton_restaurer_base'));
}
// http://doc.spip.org/@liste_sauvegardes
function liste_sauvegardes($key, $fichier, $class, $selected, $date, $taille)
{
return "\n\n"
. str_replace('/', ' / ', $fichier)
. " "
. taille_en_octets($taille)
. ' '
. affdate_heure(date('Y-m-d H:i:s',$date))
. ' ';
}
// http://doc.spip.org/@nom_fichier_dump
function nom_fichier_dump()
{
global $connect_toutes_rubriques;
if ($connect_toutes_rubriques AND file_exists(_DIR_DUMP))
$dir = _DIR_DUMP;
else $dir = determine_upload();
$site = isset($GLOBALS['meta']['nom_site'])
? preg_replace(array(",\W,is",",_(?=_),",",_$,"),array("_","",""), couper(translitteration(trim($GLOBALS['meta']['nom_site'])),30,""))
: 'spip';
$site .= '_' . date('Ymd');
$nom = $site;
$cpt=0;
while (file_exists($dir. $nom . ".xml") OR
file_exists($dir. $nom . ".xml.gz")) {
$nom = $site . sprintf('_%03d', ++$cpt);
}
return $nom;
}
function options_avancees_dump(){
list($tables,) = base_liste_table_for_dump(lister_tables_noexport());
$plie = _T('info_options_avancees');
$res = controle_tables_en_base('export', $tables);
$res = ""._T('install_tables_base')." "
. "\n\n" .
join(" \n", $res) .
" \n";
$res = block_parfois_visible('export_tables', $plie, $res, '', false);
return $res;
}
// Fabrique la liste a cocher des tables presentes
function controle_tables_en_base($name, $check)
{
$p = '/^' . $GLOBALS['table_prefix'] . '/';
$res = $check;
foreach(sql_alltable() as $t) {
$t = preg_replace($p, 'spip', $t);
if (!in_array($t, $check)) $res[]= $t;
}
sort($res);
foreach ($res as $k => $t) {
$res[$k] = " \n"
. $t
. " ("
. sql_countsel($t)
. ")";
}
return $res;
}
?>