function event_change_shortname($page, $eid, $old, $new) { global $globals; require_once 'emails.inc.php'; if (is_null($old)) { $old = ''; } // Quelques vérifications sur l'alias (caractères spéciaux) if ($new && !preg_match("/^[a-zA-Z0-9\\-.]{3,20}\$/", $new)) { $page->trigError("Le raccourci demandé n'est pas valide.\n Vérifie qu'il comporte entre 3 et 20 caractères\n et qu'il ne contient que des lettres non accentuées,\n des chiffres ou les caractères - et ."); return $old; } elseif ($new && (is_int($new) || ctype_digit($new))) { $page->trigError("Le raccourci demandé ne peut être accepté car il\n ne contient que des chiffres. Rajoute-lui par exemple\n une lettre."); return $old; } //vérifier que l'alias n'est pas déja pris if ($new && $old != $new) { $res = XDB::query('SELECT COUNT(*) FROM group_events WHERE short_name = {?}', $new); if ($res->fetchOneCell() > 0) { $page->trigError("Le raccourci demandé est déjà utilisé. Choisis en un autre."); return $old; } } if ($old == $new) { return $new; } if ($old && $new) { // if had a previous shortname change the old lists foreach (explode(',', $globals->xnet->event_lists) as $suffix) { XDB::execute('UPDATE email_virtual SET email = {?} WHERE type = \'event\' AND email = {?}', $new . $suffix, $old . $suffix); } return $new; } if (!$old && $new) { // if we have a first new short_name create the lists $lastid = array(); $where = array($globals->xnet->participant_list => 'g.nb > 0', $globals->xnet->payed_list => '(g.paid > 0 OR p.amount > 0)', $globals->xnet->unpayed_list => 'g.nb > 0 AND g.paid = 0 AND p.amount IS NULL'); foreach (array($globals->xnet->participant_list, $globals->xnet->payed_list, $globals->xnet->unpayed_list) as $suffix) { $uids = XDB::fetchColumn('SELECT g.uid FROM group_event_participants AS g INNER JOIN group_events AS e ON (g.eid = e.eid) LEFT JOIN payment_transactions AS p ON (e.paiement_id = p.ref AND g.uid = p.uid) WHERE g.eid = {?} AND ' . $where[$suffix], $eid); foreach ($uids as $uid) { add_to_list_alias($uid, $new . $suffix, $globals->xnet->evts_domain, 'event'); } } $uids = XDB::fetchColumn('SELECT m.uid FROM group_members AS m LEFT JOIN group_event_participants AS e ON (e.uid = m.uid AND e.eid = {?}) WHERE m.asso_id = {?} AND e.uid IS NULL', $eid, $globals->asso('id')); foreach ($uids as $uid) { add_to_list_alias($uid, $new . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event'); } return $new; } if ($old && !$new) { // if we delete the old short name, delete the lists foreach (explode(',', $globals->xnet->event_lists) as $suffix) { delete_list_alias($old . $suffix, $globals->xnet->evts_domain); } return $new; } // cannot happen return $old; }
function handler_events($page, $archive = null) { global $globals; $page->changeTpl('xnetevents/index.tpl'); $this->load('xnetevents.inc.php'); $action = null; $archive = $archive == 'archive' && may_update(); if (Post::has('del')) { $action = 'del'; $eid = Post::v('del'); } elseif (Post::has('archive')) { $action = 'archive'; $eid = Post::v('archive'); } elseif (Post::has('unarchive')) { $action = 'unarchive'; $eid = Post::v('unarchive'); } if (!is_null($action)) { if (!may_update()) { return PL_FORBIDDEN; } S::assert_xsrf_token(); $res = XDB::query("SELECT asso_id, short_name FROM group_events\n WHERE eid = {?} AND asso_id = {?}", $eid, $globals->asso('id')); $tmp = $res->fetchOneRow(); if (!$tmp) { return PL_FORBIDDEN; } } if ($action == 'del') { // deletes the event mailing aliases if ($tmp[1]) { require_once 'emails.inc.php'; foreach (explode(',', $globals->xnet->event_lists) as $suffix) { delete_list_alias($tmp[1] . $suffix, $globals->xnet->evts_domain, 'event'); } } // archive le paiement associé si il existe $pay_id = XDB::fetchOneCell("SELECT paiement_id\n FROM group_events\n WHERE eid = {?} AND asso_id = {?}", $eid, $globals->asso('id')); if (!$pay_id == '') { XDB::execute("UPDATE payments\n SET flags = 'old'\n WHERE id = {?}", $pay_id); } // deletes the event items XDB::execute('DELETE FROM group_event_items WHERE eid = {?}', $eid); // deletes the event participants XDB::execute('DELETE FROM group_event_participants WHERE eid = {?}', $eid); // deletes the event XDB::execute('DELETE FROM group_events WHERE eid = {?} AND asso_id = {?}', $eid, $globals->asso('id')); // delete the requests for payments XDB::execute("DELETE FROM requests\n WHERE type = 'paiements' AND data LIKE {?}", PayReq::same_event($eid, $globals->asso('id'))); $globals->updateNbValid(); } if ($action == 'archive') { $pay_id = XDB::fetchOneCell("SELECT paiement_id \n FROM group_events\n WHERE eid = {?} AND asso_id = {?}", $eid, $globals->asso('id')); if (!$pay_id == '') { XDB::execute("UPDATE payments\n SET flags = 'old'\n WHERE id = {?}", $pay_id); } XDB::execute("UPDATE group_events\n SET archive = 1\n WHERE eid = {?} AND asso_id = {?}", $eid, $globals->asso('id')); } if ($action == 'unarchive') { $pay_id = XDB::fetchOneCell("SELECT paiement_id FROM group_events\n WHERE eid = {?} AND asso_id = {?}", $eid, $globals->asso('id')); if (!$pay_id == '') { XDB::execute("UPDATE payments\n SET flags = ''\n WHERE id = {?}", $pay_id); } XDB::execute("UPDATE group_events\n SET archive = 0\n WHERE eid = {?} AND asso_id = {?}", $eid, $globals->asso('id')); } $page->assign('archive', $archive); if (Post::has('order')) { $order = Post::v('order'); XDB::execute("UPDATE groups\n SET event_order = {?}\n WHERE id = {?}", $order, $globals->asso('id')); } $order = get_event_order($globals->asso('id')); $evts = get_events($globals->asso('id'), $order, $archive); $page->assign('order', $order); $undisplayed_events = 0; foreach ($evts as $eid => &$e) { if (!is_member() && !may_update() && !$e['accept_nonmembre']) { $undisplayed_events++; continue; } $e['show_participants'] = $e['show_participants'] && (is_member() || may_update()); $e['items'] = get_event_items($eid); $e['topay'] = 0; $e['paid'] = 0; $sub = get_event_subscription($eid, S::i('uid')); if (empty($sub)) { $e['inscrit'] = false; } else { $e['inscrit'] = true; foreach ($e['items'] as $item_id => $m) { if (isset($sub[$item_id])) { $e['topay'] += $sub[$item_id]['nb'] * $m['montant']; $e['paid'] += $sub[$item_id]['paid']; } } } $e['sub'] = $sub; $telepaid = get_event_telepaid($eid, S::i('uid')); $e['paid'] += $telepaid; $e['date'] = make_event_date($e['debut'], $e['fin']); if ($e['deadline_inscription'] == null || strtotime($e['deadline_inscription']) >= time()) { $e['inscr_open'] = true; } else { $e['inscr_open'] = false; } if (Env::has('updated') && $e['eid'] == Env::i('updated')) { $page->assign('updated', $e); } } $page->assign('evenements', $evts); $page->assign('undisplayed_events', $undisplayed_events); }
function handler_aaliases($page, $alias = null) { global $globals; require_once 'emails.inc.php'; $page->setTitle('Administration - Aliases'); if (Post::has('new_alias')) { pl_redirect('admin/aliases/' . Post::t('new_alias') . '@' . $globals->mail->domain); } // If no alias, list them all. if (is_null($alias)) { $page->changeTpl('lists/admin_aliases.tpl'); $page->assign('aliases', array_merge(iterate_list_alias($globals->mail->domain), iterate_list_alias($globals->mail->domain2))); return; } list($local_part, $domain) = explode('@', $alias); if (!($globals->mail->domain == $domain || $globals->mail->domain2 == $domain) || !preg_match("/^[a-zA-Z0-9\\-\\.]*\$/", $local_part)) { $page->trigErrorRedirect('Le nom de l\'alias est erroné.', $globals->asso('diminutif') . 'admin/aliases'); } // Now we can perform the action. if (Post::has('del_alias')) { S::assert_xsrf_token(); delete_list_alias($local_part, $domain); $page->trigSuccessRedirect($alias . ' supprimé.', 'admin/aliases'); } if (Post::has('add_member')) { S::assert_xsrf_token(); if (add_to_list_alias(Post::t('add_member'), $local_part, $domain)) { $page->trigSuccess('Ajout réussit.'); } else { $page->trigError('Ajout infructueux.'); } } if (Get::has('del_member')) { S::assert_xsrf_token(); if (delete_from_list_alias(Get::t('del_member'), $local_part, $domain)) { $page->trigSuccess('Suppression réussie.'); } else { $page->trigError('Suppression infructueuse.'); } } $page->changeTpl('lists/admin_edit_alias.tpl'); $page->assign('members', list_alias_members($local_part, $domain)); $page->assign('alias', $alias); }
function handler_lists($page, $order_by = null, $order = null) { require_once 'emails.inc.php'; if (!$this->get_lists_domain()) { return PL_NOT_FOUND; } $page->changeTpl('xnetlists/index.tpl'); if (Get::has('del')) { S::assert_xsrf_token(); $mlist = $this->prepare_list(Get::v('del')); $mlist->unsubscribe(); pl_redirect('lists'); } if (Get::has('add')) { S::assert_xsrf_token(); $mlist = $this->prepare_list(Get::v('add')); $mlist->subscribe(); pl_redirect('lists'); } if (Post::has('del_alias') && may_update()) { S::assert_xsrf_token(); $alias = Post::t('del_alias'); list($local_part, ) = explode('@', $alias); delete_list_alias($local_part, $this->get_lists_domain()); $page->trigSuccess($alias . ' supprimé !'); } $client = $this->prepare_client(); $listes = $client->get_lists(); // Default ordering is by ascending names. if (is_null($order_by) || is_null($order) || !in_array($order_by, array('list', 'desc', 'nbsub')) || !in_array($order, array('asc', 'desc'))) { $order_by = 'list'; $order = 'asc'; } $compare = function ($a, $b) use($order_by, $order) { switch ($order_by) { case 'desc': $a[$order_by] = replace_accent($a[$order_by]); $b[$order_by] = replace_accent($b[$order_by]); case 'list': $res = strcasecmp($a[$order_by], $b[$order_by]); break; case 'nbsub': $res = $a[$order_by] - $b[$order_by]; break; default: $res = 0; } if ($order == 'asc') { return $res; } return $res * -1; }; usort($listes, $compare); $page->assign('listes', $listes); $page->assign('order_by', $order_by); $page->assign('order', $order); $page->assign('aliases', iterate_list_alias($this->get_lists_domain())); $page->assign('may_update', may_update()); if (S::suid()) { $page->trigWarning("Attention : l'affichage des listes de diffusion ne tient pas compte de l'option « Voir le site comme… »."); } global $globals; if (count($listes) > 0 && !$globals->asso('has_ml')) { XDB::execute("UPDATE groups\n SET flags = CONCAT_WS(',', IF(flags = '', NULL, flags), 'has_ml')\n WHERE id = {?}", $globals->asso('id')); } }