HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /home/timetracker.panomity.com/assets/js/KimaiContainer.js
/*
 * This file is part of the Kimai time-tracking app.
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/*!
 * [KIMAI] KimaiContainer
 *
 * ServiceContainer for Kimai
 */

import KimaiConfiguration from './KimaiConfiguration';
import KimaiTranslation from './KimaiTranslation';
import KimaiPlugin from './KimaiPlugin';

export default class KimaiContainer {

    /**
     * Create a new Container with the given configurations and translations.
     *
     * @param {KimaiConfiguration} configuration
     * @param {KimaiTranslation} translation
     */
    constructor(configuration, translation) {
        if (!(configuration instanceof KimaiConfiguration)) {
            throw new Error('Configuration needs to a KimaiConfiguration instance');
        }
        this._configuration = configuration;

        if (!(translation instanceof KimaiTranslation)) {
            throw new Error('Configuration needs to a KimaiTranslation instance');
        }
        this._translation = translation;
        this._plugins = [];
    }

    /**
     * Register a new Plugin.
     *
     * @param {KimaiPlugin} plugin
     * @returns {KimaiPlugin}
     */
    registerPlugin(plugin) {
        if (!(plugin instanceof KimaiPlugin)) {
            throw new Error('Invalid plugin given, needs to be a KimaiPlugin instance');
        }

        plugin.setContainer(this);

        this._plugins.push(plugin);

        return plugin;
    }

    /**
     * @param {string} name
     * @returns {KimaiPlugin}
     */
    getPlugin(name) {
        for (let plugin of this._plugins) {
            if (plugin.getId() !== null && plugin.getId() === name) {
                return plugin;
            }
        }
        throw new Error('Unknown plugin: ' + name);
    }

    /**
     * @returns {Array<KimaiPlugin>}
     */
    getPlugins() {
        return this._plugins;
    }

    /**
     * @returns {KimaiTranslation}
     */
    getTranslation() {
        return this._translation;
    }

    /**
     * @returns {KimaiConfiguration}
     */
    getConfiguration() {
        return this._configuration;
    }

    /**
     * @returns {KimaiUser}
     */
    getUser() {
        return this.getPlugin('user');
    }

}