'nl' => $this->make_hook('nl', AUTH_COOKIE, 'user'),
'nl/show' => $this->make_hook('nl_show', AUTH_COOKIE, 'user'),
'nl/search' => $this->make_hook('nl_search', AUTH_COOKIE, 'user'),
- 'nl/submit' => $this->make_hook('nl_submit', AUTH_MDP, 'user'),
- 'nl/remaining' => $this->make_hook('nl_remaining', AUTH_MDP, 'user'),
- 'admin/nls' => $this->make_hook('admin_nl_groups', AUTH_MDP, 'admin'),
- 'admin/newsletter' => $this->make_hook('admin_nl', AUTH_MDP, 'admin'),
- 'admin/newsletter/categories' => $this->make_hook('admin_nl_cat', AUTH_MDP, 'admin'),
- 'admin/newsletter/edit' => $this->make_hook('admin_nl_edit', AUTH_MDP, 'admin'),
- 'admin/newsletter/edit/delete' => $this->make_hook('admin_nl_delete', AUTH_MDP, 'admin'),
+ 'nl/submit' => $this->make_hook('nl_submit', AUTH_PASSWD, 'user'),
+ 'nl/remaining' => $this->make_hook('nl_remaining', AUTH_PASSWD, 'user'),
+ 'admin/nls' => $this->make_hook('admin_nl_groups', AUTH_PASSWD, 'admin'),
+ 'admin/newsletter' => $this->make_hook('admin_nl', AUTH_PASSWD, 'admin'),
+ 'admin/newsletter/categories' => $this->make_hook('admin_nl_cat', AUTH_PASSWD, 'admin'),
+ 'admin/newsletter/edit' => $this->make_hook('admin_nl_edit', AUTH_PASSWD, 'admin'),
+ 'admin/newsletter/edit/delete' => $this->make_hook('admin_nl_delete', AUTH_PASSWD, 'admin'),
+ 'stat/newsletter' => $this->make_hook('stat_nl', AUTH_PASSWD, 'admin')
// Automatic mailing is disabled for X.org NL
-// 'admin/newsletter/edit/cancel' => $this->make_hook('cancel', AUTH_MDP, 'admin'),
-// 'admin/newsletter/edit/valid' => $this->make_hook('valid', AUTH_MDP, 'admin'),
+// 'admin/newsletter/edit/cancel' => $this->make_hook('cancel', AUTH_PASSWD, 'admin'),
+// 'admin/newsletter/edit/valid' => $this->make_hook('valid', AUTH_PASSWD, 'admin'),
);
}
return PL_NOT_FOUND;
}
- $page->changeTpl('newsletter/index.tpl');
- $page->setTitle('Lettres mensuelles');
-
$hash = ($hash == 'nohash') ? null : $hash;
switch ($action) {
- case 'out': $nl->unsubscribe($issue_id, $hash, $hash != null); break;
+ case 'out':
+ $success = $nl->unsubscribe($issue_id, $hash, $hash != null);
+ if (!is_null($hash)) {
+ if ($success) {
+ $page->trigSuccess('La désinscription a été effectuée avec succès.');
+ } else {
+ $page->trigError("La désinscription n'a été pas pu être effectuée.");
+ }
+ return;
+ }
+ break;
case 'in': $nl->subscribe(); break;
default: ;
}
+ $page->changeTpl('newsletter/index.tpl');
+ $page->setTitle('Lettres mensuelles');
+
$page->assign_by_ref('nl', $nl);
$page->assign('nls', $nl->subscriptionState());
$page->assign('nl_list', $nl->listSentIssues(true));
$page->assign('nl_list', $nl->listAllIssues());
}
- function handler_admin_nl_groups($page)
+ function handler_admin_nl_groups($page, $sort = 'id', $order = 'ASC')
{
require_once 'newsletter.inc.php';
+ static $titles = array(
+ 'id' => 'Id',
+ 'group_name' => 'Groupe',
+ 'name' => 'Titre',
+ 'custom_css' => 'CSS spécifique',
+ 'criteria' => 'Critères actifs'
+ );
+ static $next_orders = array(
+ 'ASC' => 'DESC',
+ 'DESC' => 'ASC'
+ );
+
+ if (!array_key_exists($sort, $titles)) {
+ $sort = 'id';
+ }
+ if (!in_array($order, array('ASC', 'DESC'))) {
+ $order = 'ASC';
+ }
+
$page->changeTpl('newsletter/admin_all.tpl');
$page->setTitle('Administration - Newsletters : Liste des Newsletters');
-
- $page->assign('nls', Newsletter::getAll());
+ $page->assign('nls', Newsletter::getAll($sort, $order));
+ $page->assign('sort', $sort);
+ $page->assign('order', $order);
+ $page->assign('next_order', $next_orders[$order]);
+ $page->assign('titles', $titles);
}
function handler_admin_nl_edit($page, $nid = 'last', $aid = null, $action = 'edit') {
// Convert NLIssue error messages to human-readable errors
$error_msgs = array(
+ NLIssue::ERROR_INVALID_REPLY_TO => "L'adresse de réponse est invalide.",
NLIssue::ERROR_INVALID_SHORTNAME => "Le nom court est invalide ou vide.",
NLIssue::ERROR_INVALID_UFC => "Le filtre des destinataires est invalide.",
NLIssue::ERROR_TOO_LONG_UFC => "Le nombre de matricules AX renseigné est trop élevé.",
$issue->title_mail = Post::s('title_mail');
$issue->head = Post::s('head');
$issue->signature = Post::s('signature');
+ $issue->reply_to = Post::s('reply_to');
if ($issue->isEditable()) {
// Date and shortname may only be modified for pending NLs, otherwise all links get broken.
if (!$issue) {
$page->kill("La lettre {$nid} n'existe pas.");
}
+
+ if ($issue->isEmpty()) {
+ $page->trigErrorRedirect("La lettre étant vide, il n'est pas possible de l'envoyer.", $nl->adminPrefix());
+ }
+
if (!$issue->scheduleMailing()) {
$page->trigErrorRedirect("Une erreur est survenue lors de la validation de l'envoi.", $nl->adminPrefix());
}
$table_editor->on_delete(null, null);
$table_editor->apply($page, $action, $id);
}
+
+ function handler_stat_nl($page)
+ {
+ $nl = $this->getNl();
+ if (!$nl) {
+ return PL_NOT_FOUND;
+ }
+ if (!$nl->mayEdit()) {
+ return PL_FORBIDDEN;
+ }
+
+ $page->setTitle('Statistiques - Newsletter');
+ $page->changeTpl('newsletter/statistics.tpl');
+
+ $data = array();
+ foreach (Profile::$cycles as $grade => $name) {
+ $data[$name] = array();
+ list($min, $max) = Profile::extremePromotions($grade);
+ $bound = (((int)($min / 10)) + 1) * 10;
+ while ($bound <= $max) {
+ $data[$name][$min . ' - ' . $bound] = array(
+ 'count' => $nl->subscriberCount(null, null, $grade, $min, $bound),
+ 'lost' => $nl->subscriberCount(true, null, $grade, $min, $bound),
+ 'count_female' => $nl->subscriberCount(null, User::GENDER_FEMALE, $grade, $min, $bound),
+ 'lost_female' => $nl->subscriberCount(true, User::GENDER_FEMALE, $grade, $min, $bound)
+ );
+ $min = $bound + 1;
+ $bound += 10;
+ }
+ $bound -= 9;
+ if ($bound <= $max) {
+ $data[$name][$bound . ' - ' . $max] = array(
+ 'count' => $nl->subscriberCount(null, null, $grade, $bound, $max),
+ 'lost' => $nl->subscriberCount(true, null, $grade, $bound, $max),
+ 'count_female' => $nl->subscriberCount(null, User::GENDER_FEMALE, $grade, $bound, $max),
+ 'lost_female' => $nl->subscriberCount(true, User::GENDER_FEMALE, $grade, $bound, $max)
+ );
+ }
+ }
+ $page->assign_by_ref('nl', $nl);
+ $page->assign('count', $nl->subscriberCount());
+ $page->assign('lost', $nl->lostSubscriberCount());
+ $page->assign('count_female', $nl->subscriberCount(null, User::GENDER_FEMALE));
+ $page->assign('lost_female', $nl->lostSubscriberCount(User::GENDER_FEMALE));
+ $page->assign('data', $data);
+ }
}
// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: