BBCode: Fixed relative links working (#1613)

* Minor improvements

* Update BBCode.php

* Update BBCode.php

* Update BBCode.php

* Update BBCode.php

* Update CHANGELOG.md
This commit is contained in:
Roman Kelesidis 2024-08-27 13:19:41 +07:00 committed by GitHub
commit 58a28e83c2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 34 additions and 26 deletions

View file

@ -14,6 +14,7 @@
- Added showing releaser stats in profile [\#1568](https://github.com/torrentpier/torrentpier/pull/1568) ([belomaxorka](https://github.com/belomaxorka)) - Added showing releaser stats in profile [\#1568](https://github.com/torrentpier/torrentpier/pull/1568) ([belomaxorka](https://github.com/belomaxorka))
- Improved `filelist.php` [\#1586](https://github.com/torrentpier/torrentpier/pull/1586) ([belomaxorka](https://github.com/belomaxorka)) - Improved `filelist.php` [\#1586](https://github.com/torrentpier/torrentpier/pull/1586) ([belomaxorka](https://github.com/belomaxorka))
- Demo mode: Save user language in cookies [\#1584](https://github.com/torrentpier/torrentpier/pull/1584) ([belomaxorka](https://github.com/belomaxorka)) - Demo mode: Save user language in cookies [\#1584](https://github.com/torrentpier/torrentpier/pull/1584) ([belomaxorka](https://github.com/belomaxorka))
- BBCode: Fixed relative links working [\#1613](https://github.com/torrentpier/torrentpier/pull/1613) ([belomaxorka](https://github.com/belomaxorka))
- Fixed `md5()` deprecated in PHP 8.4 [\#1561](https://github.com/torrentpier/torrentpier/pull/1561) ([belomaxorka](https://github.com/belomaxorka)) - Fixed `md5()` deprecated in PHP 8.4 [\#1561](https://github.com/torrentpier/torrentpier/pull/1561) ([belomaxorka](https://github.com/belomaxorka))
- Increased `USEREMAIL_MAX_LENGTH` [\#1566](https://github.com/torrentpier/torrentpier/pull/1566) ([belomaxorka](https://github.com/belomaxorka)) - Increased `USEREMAIL_MAX_LENGTH` [\#1566](https://github.com/torrentpier/torrentpier/pull/1566) ([belomaxorka](https://github.com/belomaxorka))
- Minor improvements [\#1570](https://github.com/torrentpier/torrentpier/pull/1570), [\#1571](https://github.com/torrentpier/torrentpier/pull/1571), [\#1575](https://github.com/torrentpier/torrentpier/pull/1575), [\#1589](https://github.com/torrentpier/torrentpier/pull/1589), [\#1592](https://github.com/torrentpier/torrentpier/pull/1592), [\#1605](https://github.com/torrentpier/torrentpier/pull/1605), [\#1611](https://github.com/torrentpier/torrentpier/pull/1611), [\#1612](https://github.com/torrentpier/torrentpier/pull/1612) ([belomaxorka](https://github.com/belomaxorka)) - Minor improvements [\#1570](https://github.com/torrentpier/torrentpier/pull/1570), [\#1571](https://github.com/torrentpier/torrentpier/pull/1571), [\#1575](https://github.com/torrentpier/torrentpier/pull/1575), [\#1589](https://github.com/torrentpier/torrentpier/pull/1589), [\#1592](https://github.com/torrentpier/torrentpier/pull/1592), [\#1605](https://github.com/torrentpier/torrentpier/pull/1605), [\#1611](https://github.com/torrentpier/torrentpier/pull/1611), [\#1612](https://github.com/torrentpier/torrentpier/pull/1612) ([belomaxorka](https://github.com/belomaxorka))

View file

@ -9,6 +9,8 @@
namespace TorrentPier\Legacy; namespace TorrentPier\Legacy;
use function in_array;
/** /**
* Class BBCode * Class BBCode
* @package TorrentPier\Legacy * @package TorrentPier\Legacy
@ -19,7 +21,7 @@ class BBCode
public array $tpl = []; public array $tpl = [];
/** @var array $smilies Replacements for smilies */ /** @var array $smilies Replacements for smilies */
public $smilies; public array $smilies;
/** @var array $tidy_cfg Tidy preprocessor configuration */ /** @var array $tidy_cfg Tidy preprocessor configuration */
public array $tidy_cfg = [ public array $tidy_cfg = [
@ -246,22 +248,17 @@ class BBCode
*/ */
private function url_callback(array $m): string private function url_callback(array $m): string
{ {
global $bb_cfg;
$url = trim($m[1]); $url = trim($m[1]);
$url_name = isset($m[2]) ? trim($m[2]) : $url; $url_name = isset($m[2]) ? trim($m[2]) : $url;
$url_parse = parse_url($url);
if (!preg_match('#^https?://#iu', $url) && !preg_match('/^#/', $url)) { if (!isset($url_parse['scheme']) && isset($url_parse['path'])) {
$url = 'http://' . $url; if (!preg_match('/^([a-zA-Z0-9_\-\.]+\.php)(\?[^#]*)?$/', $url_parse['path'])) {
$url = 'http://' . $url;
}
} }
if (\in_array(parse_url($url, PHP_URL_HOST), $bb_cfg['nofollow']['allowed_url']) || $bb_cfg['nofollow']['disabled']) { return $this->nofollow_url($url, $url_name);
$link = "<a href=\"$url\" class=\"postLink\">$url_name</a>";
} else {
$link = "<a href=\"$url\" class=\"postLink\" rel=\"nofollow\">$url_name</a>";
}
return $link;
} }
/** /**
@ -323,19 +320,11 @@ class BBCode
*/ */
private function make_url_clickable_callback(array $m): string private function make_url_clickable_callback(array $m): string
{ {
global $bb_cfg;
$max_len = 70; $max_len = 70;
$href = $m[1]; $href = $m[1];
$name = (mb_strlen($href, 'UTF-8') > $max_len) ? mb_substr($href, 0, $max_len - 19) . '...' . mb_substr($href, -16) : $href; $name = (mb_strlen($href, 'UTF-8') > $max_len) ? mb_substr($href, 0, $max_len - 19) . '...' . mb_substr($href, -16) : $href;
if (\in_array(parse_url($href, PHP_URL_HOST), $bb_cfg['nofollow']['allowed_url']) || $bb_cfg['nofollow']['disabled']) { return $this->nofollow_url($href, $name);
$link = "<a href=\"$href\" class=\"postLink\">$name</a>";
} else {
$link = "<a href=\"$href\" class=\"postLink\" rel=\"nofollow\">$name</a>";
}
return $link;
} }
/** /**
@ -349,11 +338,9 @@ class BBCode
{ {
global $datastore; global $datastore;
if (null === $this->smilies) { if (!$this->smilies = $datastore->get('smile_replacements') and !$datastore->has('smile_replacements')) {
if (!$this->smilies = $datastore->get('smile_replacements') and !$datastore->has('smile_replacements')) { $datastore->update('smile_replacements');
$datastore->update('smile_replacements'); $this->smilies = $datastore->get('smile_replacements');
$this->smilies = $datastore->get('smile_replacements');
}
} }
if ($this->smilies) { if ($this->smilies) {
@ -390,4 +377,24 @@ class BBCode
{ {
return tidy_repair_string($text, $this->tidy_cfg, 'utf8'); return tidy_repair_string($text, $this->tidy_cfg, 'utf8');
} }
/**
* Nofollow links handling
*
* @param string $href
* @param string $name
* @return string
*/
private function nofollow_url(string $href, string $name): string
{
global $bb_cfg;
if (in_array(parse_url($href, PHP_URL_HOST), $bb_cfg['nofollow']['allowed_url']) || $bb_cfg['nofollow']['disabled']) {
$link = "<a href=\"$href\" class=\"postLink\">$name</a>";
} else {
$link = "<a href=\"$href\" class=\"postLink\" rel=\"nofollow\">$name</a>";
}
return $link;
}
} }