$head = str_replace('<cher>', $sexe ? 'Chère' : 'Cher', $head);
$head = str_replace('<prenom>', $prenom, $head);
$head = str_replace('<nom>', $nom, $head);
- if ($type == 'text') {
- $head = enriched_to_text($head, false, true, 2, 64);
- } else {
- $head = enriched_to_text($head, true);
- }
- return $head;
+ return format_text($head, $type, 2, 64);
}
}
$this->assignData($page);
}
- public function sendTo($prenom, $nom, $login, $sexe, $html)
+ public function sendTo($prenom, $nom, $login, $sexe, $html, $hash = 0)
{
global $globals;
+ if (strpos($login, '@') === false) {
+ $login = "$login@{$globals->mail->domain}";
+ }
$mailer = new PlMailer($this->_tpl);
$this->assignData($mailer);
$mailer->assign('nom', $nom);
$mailer->assign('sexe', $sexe);
$mailer->assign('prefix', null);
- $mailer->addTo("\"$prenom $nom\" <$login@{$globals->mail->domain}>");
+ $mailer->assign('hash', $hash);
+ $mailer->addTo("\"$prenom $nom\" <$login>");
$mailer->send($html);
}
+ protected function getAllRecipients()
+ {
+ return "SELECT u.user_id, a.alias,
+ u.prenom, IF(u.nom_usage='', u.nom, u.nom_usage),
+ FIND_IN_SET('femme', u.flags),
+ q.core_mail_fmt AS pref, 0 AS hash
+ FROM {$this->subscriptionTable()} AS ni
+ INNER JOIN auth_user_md5 AS u USING(user_id)
+ INNER JOIN auth_user_quick AS q ON(q.user_id = u.user_id)
+ INNER JOIN aliases AS a ON(u.user_id=a.id AND FIND_IN_SET('bestalias',a.flags))
+ LEFT JOIN emails AS e ON(e.uid=u.user_id AND e.flags='active')
+ WHERE ni.last < {?} AND ({$this->subscriptionWhere()}) AND e.email IS NOT NULL
+ GROUP BY u.user_id";
+ }
+
public function sendToAll()
{
$this->setSent();
- $query = "SELECT u.user_id, a.alias,
- u.prenom, IF(u.nom_usage='', u.nom, u.nom_usage),
- FIND_IN_SET('femme', u.flags),
- q.core_mail_fmt AS pref
- FROM {$this->subscriptionTable()} AS ni
- INNER JOIN auth_user_md5 AS u USING(user_id)
- INNER JOIN auth_user_quick AS q ON(q.user_id = u.user_id)
- INNER JOIN aliases AS a ON(u.user_id=a.id AND FIND_IN_SET('bestalias',a.flags))
- LEFT JOIN emails AS e ON(e.uid=u.user_id AND e.flags='active')
- WHERE ni.last < {?} AND ({$this->subscriptionWhere()}) AND e.email IS NOT NULL
- GROUP BY u.user_id
- LIMIT 60";
+ $query = $this->getAllRecipients() . " LIMIT {?}";
while (true) {
- $res = XDB::iterRow($query, $this->_id);
+ $res = XDB::iterRow($query, $this->_id, 60);
if (!$res->total()) {
- exit;
+ return;
}
$sent = array();
- while (list($uid, $bestalias, $prenom, $nom, $sexe, $fmt) = $res->next()) {
- $sent[] = "user_id='$uid'";
- $this->sendTo($prenom, $nom, $bestalias, $sexe, $fmt=='html');
+ while (list($uid, $bestalias, $prenom, $nom, $sexe, $fmt, $hash) = $res->next()) {
+ $sent[] = "(user_id='$uid'" . (!$uid ? " AND email='$bestalias')": ')');
+ $this->sendTo($prenom, $nom, $bestalias, $sexe, $fmt=='html', $hash);
}
XDB::execute("UPDATE {$this->subscriptionTable()}
SET last = {?}
return trim($res);
}
+function format_text($input, $format, $indent = 0, $width = 68)
+{
+ if ($format == 'text') {
+ return enriched_to_text($input, false, true, $indent, $width);
+ }
+ return enriched_to_text($input, true);
+}
+
function enriched_to_text($input,$html=false,$just=false,$indent=0,$width=68)
{
$text = trim($input);
$text = str_replace('[/i]','</em>', $text);
$text = str_replace('[u]','<span style="text-decoration: underline">', $text);
$text = str_replace('[/u]','</span>', $text);
+ $text = preg_replace("!(\\s*\n)*\[title\]!",'<h1>',$text);
+ $text = preg_replace("!\[\/title\](\\s*\n)*!", '</h1>',$text);
+ $text = preg_replace("!(\\s*\n)*\[subtitle\]!",'<h2>',$text);
+ $text = preg_replace("!\[\/subtitle\](\\s*\n)*!",'</h2>',$text);
+
require_once('url_catcher.inc.php');
$text = url_catcher($text);
return nl2br($text);
$text = preg_replace('!\[\/?b\]!','*',$text);
$text = preg_replace('!\[\/?u\]!','_',$text);
$text = preg_replace('!\[\/?i\]!','/',$text);
+ $text = preg_replace('!\[\/?title\]!','***', $text);
+ $text = preg_replace('!\[\/?subtitle\]!','**', $text);
$text = preg_replace('!(((https?|ftp)://|www\.)[^\r\n\t ]*)!','[\1]', $text);
$text = preg_replace('!(([a-zA-Z0-9\-_+.]*@[a-zA-Z0-9\-_+.]*)(?:\?[^\r\n\t ]*)?)!','[mailto:\1]', $text);
$text = $just ? justify($text,$width-$indent) : wordwrap($text,$width-$indent);