X-Git-Url: http://git.heureux-cyclage.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Fexec%2Fadmin_tech.php;fp=www%2Fecrire%2Fexec%2Fadmin_tech.php;h=629922489f37ea12d6ba290e9f53a835e8c360bc;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/ecrire/exec/admin_tech.php b/www/ecrire/exec/admin_tech.php new file mode 100644 index 0000000..6299224 --- /dev/null +++ b/www/ecrire/exec/admin_tech.php @@ -0,0 +1,312 @@ +
"; + 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

" . + $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

" + . $head + . join('',$tl) + . "\n" + . '
" + . "\n
'; + + + $plie = _T('info_options_avancees'); + // restauration partielle / fusion + $opt = debut_cadre_enfonce('',true) . + "\n
" . + " 
\n" . + " 
\n" . + "" . + "  \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" + . 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
  1. \n" . + join("
  2. \n
  3. ", $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; +} + +?>