public $filename;
- function __construct(string $theme, array $theme_info)
+ public function __construct(string $theme, array $theme_info, string $work_dir)
{
parent::__construct();
$template_dirs = $template_dirs + ['base' => 'view/' . self::SMARTY3_TEMPLATE_FOLDER . '/'];
$this->setTemplateDir($template_dirs);
+
+ $work_dir = rtrim($work_dir, '/');
- $this->setCompileDir('view/smarty3/compiled/');
- $this->setConfigDir('view/smarty3/');
- $this->setCacheDir('view/smarty3/');
+ $this->setCompileDir($work_dir . '/compiled');
+ $this->setConfigDir($work_dir . '/');
+ $this->setCacheDir($work_dir . '/');
- $this->left_delimiter = Renderer::getTemplateLeftDelimiter('smarty3');
- $this->right_delimiter = Renderer::getTemplateRightDelimiter('smarty3');
+ /*
+ * 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->setUseSubDirs(true);
+
+ $this->left_delimiter = Renderer::getTemplateLeftDelimiter();
+ $this->right_delimiter = Renderer::getTemplateRightDelimiter();
$this->escape_html = true;
{
$this->theme = $theme;
$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.');
+ $work_dir = DI::config()->get('smarty3', 'config_dir');
+ $this->smarty = new FriendicaSmarty($this->theme, $this->theme_info, $work_dir);
+
+ if (!is_writable($work_dir)) {
+ $admin_message = DI::l10n()->t('The folder %s must be writable by webserver.', $work_dir);
DI::logger()->critical($admin_message);
$message = DI::app()->isSiteAdmin() ?
$admin_message :
// ap_log_failure (Boolean)
// Logs every ActivityPub activity that couldn't be compacted
'ap_log_failure' => false,
- ]
+ ],
+ 'smarty3' => [
+ // config_dir (String)
+ // Base working directory for the templating engine, must be writeable by the webserver user
+ 'config_dir' => 'view/smarty3',
+ ],
];