Add BBCode versioning

- This will trigger the re-conversion of displayed items on version update
This commit is contained in:
Hypolite Petovan 2020-12-04 07:29:08 -05:00
parent a382798999
commit e712706302
2 changed files with 18 additions and 14 deletions

View file

@ -49,6 +49,9 @@ use Friendica\Util\XML;
class BBCode
{
// Update this value to the current date whenever changes are made to BBCode::convert
const VERSION = '2020-12-03';
const INTERNAL = 0;
const API = 2;
const DIASPORA = 3;

View file

@ -3529,49 +3529,50 @@ class Item
*/
public static function putInCache(&$item, $update = false)
{
$body = $item["body"];
// Save original body to prevent addons to modify it
$body = $item['body'];
$rendered_hash = $item['rendered-hash'] ?? '';
$rendered_html = $item['rendered-html'] ?? '';
if ($rendered_hash == ''
|| $rendered_html == ""
|| $rendered_hash != hash("md5", $item["body"])
|| DI::config()->get("system", "ignore_cache")
|| $rendered_html == ''
|| $rendered_hash != BBCode::VERSION . '::' . hash('md5', $body)
|| DI::config()->get('system', 'ignore_cache')
) {
self::addRedirToImageTags($item);
$item["rendered-html"] = BBCode::convert($item["body"]);
$item["rendered-hash"] = hash("md5", $item["body"]);
$item['rendered-html'] = BBCode::convert($item['body']);
$item['rendered-hash'] = hash('md5', $body);
$hook_data = ['item' => $item, 'rendered-html' => $item['rendered-html'], 'rendered-hash' => $item['rendered-hash']];
Hook::callAll('put_item_in_cache', $hook_data);
$item['rendered-html'] = $hook_data['rendered-html'];
$item['rendered-hash'] = $hook_data['rendered-hash'];
$item['rendered-hash'] = BBCode::VERSION . '::' . $hook_data['rendered-hash'];
unset($hook_data);
// Force an update if the generated values differ from the existing ones
if ($rendered_hash != $item["rendered-hash"]) {
if ($rendered_hash != $item['rendered-hash']) {
$update = true;
}
// Only compare the HTML when we forcefully ignore the cache
if (DI::config()->get("system", "ignore_cache") && ($rendered_html != $item["rendered-html"])) {
if (DI::config()->get('system', 'ignore_cache') && ($rendered_html != $item['rendered-html'])) {
$update = true;
}
if ($update && !empty($item["id"])) {
if ($update && !empty($item['id'])) {
self::update(
[
'rendered-html' => $item["rendered-html"],
'rendered-hash' => $item["rendered-hash"]
'rendered-html' => $item['rendered-html'],
'rendered-hash' => $item['rendered-hash']
],
['id' => $item["id"]]
['id' => $item['id']]
);
}
}
$item["body"] = $body;
$item['body'] = $body;
}
/**