FRENCH | ENGLISH -------------------------------------+-------------------------------------- Ce logiciel est un programme | This software is a computer program informatique servant à rendre | whose purpose is to make DokuWiki utilisable DokuWiki chez | run at free.fr. l'hébergeur français free | | Ce logiciel est régi par la licence | This software is governed by the CeCILL soumise au droit français et | CeCILL license under French law and respectant les principes de | abiding by the rules of diffusion des logiciels libres. | distribution of free software. You Vous pouvez utiliser, modifier | can use, modify and/ or et/ou redistribuer ce programme | redistribute the software under the sous les conditions de la licence | terms of the CeCILL license as CeCILL telle que diffusée par le | circulated by CEA, CNRS and INRIA CEA, le CNRS et l'INRIA sur le site | at the following URL "http://www.cecill.info/". | "http://www.cecill.info/". | En contrepartie de l'accessibilité | As a counterpart to the access to au code source et des droits de | the source code and rights to copie, de modification et de | copy, modify and redistribute redistribution accordés par cette | granted by the license, users are licence, il n'est offert aux | provided only with a limited utilisateurs qu'une garantie | warranty and the software's limitée. Pour les mêmes raisons, | author, the holder of the economic seule une responsabilité restreinte | rights, and the successive pèse sur l'auteur du programme, le | licensors have only limited titulaire des droits patrimoniaux | liability. et les concédants successifs. | | A cet égard l'attention de | In this respect, the user's l'utilisateur est attirée sur les | attention is drawn to the risks risques associés au chargement, à | associated with loading, using, l'utilisation, à la modification | modifying and/or developing or et/ou au développement et à la | reproducing the software by the reproduction du logiciel par | user in light of its specific l'utilisateur étant donné sa | status of free software, that may spécificité de logiciel libre, qui | mean that it is complicated to peut le rendre complexe à manipuler | manipulate, and that also et qui le réserve donc à des | therefore means that it is développeurs et des professionnels | reserved for developers and avertis possédant des | experienced professionals having connaissances informatiques | in-depth computer knowledge. Users approfondies. Les utilisateurs | are therefore encouraged to load sont donc invités à charger et | and test the software's suitability tester l'adéquation du logiciel à | as regards their requirements in leurs besoins dans des conditions | conditions enabling the security of permettant d'assurer la sécurité de | their systems and/or data to be leurs systèmes et ou de leurs | ensured and, more generally, to données et, plus généralement, à | use and operate it in the same l'utiliser et l'exploiter dans les | conditions as regards security. mêmes conditions de sécurité. | | Le fait que vous puissiez accéder à | The fact that you are presently cet en-tête signifie que vous avez | reading this means that you have pris connaissance de la licence | had knowledge of the CeCILL license CeCILL, et que vous en avez accepté | and that you accept its terms. les termes. | */ if(function_exists('date_default_timezone_set') && '' == ini_get('date.timezone')) date_default_timezone_set( 'Europe/Paris' ); $debug=false; $ici=dirname($_SERVER['SCRIPT_FILENAME']).'/'; define( 'DOKU_INC', $ici ); $statut=array( 'debut_fait' => false, 'fin_fait' => false, 'debut_form' => false, 'fin_form' => false, 'asauver' => false, ); $progres=array( 'etat' => 'dir_non_verifie', 'liberation' => false, 'etape' => array(0 => false), ); $pointeur_fic=0; function debut_doc() { global $statut,$progres; if( $statut['debut_fait'] ) return; $statut['debut_fait']=true; ?>
', $msg, '
Sinon, abandonnez l'idée d'utiliser liberatator" );
suivant();
}
*/
if( !($fh=fopen($fn, 'w'))) {
erreur( "Impossible de créer le fichier « $fn ».
Vérifiez la présence du répertoire « ".dirname($fn)." », et les droits d'accès (heu chez free les droits sont forcément OK)");
message( "Cliquez sur le bouton « suivant » pour réessayer");
suivant();
}
fwrite( $fh, 'Veuillez relancer complètement liberatator avec un autre nom de libération !' );
suivant();
}
if(false===($contenu=file($fn))) {
erreur( "Étrange ! le fichier « $fn » existe mais on ne peut pas le lire...
Vérifiez la présence du répertoire « ".dirname($fn)." », et les droits d'accès (heu chez free les droits sont forcément OK)");
message( "Cliquez sur le bouton « suivant » pour réessayer");
suivant();
}
# si array_fill_keys est présent, on rentre. rien à faire.
foreach( $contenu as $ligne ) {
if(!(false===strstr($ligne,'array_fill_keys')))
return 'déjà présente';
}
if( !($fh=fopen($fn, 'a'))) {
erreur( "Impossible d\'ajouter au fichier « $fn ».
Vérifiez la présence du répertoire « ".dirname($fn)." », et les droits d'accès (heu chez free les droits sont forcément OK)");
message( "Cliquez sur le bouton « suivant » pour réessayer");
suivant();
}
fwrite( $fh, '
if(!function_exists(\'array_fill_keys\')) {
function array_fill_keys($keys, $value = \'\') {
return is_array($keys) ?
array_combine($keys,array_fill(0,count($keys),$value))
: null;
}
}
' );
fclose( $fh );
return 'installée';
}
function verifie_session() {
$sess=$_SERVER['DOCUMENT_ROOT'].'/sessions';
if(!file_exists($sess)){
if(!mkdir($sess)){
erreur( "Impossible de créer le répertoire « {$sess} ».
Vérifiez la présence du répertoire « {$_SERVER['DOCUMENT_ROOT']} », et les droits d'accès (heu chez free les droits sont forcément OK)");
message( "Cliquez sur le bouton « suivant » pour réessayer");
suivant();
}
}
return $sess;
}
function verifie_php5(){
if(version_compare(PHP_VERSION, '5.0.0') >= 0) {
return;
}
$fn=$ici.'.htaccess';
$err=true;
if($fh=fopen($fn, 'a')){
fwrite( $fh, "\nphp 1\n");
$err=!fclose($fh);
}
if($err) {
erreur( "Impossible d'activer php5 (création/modification du fichier « $fn ».
Vérifiez la présence du répertoire « {$ici} », et les droits d'accès (heu chez free les droits sont forcément OK)");
message( "Cliquez sur le bouton « suivant » pour réessayer");
suivant();
}
}
function videlock(){
global $conf;
if( ! is_writeable( $conf['savedir'] ) ) {
erreur( 'Incroyable : Le dossier des verrous n\'est pas écriturable !!!
Vérifiez la présence du répertoire « ' . html( $conf['savedir'] ) . ' », et les droits d\'accès (heu chez free les droits sont forcément OK)');
message( "Cliquez sur le bouton « suivant » pour réessayer");
suivant();
}
foreach( myglob( $conf['savedir'] . '/locks/[0-9a-f]{32}' ) as $elem ) {
myrmdir( $elem );
if( is_file( $elem ) )
unlink( $elem );
}
$elem=$conf['savedir'] . '/locks/_indexer.lock';
myrmdir( $elem );
if( is_file( $elem ) )
unlink( $elem );
}
function prepare_parcours(){
global $progres, $pointeur_fic;
$fn=$progres['reclist'];
$progres['fichiers']=file($fn, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );
$pointeur_fic=0;
sauvevaleur('pointeur_fic', $pointeur_fic);
}
function html(&$string){
return htmlspecialchars($string,ENT_NOQUOTES,'UTF-8');
}
function ecrit_tableau( $nomf, &$tab ) {
if(!($pf=fopen($nomf, 'w'))) {
return false;
}
$max=count($tab);
for($i=0;$i<$max;++$i) {
if(false===fwrite($pf,$tab[$i])) {
fclose($pf);
unlink($nomf);
return false;
}
}
return fclose($pf);
}
# In this function, we are under PHP5
function regcallback(&$l) {
global $rec, $repl, $changement, $pointeur_fic, $numligne, $changements;
$numligne++;
$n=preg_replace( $rec, $repl, $l );
if( $n !== $l ) {
$changement++;
$changements[]=array( 'num' => $pointeur_fic, 'numlig' => $numligne, 'ancien' => $l, 'nouveau' => $n );
}
return $n;
}
# In this function, we are under PHP5
function parcours() {
global $progres, $pointeur_fic, $rec, $repl, $changement, $changements, $numligne;
chargevaleur('pointeur_fic', $pointeur_fic);
chargevaleur('chgt', $changements);
$max=count($progres['fichiers']);
$pref='/(^|([ \t(.{[,;@]))';
$suf='(([]} \t,(])|$)/m';
$rec=array(
$pref.'rmdir'.$suf,
$pref.'glob'.$suf,
$pref.'opendir'.$suf,
$pref.'umask'.$suf,
);
$repl = array(
'$2myrmdir$3',
'$2myglob$3',
'$2myopendir$3',
'$2myumask$3',
);
if( $pointeur_fic > 0 )
ok( 'vérifié fichiers : '. $pointeur_fic.'/'.count($progres['fichiers']), false );
else
$changements=array();
if( $pointeur_fic == count($progres['fichiers'])) {
parcours_resultat();
return;
}
debut_doc(); flush();
echo '
Cette page va peut-être « pédaler dans la choucroute ». C\'est pas grave !
',
'Attendez la fin du chargement et rechargez la en cliquant sur le bouton « suivant » ci dessous; ',
'les opérations de remplacement continueront là où elle se seront arrêtées
',
'Répétez cette opération autant de fois que nécessaire, jusqu\'à ce que liberatator passe à l\'étape suivante.
Dokuwiki est modifié et maintenant prêt à fonctionner chez free
', 'Vous trouverez ci dessous la liste des fichiers modifiés et une série de commande FTP pour défaire ce qui a été fait.
', 'Vous devriez sauvegarder ce fichier de résultat
', 'Vous pouvez maintenant
changements effectués
'; $li=1; } #echo ''; printf("%5d < | %s", $changements[$i]['numlig'], $changements[$i]['ancien'] ); printf("%5d > | %s", $changements[$i]['numlig'], $changements[$i]['nouveau'] ); #echo ''; } if($li) echo '
Voilà les commandes que vous pouvez utiliser avec votre client ftp en ligne de commande. Si vous utilisez lftp, remplacez rename par mv
nb
ces commandes ne prennent pas en compte l\'installation éventuelle du fichier preload.php qui a pu avoir lieu. Ce fichier, s\'il a été installé, est de toutes les façons sans effet sur un DokuWiki non modifié.
'; $vu=array(); for($i=0;$i<$max;++$i){ if( array_key_exists( $changements[$i]['num'], $vu ) ) continue; $vu[$changements[$i]['num']]++; echo 'rename ', $progres['fichiers'][$changements[$i]['num']],'.',$progres['liberation'], ' ', $progres['fichiers'][$changements[$i]['num']], "\n"; } echo ''; fin_doc(); exit; } if( array_key_exists( 'liberation', $_REQUEST )) $progres['liberation']=$_REQUEST['liberation']; if( ! $progres['liberation'] ) { debut_doc(); ?>
Bonjour et bienvenue dans le programme liberatator -- le premier des (pas encore) fameux outils tators (tator tools en anglais)--, programme qui va vous permettre de faire fonctionner DokuWiki chez l'hébergeur free.
Vous serez guidés tout au long du processus. Avant toute modification, liberatator effectue une copie de sauvegarde des fichiers. Liberatator vous indiquera aussi la liste des fichiers modifiés. Le nom des fichiers sauvegardés sera le nom d'origine des fichiers, suivi du nom de la session de libération, nom que vous allez choisir maintenant.
Attention, liberatator est totalement expérimental !
Liberatator est distribué sous les termes de la licence libre CeCILL version 2
FRANÇAIS | ENGLISH --------------------------------------+-------------------------------------- L'avertissement ci-dessous n'est | This is only a short warning. qu'une mis en garde. Lisez complète- | Read the full licence. ment la licence d'utilisation. | --------------------------------------+-------------------------------------- En contrepartie de l'accessibilité | As a counterpart to the access to au code source et des droits de | the source code and rights to copie, de modification et de | copy, modify and redistribute redistribution accordés par cette | granted by the license, users are licence, il n'est offert aux | provided only with a limited utilisateurs qu'une garantie | warranty and the software's limitée. Pour les mêmes raisons, | author, the holder of the economic seule une responsabilité restreinte | rights, and the successive pèse sur l'auteur du programme, le | licensors have only limited titulaire des droits patrimoniaux | liability. et les concédants successifs. | | A cet égard l'attention de | In this respect, the user's l'utilisateur est attirée sur les | attention is drawn to the risks risques associés au chargement, à | associated with loading, using, l'utilisation, à la modification | modifying and/or developing or et/ou au développement et à la | reproducing the software by the reproduction du logiciel par | user in light of its specific l'utilisateur étant donné sa | status of free software, that may spécificité de logiciel libre, qui | mean that it is complicated to peut le rendre complexe à manipuler | manipulate, and that also et qui le réserve donc à des | therefore means that it is développeurs et des professionnels | reserved for developers and avertis possédant des | experienced professionals having connaissances informatiques | in-depth computer knowledge. Users approfondies. Les utilisateurs | are therefore encouraged to load sont donc invités à charger et | and test the software's suitability tester l'adéquation du logiciel à | as regards their requirements in leurs besoins dans des conditions | conditions enabling the security of permettant d'assurer la sécurité de | their systems and/or data to be leurs systèmes et ou de leurs | ensured and, more generally, to données et, plus généralement, à | use and operate it in the same l'utiliser et l'exploiter dans les | conditions as regards security. mêmes conditions de sécurité. | | Le fait que vous puissiez accéder à | The fact that you are presently cet en-tête signifie que vous avez | reading this means that you have pris connaissance de la licence | had knowledge of the CeCILL license CeCILL, et que vous en avez accepté | and that you accept its terms. les termes. |
Si vous n'êtes pas d'accord, n'utilisez pas liberatator, détruisez toutes les copies en votre possession.
Nom de cette libération. lettres sans accent seulement, chiffres, tiret et soulignés (par exemple liber001 ou ', $maintenant, ')
nom de libération:
Si cette étape échoue, il faudra recommencer." ); suivant(); case 'commence_liste_fic': case 'dir_include_list_ok': debut_doc(); reclist(); suivant(); break; case 'dir_lib_list_ok': debut_doc(); prepare_parcours(); ok('Fin prêt pour démarrer les modifications des fichiers .php : '); $progres['etat']='parcours'; sauvevaleur('sauve',$progres); echo $progres['etape'][count($progres['etape'])-1]; message( "Au cours de l'étape suivante liberatator va effectivement modifier les fichiers d'extension .php contenus dans votre installation de DokuWiki.
Si cette étape échoue, il suffira de recommencer." ); # echo '
';print_r($progres);echo''; suivant(); break; case 'parcours': parcours(); break; case 'fini': parcours_resultat(); break; default: echo 'b'; break; } suivant();