public $_head;
- function __construct($tpl, $css, $prefix)
+ protected $_table;
+ protected $_subscriptionTable;
+
+ function __construct($tpl, $css, $prefix, $tbl, $stbl)
{
$this->_tpl = $tpl;
$this->_css = $css;
$this->_prefix = $prefix;
+ $this->_table = $tbl;
+ $this->_subscriptionTable = $stbl;
}
public function id()
return is_null($this->_shortname) ? $this->_id : $this->_shortname;
}
+ private function selectId($where)
+ {
+ $res = XDB::query("SELECT IF (n.short_name IS NULL, n.id, n.short_name)
+ FROM {$this->_table} AS n
+ WHERE n.bits != 'new' AND {$where}
+ LIMIT 1");
+ if ($res->numRows() != 1) {
+ return null;
+ }
+ return $res->fetchOneCell();
+ }
+
+ public function prev()
+ {
+ static $val;
+ if (!isset($val)) {
+ $val = $this->selectId("n.id < {$this->_id} ORDER BY n.id DESC");
+ }
+ return $val;
+ }
+
+ public function next()
+ {
+ static $val;
+ if (!isset($val)) {
+ $val = $this->selectId("n.id > {$this->_id} ORDER BY n.id");
+ }
+ return $val;
+ }
+
+ public function last()
+ {
+ static $val;
+ if (!isset($val)) {
+ $res = XDB::query("SELECT MAX(n.id)
+ FROM {$this->_table} AS n
+ WHERE n.bits != 'new' AND n.id > {?}",
+ $this->_id);
+ if ($res->numRows() != 1) {
+ $val = null;
+ } else {
+ $val = $res->fetchOneCell();
+ }
+ }
+ return $val;
+ }
+
public function title($mail = false)
{
return $mail ? $this->_title_mail : $this->_title;
return $this->_head;
} else {
$head = $this->_head;
- $head = str_replace('<cher>', $sexe ? 'Chère' : 'Cher', $head);
+ $head = str_replace('<cher>', $sexe ? 'Chère' : 'Cher', $head);
$head = str_replace('<prenom>', $prenom, $head);
$head = str_replace('<nom>', $nom, $head);
return format_text($head, $type, 2, 64);
return true;
} else {
$css = file_get_contents(dirname(__FILE__) . '/../htdocs/css/' . $this->_css);
- return preg_replace('@/\*.*?\*/@s', '', $css);
+ return preg_replace('@/\*.*?\*/@us', '', $css);
}
}
{
$this->css($page);
$page->assign('is_mail', false);
- $page->assign('html_version', false);
+ $page->assign('mail_part', 'text');
$page->assign('prenom', $prenom);
$page->assign('nom', $nom);
$page->assign('sexe', $sexe);
$this->css($page);
$page->assign('prefix', $this->_prefix . '/' . $this->id());
$page->assign('is_mail', false);
- $page->assign('html_version', true);
+ $page->assign('mail_part', 'html');
$page->assign('prenom', $prenom);
$page->assign('nom', $nom);
$page->assign('sexe', $sexe);
protected function getAllRecipients()
{
- return "SELECT u.user_id, a.alias,
+ global $globals;
+ return "SELECT u.user_id, CONCAT(a.alias, '@{$globals->mail->domain}'),
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
+ 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))
while (true) {
$res = XDB::iterRow($query, $this->_id, 60);
if (!$res->total()) {
- exit;
+ return;
}
$sent = array();
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()}
+ XDB::execute("UPDATE {$this->_subscriptionTable}
SET last = {?}
WHERE " . implode(' OR ', $sent), $this->_id);
+
sleep(60);
}
}
abstract protected function assignData(&$smarty);
abstract protected function setSent();
- abstract protected function subscriptionTable();
abstract protected function subscriptionWhere();
}
// }}}
// {{{ Functions
-function justify($text,$n)
-{
- $arr = explode("\n",wordwrap($text,$n));
- $arr = array_map('trim',$arr);
- $res = '';
- foreach ($arr as $key => $line) {
- $nxl = isset($arr[$key+1]) ? trim($arr[$key+1]) : '';
- $nxl_split = preg_split('! +!',$nxl);
- $nxw_len = count($nxl_split) ? strlen($nxl_split[0]) : 0;
- $line = trim($line);
-
- if (strlen($line)+1+$nxw_len < $n) {
- $res .= "$line\n";
- continue;
- }
-
- if (preg_match('![.:;]$!',$line)) {
- $res .= "$line\n";
- continue;
- }
-
- $tmp = preg_split('! +!',trim($line));
- $words = count($tmp);
- if ($words <= 1) {
- $res .= "$line\n";
- continue;
- }
-
- $len = array_sum(array_map('strlen',$tmp));
- $empty = $n - $len;
- $sw = floatval($empty) / floatval($words-1);
-
- $cur = 0;
- $l = '';
- foreach ($tmp as $word) {
- $l .= $word;
- $cur += $sw + strlen($word);
- $l = str_pad($l,intval($cur+0.5));
- }
- $res .= trim($l)."\n";
- }
- 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 MiniWiki::WikiToText($input, true, $indent, $width, "title");
}
- return enriched_to_text($input, true);
+ return MiniWiki::WikiToHTML($input, "title");
}
-function enriched_to_text($input,$html=false,$just=false,$indent=0,$width=68)
-{
- $text = trim($input);
- if ($html) {
- $text = htmlspecialchars($text);
- $text = str_replace('[b]','<strong>', $text);
- $text = str_replace('[/b]','</strong>', $text);
- $text = str_replace('[i]','<em>', $text);
- $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);
- } else {
- $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);
- if($indent) {
- $ind = str_pad('',$indent);
- $text = $ind.str_replace("\n","\n$ind",$text);
- }
- return $text;
- }
-}
+// function enriched_to_text($input,$html=false,$just=false,$indent=0,$width=68)
// }}}
-// vim:set et sw=4 sts=4 sws=4:
+// vim:set et sw=4 sts=4 sws=4 enc=utf-8:
?>