X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fxnetgrp.php;h=88d03995fef693b9a1247ce5a39ab5f96ac31b5a;hb=732e5855cffcd5e2eaaf5bd66760c4432d437244;hp=b3de66dcdfe11df5a528a997873cdfbacefde0b8;hpb=61e0e8619a9e391d9536d1af3c8cd441491bbc99;p=platal.git diff --git a/modules/xnetgrp.php b/modules/xnetgrp.php index b3de66d..88d0399 100644 --- a/modules/xnetgrp.php +++ b/modules/xnetgrp.php @@ -209,7 +209,7 @@ class XnetGrpModule extends PLModule global $globals; $site = $globals->asso('site'); if (!$site) { - $page->trig('Le groupe n\'a pas de site web.'); + $page->trigError('Le groupe n\'a pas de site web.'); return $this->handler_index($page); } http_redirect($site); @@ -224,9 +224,13 @@ class XnetGrpModule extends PLModule if (Post::has('submit')) { S::assert_xsrf_token(); + $flags = new PlFlagSet('wiki_desc'); + if (Post::has('notif_unsub') && Post::i('notif_unsub') == 1) { + $flags->addFlag('notif_unsub'); + } if (S::has_perms()) { if (Post::v('mail_domain') && (strstr(Post::v('mail_domain'), '.') === false)) { - $page->trig("le domaine doit être un FQDN (aucune modif effectuée) !!!"); + $page->trigError("le domaine doit être un FQDN (aucune modif effectuée) !!!"); return; } XDB::execute( @@ -235,7 +239,7 @@ class XnetGrpModule extends PLModule descr={?}, site={?}, mail={?}, resp={?}, forum={?}, mail_domain={?}, ax={?}, pub={?}, sub_url={?}, inscriptible={?}, unsub_url={?}, - flags='wiki_desc' + flags={?} WHERE id={?}", Post::v('nom'), Post::v('diminutif'), Post::v('cat'), Post::i('dom'), @@ -244,9 +248,9 @@ class XnetGrpModule extends PLModule Post::v('forum'), Post::v('mail_domain'), Post::has('ax'), Post::v('pub'), Post::v('sub_url'), Post::v('inscriptible'), - Post::v('unsub_url'),$globals->asso('id')); + Post::v('unsub_url'), $flags, $globals->asso('id')); if (Post::v('mail_domain')) { - XDB::execute('INSERT INTO virtual_domains (domain) VALUES({?})', + XDB::execute('INSERT IGNORE INTO virtual_domains (domain) VALUES({?})', Post::v('mail_domain')); } } else { @@ -254,14 +258,14 @@ class XnetGrpModule extends PLModule "UPDATE groupex.asso SET descr={?}, site={?}, mail={?}, resp={?}, forum={?}, ax={?}, pub= {?}, sub_url={?}, - unsub_url={?},flags='wiki_desc' + unsub_url={?},flags={?} WHERE id={?}", Post::v('descr'), Post::v('site'), Post::v('mail'), Post::v('resp'), Post::v('forum'), Post::has('ax'), - Post::has('pub'), + Post::v('pub'), Post::v('sub_url'), Post::v('unsub_url'), - $globals->asso('id')); + $flags, $globals->asso('id')); } if ($_FILES['logo']['name']) { @@ -282,7 +286,7 @@ class XnetGrpModule extends PLModule $page->assign('super', true); } if (!$globals->asso('wiki_desc') && $globals->asso('descr')) { - $page->trig("Attention, le format de la description a changé et utilise désormais la syntaxe wiki " + $page->trigWarning("Attention, le format de la description a changé et utilise désormais la syntaxe wiki " . "intégrée au site. Il te faudra probablement adapter le formatage du texte actuel pour " . "qu'il s'affiche correctement avec cette nouvelle syntaxe."); } @@ -691,7 +695,7 @@ class XnetGrpModule extends PLModule WHERE a.alias={?}', $globals->asso('id'), $forlife); pl_redirect("member/$forlife"); } else { - $page->trig($email." n'est pas un alias polytechnique.org valide."); + $page->trigError($email." n'est pas un alias polytechnique.org valide."); } } else { require_once 'xorg.misc.inc.php'; @@ -715,7 +719,7 @@ class XnetGrpModule extends PLModule $uid, $globals->asso('id'), $email); pl_redirect("member/$email"); } - $page->trig("Utilisateur invalide"); + $page->trigError("Utilisateur invalide"); } else { $res = XDB::query('SELECT MAX(uid)+1 FROM groupex.membres'); $uid = max(intval($res->fetchOneCell()), 50001); @@ -725,7 +729,7 @@ class XnetGrpModule extends PLModule pl_redirect("member/$email"); } } else { - $page->trig("« $email » n'est pas une adresse mail valide."); + $page->trigError("« $email » n'est pas une adresse mail valide."); } } } @@ -771,10 +775,29 @@ class XnetGrpModule extends PLModule "DELETE FROM groupex.membres WHERE uid={?} AND asso_id={?}", $user['uid'], $globals->asso('id')); + if ($globals->asso('notif_unsub')) { + $mailer = new PlMailer('xnetgrp/unsubscription-notif.mail.tpl'); + $res = XDB::iterRow("SELECT a.alias, u.prenom, IF(u.nom_usage != '', u.nom_usage, u.nom) AS nom + FROM groupex.membres AS m + INNER JOIN aliases AS a ON (m.uid = a.id AND FIND_IN_SET('bestalias', a.flags)) + INNER JOIn auth_user_md5 AS u ON (u.user_id = a.id) + WHERE m.asso_id = {?} AND m.perms = 'admin'", + $globals->asso('id')); + while (list($alias, $prenom, $nom) = $res->next()) { + $mailer->addTo("\"$prenom $nom\" <$alias@{$globals->mail->domain}>"); + } + $mailer->assign('group', $globals->asso('nom')); + $mailer->assign('prenom', $user['prenom']); + $mailer->assign('nom', $user['nom']); + $mailer->assign('mail', $user['email2']); + $mailer->assign('selfdone', $user['uid'] == S::i('uid')); + $mailer->send(); + } + $user_same_email = get_infos($user['email']); $domain = $globals->asso('mail_domain'); - if (!$domain || !empty($user_same_email)) { + if (!$domain || (!empty($user_same_email) && $user_same_email['uid'] != $user['uid'])) { return true; } @@ -791,9 +814,9 @@ class XnetGrpModule extends PLModule $mmlist->unsubscribe($liste['list']); } } elseif ($liste['sub']) { - $page->trig("{$user['prenom']} {$user['nom']} a une" - ." demande d'inscription en cours sur la" - ." liste {$liste['list']}@ !"); + $page->trigWarning("{$user['prenom']} {$user['nom']} a une" + ." demande d'inscription en cours sur la" + ." liste {$liste['list']}@ !"); $warning = true; } } @@ -821,9 +844,9 @@ class XnetGrpModule extends PLModule } if ($this->unsubscribe($user)) { - $page->trig('Vous avez été désinscrit du groupe avec succès.'); + $page->trigSuccess('Vous avez été désinscrit du groupe avec succès.'); } else { - $page->trig('Vous avez été désinscrit du groupe, mais des erreurs se sont produites lors des désinscriptions des alias et des mailing-lists.'); + $page->trigWarning('Vous avez été désinscrit du groupe, mais des erreurs se sont produites lors des désinscriptions des alias et des mailing-lists.'); } $page->assign('is_member', is_member(true)); } @@ -842,13 +865,13 @@ class XnetGrpModule extends PLModule } if ($this->unsubscribe($user)) { - $page->trig("{$user['prenom']} {$user['nom']} a été désabonné du groupe !"); + $page->trigSuccess("{$user['prenom']} {$user['nom']} a été désabonné du groupe !"); } else { - $page->trig("{$user['prenom']} {$user['nom']} a été désabonné du groupe, mais des erreurs subsistent !"); + $page->trigWarning("{$user['prenom']} {$user['nom']} a été désabonné du groupe, mais des erreurs subsistent !"); } } - private function changeLogin(PlatalPage &$page, array &$user, MMList &$mmlist, $login) + private function changeLogin(PlPage &$page, array &$user, MMList &$mmlist, $login) { require_once 'user.func.inc.php'; // Search the uid of the user... @@ -860,10 +883,10 @@ class XnetGrpModule extends PLModule if ($res->numRows() == 0) { $x = get_not_registered_user($login); if (!$x) { - $page->trig("Le login $login ne correspond à aucun X."); + $page->trigError("Le login $login ne correspond à aucun X."); return false; } else if (count($x) > 1) { - $page->trig("Le login $login correspond a plusieurs camarades."); + $page->trigError("Le login $login correspond a plusieurs camarades."); return false; } $uid = $x[0]['user_id']; @@ -898,20 +921,23 @@ class XnetGrpModule extends PLModule // Update subscription to aliases if ($email != $user['email']) { XDB::execute("UPDATE IGNORE virtual_redirect AS vr - INNER JOIN virtual AS v ON(vr.vid = v.vid AND SUBSTRING_INDEX(alias, '@', 2) = {?}) + INNER JOIN virtual AS v ON(vr.vid = v.vid AND SUBSTRING_INDEX(alias, '@', -1) = {?}) SET vr.redirect = {?} WHERE vr.redirect = {?}", $globals->asso('mail_domain'), $email, $user['email']); XDB::execute("DELETE vr.* FROM virtual_redirect AS vr - INNER JOIN virtual AS v ON(vr.vid = v.vid AND SUBSTRING_INDEX(alias, '@', 2) = {?}) + INNER JOIN virtual AS v ON(vr.vid = v.vid AND SUBSTRING_INDEX(alias, '@', -1) = {?}) WHERE vr.redirect = {?}", $globals->asso('mail_domain'), $user['email']); foreach (Env::v('ml1', array()) as $ml => $state) { $mmlist->replace_email($ml, $user['email'], $email); } } - return $login; + if ($sub) { + return $login; + } + return $user['email']; } function handler_admin_member(&$page, $user) @@ -962,7 +988,7 @@ class XnetGrpModule extends PLModule $perms ? 'admin' : 'membre', $user['uid'], $globals->asso('id')); $user['perms'] = $perms; - $page->trig('Permissions modifiées !'); + $page->trigSuccess('Permissions modifiées !'); } // Update ML subscriptions @@ -971,24 +997,24 @@ class XnetGrpModule extends PLModule if ($ask == $state) { if ($state && $email_changed) { $mmlist->replace_email($ml, $from_email, $user['email2']); - $page->trig("L'abonnement de {$user['prenom']} {$user['nom']} à $ml@ a été mis à jour."); + $page->trigSuccess("L'abonnement de {$user['prenom']} {$user['nom']} à $ml@ a été mis à jour."); } continue; } if ($state == '1') { - $page->trig("{$user['prenom']} {$user['nom']} a " + $page->trigWarning("{$user['prenom']} {$user['nom']} a " ."actuellement une demande d'inscription en " ."cours sur $ml@ !!!"); } elseif ($ask) { $mmlist->mass_subscribe($ml, Array($user['email2'])); - $page->trig("{$user['prenom']} {$user['nom']} a été abonné à $ml@."); + $page->trigSuccess("{$user['prenom']} {$user['nom']} a été abonné à $ml@."); } else { if ($email_changed) { $mmlist->mass_unsubscribe($ml, Array($from_email)); } else { $mmlist->mass_unsubscribe($ml, Array($user['email2'])); } - $page->trig("{$user['prenom']} {$user['nom']} a été désabonné de $ml@."); + $page->trigSuccess("{$user['prenom']} {$user['nom']} a été désabonné de $ml@."); } } @@ -1000,28 +1026,29 @@ class XnetGrpModule extends PLModule XDB::query("INSERT INTO virtual_redirect (vid,redirect) SELECT vid,{?} FROM virtual WHERE alias={?}", $user['email'], $ml); - $page->trig("{$user['prenom']} {$user['nom']} a été abonné à $ml."); + $page->trigSuccess("{$user['prenom']} {$user['nom']} a été abonné à $ml."); } else { XDB::query("DELETE FROM virtual_redirect USING virtual_redirect INNER JOIN virtual USING(vid) WHERE redirect={?} AND alias={?}", $user['email'], $ml); - $page->trig("{$user['prenom']} {$user['nom']} a été désabonné de $ml."); + $page->trigSuccess("{$user['prenom']} {$user['nom']} a été désabonné de $ml."); } } } $page->assign('user', $user); + echo $user['email2']; $listes = $mmlist->get_lists($user['email2']); $page->assign('listes', $listes); $res = XDB::query( 'SELECT alias, redirect IS NOT NULL as sub FROM virtual AS v - LEFT JOIN virtual_redirect AS vr ON(v.vid=vr.vid AND redirect={?}) + LEFT JOIN virtual_redirect AS vr ON(v.vid=vr.vid AND (redirect = {?} OR redirect = {?})) WHERE alias LIKE {?} AND type="user"', - $user['email'], '%@'.$globals->asso('mail_domain')); + $user['email'], $user['email2'], '%@'.$globals->asso('mail_domain')); $page->assign('alias', $res->fetchAllAssoc()); } @@ -1053,20 +1080,20 @@ class XnetGrpModule extends PLModule $page->assign('rss', $rss); } - private function upload_image(PlatalPage &$page, PlUpload &$upload) + private function upload_image(PlPage &$page, PlUpload &$upload) { if (@!$_FILES['image']['tmp_name'] && !Env::v('image_url')) { return true; } if (!$upload->upload($_FILES['image']) && !$upload->download(Env::v('image_url'))) { - $page->trig('Impossible de télécharger l\'image'); + $page->trigError('Impossible de télécharger l\'image'); return false; } elseif (!$upload->isType('image')) { - $page->trig('Le fichier n\'est pas une image valide au format JPEG, GIF ou PNG.'); + $page->trigError('Le fichier n\'est pas une image valide au format JPEG, GIF ou PNG.'); $upload->rm(); return false; } elseif (!$upload->resizeImage(200, 300, 100, 100, 32284)) { - $page->trig('Impossible de retraiter l\'image'); + $page->trigError('Impossible de retraiter l\'image'); return false; } return true; @@ -1134,12 +1161,12 @@ class XnetGrpModule extends PLModule ($art['promo_min'] != 0 && ($art['promo_min'] <= 1900 || $art['promo_min'] >= 2020)) || ($art['promo_max'] != 0 && ($art['promo_max'] <= 1900 || $art['promo_max'] >= 2020)))) { - $page->trig("L'intervalle de promotions est invalide."); + $page->trigError("L'intervalle de promotions est invalide."); Post::kill('valid'); } if (!trim($art['titre']) || !trim($art['texte'])) { - $page->trig("L'article doit avoir un titre et un contenu."); + $page->trigError("L'article doit avoir un titre et un contenu."); Post::kill('valid'); } @@ -1159,14 +1186,13 @@ class XnetGrpModule extends PLModule if (Post::v('valid') == 'Enregistrer') { $promo_min = ($art['public'] ? 0 : $art['promo_min']); $promo_max = ($art['public'] ? 0 : $art['promo_max']); - $flags = array(); + $flags = new PlFlagSet(); if ($art['public']) { - $flags[] = 'public'; + $flags->addFlag('public'); } if ($art['photo']) { - $flags[] = 'photo'; + $flags->addFlag('photo'); } - $flags = implode(',', $flags); if (is_null($aid)) { $fulltext = $art['texte']; if (!empty($art['contact_html'])) { @@ -1198,7 +1224,7 @@ class XnetGrpModule extends PLModule $art['promo_min'], $art['promo_max'], $art['peremption'], "", S::v('uid'), $upload); $article->submit(); - $page->trig("L'affichage sur la page d'accueil de Polytechnique.org est en attente de validation."); + $page->trigWarning("L'affichage sur la page d'accueil de Polytechnique.org est en attente de validation."); } else if ($upload && $upload->exists()) { $upload->rm(); } @@ -1207,7 +1233,7 @@ class XnetGrpModule extends PLModule $article = new NLReq(S::v('uid'), $globals->asso('nom') . " : " .$art['titre'], $art['texte'], $art['contact_html']); $article->submit(); - $page->trig("La parution dans la Lettre Mensuelle est en attente de validation."); + $page->trigWarning("La parution dans la Lettre Mensuelle est en attente de validation."); } } else { XDB::query("UPDATE groupex.announces