HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/web/matomo.vdk/core/Settings/Interfaces/Traits/Getters/MeasurableGetterTrait.php
<?php

/**
 * Matomo - free/libre analytics platform
 *
 * @link    https://matomo.org
 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 */

namespace Piwik\Settings\Interfaces\Traits\Getters;

use Piwik\Piwik;
use Piwik\Settings\Measurable\MeasurableSetting;
use Piwik\Settings\Measurable\MeasurableProperty;

/**
 * @template T of mixed
 *
 * @phpstan-require-implements \Piwik\Settings\Interfaces\MeasurableSettingInterface<T>
 */
trait MeasurableGetterTrait
{
    public static function getMeasurableSetting(int $idSite, bool $isProperty = false)
    {
        if ($isProperty) {
            return new MeasurableProperty(
                self::getMeasurableName(),
                self::getMeasurableDefaultValue(),
                self::getMeasurableType(),
                Piwik::getPluginNameOfMatomoClass(static::class),
                $idSite
            );
        }
        return new MeasurableSetting(
            self::getMeasurableName(),
            self::getMeasurableDefaultValue(),
            self::getMeasurableType(),
            Piwik::getPluginNameOfMatomoClass(static::class),
            $idSite
        );
    }

    /**
     * @return T
     */
    public static function getMeasurableValue(int $idSite, bool $isProperty = false)
    {
        return self::getMeasurableSetting($idSite, $isProperty)->getValue();
    }

    /**
     * @return T
     */
    abstract protected static function getMeasurableDefaultValue();

    abstract protected static function getMeasurableName(): string;

    abstract protected static function getMeasurableType(): string;

    /**
     * @deprecated Will be removed in 6.0 in favour of making getMeasurableName public
     */
    public static function getMeasurableSettingShortName(): string
    {
        return self::getMeasurableName();
    }
}