Пример #1
0
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;
}
Пример #2
0
 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);
 }
Пример #3
0
 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);
 }
Пример #4
0
 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'));
     }
 }