friendica/include/quoteconvert.php

132 lines
2.5 KiB
PHP

<?php
function convertquote($body, $reply)
{
// Convert Quotes
$arrbody = explode("\n", trim($body));
$arrlevel = array();
for ($i = 0; $i < count($arrbody); $i++) {
$quotelevel = 0;
$quoteline = $arrbody[$i];
while ((strlen($quoteline)>0) and ((substr($quoteline, 0, 1) == '>')
|| (substr($quoteline, 0, 1) == ' '))) {
if (substr($quoteline, 0, 1) == '>')
$quotelevel++;
$quoteline = ltrim(substr($quoteline, 1));
}
//echo $quotelevel.'*'.$quoteline."\r\n";
$arrlevel[$i] = $quotelevel;
$arrbody[$i] = $quoteline;
}
$quotelevel = 0;
$previousquote = 0;
$arrbodyquoted = array();
for ($i = 0; $i < count($arrbody); $i++) {
$previousquote = $quotelevel;
$quotelevel = $arrlevel[$i];
$currline = $arrbody[$i];
while ($previousquote < $quotelevel) {
if ($sender != '') {
$quote = "[quote title=$sender]";
$sender = '';
} else
$quote = "[quote]";
$arrbody[$i] = $quote.$arrbody[$i];
$previousquote++;
}
while ($previousquote > $quotelevel) {
$arrbody[$i] = '[/quote]'.$arrbody[$i];
$previousquote--;
}
$arrbodyquoted[] = $arrbody[$i];
}
while ($quotelevel > 0) {
$arrbodyquoted[] = '[/quote]';
$quotelevel--;
}
$body = implode("\n", $arrbodyquoted);
if (strlen($body) > 0)
$body = $body."\n\n";
if ($reply)
$body = removetofu($body);
return($body);
}
function removetofu($message)
{
$message = trim($message);
do {
$oldmessage = $message;
$message = preg_replace('=\[/quote\][\s](.*?)\[quote\]=i', '$1', $message);
$message = str_replace("[/quote][quote]", "", $message);
} while ($message != $oldmessage);
$quotes = array();
$startquotes = 0;
$start = 0;
while (($pos = strpos($message, '[quote', $start)) > 0) {
$quotes[$pos] = -1;
$start = $pos + 7;
$startquotes++;
}
$endquotes = 0;
$start = 0;
while (($pos = strpos($message, '[/quote]', $start)) > 0) {
$start = $pos + 7;
$endquotes++;
}
while ($endquotes < $startquotes) {
$message .= '[/quote]';
++$endquotes;
}
$start = 0;
while (($pos = strpos($message, '[/quote]', $start)) > 0) {
$quotes[$pos] = 1;
$start = $pos + 7;
}
if (strtolower(substr($message, -8)) != '[/quote]')
return($message);
krsort($quotes);
$quotelevel = 0;
$quotestart = 0;
foreach ($quotes as $index => $quote) {
$quotelevel += $quote;
if (($quotelevel == 0) and ($quotestart == 0))
$quotestart = $index;
}
if ($quotestart != 0) {
$message = trim(substr($message, 0, $quotestart))."\n[spoiler]".substr($message, $quotestart+7, -8).'[/spoiler]';
}
return($message);
}