mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-11-04 14:46:51 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Pterodactyl\Repositories\Eloquent;
 | 
						|
 | 
						|
use Pterodactyl\Models\Setting;
 | 
						|
use Pterodactyl\Contracts\Repository\SettingsRepositoryInterface;
 | 
						|
 | 
						|
class SettingsRepository extends EloquentRepository implements SettingsRepositoryInterface
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    private static $cache = [];
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    private static $databaseMiss = [];
 | 
						|
 | 
						|
    /**
 | 
						|
     * Return the model backing this repository.
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function model()
 | 
						|
    {
 | 
						|
        return Setting::class;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Store a new persistent setting in the database.
 | 
						|
     *
 | 
						|
     * @param string $key
 | 
						|
     * @param string|null $value
 | 
						|
     *
 | 
						|
     * @throws \Pterodactyl\Exceptions\Model\DataValidationException
 | 
						|
     * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
 | 
						|
     */
 | 
						|
    public function set(string $key, string $value = null)
 | 
						|
    {
 | 
						|
        // Clear item from the cache.
 | 
						|
        $this->clearCache($key);
 | 
						|
        $this->withoutFreshModel()->updateOrCreate(['key' => $key], ['value' => $value ?? '']);
 | 
						|
 | 
						|
        self::$cache[$key] = $value;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve a persistent setting from the database.
 | 
						|
     *
 | 
						|
     * @param string $key
 | 
						|
     * @param mixed $default
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    public function get(string $key, $default = null)
 | 
						|
    {
 | 
						|
        // If item has already been requested return it from the cache. If
 | 
						|
        // we already know it is missing, immediately return the default value.
 | 
						|
        if (array_key_exists($key, self::$cache)) {
 | 
						|
            return self::$cache[$key];
 | 
						|
        } elseif (array_key_exists($key, self::$databaseMiss)) {
 | 
						|
            return value($default);
 | 
						|
        }
 | 
						|
 | 
						|
        $instance = $this->getBuilder()->where('key', $key)->first();
 | 
						|
        if (is_null($instance)) {
 | 
						|
            self::$databaseMiss[$key] = true;
 | 
						|
 | 
						|
            return value($default);
 | 
						|
        }
 | 
						|
 | 
						|
        return self::$cache[$key] = $instance->value;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Remove a key from the database cache.
 | 
						|
     *
 | 
						|
     * @param string $key
 | 
						|
     */
 | 
						|
    public function forget(string $key)
 | 
						|
    {
 | 
						|
        $this->clearCache($key);
 | 
						|
        $this->deleteWhere(['key' => $key]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Remove a key from the cache.
 | 
						|
     *
 | 
						|
     * @param string $key
 | 
						|
     */
 | 
						|
    private function clearCache(string $key)
 | 
						|
    {
 | 
						|
        unset(self::$cache[$key], self::$databaseMiss[$key]);
 | 
						|
    }
 | 
						|
}
 |