HEX
Server: Apache
System: Linux WWW 6.1.0-40-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.153-1 (2025-09-20) x86_64
User: web11 (1011)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/apklausos/application/libraries/ExtensionInstaller/ThemeUpdater.php
<?php

/**
 * LimeSurvey
 * Copyright (C) 2007-2015 The LimeSurvey Project Team / Carsten Schmitz
 * All rights reserved.
 * License: GNU/GPL License v2 or later, see LICENSE.php
 * LimeSurvey is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * See COPYRIGHT.php for copyright notices and details.
 */

namespace LimeSurvey\ExtensionInstaller;

/**
 * @todo Survey theme, question theme, admin theme...?
 * @since 2018-10-09
 * @author LimeSurvey GmbH
 */
class ThemeUpdater extends ExtensionUpdater
{
    /**
     * Create a PluginUpdater for every plugin installed.
     * @return array [ExtensionUpdater[] $updaters, string[] $errorMessages]
     */
    public static function createUpdaters()
    {
        $themes = \Template::model()->findAll();

        $updaters = [];
        $errors   = [];
        foreach ($themes as $theme) {
            try {
                $updaters[] = new ThemeUpdater($theme);
            } catch (\Exception $ex) {
                $errors[] = $ex->getMessage();
            }
        }

        return [$updaters, $errors];
    }

    /**
     * @return string
     */
    public function getExtensionName()
    {
        return $this->model->name;
    }

    /**
     * @return string
     */
    public function getCurrentVersion()
    {
        return $this->model->version;
    }

    /**
     * @return string
     */
    public function getExtensionType()
    {
        return 't';
    }

    /**
     * @return \ExtensionConfig
     */
    public function getExtensionConfig()
    {
        $templateDirs  = \Template::getAllTemplatesDirectories();
        $templateName  = $this->getExtensionName();
        $templateDir   = $templateDirs[$this->getExtensionName()];

        if (empty($templateDir)) {
            throw new \Exception('Found no theme dir for theme ' . $templateName);
        }

        $file = $templateDir . '/config.xml';

        if (!file_exists($file)) {
            throw new \Exception(
                sprintf(
                    'Theme %s has no config file',
                    json_encode($templateName)
                )
            );
        }

        if (\PHP_VERSION_ID < 80000) {
            libxml_disable_entity_loader(false);
        }
        $config = simplexml_load_file(realpath($file));
        if (\PHP_VERSION_ID < 80000) {
            libxml_disable_entity_loader(true);
        }

        return new \ExtensionConfig($config);
    }
}