gruntnetwork.com/fastiki/php/historique.php

154 lines
5.2 KiB
PHP

<?php
function historique_get_current_version($nom_page) {
$nom_fichier_version = get_nom_fichier_version($nom_page);
if (! file_exists($nom_fichier_version))
return -1;
if (! $fichier_version = @fopen($nom_fichier_version, "r"))
die ("N'a pas pu ouvrir '$nom_fichier_version' en lecture.");
if (! flock($fichier_version, LOCK_SH))
die ("N'a pas pu vérouiller '$nom_fichier_version'.");
$version = fread($fichier_version, filesize($nom_fichier_version));
flock($fichier_version, LOCK_UN);
$version = explode("\n", $version);
$version = $version[0];
if (is_numeric($version)) {
$version = intval($version);
} else {
$version = -1;
}
return $version;
}
function historique_nouvelle_version($nom_page) {
$dossier_hist = get_dossier_hist($nom_page);
mkdir_if_not_exists($dossier_hist);
/* Ouverture et verrouillage du compteur de versions */
$nom_fichier_version = get_nom_fichier_version($nom_page);
touch($nom_fichier_version); // Pour être sûr que le fichier existe déjà.
if (! $fichier_version = @fopen($nom_fichier_version, "r+"))
die ("N'a pas pu ouvrir '$nom_fichier_version' en ajout/écriture.");
if (! flock($fichier_version, LOCK_EX))
die ("N'a pas pu vérouiller '$nom_fichier_version'.");
/* Lecture et incrémentation du compteur de versions */
$version = "";
if (($filesz = filesize($nom_fichier_version)) != 0)
$version = fread($fichier_version, $filesz);
$version = explode("\n", $version);
$version = $version[0];
if (is_numeric($version)) {
$version = intval($version) + 1;
} else {
$version = 0;
}
/* Écriture du compteur de versions */
if (! ftruncate($fichier_version, 0))
die ("N'a pas pu tronquer '$nom_fichier_version'.");
if (! rewind($fichier_version))
die ("N'a pas pu rembobiner '$nom_fichier_version'.");
if (! fwrite($fichier_version, $version))
die ("N'a pas pu écrire dans '$nom_fichier_version'.");
/* Déverrouillage et fermeture */
flock($fichier_version, LOCK_UN);
fclose($fichier_version);
mkdir(get_dossier_hist_version($nom_page, $version), 0777, true);
return $version;
}
function get_dossier_hist($nom_page) {
return get_cfg("dossier", "historique") . "/page/" . securiser_chaine_slashes($nom_page);
}
function get_dossier_hist_version($nom_page, $version = NULL) {
if (is_null($version))
$version = historique_get_current_version($nom_page);
return get_dossier_hist($nom_page) . "/" . $version;
}
function get_nom_fichier_version($nom_page) {
return get_dossier_hist($nom_page) . "/version.txt";
}
function get_nom_fichier_source($nom_page, $version = NULL) {
return get_dossier_hist_version($nom_page, $version) . "/source.txt";
}
function get_nom_fichier_log($nom_page, $version = NULL) {
return get_dossier_hist_version($nom_page, $version) . "/log.txt";
}
function page_existe($nom_page, $version = NULL) {
return file_exists(get_nom_fichier_source);
}
function ecrire_log($temps, $nom_utilisateur, $action, $nom_page, $version, $depuis_page, $depuis_version) {
$donnees = securiser_chaine_espaces($temps)
. " " . securiser_chaine_espaces($nom_utilisateur)
. " " . securiser_chaine_espaces($action)
. " " . securiser_chaine_espaces($nom_page)
. " " . securiser_chaine_espaces($version)
. " " . securiser_chaine_espaces($depuis_page)
. " " . securiser_chaine_espaces($depuis_version)
. "\n";
if (! file_put_contents(get_nom_fichier_log($nom_page, $version), $donnees, FILE_APPEND | LOCK_EX))
die("Impossible de mettre à jour le log");
if (! file_put_contents(get_cfg("fichier", "log"), $donnees, FILE_APPEND | LOCK_EX))
die("Impossible de mettre à jour le log général");
}
function historique_modifier_source($nom_utilisateur, $nom_page, $nouveau_nom_page, $source) {
if ($nom_page != $nouveau_nom_page) {
historique_renommer_page($nom_utilisateur, $nom_page, $nouveau_nom_page, $source);
} else if (! page_existe($nom_page)) {
historique_creer_page($nom_utilisateur, $nom_page, $source);
} else {
$version = historique_nouvelle_version($nom_page);
ecrire_fichier(get_nom_fichier_source($nom_page, $version), $source);
ecrire_log(time(), $nom_utilisateur, "Modifier", $nom_page, $version, "", "");
}
}
function historique_renommer_page($nom_utilisateur, $depuis_page, $nom_page, $source = NULL) {
$version_depuis = historique_nouvelle_version($depuis_page);
$version = historique_nouvelle_version($nom_page);
if (is_null($source))
$source = lire_source($depuis_page, "", $depuis_version);
ecrire_fichier(get_nom_fichier_source($nom_page, $version), $source);
$t = time();
ecrire_log($t, $nom_utilisateur, "RenomerDepuis", $nom_page, $version, $depuis_page, $version_depuis - 1);
ecrire_log($t, $nom_utilisateur, "RenomerVers", $depuis_page, $version_depuis, $nom_page, $version);
return $version;
}
function historique_creer_page($nom_utilisateur, $nom_page, $source = "") {
$version = historique_nouvelle_version($nom_page);
ecrire_fichier(get_nom_fichier_source($nom_page, $version), $source);
ecrire_log(time(), $nom_utilisateur, "Creer", $nom_page, $version, "", "");
return $version;
}
function historique_supprimer_page($nom_utilisateur, $nom_page) {
}
?>