From 02fdd1c889526931990ed2f1cae1fc9a8b2d9459 Mon Sep 17 00:00:00 2001
From: x2001corpet
Date: Tue, 13 Mar 2007 21:45:10 +0000
Subject: [PATCH] utilisation du miniwiki partout #641
git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1571 839d8a87-29fc-0310-9880-83ba4fa771e5
---
classes/miniwiki.php | 84 ++++++++++++++++++++++++++++++++-----
include/massmailer.inc.php | 84 ++-----------------------------------
include/newsletter.inc.php | 10 ++---
modules/events.php | 6 +--
modules/xnetgrp.php | 15 +++----
templates/xnetgrp/announce-rss.tpl | 2 +-
templates/xnetgrp/form.announce.tpl | 2 +-
upgrade/0.9.14/04_newsletter.sql | 12 ++++++
8 files changed, 103 insertions(+), 112 deletions(-)
create mode 100644 upgrade/0.9.14/04_newsletter.sql
diff --git a/classes/miniwiki.php b/classes/miniwiki.php
index 7f0b76e..d17f097 100644
--- a/classes/miniwiki.php
+++ b/classes/miniwiki.php
@@ -20,7 +20,7 @@ class MiniWiki
MiniWiki::Markup(0, "/(\r\n|\r([^\n]))/", "\n$2", "\n$2");
// retours à la ligne avec \\
- MiniWiki::Markup(1, "/\\\\(?".">(\\\\*))\n/e", "str_repeat('
\n',strlen('$1'))", "str_repeat('\\\\n',strlen('$1'))");
+ MiniWiki::Markup(1, "/\\\\(?".">(\\\\*))\n/e", "str_repeat('
\n',strlen('$1'))", "str_repeat('\n',strlen('$1'))");
// bold, italic and others
// ''' bold '''
@@ -38,12 +38,12 @@ class MiniWiki
// {+ underline +}
MiniWiki::Markup(8, "/{+(.*?)+}/",'$1','_$1_');
// {- strikeout -}
- MiniWiki::Markup(9, "/{-(.*?)-}/",'$1','_$1_');
+ MiniWiki::Markup(9, "/{-(.*?)-}/",'$1','-$1-');
// [+ big +] [++ bigger ++] [+++ even bigger +++] ...
MiniWiki::Markup(10, '/\\[(([-+])+)(.*?)\\1\\]/e',"'$3'", "'$3'");
// -----
- MiniWiki::Markup(11, '/(\n|^)----+/s', '$1
', '$1----');
+ MiniWiki::Markup(11, '/(\n|^)----+/s', '$1
', '$1----'."\n");
// titles
MiniWiki::Markup(12, '/(\n|^)(!+)([^\n]*)/se', "'$1$3'", "'$1$3'");
@@ -53,10 +53,10 @@ class MiniWiki
MiniWiki::Markup(14, "/(^|\n)#(([^\n]*(\n|$))(#[^\n]*(\n|$))*)/se", "'- '.str_replace(\"\\n#\",'
- ','$2').'
'", "$0");
// links
- MiniWiki::Markup(15, '/((?:https?|ftp):\/\/(?:\.*,*[\w@~%$£µ&i#\-+=_\/\?;])*)/ui', '\\0', '\\0');
- MiniWiki::Markup(16, '/(\s|^|\\[\\[)www\.((?:\.*,*[\w@~%$£µ&i#\-+=_\/\?;])*)/iu', '\\1www.\\2', 'http://www.\\2');
- MiniWiki::Markup(17, '/(?:mailto:)?([a-z0-9.\-+_]+@([\-.+_]?[a-z0-9])+)/i', '\\0', '\\0');
- MiniWiki::Markup(18, '/\\[\\[\\s*.*<\/a>\\s*\|([^\\]]+)\\]\\]/i', '\\2', '\\2 (\\1)');
+ MiniWiki::Markup(15, '/((?:https?|ftp):\/\/(?:\.*,*[\w@~%$£µ&i#\-+=_\/\?;])*)/ui', '\\0', '[\\0]');
+ MiniWiki::Markup(16, '/(\s|^|\\[\\[)www\.((?:\.*,*[\w@~%$£µ&i#\-+=_\/\?;])*)/iu', '\\1www.\\2', '[http://www.\\2]');
+ MiniWiki::Markup(17, '/(?:mailto:)?([a-z0-9.\-+_]+@([\-.+_]?[a-z0-9])+)/i', '\\0', '[mailto:\\0]');
+ MiniWiki::Markup(18, '/\\[\\[\\s*.*<\/a>\\s*\|([^\\]]+)\\]\\]/i', '\\2', '\\2 [\\1]');
// paragraphs and empty lines
MiniWiki::Markup(19, "/\n\n/", '
', "\n\n");
@@ -64,17 +64,79 @@ class MiniWiki
MiniWiki::Markup(21, "/^.*<\/p>
.*$/s", "
$0
", "$0");
}
- public static function WikiToHTML($wiki, $notitle = false) {
- if ($notitle) {
+ public static function WikiToHTML($wiki, $title = false) {
+ if (!$title) {
$oldrule12 = MiniWiki::$replacementHTML[12];
MiniWiki::$replacementHTML[12] = "'$0'";
}
- $html = preg_replace(MiniWiki::$patternsWiki, MiniWiki::$replacementHTML, htmlentities($wiki));
- if ($notitle) {
+ $html = preg_replace(MiniWiki::$patternsWiki, MiniWiki::$replacementHTML, utf8_encode(htmlentities(utf8_decode(trim($wiki)))));
+ if (!$title) {
MiniWiki::$replacementHTML[12] = $oldrule12;
}
return $html;
}
+
+ private 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);
+ }
+
+
+ public static function WikiToText($wiki, $just=false, $indent=0, $width=68, $title=false) {
+ if (!$title) {
+ $oldrule12 = MiniWiki::$replacementHTML[12];
+ MiniWiki::$replacementHTML[12] = "'$0'";
+ }
+ $text = preg_replace(MiniWiki::$patternsWiki, MiniWiki::$replacementText, trim($wiki));
+ if (!$title) {
+ MiniWiki::$replacementHTML[12] = $oldrule12;
+ }
+ $text = $just ? MiniWiki::justify($text,$width-$indent) : wordwrap($text,$width-$indent);
+ if($indent) {
+ $ind = str_pad('',$indent);
+ $text = $ind.str_replace("\n","\n$ind",$text);
+ }
+ return $text;
+ }
};
MiniWiki::init();
diff --git a/include/massmailer.inc.php b/include/massmailer.inc.php
index fce33ca..1ac9aea 100644
--- a/include/massmailer.inc.php
+++ b/include/massmailer.inc.php
@@ -218,93 +218,15 @@ abstract class MassMailer
// }}}
// {{{ 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]','', $text);
- $text = str_replace('[/b]','', $text);
- $text = str_replace('[i]','', $text);
- $text = str_replace('[/i]','', $text);
- $text = str_replace('[u]','', $text);
- $text = str_replace('[/u]','', $text);
- $text = preg_replace("!(\\s*\n)*\[title\]!",'',$text);
- $text = preg_replace("!\[\/title\](\\s*\n)*!", '
',$text);
- $text = preg_replace("!(\\s*\n)*\[subtitle\]!",'',$text);
- $text = preg_replace("!\[\/subtitle\](\\s*\n)*!",'
',$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)
// }}}
diff --git a/include/newsletter.inc.php b/include/newsletter.inc.php
index 386ef16..63025a3 100644
--- a/include/newsletter.inc.php
+++ b/include/newsletter.inc.php
@@ -226,8 +226,8 @@ class NLArticle
public function toText()
{
$title = '*'.$this->title().'*';
- $body = enriched_to_text($this->_body,false,true);
- $app = enriched_to_text($this->_append,false,false,4);
+ $body = MiniWiki::WikiToText($this->_body,true);
+ $app = MiniWiki::WikiToText($this->_append,false,4);
return trim("$title\n\n$body\n\n$app")."\n";
}
@@ -237,8 +237,8 @@ class NLArticle
public function toHtml()
{
$title = "".pl_entities($this->title()).'
';
- $body = enriched_to_text($this->_body,true);
- $app = enriched_to_text($this->_append,true);
+ $body = MiniWiki::WikiToHTML($this->_body);
+ $app = MiniWiki::WikiToHTML($this->_append);
$art = "$title\n";
$art .= "\n$body\n";
@@ -255,7 +255,7 @@ class NLArticle
public function check()
{
- $text = enriched_to_text($this->_body);
+ $text = MiniWiki::WikiToText($this->_body);
$arr = explode("\n",wordwrap($text,68));
$c = 0;
foreach ($arr as $line) {
diff --git a/modules/events.php b/modules/events.php
index 20a0f56..ff0ca57 100644
--- a/modules/events.php
+++ b/modules/events.php
@@ -264,14 +264,13 @@ class EventsModule extends PLModule
function handler_preview(&$page)
{
- require_once('url_catcher.inc.php');
$page->changeTpl('events/preview.tpl', NO_SKIN);
$texte = Get::v('texte');
if (!is_utf8($texte)) {
$texte = utf8_encode($texte);
}
if (strpos($_SERVER['HTTP_REFERER'], 'admin') === false) {
- $texte = url_catcher(pl_entities($texte));
+ $texte = MiniWiki::WikiToHTML($texte);
}
$titre = Get::v('titre');
if (!is_utf8($titre)) {
@@ -308,8 +307,7 @@ class EventsModule extends PLModule
$action = null;
}
- require_once('url_catcher.inc.php');
- $texte_catch_url = url_catcher($texte);
+ $texte_catch_url = MiniWiki::WikiToHTML($texte);
$page->assign('titre', $titre);
$page->assign('texte', $texte);
diff --git a/modules/xnetgrp.php b/modules/xnetgrp.php
index 104a5f0..d4a9612 100644
--- a/modules/xnetgrp.php
+++ b/modules/xnetgrp.php
@@ -170,9 +170,8 @@ class XnetGrpModule extends PLModule
$page->setRssLink("Polytechnique.net :: {$globals->asso("nom")} :: News",
'rss/'.S::v('forlife') .'/'.S::v('core_rss_hash').'/rss.xml');
}
-
- require_once('url_catcher.inc.php');
- $page->register_modifier('url_catcher', 'url_catcher');
+
+ $page->register_modifier('url_catcher', array(MiniWiki,'WikiToHTML'));
$page->assign('articles', $arts);
$page->assign('asso', $globals->asso());
@@ -959,9 +958,8 @@ class XnetGrpModule extends PLModule
{
global $globals;
require_once('rss.inc.php');
- require_once('url_catcher.inc.php');
$uid = init_rss('xnetgrp/announce-rss.tpl', $user, $hash, false);
- $page->register_modifier('url_catcher', 'url_catcher');
+ $page->register_modifier('url_catcher', array(MiniWiki,'WikiToHTML'));
if ($uid) {
$rss = XDB::iterator("SELECT a.id, a.titre, a.texte, a.contacts, a.create_date,
@@ -988,6 +986,7 @@ class XnetGrpModule extends PLModule
{
global $globals, $platal;
new_groupadmin_page('xnetgrp/announce-edit.tpl');
+ $page->register_modifier('url_catcher', array(MiniWiki,'WikiToHTML'));
$page->assign('new', is_null($aid));
$art = array();
@@ -1043,9 +1042,8 @@ class XnetGrpModule extends PLModule
$aid = XDB::insertId();
if ($art['xorg']) {
require_once('validations.inc.php');
- require_once('url_catcher.inc.php');
$article = new EvtReq("[{$globals->asso('nom')}] " . $art['titre'],
- url_catcher($art['texte'] . (!empty($art['contact_html']) ? "\n\nContacts :\n" . $art['contact_html'] : "")),
+ MiniWiki::WikiToHTML($art['texte'] . (!empty($art['contact_html']) ? "\n\nContacts :\n" . $art['contact_html'] : "")),
$art['promo_min'], $art['promo_max'], $art['peremption'], "", S::v('uid'));
$article->submit();
$page->trig("L'affichage sur la page d'accueil de Polytechnique.org est en attente de validation");
@@ -1113,8 +1111,7 @@ class XnetGrpModule extends PLModule
}
}
- require_once('url_catcher.inc.php');
- $art['contact_html'] = url_catcher($art['contact_html']);
+ $art['contact_html'] = MiniWiki::WikiToHTML($art['contact_html']);
$page->assign('art', $art);
}
diff --git a/templates/xnetgrp/announce-rss.tpl b/templates/xnetgrp/announce-rss.tpl
index b4ab621..5ece500 100644
--- a/templates/xnetgrp/announce-rss.tpl
+++ b/templates/xnetgrp/announce-rss.tpl
@@ -37,7 +37,7 @@
{$line.titre|strip_tags}
{$line.id}
{#globals.baseurl#}/{$asso.diminutif}/#art{$line.id}
-
Contacts :
{$line.contacts|url_catcher|nl2br}{/if}]]>
+
Contacts :
{$line.contacts|url_catcher}{/if}]]>
{$line.prenom} {$line.nom} (X{$line.promo})
{$line.create_date|rss_date}
diff --git a/templates/xnetgrp/form.announce.tpl b/templates/xnetgrp/form.announce.tpl
index cf8f7e7..d1aa617 100644
--- a/templates/xnetgrp/form.announce.tpl
+++ b/templates/xnetgrp/form.announce.tpl
@@ -39,7 +39,7 @@
{tidy}
- {$art.texte|nl2br}
+ {$art.texte|url_catcher|smarty:nodefaults}
{/tidy}
|
diff --git a/upgrade/0.9.14/04_newsletter.sql b/upgrade/0.9.14/04_newsletter.sql
new file mode 100644
index 0000000..991e529
--- /dev/null
+++ b/upgrade/0.9.14/04_newsletter.sql
@@ -0,0 +1,12 @@
+UPDATE newsletter_art SET body =
+REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(body,
+"[b]", "'''"),
+"[/b]", "'''"),
+"[i]", "''"),
+"[/i]", "''"),
+"[u]", "{+"),
+"[/u]", "+}"),
+"[title]", "\n!"),
+"[/title]", ""),
+"[subtitle]", "\n!!"),
+"[/subtitle]", "");
--
2.1.4