aboutsummaryrefslogblamecommitdiffstats
path: root/include/quoteconvert.php
blob: 3aee93234fdc1b4ee0e1cd7f96ee595abb9f7ec5 (plain) (tree)


































































































































                                                                                                                                       
<?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) == '>')
			or (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[collapsed]\n".substr($message, $quotestart+7, -8).'[/collapsed]';
	}

	return($message);
}
?>