====== Dokuwiki ======
===== Why is it optimized for my use ? =====
* Dokuwiki is a wiki which can easily be implemented, and maintained (files in text format, not a databse)
* Powerful indexation, differently from MS Sharepoint where you can't find anything.
* Pages are text files that can be automatically generated for automating reports, inventory…
===== Problem with pages refresh in dokuwiki ======
Remove all folders into **data/cache/**
However, you will still have lots of junk left around. For example in data/changes.log, various files under cache (including the .idx files etc). If possible you could just start from a blank state as follows (again under Unix) but be warned that this will mean losing all your historical information (i.e. recent changes):
cat /dev/null > /dokuwiki_base/data/changes.log
rm -Rf /dokuwiki_base/data/attic/*
rm -Rf /dokuwiki_base/data/cache/?
rm -Rf /dokuwiki_base/data/cache/*.idx
rm -Rf /dokuwiki_base/data/cache/purgefile
Browse each and every page of your Wiki.
Reindex wiki pages (-c to clear index before):
', $msg, 'liberatator
Récapitulation';
echo 'Libération: ', $progres['liberation'], '
';
$count = count($progres['etape']);
for ($i = 1; $i < $count; $i++) {
echo '
étape ', $i, ' ', $progres['etape'][$i];
}
echo 'étape courante
';
}
}
function fin_doc() {
global $statut;
if( $statut['fin_fait'] )
return;
echo '';
}
function div( $type,$msg ) {
debut_doc();
echo '
Arret.");
fin_doc();
exit();
}
}
elseif(!is_writable($statut['workdir'])) {
erreur( "Le répertoire «{$statut['workdir']}» existe mais n'est pas écriturable,
Arret.");
fin_doc();
exit();
}
$statut['workdir'].='/';
# Essayons de créer un fichier .htaccess pour interdir le téléchargement des
# fichiers temporaires. cela n'est pas crucial, donc non fatal en cas d'erreur.
if(!file_exists($statut['workdir'].'.htaccess')) {
if($pe=fopen($statut['workdir'].'.htaccess','w')){
@fwrite($pe,"## no access to the liberatator working directory\norder allow,deny\ndeny from all\nSatisfy All\n");
@fclose($pe);
}
}
function myopendir( $dir ){
if( is_dir( $dir )) return @opendir( $dir );
return false;
}
$freefrdirtrash=$_SERVER['DOCUMENT_ROOT'].'/poubelle';
function myrmdir( $d ) {
global $freefrdirtrash;
if(!is_dir($d))
return false;
$h=opendir($d);
while(false!==($s=readdir($h))) {
if( $s != '.' && $s != '..' ) {
closedir($h);
return false;
}
}
closedir($h);
return rename($d, $freefrdirtrash);
}
function myglob( $patt, $ignored='dummy' ) {
$dir=dirname( $patt );
$pat=basename( $patt );
$reponse=array();
if (is_dir($dir) && ($d = @opendir($dir))) {
$gl = array( '/\./', '/\*/', '/\?/', '/^/', '/$/' );
$re = array( '\.', '.*', '.', '/^', '\$/' );
$newpat=preg_replace( $gl, $re, $pat );
while (($filename = @readdir($d)) !== false) {
if( $filename == '.' || $filename == '..' )
continue;
if( preg_match( $newpat, $filename )) {
$reponse[]= $dir . '/' . $filename;
}
}
}
return $reponse;
}
function req_vers_dir( $v ) {
$x=( '/' == $v[0] ) ? $v : DOKU_INC.$v;
return ('/' != $x[strlen($x)-1]) ? $x.'/' : $x;
}
function hidden() {
global $progres;
echo '';
if( !array_key_exists( 'hidden', $progres ))
return;
foreach( $progres['hidden'] as $k => $v ){
echo '';
}
}
function sauvevaleur( $nom, &$mixed, $f=false) {
global $statut, $progres, $pointeur_fic;
$f=$statut['workdir'].$nom.'.'.$progres['liberation'];
if( $f === false && file_exists( $f )) {
sauvevaleur( $nom.'.ecr', $mixed, true );
rename( $fn.'.ecr', $fn );
return;
}
$fh=fopen($f,'w');
fwrite( $fh, serialize( $mixed ));
fclose( $fh );
}
function chargevaleur($nom, &$mixed) {
global $statut, $progres;
$fn=$statut['workdir'].$nom.'.'.$progres['liberation'];
if(!file_exists( $fn ))
return;
$fh=fopen($fn, 'r');
$mixed=unserialize(fread($fh, filesize($fn)));
fclose($fh);
}
function debut_form() {
global $progres, $statut;
if($statut['debut_form']) return;
debut_doc();
$statut['debut_form']=true;
echo '";
}
define('OK','réussi');
define('ER','erreur');
define('EC','en cours');
function etape($txt,$modif_derp){
global $progres;
if(!$modif_derp)
$progres['etape'][]=$txt;
else{
$count=count($progres['etape']);
if($count>1)
$progres['etape'][$count-1]=$txt;
}
}
function ok($etape){
etape($etape.OK, false);
}
function er($etape){
etape($etape.ER, false);
}
function ec($etape){
etape($etape.EC, false);
}
function suivant() {
debut_form(); fin_form(); fin_doc(); exit();
}
# boolean
function dos_haut( $nomfic ) {
global $progres, $content;
$nom=$nomfic.'.'.$progres['liberation'];
if( file_exists( $nom ))
return true;
if( !($pl=fopen($nomfic, 'rb')))
return false;
if(!($pe=fopen($nom,'wb'))) {
fclose($pl);
return false;
}
@fwrite($pe,fread($pl,($taille=filesize($nomfic))));
@fclose($pe);
@fclose($pl);
if( $taille!=filesize($nom)) {
@unlink($nom);
return false;
}
return true;
while(false !== ($data=fread($pl,65536))){
if(false === fwrite($pe,$data)) {
fclose($pe);
fclose($pl);
@unlink($nom);
return false;
}
}
if(!feof($pl)) {
fclose($pe);
fclose($pl);
@unlink($nom);
return false;
}
fclose($pe);
fclose($pl);
return true;
}
function installe_precharge() {
global $progres;
$fn=$progres['inc'].'preload.php';
$fnh=html($fn);
if(file_exists($fn)) {
message( 'Un fichier preload.php existe déja
'.html($fn).'
Je considère ce fichier convenable (en fait j\'vois pas c\'que ça pourrait êt\' d\'aut\' qu\'le fichier qu\'j\'m\'apprêt\' à installer...).' );
return $fn;
}
/*
if(file_exists($fn) && ! array_key_exists( 'ecrase_preload', $_REQUEST )) {
$progres['hidden']['ecrase_preload']=1;
attention( "Le fichier « {$fnh} » existe déjà. Si vous poursuivez, il sera remplacé.
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, '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é 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é 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();