zwischen News und Forum, besonders im Zusammenhang mit Quotings, nicht
wirklich gut... aber dies läßt sich ja beheben. ich häng hier mal
(nicht als Attachement), die entsprechenden beiden Funktionen an, die
aktuell zur Umwandlung der Postings genutzt werden. Wäre schön, wenn
sich da mal jemand raufstürzen würde... bei rückfragen, einfach fragen...
die struktur der quotes im forum ist vorgegeben, sprich, das in News zu
überführen ist recht einfach. Aber in die Gegenrichtung... nunja, da
halte ich mich mal an die am allermeisten genutze Variante.
Einfache Quotes:
Forum:
AgtMulda hat geschrieben: 1. is des nid nur green seine Meinung
News:
AgtMulda schrieb
1. is des nid nur green seine Meinung
Verschachtelte Quotes:
Forum:
AgtMulda hat geschrieben:Modorok aus Yew hat geschrieben: War Bill Gates auch nen Powergamer !,
Jo der schlimmste in der Computerbranche.
Naja eigentlich war er viel schlimmer ...
lassn wir das Thema
News:
AgtMulda schrieb
Modorok aus Yew schrieb
War Bill Gates auch nen Powergamer !,
Jo der schlimmste in der Computerbranche.
Naja eigentlich war er viel schlimmer ...
lassn wir das Thema
so wie oben soll es aussehen (leerzeilen und -zeichen (z.B. zwischen
zwei unmittelbar aufeinanderfolgenden ">") hab ich hier mal weggelas-
sen). aktuell macht er jedoch folgendes (unter der Voraussetzung, das
die jeweiligen Quellpostings obiger Konvention entsprechen):
Forum -> News
Forum
Pippin de Borgia hat geschrieben:herrje Schnecke, deine Flames sind viel zu
Goldie, abgetoernt
News
Pippin de Borgiaschrieb
herrje Schnecke, deine Flames sind viel zu
Goldie, abgetoernt
wie man sieht, ist in der ersten Zeile das ">" zu viel. das fehlende
leerzeichen vor "schrieb" hab ich in dem quelltext unten schonmal kor-
rigiert. dann hat er, korrekterweise, den eigentlichen text in eine neue
zeile gesetzt, aber das ">" vergessen. wenn die zeile jetzt ewig lang
wäre, würde er sie irgendwann umbrechen und in der neuen unterzeile
ebenfalls das ">" vergessen... lediglich die zeile mit dem zeilenumbruch
(in dem fall die letzte, hab den rest rausgelöscht), ist ok...
und andersrum siehts aktuell so aus:
News -> Forum
News
Karsten 'Goldie' Schulze wrote:
herrje Schnecke, deine Flames sind viel zu harmlos, gar kein
Wuerze und kein Temprament.
Forum:
Karsten 'Goldie' Schulze wrote:
herrje Schnecke, deine Flames sind viel zu harmlos, gar kein
Wuerze und kein Temprament.
hier wandert der name (also alles vor "wrote" oder aber "schrieb", je
nachdem), nicht in das "quote"-tag... laut den funktionen werden auch
sonstige phpBB-tags (diese dinger in eckigen klammern), entfernt...
funzt aber zum beispiel mit den rekursiv-tags [i:irgendwas] nicht
(siehe pergon.rollenspiel.taverne...).
tja, worauf ich hinaus will, ist klar, oder?
hier erstmal den quelltext, zum anschauen, und unten drunter dir URL
für das gesamte aktuelle NewsSync-Script, was schon einige Bugfixes
von meiner Seite enthält...
<?php
function remove_greater_thans($s) {
$s = str_replace(">",">",$s);
return trim($s, ">< ");
} // end remove_greater_thans
// this function will attempt to search for reply parameters such as:
// name, email address wrote in message:
// > x
// > y
// and turn them into phpBB style messages
//
...
// also remember therre can be >1 seperate quotes
function convert_message_to_phpBB($body, $username) {
//if (!(strpos($body, "compatriotes") === false)) {
// print_r($body);
// $kevin = true;
//} //end testing
// look for "\n>[space]"
// there needs to be more than 1 to pass off as a reply
// break body into lines
$body_lines = explode("\n",$body);
$reply_lines = array();
$last_line = -1;
$num_body_lines = count($body_lines);
foreach ($body_lines as $k=>$v) {
$trimed_v = trim($v);
if ((!strcmp(substr($trimed_v, 0, 4),">")) ||
(!strcmp(substr($trimed_v,0,1),">"))) {
$reply_lines[] = $k;
$last_line = $k;
}
// need to get around the word wrapping issue - so look forward one line
elseif (($k < $num_body_lines) && ($last_line != -1) && ($last_line ==
($k - 1))) {
$v_next = trim($body_lines[$k+1]);
if ((!strcmp(substr($v_next, 0, 4),">")) ||
(!strcmp(substr($v_next,0,1),">")) || (strlen($vnext) < 2))
$reply_lines[] = $k;
}
}
//if ($kevin) print_r($reply_lines);
// reply_lines now contacts a list of all lines that we think are replies
// we now have to bunch them together into reply groups
$last_reply_id = -1;
$first_reply_id = -1;
$reply_list = array();
$reply_list_count = -1;
foreach ($reply_lines as $line_id) {
if ($first_reply_id == -1) {
$last_reply_id = $line_id;
$first_reply_id = $line_id;
} else {
if ($line_id == ($last_reply_id +1))
$last_reply_id = $line_id;
else { // break in the link - either a single or there could be another
quote group
if ($last_reply_id != $first_reply_id) { // found a >1 line reply
$reply_list_count++;
$reply_list[$reply_list_count]['first'] = $first_reply_id;
$reply_list[$reply_list_count]['last'] = $last_reply_id;
}
// reset id tags
$first_reply_id = $line_id;
$last_reply_id = $line_id;
}
}
}
// check for end
if (($first_reply_id > -1) && ($last_reply_id != $first_reply_id)) {
$reply_list_count++;
$reply_list[$reply_list_count]['first'] = $first_reply_id;
$reply_list[$reply_list_count]['last'] = $last_reply_id;
}
// if we have any replies, how change them
if ($reply_list_count > -1) {
foreach ($reply_list as $replies) {
for ($i=$replies['first'];$i<=$replies['last'];$i++) {
if ($i == $replies['first'])
$body_lines[$i] = '
';' . remove_greater_thans($body_lines[$i]);
elseif ($i == $replies['last'])
$body_lines[$i] = remove_greater_thans($body_lines[$i]) . '
else
$body_lines[$i] = remove_greater_thans($body_lines[$i]);
}
}
$newbody = "";
foreach ($body_lines as $body_line)
$newbody .= $body_line . "\n";
return $newbody;
}
return $body;
} // end convert_message_to_phpBB
function convert_message_from_phpBB($message) {
global $newsSync_wordWrap;
global $newsSync_bbcode_List;
global $newsSync_quote_wrote_text;
// handle [QUOTE] first
$body_lines = explode("\n",$message);
$inquote = false;
$anychanges = false;
$reply_string = "> ";
foreach ($body_lines as $k=>$aline) {
if (!strcmp(substr($aline,0,6),"[quote")) { // found a quote line
$x = strpos($aline, "]");
if (!($x === false)) {
$inquote = true;
$anychanges = true;
// look for the name between the quotes
$thewriter = "";
$n1 = strpos($aline,"="");
if (!($n1 === false)) {
$n2 = strpos(substr($aline, $n1 + 2),""");
if (!($n2 === false)) {
// <Shinigami 2004/01/28>
$thewriter = substr($aline, $n1 + 2,$n2) . "
$newsSync_quote_wrote_text\n";
// </Shinigami 2004/01/28>
}
}
$aline = $thewriter . substr($aline, $x+1);
}
}
if ($inquote) {
$x = strpos($aline, "[/quote");
$y = strpos($aline, "]");
if ((!($y === false)) && (!($x === false))) { // found end quote stuff
if (($x == 0) && ($y == strlen($aline)))
$aline = "";
elseif ($x == 0)
$aline = substr($aline, $y+1);
elseif ($y == 0)
$aline = substr($aline, 0, $x);
else
$aline = substr($aline, 0, $x) . substr($aline, $y+1);
$inquote = false;
}
$body_lines[$k] = $reply_string . $aline;
}
}
$newmsg = "";
foreach ($body_lines as $aline) {
if (isset($newsSync_wordWrap) && ($newsSync_wordWrap > 0) &&
(strlen($aline) > $newsSync_wordWrap))
$newmsg .= wordwrap($aline, $newsSync_wordWrap, "\n") . "\n";
else
$newmsg .= $aline . "\n";
}
// now remove all other bbcodes
foreach ($newsSync_bbcode_List as $bbcode) {
$xstart = strpos($newmsg,"[$bbcode");
if (!($xstart === false)) {
$xend = strpos(substr($newmsg,$xstart),"]");
if (!($xend === false)) {
$newmsg = substr($newmsg,0,$xstart) . substr($newmsg,$xstart+$xend+1);
}
}
}
return $newmsg;
} // end convert_message_from_phpBB
?>
alle weiteren files findet ihr hier (~155 KB):
http://www.welt-pergon.de/downloads/newssync.rar
vielleicht hat ja mal jemand lust, sich am umbauen der strings zu ver-
suchen... mehr isses ja technisch auch nich
Jason
--
Shinigami @ Tyr.Asgard / ICQ #73518941 / Jason [GoA]
Admin von "Eine Welt namens Pergon" (UO) - http://www.welt-pergon.de