]> git.mxchange.org Git - friendica.git/blobdiff - src/Render/FriendicaSmartyEngine.php
New option to disable the fetching of parents
[friendica.git] / src / Render / FriendicaSmartyEngine.php
index 8eafd7d94ac07d7719e22f9c7c1d55c8095ef3e7..c64fd29e523e31f639e6cfd6c115d385a77a75a8 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2022, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -23,7 +23,7 @@ namespace Friendica\Render;
 
 use Friendica\Core\Hook;
 use Friendica\DI;
-use Friendica\Network\HTTPException\InternalServerErrorException;
+use Friendica\Network\HTTPException\ServiceUnavailableException;
 use Friendica\Util\Strings;
 
 /**
@@ -48,13 +48,26 @@ final class FriendicaSmartyEngine extends TemplateEngine
                $this->theme_info = $theme_info;
                $this->smarty = new FriendicaSmarty($this->theme, $this->theme_info);
 
+               /*
+                * Enable sub-directory splitting for reducing directory descriptor
+                * size. The default behavior is to put all compiled/cached files into
+                * one single directory. Under Linux and EXT4 (and maybe other FS) this
+                * will increase the descriptor's size (which contains information
+                * about entries inside the described directory. If the descriptor is
+                * getting to big, the system will slow down as it has to read the
+                * whole directory descriptor all over again (unless you have tons of
+                * RAM available + have enabled caching inode tables (aka.
+                * "descriptors"). Still it won't hurt you.
+                */
+               $this->smarty->setUseSubDirs(true);
+
                if (!is_writable(DI::basePath() . '/view/smarty3')) {
                        $admin_message = DI::l10n()->t('The folder view/smarty3/ must be writable by webserver.');
                        DI::logger()->critical($admin_message);
-                       $message = is_site_admin() ?
+                       $message = DI::app()->isSiteAdmin() ?
                                $admin_message :
                                DI::l10n()->t('Friendica can\'t display this page at the moment, please contact the administrator.');
-                       throw new InternalServerErrorException($message);
+                       throw new ServiceUnavailableException($message);
                }
        }
 
@@ -69,7 +82,7 @@ final class FriendicaSmartyEngine extends TemplateEngine
        /**
         * @inheritDoc
         */
-       public function replaceMacros(string $template, array $vars)
+       public function replaceMacros(string $template, array $vars): string
        {
                if (!Strings::startsWith($template, self::FILE_PREFIX)) {
                        $template = self::STRING_PREFIX . $template;