From: MonSiteWikiNi_notifier
To: charles@nepote.org
Subject: [RobotWikini] Derniers changements sur MonSiteWikiNi depuis 25 jours
Message:
Pages modifiées sur le site depuis 25 jours.
<?php
/*
synthese.php v. 0.6 du 13/04/2005 12:12 par Charles Népote
Licence GPL.
Objectif :
Offrir une synthese semi-automatique de l'activité du wiki sur une période
donnée à un groupe donné.
Entrées :
- la date de départ (par défaut la date courrante)
- le nombre de jours depuis la date de départ
- les adresses mail des destinataires (optionnel)
Sortie actuelle :
--------------------------------------------------------------------------
Pages modifiées sur le site depuis 7 jours.
* PagePrincipale, modifiée par CharlesNepote et DavidDelon
* AutrePage, modifiée par CharlesNepote
--------------------------------------------------------------------------
Sortie (prospective) :
--------------------------------------------------------------------------
Les pages suivantes ont été modifiées depuis 7 jours :
PagePrincipale
* modifiée par CharlesNepote, DavidDelon.
* page : http://www.wikini.net/wakka.php?wiki=PagePrincipale
* modifs : http://www.wikini.net/wakka.php?wiki=PagePrincipale%2Fdiff&a=18461&b=18396
AutrePage
* modifiée par CharlesNepote, DavidDelon.
* page : http://www.wikini.net/wakka.php?wiki=AutrePage
* modifs : http://www.wikini.net/wakka.php?wiki=AutrePage%2Fdiff&a=18461&b=18396
--------------------------------------------------------------------------
Destinataires potentiels du mail :
-- l'utilisateur qui appelle cette page
-- les abonnés à la synthèse (grâce à la table triples)
-- tous les utilisateurs
Questions :
-- nécessite d'être identifié pour l'employé ? (et les robots ?)
-- utilisateur qui valide le message obligatoirement destinataire ?
Usage :
{{synthese depuis="7" dest="xxx@yyy.com,zzz@aaa.fr"}}
// TODO :
// -- pouvoir modifier le commentaire (voire tout) dans la prévu
*/
//ini_set("display_errors", "1");
// -- Empéche l'execution php en direct ----------------------------------
if (!defined('WIKINI_VERSION')) die ('accès direct interdit');
// -- Contrôle de l'existance de la fonction mail() ----------------------
// Cette fonction est en effet souvent désactivée par les hébergeurs
// gratuits
if (!function_exists('mail'))
{
echo "<p>L'hébergeur ne gère pas l'envoi de mail.</p>";
return;
}
// -- Déclaration des variables ------------------------------------------
$debug = "";
$msg = "";
$error = array();
$depuis = isset($_REQUEST["depuis"]) ? $_REQUEST["depuis"] : "";
if (empty($depuis)) $depuis = $this->GetParameter("depuis");
if (empty($depuis)) $error["manquant"][] = "depuis";
$dest = isset($_REQUEST["dest"]) ? $_REQUEST["dest"] : "";
if (empty($dest)) $dest = $this->GetParameter("dest");
if (empty($dest)) $error["manquant"][] = "dest";
$emet = isset($_REQUEST["emet"]) ? $_REQUEST["emet"] : "";
if (empty($emet)) $emet = $this->GetParameter("emet");
if (empty($emet)) $emet = $this->config["wakka_name"] . "_notifier";
$prevu = isset($_REQUEST["prevu"]) ? $_REQUEST["prevu"] : "";
$comment = isset($_REQUEST["comment"]) ? $_REQUEST["comment"] : "";
$validation = isset($_REQUEST["validation"]) ? $_REQUEST["validation"] : "";
//$currentUser = $this->GetUserName();
//$currentUserMail = ..................
if (!empty($dest))
{
$Watchers = explode(",", $dest);
foreach ($Watchers as $Watcher)
{
if(test_email_adress($Watcher))
$error["syntaxe"][] = $Watcher;
}
}
// -- I. Formulaire de saisie --------------------------------------------
if ((empty($prevu) && empty($validation)) || (!empty($prevu) && !empty($error)))
{
echo "<!-- synthese v. 0.6 -->\n";
echo "<div style=\"synthese\">\n";
echo "<form method=\"post\" action=\"",
$this->Href(), "\" name=\"selection\">\n";
echo "<h2 style=\"margin-bottom: 0.7em\">Synthèse</h2>\n";
echo "<fieldset>\n",
"<legend>Formulaire</legend>\n";
if (!empty($error["manquant"]) && !empty($prevu))
echo "<p><strong>Vous devez renseigner le(s) paramètre(s) <em>".
pc_array_to_comma_string($error["manquant"]).
"</em></strong></p>";
if (!empty($error["syntaxe"]) && !empty($prevu))
echo "<p><strong>Vous devez corriger le(s) paramètre(s) <em>".
pc_array_to_comma_string($error["syntaxe"]).
"</em></strong></p>";
echo "<p>Changements intervenus depuis : <input name=\"depuis\" value=\"",
$depuis, "\" /> jours</p>\n",
"<p>destinée à (adresses email séparées par des virgules) : </p>",
"<textarea name=\"dest\" cols=\"60\" rows=\"3\">",
$dest, "</textarea>\n",
"<p>commentaire : </p><textarea name=\"comment\" cols=\"60\" rows=\"3\">",
$comment, "</textarea>\n",
"<p><button name=\"prevu\" value=\"prevu\">Prévisualiser</button></p>\n",
"</p>\n";
echo "</fieldset>\n",
"</form>\n",
"</div>\n\n";
}
// -- II. Calculs en vu de la prévu ou de l'envoi ------------------------
if ((!empty($prevu) && empty($error)) || !empty($validation))
{
// -- Construction du résultat de la requête ---------------------
$requete = 'select tag, user
from ' . $this->config['table_prefix'] . 'pages
where
time < now()
and time > DATE_SUB(now(), INTERVAL '. $depuis . ' DAY)';
// group by tag';
$resultat = $this->LoadAll($requete);
/* *
echo "<pre>"; print_r($resultat); echo "</pre>";
/* */
// Si aucune page n'a été modifiée sur la période
// on affiche un message
if (empty($resultat))
{
$msg = "<p>Aucune modification sur le site depuis " .
$depuis . " jours.</p>";
}
else
{
if(!empty($comment)) $msg .= "<p>" . $comment . "</p>\n";
$msg .= "<p>Pages modifiées sur le site depuis ".
$depuis . " jours.</p>\n";
$msg .= "<ul>\n";
foreach ($resultat as $line)
{
//$tableau[$line['tag']] = $tableau[$line['tag']].",".$line['user'];
//$tableau = array($line['tag'] => array($line['user']));
$tableau[$line['tag']][$line['user']] = $line['user'];
}
foreach ($tableau as $clef => $valeur)
{
$users = pc_array_to_comma_string($valeur);
$msg .= "<li>".$this->ComposeLinkToPage($clef).
", modifiée par ". $users ."</li>\n";
}
$msg .= "</ul>\n";
/* *
echo "<pre>"; print_r($tableau); echo "</pre>";
/* */
}
$subject = "[RobotWikini] Derniers changements sur ".
$this->config['wakka_name']. " depuis ". $depuis . " jours";
$headers = "From: " . $emet . "\n";
$headers .= "X-Mailer: PHP/".phpversion()."\n"; //mailer
$headers .= "X-Priority: 3\n"; //1 UrgentMessage, 3 Normal
//comment this to send text format
$headers .= "Content-Type: text/html; charset=iso-8859-1\n";
}
// -- III. Prévisualisation ----------------------------------------------
if (!empty ($msg) && !empty($prevu))
{
// Prévu
echo "<!-- Prévisualisation -->\n";
echo "<div class=\"synthese\">\n";
echo "<p><strong>From: </strong>", $emet, "</p>\n",
"<p><strong>To: </strong>", $dest, "</p>\n",
"<p><strong>Subject: </strong>", $subject, "</p>\n",
"<p><strong>Message: </strong>", $msg, "</p>\n";
//$headers, "<br />\n";
// Formulaire de confirmation
echo "<form name=\"form\" method=\"post\" action=\"", $this->Href(), "\">";
echo "<p><button type=\"submit\" name=\"validation\" value=\"1\">Envoyer</button></p>\n";
echo "<input type=\"hidden\" name=\"depuis\" value=\"", $depuis, "\" />\n";
echo "<input type=\"hidden\" name=\"emet\" value=\"", $emet, "\" />\n";
echo "<input type=\"hidden\" name=\"dest\" value=\"", $dest, "\" />\n";
echo "<input type=\"hidden\" name=\"comment\" value=\"", $comment, "\" />\n";
echo "</form>\n";
echo "</div>\n";
}
// -- IV. Envoi du message -----------------------------------------------
if (!empty($msg) && !empty($validation))
{
echo "<!-- Envoi -->\n";
//$message = "<p>Bonjour " . $Watcher . "</p>";
//$message .= "<p>La page suivante a été modifiée : <a href=\"".$this->Href("",$tag,"")."\">".$this->Href("",$tag,"")."<a></p>";
//if ($pages) $message .= "<p>Modifications : <a href=\"".$this->Href("",$diff,"")."\">".$this->Href("",$diff,"")."<a></p>";
//$message .= "<p>-- Le robot wikini</p>";
$Watchers = explode(",", $dest);
$MailAdr = $this->LoadSingle("
select email
from " .$this->config["table_prefix"]."users
where name = '".mysql_escape_string($this->GetUserName())."'");
$Watchers = explode(",", $dest);
foreach ($Watchers as $Watcher)
{
if($MailAdr['email'] == $Watcher)
{
$MailAdr['email'] == "";
break;
}
}
if (!empty($MailAdr['email'])) $dest .= "," . $MailAdr['email'];
// TODO : test de l'envoi
notify ($dest, $subject, $msg, $headers, $debug);
$users = pc_array_to_comma_string(explode(",", $dest));
echo "<p>Votre synthèse a été envoyée à ", $users,
"</p>\n";
echo "<p>[<a href=\"", $this->Href(), "\">Retour</a>]</p>\n";
echo "<!-- /Envoi -->\n";
}
// -- Fonctions ----------------------------------------------------------
function notify($dest, $subject, $msg, $headers, $debug)
{
if(empty($debug)) mail ($dest, $subject, $msg, $headers);
else echo $dest, "<br />\n", $subject, "<br />\n", $msg, "<br />\n",
$headers, "<br />\n";
}
function pc_array_to_comma_string($tableau)
{
switch(count($tableau))
{
case 0:
return '';
case 1:
return reset($tableau);
case 2:
return join(' et ', $tableau);
default:
$dernier = array_pop($tableau);
return join(', ', $tableau) . " et " . $dernier;
}
}
function pc_array_to_strict_comma($tableau)
{
switch(count($tableau))
{
case 0:
return '';
case 1:
return reset($tableau);
default:
return join(',', $tableau);
}
}
function test_email_adress($email)
{
if(!preg_match("/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i", $email))
return "1";
else return "";
}
?>