Merge branch 'develop' into refactoring-of-app-class

This commit is contained in:
Art4 2024-11-16 09:08:22 +00:00
commit c1b48be75c
8 changed files with 81 additions and 74 deletions

View file

@ -45,6 +45,7 @@ steps:
composer_install: composer_install:
image: friendicaci/php8.2:php8.2.16 image: friendicaci/php8.2:php8.2.16
commands: commands:
- mkdir addon # create empty addon folder to appease composer
- export COMPOSER_HOME=.composer - export COMPOSER_HOME=.composer
- composer validate - composer validate
- composer install --no-dev --optimize-autoloader - composer install --no-dev --optimize-autoloader

View file

@ -43,6 +43,7 @@ steps:
composer_install: composer_install:
image: friendicaci/php8.2:php8.2.16 image: friendicaci/php8.2:php8.2.16
commands: commands:
- mkdir addon # create empty addon folder to appease composer
- export COMPOSER_HOME=.composer - export COMPOSER_HOME=.composer
- composer validate - composer validate
- composer install --no-dev --optimize-autoloader - composer install --no-dev --optimize-autoloader

View file

@ -152,7 +152,7 @@
"mikey179/vfsstream": "^1.6", "mikey179/vfsstream": "^1.6",
"mockery/mockery": "^1.3", "mockery/mockery": "^1.3",
"php-mock/php-mock-phpunit": "^2.10", "php-mock/php-mock-phpunit": "^2.10",
"phpstan/phpstan": "^1.12", "phpstan/phpstan": "^2.0",
"phpunit/phpunit": "^9" "phpunit/phpunit": "^9"
}, },
"scripts": { "scripts": {

14
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "11175d4e9806e8a5069d010140431af1", "content-hash": "3e31a2243fb69e47e1b7000cca946fa2",
"packages": [ "packages": [
{ {
"name": "asika/simple-console", "name": "asika/simple-console",
@ -4834,20 +4834,20 @@
}, },
{ {
"name": "phpstan/phpstan", "name": "phpstan/phpstan",
"version": "1.12.7", "version": "2.0.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpstan.git", "url": "https://github.com/phpstan/phpstan.git",
"reference": "dc2b9976bd8b0f84ec9b0e50cc35378551de7af0" "reference": "ab4e9b4415a5fc9e4d27f7fe16c8bc9d067dcd6d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc2b9976bd8b0f84ec9b0e50cc35378551de7af0", "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ab4e9b4415a5fc9e4d27f7fe16c8bc9d067dcd6d",
"reference": "dc2b9976bd8b0f84ec9b0e50cc35378551de7af0", "reference": "ab4e9b4415a5fc9e4d27f7fe16c8bc9d067dcd6d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.2|^8.0" "php": "^7.4|^8.0"
}, },
"conflict": { "conflict": {
"phpstan/phpstan-shim": "*" "phpstan/phpstan-shim": "*"
@ -4888,7 +4888,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2024-10-18T11:12:07+00:00" "time": "2024-11-11T15:43:04+00:00"
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",

View file

@ -89,7 +89,9 @@ class BaseCollection extends \ArrayIterator
*/ */
public function map(callable $callback): BaseCollection public function map(callable $callback): BaseCollection
{ {
return new self(array_map($callback, $this->getArrayCopy()), $this->getTotalCount()); $class = get_class($this);
return new $class(array_map($callback, $this->getArrayCopy()), $this->getTotalCount());
} }
/** /**
@ -102,7 +104,9 @@ class BaseCollection extends \ArrayIterator
*/ */
public function filter(callable $callback = null, int $flag = 0): BaseCollection public function filter(callable $callback = null, int $flag = 0): BaseCollection
{ {
return new self(array_filter($this->getArrayCopy(), $callback, $flag)); $class = get_class($this);
return new $class(array_filter($this->getArrayCopy(), $callback, $flag));
} }
/** /**
@ -112,14 +116,16 @@ class BaseCollection extends \ArrayIterator
*/ */
public function reverse(): BaseCollection public function reverse(): BaseCollection
{ {
return new self(array_reverse($this->getArrayCopy()), $this->getTotalCount()); $class = get_class($this);
return new $class(array_reverse($this->getArrayCopy()), $this->getTotalCount());
} }
/** /**
* Split the collection in smaller collections no bigger than the provided length * Split the collection in smaller collections no bigger than the provided length
* *
* @param int $length * @param int $length
* @return self[] * @return static[]
*/ */
public function chunk(int $length): array public function chunk(int $length): array
{ {
@ -128,7 +134,9 @@ class BaseCollection extends \ArrayIterator
} }
return array_map(function ($array) { return array_map(function ($array) {
return new self($array); $class = get_class($this);
return new $class($array);
}, array_chunk($this->getArrayCopy(), $length)); }, array_chunk($this->getArrayCopy(), $length));
} }

View file

@ -25,6 +25,10 @@ class ActivityPubConversion extends BaseModule
{ {
$results = []; $results = [];
$visible_whitespace = function (string $s): string {
return '<pre>' . htmlspecialchars($s) . '</pre>';
};
if (!empty($_REQUEST['source'])) { if (!empty($_REQUEST['source'])) {
try { try {
$source = json_decode($_REQUEST['source'], true); $source = json_decode($_REQUEST['source'], true);
@ -39,11 +43,11 @@ class ActivityPubConversion extends BaseModule
$formatted = json_encode($source, JSON_PRETTY_PRINT); $formatted = json_encode($source, JSON_PRETTY_PRINT);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Formatted'), 'title' => DI::l10n()->t('Formatted'),
'content' => $this->visible_whitespace(trim(var_export($formatted, true), "'")), 'content' => $visible_whitespace(trim(var_export($formatted, true), "'")),
]; ];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Source'), 'title' => DI::l10n()->t('Source'),
'content' => $this->visible_whitespace(var_export($source, true)) 'content' => $visible_whitespace(var_export($source, true))
]; ];
$activity = JsonLD::compact($source); $activity = JsonLD::compact($source);
if (!$activity) { if (!$activity) {
@ -51,7 +55,7 @@ class ActivityPubConversion extends BaseModule
} }
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Activity'), 'title' => DI::l10n()->t('Activity'),
'content' => $this->visible_whitespace(var_export($activity, true)) 'content' => $visible_whitespace(var_export($activity, true))
]; ];
$type = JsonLD::fetchElement($activity, '@type'); $type = JsonLD::fetchElement($activity, '@type');
@ -99,14 +103,14 @@ class ActivityPubConversion extends BaseModule
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Object data'), 'title' => DI::l10n()->t('Object data'),
'content' => $this->visible_whitespace(var_export($object_data, true)) 'content' => $visible_whitespace(var_export($object_data, true))
]; ];
$item = ActivityPub\Processor::createItem($object_data, true); $item = ActivityPub\Processor::createItem($object_data, true);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Result Item'), 'title' => DI::l10n()->t('Result Item'),
'content' => $this->visible_whitespace(var_export($item, true)) 'content' => $visible_whitespace(var_export($item, true))
]; ];
} catch (\Throwable $e) { } catch (\Throwable $e) {
$results[] = [ $results[] = [
@ -126,9 +130,4 @@ class ActivityPubConversion extends BaseModule
return $o; return $o;
} }
private function visible_whitespace(string $s): string
{
return '<pre>' . htmlspecialchars($s) . '</pre>';
}
} }

View file

@ -30,6 +30,11 @@ class Babel extends BaseModule
protected function content(array $request = []): string protected function content(array $request = []): string
{ {
$results = []; $results = [];
$visible_whitespace = function (string $s): string {
return '<pre>' . htmlspecialchars($s) . '</pre>';
};
if (!empty($request['text'])) { if (!empty($request['text'])) {
self::checkFormSecurityTokenForbiddenOnError('babel'); self::checkFormSecurityTokenForbiddenOnError('babel');
switch (($request['type'] ?? '') ?: 'bbcode') { switch (($request['type'] ?? '') ?: 'bbcode') {
@ -37,24 +42,24 @@ class Babel extends BaseModule
$bbcode = $request['text']; $bbcode = $request['text'];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Source input'), 'title' => DI::l10n()->t('Source input'),
'content' => $this->visible_whitespace($bbcode) 'content' => $visible_whitespace($bbcode)
]; ];
$plain = Text\BBCode::toPlaintext($bbcode, false); $plain = Text\BBCode::toPlaintext($bbcode, false);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::toPlaintext'), 'title' => DI::l10n()->t('BBCode::toPlaintext'),
'content' => $this->visible_whitespace($plain) 'content' => $visible_whitespace($plain)
]; ];
$html = Text\BBCode::convertForUriId(0, $bbcode); $html = Text\BBCode::convertForUriId(0, $bbcode);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::convert (raw HTML)'), 'title' => DI::l10n()->t('BBCode::convert (raw HTML)'),
'content' => $this->visible_whitespace($html) 'content' => $visible_whitespace($html)
]; ];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::convert (hex)'), 'title' => DI::l10n()->t('BBCode::convert (hex)'),
'content' => $this->visible_whitespace(bin2hex($html)), 'content' => $visible_whitespace(bin2hex($html)),
]; ];
$results[] = [ $results[] = [
@ -65,19 +70,19 @@ class Babel extends BaseModule
$bbcode2 = Text\HTML::toBBCode($html); $bbcode2 = Text\HTML::toBBCode($html);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::convert => HTML::toBBCode'), 'title' => DI::l10n()->t('BBCode::convert => HTML::toBBCode'),
'content' => $this->visible_whitespace($bbcode2) 'content' => $visible_whitespace($bbcode2)
]; ];
$markdown = Text\BBCode::toMarkdown($bbcode); $markdown = Text\BBCode::toMarkdown($bbcode);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::toMarkdown'), 'title' => DI::l10n()->t('BBCode::toMarkdown'),
'content' => $this->visible_whitespace($markdown) 'content' => $visible_whitespace($markdown)
]; ];
$html2 = Text\Markdown::convert($markdown); $html2 = Text\Markdown::convert($markdown);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::convert (raw HTML)'), 'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::convert (raw HTML)'),
'content' => $this->visible_whitespace($html2) 'content' => $visible_whitespace($html2)
]; ];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::convert'), 'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::convert'),
@ -87,13 +92,13 @@ class Babel extends BaseModule
$bbcode3 = Text\Markdown::toBBCode($markdown); $bbcode3 = Text\Markdown::toBBCode($markdown);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::toBBCode'), 'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::toBBCode'),
'content' => $this->visible_whitespace($bbcode3) 'content' => $visible_whitespace($bbcode3)
]; ];
$bbcode4 = Text\HTML::toBBCode($html2); $bbcode4 = Text\HTML::toBBCode($html2);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::convert => HTML::toBBCode'), 'title' => DI::l10n()->t('BBCode::toMarkdown => Markdown::convert => HTML::toBBCode'),
'content' => $this->visible_whitespace($bbcode4) 'content' => $visible_whitespace($bbcode4)
]; ];
$tags = Text\BBCode::getTags($bbcode); $tags = Text\BBCode::getTags($bbcode);
@ -101,22 +106,22 @@ class Babel extends BaseModule
$body = Item::setHashtags($bbcode); $body = Item::setHashtags($bbcode);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Item Body'), 'title' => DI::l10n()->t('Item Body'),
'content' => $this->visible_whitespace($body) 'content' => $visible_whitespace($body)
]; ];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Item Tags'), 'title' => DI::l10n()->t('Item Tags'),
'content' => $this->visible_whitespace(var_export($tags, true)), 'content' => $visible_whitespace(var_export($tags, true)),
]; ];
$body2 = PageInfo::searchAndAppendToBody($bbcode, true); $body2 = PageInfo::searchAndAppendToBody($bbcode, true);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('PageInfo::appendToBody'), 'title' => DI::l10n()->t('PageInfo::appendToBody'),
'content' => $this->visible_whitespace($body2) 'content' => $visible_whitespace($body2)
]; ];
$html3 = Text\BBCode::convertForUriId(0, $body2); $html3 = Text\BBCode::convertForUriId(0, $body2);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('PageInfo::appendToBody => BBCode::convert (raw HTML)'), 'title' => DI::l10n()->t('PageInfo::appendToBody => BBCode::convert (raw HTML)'),
'content' => $this->visible_whitespace($html3) 'content' => $visible_whitespace($html3)
]; ];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('PageInfo::appendToBody => BBCode::convert'), 'title' => DI::l10n()->t('PageInfo::appendToBody => BBCode::convert'),
@ -127,7 +132,7 @@ class Babel extends BaseModule
$diaspora = trim($request['text']); $diaspora = trim($request['text']);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Source input (Diaspora format)'), 'title' => DI::l10n()->t('Source input (Diaspora format)'),
'content' => $this->visible_whitespace($diaspora), 'content' => $visible_whitespace($diaspora),
]; ];
$markdown = XML::unescape($diaspora); $markdown = XML::unescape($diaspora);
@ -136,13 +141,13 @@ class Babel extends BaseModule
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Source input (Markdown)'), 'title' => DI::l10n()->t('Source input (Markdown)'),
'content' => $this->visible_whitespace($markdown), 'content' => $visible_whitespace($markdown),
]; ];
$html = Text\Markdown::convert($markdown); $html = Text\Markdown::convert($markdown);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Markdown::convert (raw HTML)'), 'title' => DI::l10n()->t('Markdown::convert (raw HTML)'),
'content' => $this->visible_whitespace($html), 'content' => $visible_whitespace($html),
]; ];
$results[] = [ $results[] = [
@ -153,14 +158,14 @@ class Babel extends BaseModule
$bbcode = Text\Markdown::toBBCode($markdown); $bbcode = Text\Markdown::toBBCode($markdown);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Markdown::toBBCode'), 'title' => DI::l10n()->t('Markdown::toBBCode'),
'content' => $this->visible_whitespace($bbcode), 'content' => $visible_whitespace($bbcode),
]; ];
break; break;
case 'html' : case 'html' :
$html = trim($request['text']); $html = trim($request['text']);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Raw HTML input'), 'title' => DI::l10n()->t('Raw HTML input'),
'content' => $this->visible_whitespace($html), 'content' => $visible_whitespace($html),
]; ];
$results[] = [ $results[] = [
@ -172,12 +177,12 @@ class Babel extends BaseModule
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML Purified (raw)'), 'title' => DI::l10n()->t('HTML Purified (raw)'),
'content' => $this->visible_whitespace($purified), 'content' => $visible_whitespace($purified),
]; ];
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML Purified (hex)'), 'title' => DI::l10n()->t('HTML Purified (hex)'),
'content' => $this->visible_whitespace(bin2hex($purified)), 'content' => $visible_whitespace(bin2hex($purified)),
]; ];
$results[] = [ $results[] = [
@ -188,7 +193,7 @@ class Babel extends BaseModule
$bbcode = Text\HTML::toBBCode($html); $bbcode = Text\HTML::toBBCode($html);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML::toBBCode'), 'title' => DI::l10n()->t('HTML::toBBCode'),
'content' => $this->visible_whitespace($bbcode) 'content' => $visible_whitespace($bbcode)
]; ];
$html2 = Text\BBCode::convertForUriId(0, $bbcode); $html2 = Text\BBCode::convertForUriId(0, $bbcode);
@ -205,25 +210,25 @@ class Babel extends BaseModule
$bbcode2plain = Text\BBCode::toPlaintext($bbcode); $bbcode2plain = Text\BBCode::toPlaintext($bbcode);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML::toBBCode => BBCode::toPlaintext'), 'title' => DI::l10n()->t('HTML::toBBCode => BBCode::toPlaintext'),
'content' => $this->visible_whitespace($bbcode2plain), 'content' => $visible_whitespace($bbcode2plain),
]; ];
$markdown = Text\HTML::toMarkdown($html); $markdown = Text\HTML::toMarkdown($html);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML::toMarkdown'), 'title' => DI::l10n()->t('HTML::toMarkdown'),
'content' => $this->visible_whitespace($markdown) 'content' => $visible_whitespace($markdown)
]; ];
$text = Text\HTML::toPlaintext($html, 0); $text = Text\HTML::toPlaintext($html, 0);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML::toPlaintext'), 'title' => DI::l10n()->t('HTML::toPlaintext'),
'content' => $this->visible_whitespace($text), 'content' => $visible_whitespace($text),
]; ];
$text = Text\HTML::toPlaintext($html, 0, true); $text = Text\HTML::toPlaintext($html, 0, true);
$results[] = [ $results[] = [
'title' => DI::l10n()->t('HTML::toPlaintext (compact)'), 'title' => DI::l10n()->t('HTML::toPlaintext (compact)'),
'content' => $this->visible_whitespace($text), 'content' => $visible_whitespace($text),
]; ];
break; break;
case 'twitter': case 'twitter':
@ -236,7 +241,7 @@ class Babel extends BaseModule
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Decoded post'), 'title' => DI::l10n()->t('Decoded post'),
'content' => $this->visible_whitespace(var_export($status, true)), 'content' => $visible_whitespace(var_export($status, true)),
]; ];
$postarray = []; $postarray = [];
@ -255,7 +260,7 @@ class Babel extends BaseModule
$results[] = [ $results[] = [
'title' => DI::l10n()->t('Post array before expand entities'), 'title' => DI::l10n()->t('Post array before expand entities'),
'content' => $this->visible_whitespace(var_export($postarray, true)), 'content' => $visible_whitespace(var_export($postarray, true)),
]; ];
} else { } else {
$results[] = [ $results[] = [
@ -285,9 +290,4 @@ class Babel extends BaseModule
return $o; return $o;
} }
private function visible_whitespace($s): string
{
return '<pre>' . htmlspecialchars($s) . '</pre>';
}
} }

View file

@ -1880,31 +1880,29 @@ class Receiver
$object_data = self::getObjectDataFromActivity($object); $object_data = self::getObjectDataFromActivity($object);
$receiverdata = self::getReceivers($object, $actor ?: $object_data['actor'] ?? '', $object_data['tags'], true, false);
$receivers = $reception_types = [];
foreach ($receiverdata as $key => $data) {
$receivers[$key] = $data['uid'];
$reception_types[$data['uid']] = $data['type'] ?? 0;
}
$object_data['receiver_urls'] = self::getReceiverURL($object); $object_data['receiver_urls'] = self::getReceiverURL($object);
$object_data['receiver'] = $receivers; $object_data['receiver'] = [];
$object_data['reception_type'] = $reception_types; $object_data['reception_type'] = [];
$object_data['unlisted'] = false;
$receiverdata = self::getReceivers($object, $actor ?: $object_data['actor'] ?? '', $object_data['tags'], true, false);
foreach ($receiverdata as $key => $data) {
if ($data['uid'] !== -1) {
$object_data['reception_type'][$data['uid']] = $data['type'] ?? 0;
}
if ($key !== -1) {
$object_data['receiver'][$key] = $data['uid'];
} else {
$object_data['unlisted'] = true;
}
}
if (!empty($object['pixelfed:capabilities'])) { if (!empty($object['pixelfed:capabilities'])) {
$object_data['capabilities'] = self::getCapabilities($object); $object_data['capabilities'] = self::getCapabilities($object);
} }
$object_data['unlisted'] = in_array(-1, $object_data['receiver']);
if (array_key_exists(-1, $object_data['receiver'])) {
unset($object_data['receiver'][-1]);
}
if (array_key_exists(-1, $object_data['reception_type'])) {
unset($object_data['reception_type'][-1]);
}
return $object_data; return $object_data;
} }