X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Flists.php;h=8a5ccb9abb1746bc3dc403e51e6c3f0579b41fb2;hb=08b5c28f7adf245d5a262add9c31209f5d188ec7;hp=e53ea7a1058226b72365ce7959a9dc243e0745ea;hpb=03558f195dd4a351e99de0bc8d313504acedc606;p=platal.git
diff --git a/modules/lists.php b/modules/lists.php
index e53ea7a..8a5ccb9 100644
--- a/modules/lists.php
+++ b/modules/lists.php
@@ -61,6 +61,19 @@ class ListsModule extends PLModule
return $globals->mail->domain;
}
+ function verify_list_owner($page, $liste)
+ {
+ if (list(, , $owners) = $this->client->get_members($liste)) {
+ if (!(in_array(S::user()->forlifeEmail(), $owners) || S::admin())) {
+ $page->kill("La liste n'existe pas ou tu n'as pas le droit de l'administrer.");
+ }
+ } else {
+ $page->kill("La liste n'existe pas ou tu n'as pas le droit de l'administrer.
"
+ . " Si tu penses qu'il s'agit d'une erreur, "
+ . "contact le support.");
+ }
+ }
+
function get_pending_ops($domain, $list)
{
list($subs,$mails) = $this->client->get_pending_ops($list);
@@ -346,11 +359,11 @@ class ListsModule extends PLModule
$this->prepare_client($page);
$members = $this->client->get_members($liste);
$list = list_fetch_basic_info(list_extract_members($members[1]));
- pl_cached_content_headers('text/x-csv', 1);
+ pl_cached_content_headers('text/x-csv', 'iso-8859-1', 1);
- echo "nom,promo\n";
- echo implode("\n", $list);
- exit;
+ echo utf8_decode("Nom;Prénom;Promotion\n");
+ echo utf8_decode(implode("\n", $list));
+ exit();
}
function handler_annu($page, $liste = null, $action = null, $subaction = null)
@@ -483,6 +496,7 @@ class ListsModule extends PLModule
}
$domain = $this->prepare_client($page);
+ $this->verify_list_owner($page, $liste);
$page->changeTpl('lists/moderate.tpl');
@@ -602,6 +616,17 @@ class ListsModule extends PLModule
}
$domain = $this->prepare_client($page);
+ $force_rights = false;
+ if ($GLOBALS['IS_XNET_SITE']) {
+ $perms = S::v('perms');
+ if (is_object($perms) && $perms->hasFlag('groupadmin')) {
+ $force_rights = true;
+ }
+ }
+ $page->assign('group_admin', $force_rights);
+ if (!$force_rights) {
+ $this->verify_list_owner($page, $liste);
+ }
$page->changeTpl('lists/admin.tpl');
@@ -638,42 +663,52 @@ class ListsModule extends PLModule
}
}
- if (Env::has('add_member')) {
+ if (Env::has('add_member') ||
+ isset($_FILES['add_member_file']) && $_FILES['add_member_file']['tmp_name']) {
S::assert_xsrf_token();
- $members = User::getBulkForlifeEmails(Env::v('add_member'),
+ if (isset($_FILES['add_member_file']) && $_FILES['add_member_file']['tmp_name']) {
+ $upload =& PlUpload::get($_FILES['add_member_file'], S::user()->login(), 'list.addmember', true);
+ if (!$upload) {
+ $page->trigError("Une erreur s'est produite lors du téléchargement du fichier.");
+ } else {
+ $logins = $upload->getContents();
+ }
+ } else {
+ $logins = Env::v('add_member');
+ }
+
+ $logins = preg_split("/[; ,\r\n\|]+/", $logins);
+ $members = User::getBulkForlifeEmails($logins,
true,
array('ListsModule', 'no_login_callback'));
+ $unfound = array_diff_key($logins, $members);
+
// Make sure we send a list (array_values) of unique (array_unique)
// emails.
$members = array_values(array_unique($members));
$arr = $this->client->mass_subscribe($liste, $members);
+
+ $successes = array();
if (is_array($arr)) {
foreach($arr as $addr) {
+ $successes[] = $addr[1];
$page->trigSuccess("{$addr[0]} inscrit.");
}
}
- }
- if (isset($_FILES['add_member_file']) && $_FILES['add_member_file']['tmp_name']) {
- S::assert_xsrf_token();
+ $already = array_diff($members, $successes);
+ if (is_array($already)) {
+ foreach ($already as $item) {
+ $page->trigWarning($item . ' est déjà inscrit.');
+ }
+ }
- $upload =& PlUpload::get($_FILES['add_member_file'], S::user()->login(), 'list.addmember', true);
- if (!$upload) {
- $page->trigError('Une erreur s\'est produite lors du téléchargement du fichier');
- } else {
- $members = User::getBulkForlifeEmails($upload->getContents(),
- true,
- array('ListsModule', 'no_login_callback'));
- // Make sure we send a list (array_values) of unique (array_unique)
- // emails.
- $members = array_values(array_unique($members));
-
- $arr = $this->client->mass_subscribe($liste, $members);
- if (is_array($arr)) {
- foreach($arr as $addr) {
- $page->trigSuccess("{$addr[0]} inscrit.");
+ if (is_array($unfound)) {
+ foreach ($unfound as $item) {
+ if (trim($item) != '') {
+ $page->trigError($item . " ne correspond pas à un compte existant et n'est pas une adresse email.");
}
}
}
@@ -730,7 +765,6 @@ class ListsModule extends PLModule
$page->assign_by_ref('members', $membres);
$page->assign_by_ref('owners', $moderos);
$page->assign('np_m', count($mem));
-
} else {
$page->kill("La liste n'existe pas ou tu n'as pas le droit de l'administrer.
"
. " Si tu penses qu'il s'agit d'une erreur, "
@@ -745,6 +779,7 @@ class ListsModule extends PLModule
}
$this->prepare_client($page);
+ $this->verify_list_owner($page, $liste);
$page->changeTpl('lists/options.tpl');
@@ -813,6 +848,7 @@ class ListsModule extends PLModule
}
$domain = $this->prepare_client($page);
+ $this->verify_list_owner($page, $liste);
$page->changeTpl('lists/delete.tpl');
if (Post::v('valid') == 'OUI') {
S::assert_xsrf_token();
@@ -847,6 +883,7 @@ class ListsModule extends PLModule
}
$this->prepare_client($page);
+ $this->verify_list_owner($page, $liste);
$page->changeTpl('lists/soptions.tpl');
@@ -876,6 +913,7 @@ class ListsModule extends PLModule
}
$this->prepare_client($page);
+ $this->verify_list_owner($page, $liste);
$page->changeTpl('lists/check.tpl');