PHP Pionierauftrag

Themen die alle interessieren und Pergon betreffen

Moderator: Anselm

PHP Pionierauftrag

Beitragvon Jason » Mi, 28. Jan 2004 13:18

jo, wie ihr seht, oder auch nicht, funzt der Austausch der Postings
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
Jason
 
Beiträge: 3902
Registriert: Di, 27. Mai 2003 07:42

Re: PHP Pionierauftrag

Beitragvon Jason » Do, 29. Jan 2004 21:43

hmm, mag niemand? ich hab das absichtlich hierher gestellt, weil ich
das schon beim trailer auch so hätte machen sollen...

das hier im speziellen sollte nicht so komplifiziert werden, beinhaltet
aber die option nach noch viel mehr, wozu dann zwangsweise admin-rechte
aufs forum und zugriff auf die dazugehörige MySQL-DB gehören...

oder muß erst jemand explizit bestimmt werden? leider kein scherz, weil,
hab ich schon erlebt, daß manche erst was annehmen, wenn man sie zu
ihrem glück überredet, selbst wenn sie es ohne weiteres
könnten.

Jason

--
Shinigami @ Tyr.Asgard / ICQ #73518941 / Jason [GoA]
Admin von "Eine Welt namens Pergon" (UO) - http://www.welt-pergon.de
Jason
 
Beiträge: 3902
Registriert: Di, 27. Mai 2003 07:42

Re: PHP Pionierauftrag

Beitragvon Valrath aus Nirdana » Do, 29. Jan 2004 21:52

wenn ich wüsste wies geht würd ich dir ja helfen ;)
Diplomatie ist die Kunst, jemandem in so netter und charmanter Weise zu sagen, daß er zur Hölle gehen soll, daß der Angesprochene sich sogar auf die Reise freut.
Benutzeravatar
Valrath aus Nirdana
 
Beiträge: 831
Registriert: Mi, 03. Dez 2003 00:16
Wohnort: Nirdana

Re: PHP Pionierauftrag

Beitragvon Jason » Do, 29. Jan 2004 22:22

Valrath schrieb
wenn ich wüsste wies geht würd ich dir ja helfen ;)

hmm, na, oben kommt der eine string rein, und unten der modifizierte
raus... also, wenn'u 'n bissl programmieren kannst, kannste auch das
ganze in PHP machen... ich kann's auch nich, aber die google bzw.
dann php.net, erklärt ja alles wichtige... is ja eigentlich "nur"
zeichenkettenmanipulation

aber danke für's angebot :)

Jason

--
Shinigami @ Tyr.Asgard / ICQ #73518941 / Jason [GoA]
Admin von "Eine Welt namens Pergon" (UO) - http://www.welt-pergon.de
Jason
 
Beiträge: 3902
Registriert: Di, 27. Mai 2003 07:42

Re: PHP Pionierauftrag

Beitragvon Leowyn aus Yew » Fr, 30. Jan 2004 00:12

wuerde es gerne machen, aber..

ich hab gerade eine neue stelle in aussicht,
und bin somit voellig in c versunken
und zudem auch noch zeitlich voellig.. oehm.. wie soll ich sagen...
mehr zeit als um ein paar mal ins forum zu schauen bleibt nich..

aber sobald das durch ist mach ich das gerne, wenn es bis dahin niemand anders gemacht hat

leo
Leowyn aus Yew
 
Beiträge: 14
Registriert: Mo, 15. Dez 2003 21:32

Re: PHP Pionierauftrag

Beitragvon Linus » Fr, 30. Jan 2004 00:25

// 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);
}
}

}

So wie es scheint, wird jeder bbcode nur einmal entfernt. Da gehört
eindeutig noch eine Schleife rein.

Phygon, der grad im Klausurstress is :-\
Linus
 
Beiträge: 185
Registriert: Di, 16. Sep 2003 23:20


Zurück zu Allgemein [Spieler]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 36 Gäste

cron