<?php
/***************************************************************************
- * Copyright (C) 2003-2007 Polytechnique.org *
+ * Copyright (C) 2003-2008 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
u.prenom, b.alias,
CONCAT(b.alias, '@m4x.org') AS email,
CONCAT(b.alias, '@polytechnique.org') AS email2,
- m.perms='admin' AS perms, m.origine,
+ m.perms = 'admin' AS perms, m.origine,
FIND_IN_SET('femme', u.flags) AS sexe
FROM auth_user_md5 AS u
INNER JOIN aliases AS a ON ( u.user_id = a.id AND a.type != 'homonyme' )
INNER JOIN aliases AS b ON ( u.user_id = b.id AND b.type = 'a_vie' )
- INNER JOIN groupex.membres AS m ON ( m.uid = u.user_id AND asso_id={?})
+ LEFT JOIN groupex.membres AS m ON ( m.uid = u.user_id AND asso_id={?})
WHERE a.alias = {?} AND u.user_id < 50000", $globals->asso('id'), $mbox);
return $res->fetchOneAssoc();
}
'%grp/rss' => $this->make_hook('rss', AUTH_PUBLIC, 'user', NO_HTTPS),
'%grp/announce/new' => $this->make_hook('edit_announce', AUTH_MDP, 'groupadmin'),
'%grp/announce/edit' => $this->make_hook('edit_announce', AUTH_MDP, 'groupadmin'),
+ '%grp/announce/photo' => $this->make_hook('photo_announce', AUTH_PUBLIC),
'%grp/admin/announces' => $this->make_hook('admin_announce', AUTH_MDP, 'groupadmin'),
);
}
Env::i('unread'), S::i('uid'));
pl_redirect("#art" . Env::i('unread'));
}
- $arts = XDB::iterator("SELECT a.*, u.nom, u.prenom, u.promo, l.alias AS forlife
+ $arts = XDB::iterator("SELECT a.*, u.nom, u.prenom, u.promo, l.alias AS forlife,
+ FIND_IN_SET('photo', a.flags) AS photo
FROM groupex.announces AS a
INNER JOIN auth_user_md5 AS u USING(user_id)
INNER JOIN aliases AS l ON (u.user_id = l.id AND l.type = 'a_vie')
S::i('uid'), $globals->asso('id'), S::i('promo'), S::i('promo'));
$page->assign('article_index', $index);
} else {
- $arts = XDB::iterator("SELECT a.*, u.nom, u.prenom, u.promo
+ $arts = XDB::iterator("SELECT a.*, u.nom, u.prenom, u.promo, FIND_IN_SET('photo', a.flags) AS photo
FROM groupex.announces AS a
INNER JOIN auth_user_md5 AS u USING(user_id)
WHERE asso_id = {?} AND peremption >= CURRENT_DATE()
if (!S::has('core_rss_hash')) {
$page->setRssLink("Polytechnique.net :: {$globals->asso("nom")} :: News publiques",
- "rss/rss.xml");
+ $platal->ns . "rss/rss.xml");
} else {
$page->setRssLink("Polytechnique.net :: {$globals->asso("nom")} :: News",
- 'rss/'.S::v('forlife') .'/'.S::v('core_rss_hash').'/rss.xml');
+ $platal->ns . 'rss/'.S::v('forlife') .'/'.S::v('core_rss_hash').'/rss.xml');
}
$page->assign('articles', $arts);
$mbr = array_keys(Env::v('membres', array()));
require_once dirname(__FILE__) . '/xnetgrp/mail.inc.php';
+ set_time_limit(120);
$tos = get_all_redirects($mbr, $mls, $mmlist);
$upload = PlUpload::get($_FILES['uploaded'], S::v('forlife'), 'xnet.emails', true);
send_xnet_mails($from, $sujet, $body, Env::v('wiki'), $tos, Post::v('replyto'), $upload, @$_FILES['uploaded']['name']);
1, 1)) as letter, COUNT(*)
FROM groupex.membres AS m
LEFT JOIN auth_user_md5 AS u ON ( u.user_id = m.uid)
- WHERE asso_id = {?} and (u.perms != \'pending\' OR u.perms IS NULL)
+ WHERE asso_id = {?} and (u.perms != \'pending\' OR m.email IS NOT NULL)
GROUP BY letter
ORDER BY letter', $globals->asso('id'));
} else {
if (!is_null($u) && may_update()) {
$page->assign('u', $u);
- $res = XDB::query("SELECT nom, prenom, promo, user_id
- FROM auth_user_md5 AS u
- INNER JOIN aliases AS al ON (al.id = u.user_id
- AND al.type != 'liste')
- WHERE al.alias = {?}", $u);
+ $res = XDB::query("SELECT u.nom, u.prenom, u.promo, u.user_id, FIND_IN_SET('femme', u.flags)
+ FROM auth_user_md5 AS u
+ INNER JOIN aliases AS al ON (al.id = u.user_id AND al.type != 'liste')
+ WHERE al.alias = {?}", $u);
- if (list($nom, $prenom, $promo, $uid) = $res->fetchOneRow()) {
+ if (list($nom, $prenom, $promo, $uid, $sexe) = $res->fetchOneRow()) {
$res = XDB::query("SELECT COUNT(*)
FROM groupex.membres AS m
INNER JOIN aliases AS a ON (m.uid = a.id AND a.type != 'homonyme')
$mailer->setFrom('"'.S::v('prenom').' '.S::v('nom')
.'" <'.S::v('forlife').'@polytechnique.org>');
$mailer->setSubject('['.$globals->asso('nom').'] Demande d\'inscription');
- $message = "Cher Camarade,\n"
+ $message = ($sexe ? 'Chère' : 'Cher') . " Camarade,\n"
. "\n"
. " Suite à ta demande d'adhésion à ".$globals->asso('nom').",\n"
. "j'ai le plaisir de t'annoncer que ton inscription a été validée !\n"
. "{$_SESSION["prenom"]} {$_SESSION["nom"]}.";
$mailer->setTxtBody($message);
$mailer->send();
- $page->kill("$prenom $nom a bien été inscrit");
+ $page->kill("$prenom $nom a bien été inscrit" . ($sexe ? 'e' : '') . ".");
}
elseif (Env::has('refuse'))
{
break;
}
}
- pl_redirect("");
+ http_redirect($_SERVER['HTTP_REFERER']);
}
function handler_admin_annuaire(&$page)
WHERE a.alias={?}', $globals->asso('id'), $forlife);
pl_redirect("member/$forlife");
} else {
- $page->trig($email." n'est pas un alias polytechnique.org valide");
+ $page->trig($email." n'est pas un alias polytechnique.org valide.");
}
} else {
require_once 'xorg.misc.inc.php';
if ($uid) {
$rss = XDB::iterator("SELECT a.id, a.titre, a.texte, a.contacts, a.create_date,
- IF(u2.nom_usage != '', u2.nom_usage, u2.nom) AS nom, u2.prenom, u2.promo
+ IF(u2.nom_usage != '', u2.nom_usage, u2.nom) AS nom, u2.prenom, u2.promo,
+ FIND_IN_SET('photo', a.flags) AS photo
FROM auth_user_md5 AS u
INNER JOIN groupex.announces AS a ON ( (a.promo_min = 0 OR a.promo_min <= u.promo)
AND (a.promo_max = 0 OR a.promo_max <= u.promo))
$page->assign('rss', $rss);
}
+ private function upload_image(PlatalPage &$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');
+ return false;
+ } elseif (!$upload->isType('image')) {
+ $page->trig('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');
+ return false;
+ }
+ return true;
+ }
+
+ function handler_photo_announce(&$page, $eid = null) {
+ if ($eid) {
+ $res = XDB::query("SELECT * FROM groupex.announces_photo WHERE eid = {?}", $eid);
+ if ($res->numRows()) {
+ $photo = $res->fetchOneAssoc();
+ header('Content-Type: image/' . $photo['attachmime']);
+ echo $photo['attach'];
+ exit;
+ }
+ } else {
+ $upload = new PlUpload(S::v('forlife'), 'xnetannounce');
+ if ($upload->exists() && $upload->isType('image')) {
+ header('Content-Type: ' . $upload->contentType());
+ echo $upload->getContents();
+ exit;
+ }
+ }
+ global $globals;
+ header('Content-Type: image/png');
+ echo file_get_contents($globals->spoolroot . '/htdocs/images/logo.png');
+ exit;
+ }
+
function handler_edit_announce(&$page, $aid = null)
{
global $globals, $platal;
$page->assign('new', is_null($aid));
$art = array();
- if (Post::v('valid') == 'Visualiser' || Post::v('valid') == 'Enregistrer') {
+ if (Post::v('valid') == 'Visualiser' || Post::v('valid') == 'Enregistrer'
+ || Post::v('valid') == 'Supprimer l\'image' || Post::v('valid') == 'Pas d\'image') {
if (!is_null($aid)) {
$art['id'] = $aid;
}
$art['xorg'] = Post::has('xorg');
$art['nl'] = Post::has('nl');
$art['event'] = Post::v('event');
+ $upload = new PlUpload(S::v('forlife'), 'xnetannounce');
+ $this->upload_image($page, $upload);
$art['contact_html'] = $art['contacts'];
if ($art['event']) {
$page->trig("L'article doit avoir un titre et un contenu");
Post::kill('valid');
}
+
+ if (Post::v('valid') == 'Supprimer l\'image') {
+ $upload->rm();
+ Post::kill('valid');
+ }
+ $art['photo'] = $upload->exists() || Post::i('photo');
+ if (Post::v('valid') == 'Pas d\'image' && !is_null($aid)) {
+ XDB::query("DELETE FROM groupex.announces_photo WHERE eid = {?}", $aid);
+ $upload->rm();
+ Post::kill('valid');
+ $art['photo'] = false;
+ }
}
if (Post::v('valid') == 'Enregistrer') {
$promo_min = ($art['public'] ? 0 : $art['promo_min']);
$promo_max = ($art['public'] ? 0 : $art['promo_max']);
+ $flags = array();
+ if ($art['public']) {
+ $flags[] = 'public';
+ }
+ if ($art['photo']) {
+ $flags[] = 'photo';
+ }
+ $flags = implode(',', $flags);
if (is_null($aid)) {
$fulltext = $art['texte'];
if (!empty($art['contact_html'])) {
$fulltext .= "\n\n'''Contacts :'''\\\\\n" . $art['contact_html'];
}
- $post = null;
+ $post = null;/*
if ($globals->asso('forum')) {
require_once 'banana/forum.inc.php';
$banana = new ForumsBanana(S::v('forlife'));
$post = $banana->post($globals->asso('forum'), null,
$art['titre'], MiniWiki::wikiToText($fulltext, false, 0, 80));
- }
+ }*/
XDB::query("INSERT INTO groupex.announces
(user_id, asso_id, create_date, titre, texte, contacts,
peremption, promo_min, promo_max, flags, post_id)
VALUES ({?}, {?}, NOW(), {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})",
S::i('uid'), $globals->asso('id'), $art['titre'], $art['texte'], $art['contact_html'],
- $art['peremption'], $promo_min, $promo_max, $art['public'] ? 'public' : '', $post);
+ $art['peremption'], $promo_min, $promo_max, $flags, $post);
$aid = XDB::insertId();
+ if ($art['photo']) {
+ list($imgx, $imgy, $imgtype) = $upload->imageInfo();
+ XDB::execute("INSERT INTO groupex.announces_photo
+ SET eid = {?}, attachmime = {?}, x = {?}, y = {?}, attach = {?}",
+ $aid, $imgtype, $imgx, $imgy, $upload->getContents());
+ }
if ($art['xorg']) {
require_once('validations.inc.php');
$article = new EvtReq("[{$globals->asso('nom')}] " . $art['titre'], $fulltext,
- $art['promo_min'], $art['promo_max'], $art['peremption'], "", S::v('uid'));
+ $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");
+ } else if ($upload && $upload->exists()) {
+ $upload->rm();
}
if ($art['nl']) {
require_once('validations.inc.php');
promo_min={?}, promo_max={?}, flags={?}
WHERE id={?} AND asso_id={?}",
$art['titre'], $art['texte'], $art['contacts'], $art['peremption'],
- $promo_min, $promo_max, $art['public'] ? 'public' : '',
+ $promo_min, $promo_max, $flags,
$art['id'], $globals->asso('id'));
+ if ($art['photo'] && $upload->exists()) {
+ list($imgx, $imgy, $imgtype) = $upload->imageInfo();
+ XDB::execute("REPLACE INTO groupex.announces_photo
+ SET eid = {?}, attachmime = {?}, x = {?}, y = {?}, attach = {?}",
+ $aid, $imgtype, $imgx, $imgy, $upload->getContents());
+ $upload->rm();
+ }
}
}
if (Post::v('valid') == 'Enregistrer' || Post::v('valid') == 'Annuler') {
if (empty($art) && !is_null($aid)) {
$res = XDB::query("SELECT a.*, u.nom, u.prenom, u.promo, l.alias AS forlife,
- FIND_IN_SET('public', a.flags) AS public
+ FIND_IN_SET('public', a.flags) AS public,
+ FIND_IN_SET('photo', a.flags) AS photo
FROM groupex.announces AS a
INNER JOIN auth_user_md5 AS u USING(user_id)
INNER JOIN aliases AS l ON (l.id = u.user_id AND l.type = 'a_vie')
$art['contact_html'] = @MiniWiki::WikiToHTML($art['contact_html']);
$page->assign('art', $art);
+ $page->assign_by_ref('upload', $upload);
}
function handler_admin_announce(&$page)