X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fxnetnl.php;h=f8e915069ee2aa7a0f36fc8495dc2a9acaa33e69;hb=674333e7f1f4ad1e06626c16138eeb4b755f9f7e;hp=1979087482334380e07b1b32fce285d0863081d3;hpb=d82359a556779137f8a90d0312b3098a2db6f482;p=platal.git diff --git a/modules/xnetnl.php b/modules/xnetnl.php index 1979087..f8e9150 100644 --- a/modules/xnetnl.php +++ b/modules/xnetnl.php @@ -26,14 +26,16 @@ class XnetNlModule extends NewsletterModule function handlers() { return array( - '%grp/nl' => $this->make_hook('nl', AUTH_MDP), - '%grp/nl/show' => $this->make_hook('nl_show', AUTH_MDP), - '%grp/nl/search' => $this->make_hook('nl_search', AUTH_MDP), - '%grp/admin/nl' => $this->make_hook('admin_nl', AUTH_MDP, 'groupadmin'), - '%grp/admin/nl/edit' => $this->make_hook('admin_nl_edit', AUTH_MDP, 'groupadmin'), - '%grp/admin/nl/edit/cancel' => $this->make_hook('admin_nl_cancel', AUTH_MDP, 'groupadmin'), - '%grp/admin/nl/edit/valid' => $this->make_hook('admin_nl_valid', AUTH_MDP, 'groupadmin'), - '%grp/admin/nl/categories' => $this->make_hook('admin_nl_cat', AUTH_MDP, 'groupadmin'), + '%grp/nl' => $this->make_hook('nl', AUTH_PASSWD, 'groups'), + '%grp/nl/show' => $this->make_hook('nl_show', AUTH_PASSWD, 'groups'), + '%grp/nl/search' => $this->make_hook('nl_search', AUTH_PASSWD, 'groups'), + '%grp/admin/nl' => $this->make_hook('admin_nl', AUTH_PASSWD, 'groupadmin'), + '%grp/admin/nl/sync' => $this->make_hook('admin_nl_sync', AUTH_PASSWD, 'groupadmin'), + '%grp/admin/nl/enable' => $this->make_hook('admin_nl_enable', AUTH_PASSWD, 'groupadmin'), + '%grp/admin/nl/edit' => $this->make_hook('admin_nl_edit', AUTH_PASSWD, 'groupadmin'), + '%grp/admin/nl/edit/cancel' => $this->make_hook('admin_nl_cancel', AUTH_PASSWD, 'groupadmin'), + '%grp/admin/nl/edit/valid' => $this->make_hook('admin_nl_valid', AUTH_PASSWD, 'groupadmin'), + '%grp/admin/nl/categories' => $this->make_hook('admin_nl_cat', AUTH_PASSWD, 'groupadmin'), ); } @@ -43,6 +45,69 @@ class XnetNlModule extends NewsletterModule $group = $globals->asso('shortname'); return NewsLetter::forGroup($group); } + + public function handler_admin_nl_sync($page) + { + global $globals; + $nl = $this->getNl(); + if (!$nl) { + return PL_FORBIDDEN; + } + + if (Env::has('add_users')) { + S::assert_xsrf_token(); + + $nl->bulkSubscribe(array_keys(Env::v('add_users'))); + + $page->trigSuccess('Ajouts réalisés avec succès.'); + } + + // TODO(x2006barrois): remove raw SQL query. + $uids = XDB::fetchColumn('SELECT DISTINCT(g.uid) + FROM group_members AS g + WHERE g.asso_id = {?} AND NOT EXISTS (SELECT ni.* + FROM newsletter_ins AS ni + INNER JOIN newsletters AS n ON (ni.nlid = n.id) + WHERE g.uid = ni.uid AND n.group_id = g.asso_id)', + $globals->asso('id')); + + $users = User::getBulkUsersWithUIDs($uids); + usort($users, 'User::compareDirectoryName'); + + $page->setTitle('Synchronisation de la newsletter'); + $page->changeTpl('newsletter/sync.tpl'); + $page->assign('users', $users); + } + + public function handler_admin_nl_enable($page) + { + global $globals; + $nl = $this->getNl(); + if ($nl) { + return PL_FORBIDDEN; + } + + if (Post::has('title')) { + if (!S::has_xsrf_token()) { + return PL_FORBIDDEN; + } + + XDB::execute('INSERT INTO newsletters + SET group_id = {?}, name = {?}', + $globals->asso('id'), Post::s('title')); + + $mailer = new PlMailer(); + $mailer->assign('group', $globals->asso('nom')); + $mailer->assign('user', S::user()); + $mailer->send(); + + $page->trigSuccessRedirect("La lettre d'informations du groupe " . + $globals->asso('nom') . " a bien été créée", + $globals->asso('shortname') . '/admin/nl'); + } + $page->setTitle('Activation de la newsletter'); + $page->changeTpl('newsletter/enable.tpl'); + } } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: