diff --git a/doc/themes.md b/doc/themes.md
index b7bb2e2262..786f3d5afe 100644
--- a/doc/themes.md
+++ b/doc/themes.md
@@ -170,9 +170,8 @@ The content of this file should be something like
use Friendica\App;
function duepuntozero_lr_init(App $a) {
- $a-> theme_info = array(
- 'extends' => 'duepuntozero'.
- );
+ $a->setThemeInfoValue('extends', 'duepuntozero');
+
$a->set_template_engine('smarty3');
/* and more stuff e.g. the JavaScript function for the header */
}
@@ -272,9 +271,7 @@ If you like to use another templating engine, please implement it.
When you want to inherit stuff from another theme you have to *announce* this in the theme_info:
- $a->theme_info = array(
- 'extends' => 'duepuntozero',
- );
+ $a->setThemeInfoValue('extends', 'duepuntozero');
which declares *duepuntozero* as parent of the theme.
diff --git a/mod/events.php b/mod/events.php
index 67666d670c..f20d173dc7 100644
--- a/mod/events.php
+++ b/mod/events.php
@@ -255,7 +255,7 @@ function events_content(App $a)
);
}
- if ($a->theme_info['events_in_profile']) {
+ if ($a->getThemeInfoValue('events_in_profile')) {
Nav::setSelected('home');
} else {
Nav::setSelected('events');
@@ -279,7 +279,7 @@ function events_content(App $a)
$o = '';
$tabs = '';
// tabs
- if ($a->theme_info['events_in_profile']) {
+ if ($a->getThemeInfoValue('events_in_profile')) {
$tabs = BaseProfile::getTabsHTML($a, 'events', true, $a->user);
}
diff --git a/src/App.php b/src/App.php
index a25c9a9ea1..c9aafe14eb 100644
--- a/src/App.php
+++ b/src/App.php
@@ -60,7 +60,7 @@ class App
// Allow themes to control internal parameters
// by changing App values in theme.php
- public $theme_info = [
+ private $theme_info = [
'videowidth' => 425,
'videoheight' => 350,
'events_in_profile' => true
@@ -189,21 +189,53 @@ class App
return $this->timezone;
}
+ /**
+ * Set workerqueue information
+ *
+ * @param array $queue
+ * @return void
+ */
public function setQueue(array $queue)
{
$this->queue = $queue;
}
+ /**
+ * Fetch workerqueue information
+ *
+ * @return array
+ */
public function getQueue()
{
return $this->queue ?? [];
}
+ /**
+ * Fetch a specific workerqueue field
+ *
+ * @param string $index
+ * @return mixed
+ */
public function getQueueValue(string $index)
{
return $this->queue[$index] ?? null;
}
+ public function setThemeInfoValue(string $index, $value)
+ {
+ $this->theme_info[$index] = $value;
+ }
+
+ public function getThemeInfo()
+ {
+ return $this->theme_info;
+ }
+
+ public function getThemeInfoValue(string $index, $default = null)
+ {
+ return $this->theme_info[$index] ?? $default;
+ }
+
/**
* Returns the current config cache of this node
*
diff --git a/src/Content/OEmbed.php b/src/Content/OEmbed.php
index 7232308738..5390a4bc57 100644
--- a/src/Content/OEmbed.php
+++ b/src/Content/OEmbed.php
@@ -73,9 +73,9 @@ class OEmbed
$a = DI::app();
- $cache_key = 'oembed:' . $a->theme_info['videowidth'] . ':' . $embedurl;
+ $cache_key = 'oembed:' . $a->getThemeInfoValue('videowidth') . ':' . $embedurl;
- $condition = ['url' => Strings::normaliseLink($embedurl), 'maxwidth' => $a->theme_info['videowidth']];
+ $condition = ['url' => Strings::normaliseLink($embedurl), 'maxwidth' => $a->getThemeInfoValue('videowidth')];
$oembed_record = DBA::selectFirst('oembed', ['content'], $condition);
if (DBA::isResult($oembed_record)) {
$json_string = $oembed_record['content'];
@@ -111,7 +111,7 @@ class OEmbed
// but their OEmbed endpoint is only accessible by HTTPS ¯\_(ツ)_/¯
$href = str_replace(['http://www.youtube.com/', 'http://player.vimeo.com/'],
['https://www.youtube.com/', 'https://player.vimeo.com/'], $href);
- $result = DI::httpRequest()->fetchFull($href . '&maxwidth=' . $a->theme_info['videowidth']);
+ $result = DI::httpRequest()->fetchFull($href . '&maxwidth=' . $a->getThemeInfoValue('videowidth'));
if ($result->getReturnCode() === 200) {
$json_string = $result->getBody();
break;
@@ -132,7 +132,7 @@ class OEmbed
if (!empty($oembed->type) && $oembed->type != 'error') {
DBA::insert('oembed', [
'url' => Strings::normaliseLink($embedurl),
- 'maxwidth' => $a->theme_info['videowidth'],
+ 'maxwidth' => $a->getThemeInfoValue('videowidth'),
'content' => $json_string,
'created' => DateTimeFormat::utcNow()
], Database::INSERT_UPDATE);
diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php
index d03f83ffd8..a4502b6460 100644
--- a/src/Content/Text/BBCode.php
+++ b/src/Content/Text/BBCode.php
@@ -1729,7 +1729,7 @@ class BBCode
$text = preg_replace("/\[youtube\]https?:\/\/youtu.be\/(.*?)\[\/youtube\]/ism", '[youtube]$1[/youtube]', $text);
if ($try_oembed) {
- $text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", '', $text);
+ $text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", '', $text);
} else {
$text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism",
'https://www.youtube.com/watch?v=$1', $text);
@@ -1744,7 +1744,7 @@ class BBCode
$text = preg_replace("/\[vimeo\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/vimeo\]/ism", '[vimeo]$1[/vimeo]', $text);
if ($try_oembed) {
- $text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism", '', $text);
+ $text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism", '', $text);
} else {
$text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism",
'https://vimeo.com/$1', $text);
diff --git a/src/Core/Renderer.php b/src/Core/Renderer.php
index bb404965ee..b6b443d503 100644
--- a/src/Core/Renderer.php
+++ b/src/Core/Renderer.php
@@ -166,7 +166,7 @@ class Renderer
} else {
$a = DI::app();
$class = self::$template_engines[$template_engine];
- $obj = new $class($a->getCurrentTheme(), $a->theme_info);
+ $obj = new $class($a->getCurrentTheme(), $a->getThemeInfo());
self::$template_engine_instance[$template_engine] = $obj;
return $obj;
}
diff --git a/src/Core/Theme.php b/src/Core/Theme.php
index e3b7f4bde8..6eb1587be3 100644
--- a/src/Core/Theme.php
+++ b/src/Core/Theme.php
@@ -214,7 +214,7 @@ class Theme
$theme = $a->getCurrentTheme();
- $parent = Strings::sanitizeFilePathItem($a->theme_info['extends'] ?? $theme);
+ $parent = Strings::sanitizeFilePathItem($a->getThemeInfoValue('extends', $theme));
$paths = [
"view/theme/$theme/$file",
@@ -271,7 +271,7 @@ class Theme
$theme = Strings::sanitizeFilePathItem($theme);
$a = DI::app();
- $base_theme = $a->theme_info['extends'] ?? '';
+ $base_theme = $a->getThemeInfoValue('extends') ?? '';
if (file_exists("view/theme/$theme/config.php")) {
return "view/theme/$theme/config.php";
diff --git a/src/Model/Item.php b/src/Model/Item.php
index 327c60d5cf..ad5ffdba6b 100644
--- a/src/Model/Item.php
+++ b/src/Model/Item.php
@@ -2802,8 +2802,8 @@ class Item
}
// Replace friendica image url size with theme preference.
- if (!empty($a->theme_info['item_image_size'])) {
- $ps = $a->theme_info['item_image_size'];
+ if (!empty($a->getThemeInfoValue('item_image_size'))) {
+ $ps = $a->getThemeInfoValue('item_image_size');
$s = preg_replace('|(]+src="[^"]+/photo/[0-9a-f]+)-[0-9]|', "$1-" . $ps, $s);
}
diff --git a/src/Module/BaseProfile.php b/src/Module/BaseProfile.php
index eee9036504..dca88f01c2 100644
--- a/src/Module/BaseProfile.php
+++ b/src/Module/BaseProfile.php
@@ -81,7 +81,7 @@ class BaseProfile extends BaseModule
];
// the calendar link for the full featured events calendar
- if ($is_owner && $a->theme_info['events_in_profile']) {
+ if ($is_owner && $a->getThemeInfoValue('events_in_profile')) {
$tabs[] = [
'label' => DI::l10n()->t('Events'),
'url' => DI::baseUrl() . '/events',
diff --git a/tests/src/Content/SmiliesTest.php b/tests/src/Content/SmiliesTest.php
index 803d5d6f8b..e2d35183f3 100644
--- a/tests/src/Content/SmiliesTest.php
+++ b/tests/src/Content/SmiliesTest.php
@@ -24,8 +24,8 @@ class SmiliesTest extends MockedTest
parent::setUp();
$this->setUpVfsDir();
$this->mockApp($this->root);
- $this->app->theme_info['videowidth'] = 425;
- $this->app->theme_info['videoheight'] = 350;
+ $this->app->setThemeInfoValue('videowidth', 425);
+ $this->app->setThemeInfoValue('videoheight', 350);
$this->configMock->shouldReceive('get')
->with('system', 'no_smilies')
->andReturn(false);
diff --git a/tests/src/Content/Text/BBCodeTest.php b/tests/src/Content/Text/BBCodeTest.php
index b9c26ede01..460916b6fc 100644
--- a/tests/src/Content/Text/BBCodeTest.php
+++ b/tests/src/Content/Text/BBCodeTest.php
@@ -40,8 +40,8 @@ class BBCodeTest extends MockedTest
parent::setUp();
$this->setUpVfsDir();
$this->mockApp($this->root);
- $this->app->theme_info['videowidth'] = 425;
- $this->app->theme_info['videoheight'] = 350;
+ $this->app->setThemeInfoValue('videowidth', 425);
+ $this->app->setThemeInfoValue('videoheight', 350);
$this->configMock->shouldReceive('get')
->with('system', 'remove_multiplicated_lines')
->andReturn(false);
diff --git a/view/theme/frio/theme.php b/view/theme/frio/theme.php
index d5441691e4..2f6542d308 100644
--- a/view/theme/frio/theme.php
+++ b/view/theme/frio/theme.php
@@ -33,8 +33,8 @@ function frio_init(App $a)
$frio = 'view/theme/frio';
// disable the events module link in the profile tab
- $a->theme_info['events_in_profile'] = false;
- $a->theme_info['videowidth'] = 622;
+ $a->setThemeInfoValue('events_in_profile', false);
+ $a->setThemeInfoValue('videowidth', 622);
Renderer::setActiveTemplateEngine('smarty3');
diff --git a/view/theme/vier/theme.php b/view/theme/vier/theme.php
index 13caae98e2..d28c8a325a 100644
--- a/view/theme/vier/theme.php
+++ b/view/theme/vier/theme.php
@@ -21,7 +21,7 @@ use Friendica\Util\Strings;
function vier_init(App $a)
{
- $a->theme_info['events_in_profile'] = false;
+ $a->setThemeInfoValue('events_in_profile', false);
Renderer::setActiveTemplateEngine('smarty3');