]> git.mxchange.org Git - friendica.git/commitdiff
Getter/Setter for theme info
authorMichael <heluecht@pirati.ca>
Sun, 25 Jul 2021 19:39:10 +0000 (19:39 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 25 Jul 2021 19:39:10 +0000 (19:39 +0000)
13 files changed:
doc/themes.md
mod/events.php
src/App.php
src/Content/OEmbed.php
src/Content/Text/BBCode.php
src/Core/Renderer.php
src/Core/Theme.php
src/Model/Item.php
src/Module/BaseProfile.php
tests/src/Content/SmiliesTest.php
tests/src/Content/Text/BBCodeTest.php
view/theme/frio/theme.php
view/theme/vier/theme.php

index b7bb2e226208113c4b290507599ee3ccca855a2f..786f3d5afe579d784b684becd534545369fb4b25 100644 (file)
@@ -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.
 
index 67666d670c977317d165009889dbfe1046993d7e..f20d173dc752126b69bda817f895cf147d139d55 100644 (file)
@@ -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);
        }
 
index a25c9a9ea16bf1f81bcbce3458c17d2700c08e07..c9aafe14eb25228f88a19cb733f0cd8244f485f2 100644 (file)
@@ -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
         *
index 7232308738f865bfbf2f4cac6bee7e00d6706318..5390a4bc5730165c503a2cb4c4f8612b05221975 100644 (file)
@@ -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);
index d03f83ffd8f458a4c4752fd1c49827d7dd78d680..a4502b646047f335949ac2b35495402cb02fc4d3 100644 (file)
@@ -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", '<iframe width="' . $a->theme_info['videowidth'] . '" height="' . $a->theme_info['videoheight'] . '" src="https://www.youtube.com/embed/$1" frameborder="0" ></iframe>', $text);
+                                       $text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", '<iframe width="' . $a->getThemeInfoValue('videowidth') . '" height="' . $a->getThemeInfoValue('videoheight') . '" src="https://www.youtube.com/embed/$1" frameborder="0" ></iframe>', $text);
                                } else {
                                        $text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism",
                                                '<a href="https://www.youtube.com/watch?v=$1" target="_blank" rel="noopener noreferrer">https://www.youtube.com/watch?v=$1</a>', $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", '<iframe width="' . $a->theme_info['videowidth'] . '" height="' . $a->theme_info['videoheight'] . '" src="https://player.vimeo.com/video/$1" frameborder="0" ></iframe>', $text);
+                                       $text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism", '<iframe width="' . $a->getThemeInfoValue('videowidth') . '" height="' . $a->videoheight . '" src="https://player.vimeo.com/video/$1" frameborder="0" ></iframe>', $text);
                                } else {
                                        $text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism",
                                                '<a href="https://vimeo.com/$1" target="_blank" rel="noopener noreferrer">https://vimeo.com/$1</a>', $text);
index bb404965ee2d039ca26f5edd064a2ec2f9578a0b..b6b443d5039a5b19ee08882ba95b934788ea06ba 100644 (file)
@@ -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;
                        }
index e3b7f4bde85585bd34a5a12b6c8727c30d6e4d80..6eb1587be37a665d1d87129a28b0ac90cb818e72 100644 (file)
@@ -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";
index 327c60d5cfb4afdb54ef9300709caf8a2129e5c9..ad5ffdba6b3ed3f542a9eb5d06c1d7460556135f 100644 (file)
@@ -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('|(<img[^>]+src="[^"]+/photo/[0-9a-f]+)-[0-9]|', "$1-" . $ps, $s);
                }
 
index eee9036504c65ed40dd3d0f6587339424fe5839e..dca88f01c2b12d24a2286e83d4b59a2d0500f98b 100644 (file)
@@ -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',
index 803d5d6f8b739d4e858660be83dbc37d0d607559..e2d35183f34dab7421e6971f1af900530501bc2f 100644 (file)
@@ -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);
index b9c26ede01634573a2c2cadfe5ca6f07da46f416..460916b6fc4349356ffe67bd6d14ecdc12f70318 100644 (file)
@@ -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);
index d5441691e4c6a41a81431829213f38b4e87367af..2f6542d308238ec332e74e4bd7689dab02ec1459 100644 (file)
@@ -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');
 
index 13caae98e2b499360cf9568c7b21d22bad52895a..d28c8a325a278c364f17f935454cf7df6ca8b7c9 100644 (file)
@@ -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');