/** * Undo patched changes to a string. * * @param string $text * @param array|string $diff * @return string */ function phorum_api_diff_unpatch_color($text, $diff) { $text = str_replace(array("\r\n", "\r"), "\n", $text); if (!is_array($diff)) { $n = 0; for ($i = 0; $i < strlen($diff); $i++) { $c = substr($diff, $i, 1); if ($c == "-") { $n = substr($diff, 0, $i); $pre = substr($text, 0, $n); $post = substr($text, $n); return $pre . "[phorum removal]" . substr($diff, $i + 1) . "[/phorum removal]" . $post; } elseif ($c == "+") { $n = substr($diff, 0, $i); $pre = substr($text, 0, $n); $post = substr($text, $n); $colored_text = substr($diff, $i + 1); return $pre . "[phorum addition]" . $colored_text . "[/phorum addition]" . substr($post, strlen($diff) - $i - 1); } } return $text; } foreach (array_reverse($diff) as $d) { $text = phorum_api_diff_unpatch_color($text, $d); } return $text; }
$colored_body = str_replace(array("[phorum addition]", "[phorum removal]", "[/phorum addition]", "[/phorum removal]"), array("<span class=\"addition\">", "<span class=\"removal\">", "</span>", "</span>"), $colored_body); $colored_body = nl2br($colored_body); $this_version["colored_body"] = $colored_body; } elseif (!isset($diff_info['diff_body'])) { $this_version['colored_body'] = nl2br($prev_body); } else { $this_version["colored_body"] = nl2br($prev_body); } $this_version['colored_body'] = phorum_api_format_censor($this_version['colored_body']); // only happens in first loop if ($prev_subject == -1) { $prev_subject = $message["subject"]; } // subject diffs if (isset($diff_info['diff_subject']) && !empty($diff_info['diff_subject'])) { $colored_subject = phorum_api_diff_unpatch_color($prev_subject, $diff_info['diff_subject']); $prev_subject = phorum_api_diff_unpatch($prev_subject, $diff_info['diff_subject']); $colored_subject = htmlspecialchars($colored_subject, ENT_COMPAT, $PHORUM["DATA"]["HCHARSET"]); $colored_subject = str_replace(array("[phorum addition]", "[phorum removal]", "[/phorum addition]", "[/phorum removal]"), array("<span class=\"addition\">", "<span class=\"removal\">", "</span>", "</span>"), $colored_subject); $colored_subject = nl2br($colored_subject); $this_version["colored_subject"] = $colored_subject; } elseif (!isset($diff_info['diff_subject'])) { $this_version['colored_subject'] = nl2br($prev_subject); } else { $this_version["colored_subject"] = nl2br($prev_subject); } $this_version['colored_subject'] = phorum_api_format_censor($this_version['colored_subject']); // no nl2br for subject //$this_version["colored_subject"] = nl2br($this_version["colored_subject"]); $message_hist[] = $this_version; }