}
$res = XDB::$mysqli->query($query);
-
+
if ($globals->debug & 1) {
PlBacktrace::$bt['MySQL']->stop(@$res->num_rows ? $res->num_rows : XDB::$mysqli->affected_rows,
XDB::$mysqli->error,
private $_res;
- function XOrgDBResult($query)
+ public function __construct($query)
{
$this->_res = XDB::_query($query);
}
- function free()
+ public function free()
{
- $this->_res->free();
+ if ($this->_res) {
+ $this->_res->free();
+ }
unset($this);
}
- function _fetchRow()
+ protected function _fetchRow()
{
- return $this->_res->fetch_row();
+ return $this->_res ? $this->_res->fetch_row() : null;
}
- function _fetchAssoc()
+ protected function _fetchAssoc()
{
- return $this->_res->fetch_assoc();
+ return $this->_res ? $this->_res->fetch_assoc() : null;
}
- function fetchAllRow()
+ public function fetchAllRow()
{
$result = Array();
+ if (!$this->_res) {
+ return $result;
+ }
while ($result[] = $this->_res->fetch_row());
array_pop($result);
$this->free();
return $result;
}
- function fetchAllAssoc()
+ public function fetchAllAssoc()
{
$result = Array();
+ if (!$this->_res) {
+ return $result;
+ }
while ($result[] = $this->_res->fetch_assoc());
array_pop($result);
$this->free();
return $result;
}
- function fetchOneAssoc()
+ public function fetchOneAssoc()
{
$tmp = $this->_fetchAssoc();
$this->free();
return $tmp;
}
- function fetchOneRow()
+ public function fetchOneRow()
{
$tmp = $this->_fetchRow();
$this->free();
return $tmp;
}
- function fetchOneCell()
+ public function fetchOneCell()
{
$tmp = $this->_fetchRow();
$this->free();
return $tmp[0];
}
- function fetchColumn($key = 0)
+ public function fetchColumn($key = 0)
{
$res = Array();
if (is_numeric($key)) {
return $res;
}
- function fetchOneField()
+ public function fetchOneField()
{
- return $this->_res->fetch_field();
+ return $this->_res ? $this->_res->fetch_field() : null;
}
- function fetchFields()
+ public function fetchFields()
{
$res = array();
while ($res[] = $this->fetchOneField());
return $res;
}
- function numRows()
+ public function numRows()
{
- return $this->_res->num_rows;
+ return $this->_res ? $this->_res->num_rows : 0;
}
- function fieldCount()
+ public function fieldCount()
{
- return $this->_res->field_count;
+ return $this->_res ? $this->_res->field_count : 0;
}
}
require_once dirname(__FILE__) . '/pliterator.php';
-class XOrgDBIterator implements PlIterator
+class XOrgDBIterator extends XOrgDBResult implements PlIterator
{
private $_result;
private $_pos;
private $_fields;
private $_mode = MYSQL_ASSOC;
- function __construct($query, $mode = MYSQL_ASSOC)
+ public function __construct($query, $mode = MYSQL_ASSOC)
{
- $this->_result = new XOrgDBResult($query);
+ parent::__construct($query);
$this->_pos = 0;
- $this->_total = $this->_result->numRows();
+ $this->_total = $this->numRows();
$this->_fpost = 0;
- $this->_fields = $this->_result->fieldCount();
+ $this->_fields = $this->fieldCount();
$this->_mode = $mode;
}
- function next()
+ public function next()
{
$this->_pos ++;
if ($this->_pos > $this->_total) {
- $this->_result->free();
+ $this->free();
unset($this);
return null;
}
- return $this->_mode != MYSQL_ASSOC ? $this->_result->_fetchRow() : $this->_result->_fetchAssoc();
+ return $this->_mode != MYSQL_ASSOC ? $this->_fetchRow() : $this->_fetchAssoc();
}
- function first()
+ public function first()
{
return $this->_pos == 1;
}
- function last()
+ public function last()
{
return $this->_pos == $this->_total;
}
- function total()
+ public function total()
{
return $this->_total;
}
- function nextField()
+ public function nextField()
{
$this->_fpos++;
if ($this->_fpos > $this->_fields) {
return null;
}
- return $this->_result->fetchOneField();
+ return $this->fetchOneField();
}
- function firstField()
+ public function firstField()
{
return $this->_fpos == 1;
}
- function lastField()
+ public function lastField()
{
return $this->_fpos == $this->_fields;
}
- function totalFields()
+ public function totalFields()
{
return $this->_fields;
}
public $old_email;
public $m_comment;
+ private $m_reactive = false;
+
public $rules = "Accepter si l'adresse mail parait correcte, et pas absurde (ou si le marketeur est de confiance).
Si le demandeur marque sa propre adresse mail, refuser dans tous les cas.
Si l'adresse proposée est surveillée, refuser.
protected function _mail_body($isok)
{
- if ($isok) {
+ if ($isok && !$this->m_reactive) {
return " Un mail de contact vient d'être envoyé "
." à {$this->m_prenom} {$this->m_nom} ({$this->m_promo}) pour confirmer sa volonté de"
." mettre à jour sa redirection Polytechnique.org!\n\n"
."Merci de ta participation !\n";
+ } elseif ($isok) {
+ return " L'adresse de redirection {$this->m_email} de {$this->m_prenom} {$this->m_nom} ({$this->m_promo}) "
+ ."vient d'être réactivée. Un mail lui a été envoyé pour l'en informer.\n\n"
+ ."Merci de ta participation !\n";
} else {
- return " Nous n'avons pas jugé bon d'envoyer de mail de contact à {$this->m_prenom} {$this->m_nom} ({$this->m_promo}).";
+ return " Nous n'utiliserons pas cette adresse pour contacter {$this->m_prenom} {$this->m_nom} ({$this->m_promo}).";
}
}
{
global $globals;
$email = $this->m_bestalias . '@' . $globals->mail->domain;
+
+ XDB::execute("UPDATE emails AS e
+ INNER JOIN aliases AS a ON (a.id = e.uid)
+ SET e.flags = 'active'
+ WHERE a.alias = {?} AND e.email = {?}", $this->m_forlife, $this->m_email);
+ if (XDB::affectedRows() > 0) {
+ $this->m_reactive = true;
+ $mailer = new PlMailer();
+ $mailer->setFrom('"Association Polytechnique.org" <register@polytechnique.org>');
+ $mailer->addTo($email);
+ $mailer->setSubject("Mise à jour de ton adresse $email");
+ $mailer->setTxtBody(wordwrap("Cher Camarade,\n\n"
+ . "Ton adresse $email étant en panne et ayant été informés que ta redirection {$this->m_email}, jusqu'à présent inactive, "
+ . "est fonctionnelle, nous venons de réactiver cette adresse.\n\n"
+ . "N'hésite pas à aller gérer toi-même tes redirections en te rendant à la page :\n"
+ . "https://www.polytechnique.org/emails/redirect\n"
+ . "Si tu as perdu ton mot de passe d'accès au site, tu peux également effectuer la procédure de récupération à l'adresse :\n"
+ . "https://www.polytechnique.org/recovery\n"
+ . "-- \nTrès Cordialement,\nL'Equipe de Polytechnique.org\n"));
+ $mailer->send();
+ return true;
+ }
+
+ $email = $this->m_bestalias . '@' . $globals->mail->domain;
if ($this->old_email) {
$subject = "Ton adresse $email semble ne plus fonctionner";
$reason = "Nous avons été informés que ton adresse $email ne fonctionne plus correctement par un camarade";
'/[EA][IY]([NM]?[^NM]|$)/', '/(^|[^OEUIA])(OEU|OE|EU)([^OEUIA]|$)/', '/OI/',
'/(ILLE?|I)/', '/O(U|W)/', '/O[NM]($|[^EAOUIY])/', '/(SC|S|C)H/',
'/([^AEIOUY1])[^AEIOUYLKTP]([UAO])([^AEIOUY])/', '/([^AEIOUY]|^)([AUO])[^AEIOUYLKTP]([^AEIOUY1])/', '/^KN/',
- '/^PF/', '/(SC|S|C)H/', '/C([^AEIOUY]|$)/',
- '/C/', '/Z$/', '/(?!^)Z+/', '/ER$/', '/H/');
+ '/^PF/', '/C([^AEIOUY]|$)/',
+ '/C/', '/Z$/', '/(?<!^)Z+/', '/ER$/', '/H/');
$convVOut = array( 'O', '1\3', 'A\1',
'E\1', '\1E\3', 'O',
'Y', 'U', 'O\1', '9',
$sIn = preg_replace( '`(.)\1`', '$1', $sIn );
// on réinterprète les voyelles
$sIn = preg_replace( $convVIn, $convVOut, $sIn);
-
// on supprime les terminaisons T, D, S, X (et le L qui précède si existe)
$sIn = preg_replace( '`L?[TDSX]$`', '', $sIn );
// on supprime les E, A et Y qui ne sont pas en première position
if (Post::has('valide') && isvalid_email_redirection($email)) {
// security stuff
check_email($email, "Proposition d'une adresse surveillee pour " . $user['forlife'] . " par " . S::v('forlife'));
- if ($user['email'] && !trim(Post::v('comment'))) {
+ $res = XDB::query("SELECT state
+ FROM emails AS e
+ INNER JOIN aliases AS a ON (a.id = e.uid)
+ WHERE e.email = {?} AND a.alias = {?}", $email, $user['forlife']);
+ $state = $res->numRows() ? $res->fetchOneCell() : null;
+ if ($state == 'panne') {
+ $page->trig("L'adresse que tu as fournie est l'adresse actuelle de {$user['prenom']} et est en panne.");
+ } elseif ($state == 'active') {
+ $page->trig("L'adresse que tu as fournie est l'adresse actuelle de {$user['prenom']}");
+ } elseif ($user['email'] && !trim(Post::v('comment'))) {
$page->trig("Il faut que tu ajoutes un commentaire à ta proposition pour justifier le "
."besoin de changer la redirection de " . $user['prenom']);
} else {