Nom de la contribution : Action Activity
Description : action légère permettant de visualiser quels sont les sujets les plus actifs du moments (une sorte de
SujetDuMoment généré dynamiquement)
Page de discussions : DiscussionsActionActivity
Type de contribution : Action
Fonctionne avec : WikiNi > 0.1.1 (en principe)
Intégration technique : sauver le code fourni dans un fichier nommé
activity.php et le placer dans le dossier
actions/
Mainteneur : LordFarquaad (
ProjetsDeLordFarquaadPourWikiNi)
Licence : GPL
Dernière version : 0.1.1
Dernière livraison : 2006-01-18
Accès au code et mise en oeuvre : la page
DiscussionsActionActivity
Démonstration :
Intégration au projet WikiNi : souhaitée par
LordFarquaad: je trouve que cette action aurait bien sa place dans le
tableau de bord
Bugs : [signaler ici les bugs connus]
L'action
{{activity}} permet d'afficher la liste des pages les plus modifiées au cours des derniers jours, elle peut prendre plusieurs paramètres:
- days: le nombre de jours que la période doit couvrir (attention: ce nombre de jours doit être inférieure à la période de purge [par défaut 90 jours] puisque les versions plus anciennes sont automatiquement effacées pour économiser de la place). La valeur par défaut est de 7 jours.
- max: la nombre maximum de pages à lister. La valeur par défaut est de 10 et ce nombre est limité à 50.
- exclude: liste des pages à exclure, séparées par des virgules, par exemple: {{activity exclude="BacASable, LordFarquaad"}}
- user: permet de ne lister que les pages modifiées par un utilisateur en particulier. Par exemple {{activity user="LordFarquaad"}} n'affichera que les pages que LordFarquaad a modifiées (et ne comptera que ses éditions)
Changelog
2006-01-18
- version 0.1.1
- changements:
- suppression de l'affichage de la ligne explicative, le soin de le faire est laissé au contributeur avec la phrase qu'il souhaite
- ajout du paramètre user
- ajout du message d'erreur lorsque days est supérieur à la période de purge
2006-01-16
- version 0.1.0
- première version
Code source de l'action
<?php
// auteur: Didier Loiseau
// license: GPL
$days = (int) $this->GetParameter('days');
$maxdays = (int) $this->GetConfigValue('pages_purge_time');
$days = $days > 0 ? $days : 7;
if ($maxdays && $days > $maxdays)
{
echo '<strong>ActionActivity</strong>: Attention la valeur de ' . $days . ' jours est trop grande ' .
'car la période de purge est de ' . $maxdays . ' jours, cette valeur sera donc employée.<br />';
$days = $maxdays;
}
$max = (int) $this->GetParameter('max');
$max = $max > 50 || $max < 1 ? 10 : $max;
$user = trim($this->GetParameter('user'));
$user_sql = $user ? 'AND user = "' . addslashes($user) . '"' : '';
$exclude = trim($this->GetParameter('exclude'));
$excl_sql = '';
if ($exclude) // we have to create an exclusion list
{
$excl_sql = 'AND tag NOT IN (';
$excl_list = explode(',', $exclude);
$first = true;
foreach ($excl_list as $excl)
{
if (!$excl = trim($excl))
{
continue;
}
if ($first)
{
$first = false;
}
else
{
$excl_sql .= ', ';
}
$excl_sql .= '"' . addslashes($excl) . '"';
}
if ($first) // empty list
{
$excl_sql = '';
}
else // close the list
{
$excl_sql .= ')';
}
}
$prefix = $this->GetConfigValue('table_prefix');
$sql = "SELECT tag, count(*) count, max(time) max_time " .
"FROM {$prefix}pages " .
"WHERE comment_on = '' $excl_sql $user_sql AND time > date_sub(now(), INTERVAL '$days' DAY) " .
"GROUP BY tag " .
"ORDER BY count DESC, max_time DESC " .
"LIMIT $max";
if ($pages = $this->LoadAll($sql))
{
/*
echo 'Pages les plus actives des ' . $days . ' derniers jours';
if ($user)
{
echo ' pour l\'utilisateur ', $this->ComposeLinkToPage($user);
}
*/
echo "<ul>\n";
foreach ($pages as $page)
{
echo '<li>';
echo $this->ComposeLinkToPage($page['tag']);
echo ' . . . . ' . $page['count'] . " édition(s), dernière le $page[max_time]</li>\n";
}
echo "</ul>";
}
?>
juste un rajout du pluriel sur le mot édition uniquement lorsque nécessaire, l'auteur intègre ou pas... code ci-dessous destiné à être supprimé. --
Xf75013
<?php
/* auteur: Didier Loiseau
micromodif Xf75013 (rajout du pluriel)
license: GPL
{{activity days="paramètre" max="paramètre" exclude="paramètre" user="paramètre"}}
*/
$days = (int) $this->GetParameter('days');
$maxdays = (int) $this->GetConfigValue('pages_purge_time');
$days = $days > 0 ? $days : 7;
if ($maxdays && $days > $maxdays)
{
echo '<strong>ActionActivity</strong>: Attention la valeur de ' . $days . ' jours est trop grande ' .
'car la période de purge est de ' . $maxdays . ' jours, cette valeur sera donc employée.<br />';
$days = $maxdays;
}
$max = (int) $this->GetParameter('max');
$max = $max > 50 || $max < 1 ? 10 : $max;
$user = trim($this->GetParameter('user'));
$user_sql = $user ? 'AND user = "' . addslashes($user) . '"' : '';
$exclude = trim($this->GetParameter('exclude'));
$excl_sql = '';
if ($exclude) // we have to create an exclusion list
{
$excl_sql = 'AND tag NOT IN (';
$excl_list = explode(',', $exclude);
$first = true;
foreach ($excl_list as $excl)
{
if (!$excl = trim($excl))
{
continue;
}
if ($first)
{
$first = false;
}
else
{
$excl_sql .= ', ';
}
$excl_sql .= '"' . addslashes($excl) . '"';
}
if ($first) // empty list
{
$excl_sql = '';
}
else // close the list
{
$excl_sql .= ')';
}
}
$prefix = $this->GetConfigValue('table_prefix');
$sql = "SELECT tag, count(*) count, max(time) max_time " .
"FROM {$prefix}pages " .
"WHERE comment_on = '' $excl_sql $user_sql AND time > date_sub(now(), INTERVAL '$days' DAY) " .
"GROUP BY tag " .
"ORDER BY count DESC, max_time DESC " .
"LIMIT $max";
if ($pages = $this->LoadAll($sql))
{
/*
echo 'Pages les plus actives des ' . $days . ' derniers jours';
if ($user)
{
echo ' pour l\'utilisateur ', $this->ComposeLinkToPage($user);
}
*/
echo "<ul>\n";
foreach ($pages as $page)
{
$pluriel = '';
if ($page['count'] > 1)
{
$pluriel = 's';
}
echo '<li>';
echo $this->ComposeLinkToPage($page['tag']);
echo ' . . . . ' . $page['count'] . " édition" . $pluriel . ", dernière le $page[max_time]</li>\n";
}
echo "</ul>";
}
?>