Wikini

DiscussionsActionSynthese

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-54-145-82-104.compute-1.amazonaws.com
Offrir une synthese semi-automatique de l'activité du wiki sur une période donnée à un groupe donné.

Usage : {{synthese}}

Paramètres :

Exemples :


1ère étape : formulaire d'accueil de l'action

Synthèse

Formulaire

Changements intervenus depuis : jours

destinée à (adresses email séparées par des virgules) :

commentaire :




2ème étape : prévisualisation de l'envoi et formulaire de confirmation

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.




A suivre...

Code fonctionnel. (Pour tester cette action, copier/coller ce code dans un fichier synthese.php placé dans /actions/.)
<?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)&nbsp;: </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 
"";
}

?>


Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]