use Friendica\Model\User;
use Friendica\Module\Login;
use Friendica\Module\Tos;
+use Friendica\Util\Arrays;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\Temporal;
$statement = DBA::select('workerqueue', ['id', 'parameter', 'created', 'priority'], ['done' => 0], ['order'=> ['priority']]);
$r = DBA::toArray($statement);
- for($i = 0; $i < count($r); $i++) {
+ foreach ($r as $key => $rr) {
// fix GH-5469. ref: src/Core/Worker.php:217
- $r[$i]['parameter'] = implode(json_decode($r[$i]['parameter'], true), ': ');
+ $r[$key]['parameter'] = Arrays::recursiveImplode(json_decode($rr['parameter'], true), ': ');
}
$t = get_markup_template('admin/workerqueue.tpl');
--- /dev/null
+<?php
+/**
+ * @file src/Util/Arrays.php
+ * @author Roland Haeder<https://f.haeder.net/profile/roland>
+ */
+namespace Friendica\Util;
+
+/**
+ * @brief Array utility class
+ */
+class Arrays
+{
+ /**
+ * @brief Private constructor
+ */
+ private function __construct () {
+ // Utitlities don't have instances
+ }
+
+ /**
+ * @briefs Implodes recursively a multi-dimensional array where a normal implode() will fail.
+ *
+ * @param array $array Array to implode
+ * @param string $glue Glue for imploded elements
+ * @return string String with elements from array
+ */
+ public static function recursiveImplode (array $array, $glue) {
+ // Init returned string
+ $string = '';
+
+ // Loop through all records
+ foreach ($array as $element) {
+ // Is an array found?
+ if (is_array($element)) {
+ // Invoke cursively
+ $string .= '{' . self::recursiveImplode($element, $glue) . '}' . $glue;
+ } else {
+ // Append normally
+ $string .= $element . $glue;
+ }
+ }
+
+ // Remove last glue
+ $string = trim($string, $glue);
+
+ // Return it
+ return $string;
+ }
+}
--- /dev/null
+<?php
+/**
+ * @file tests/src/Util/Arrays.php
+ * @author Roland Haeder<https://f.haeder.net/profile/roland>
+ */
+namespace Friendica\Test\Util;
+
+use Friendica\Util\Arrays;
+use PHPUnit\Framework\TestCase;
+
+/**
+ * @brief Array utility testing class
+ */
+class ArraysTest extends TestCase
+{
+ /**
+ * @brief Tests if an empty array and an empty delimiter returns an empty string.
+ */
+ public function testEmptyArrayEmptyDelimiter()
+ {
+ $str = Arrays::recursiveImplode([], '');
+ $this->assertEmpty($str);
+ }
+
+ /**
+ * @brief Tests if an empty array and a non-empty delimiter returns an empty string.
+ */
+ public function testEmptyArrayNonEmptyDelimiter()
+ {
+ $str = Arrays::recursiveImplode([], ',');
+ $this->assertEmpty($str);
+ }
+
+ /**
+ * @brief Tests if a non-empty array and an empty delimiter returns the value (1).
+ */
+ public function testNonEmptyArrayEmptyDelimiter()
+ {
+ $str = Arrays::recursiveImplode([1], '');
+ $this->assertSame($str, '1');
+ }
+
+ /**
+ * @brief Tests if a non-empty array and an empty delimiter returns the value (12).
+ */
+ public function testNonEmptyArray2EmptyDelimiter()
+ {
+ $str = Arrays::recursiveImplode([1, 2], '');
+ $this->assertSame($str, '12');
+ }
+
+ /**
+ * @brief Tests if a non-empty array and a non-empty delimiter returns the value (1).
+ */
+ public function testNonEmptyArrayNonEmptyDelimiter()
+ {
+ $str = Arrays::recursiveImplode([1], ',');
+ $this->assertSame($str, '1');
+ }
+
+ /**
+ * @brief Tests if a non-empty array and a non-empty delimiter returns the value (1,2).
+ */
+ public function testNonEmptyArray2NonEmptyDelimiter()
+ {
+ $str = Arrays::recursiveImplode([1, 2], ',');
+ $this->assertSame($str, '1,2');
+ }
+
+ /**
+ * @brief Tests if a 2-dim array and an empty delimiter returns the expected string.
+ */
+ public function testEmptyMultiArray2EmptyDelimiter()
+ {
+ $str = Arrays::recursiveImplode([[1], []], '');
+ $this->assertSame($str, '{1}{}');
+ }
+
+ /**
+ * @brief Tests if a 2-dim array and an empty delimiter returns the expected string.
+ */
+ public function testEmptyMulti2Array2EmptyDelimiter()
+ {
+ $str = Arrays::recursiveImplode([[1], [2]], '');
+ $this->assertSame($str, '{1}{2}');
+ }
+
+ /**
+ * @brief Tests if a 2-dim array and a non-empty delimiter returns the expected string.
+ */
+ public function testEmptyMultiArray2NonEmptyDelimiter()
+ {
+ $str = Arrays::recursiveImplode([[1], []], ',');
+ $this->assertSame($str, '{1},{}');
+ }
+
+ /**
+ * @brief Tests if a 2-dim array and a non-empty delimiter returns the expected string.
+ */
+ public function testEmptyMulti2Array2NonEmptyDelimiter()
+ {
+ $str = Arrays::recursiveImplode([[1], [2]], ',');
+ $this->assertSame($str, '{1},{2}');
+ }
+
+ /**
+ * @brief Tests if a 3-dim array and a non-empty delimiter returns the expected string.
+ */
+ public function testEmptyMulti3Array2NonEmptyDelimiter()
+ {
+ $str = Arrays::recursiveImplode([[1], [2, [3]]], ',');
+ $this->assertSame($str, '{1},{2,{3}}');
+ }
+}