X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=www%2Fecrire%2Fexec%2Fadmin_tech.php;fp=www%2Fecrire%2Fexec%2Fadmin_tech.php;h=629922489f37ea12d6ba290e9f53a835e8c360bc;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hp=0000000000000000000000000000000000000000;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c;p=velocampus%2Fweb%2Fwww.git
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
';
+
+
+ $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- \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;
+}
+
+?>