src/Settings/AbstractSettingsManager.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\Settings;
  3. use App\Entity\Setting;
  4. use App\Repository\SettingRepository;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Twig\Environment;
  7. abstract class AbstractSettingsManager implements SettingsManagerInterface
  8. {
  9.     protected SettingRepository $settingRepository;
  10.     protected EntityManagerInterface $entityManager;
  11.     protected Environment $twig;
  12.     protected array $settings = [];
  13.     public function __construct(
  14.         SettingRepository $settingRepository,
  15.         EntityManagerInterface $entityManager,
  16.         Environment $twig
  17.     ) {
  18.         $this->settingRepository $settingRepository;
  19.         $this->entityManager $entityManager;
  20.         $this->twig $twig;
  21.         $this->settings $this->configureSettings();
  22.     }
  23.     /**
  24.      * @param string|array $settingNames
  25.      * @return Setting|Setting[]
  26.      */
  27.     public function get($settingNamesbool $onlyValues false) {
  28.         if (is_iterable($settingNames)) {
  29.             $settings $this->settingRepository
  30.                 ->findBy(['name' => $settingNames])
  31.             ;
  32.             if ($onlyValues) {
  33.                 $result = [];
  34.                 foreach ($settings as $setting) {
  35.                     $result[$setting->getName()] = $setting->getValue();
  36.                 }
  37.                 return $result;
  38.             }
  39.             return $settings;
  40.         }
  41.         $setting $this->settingRepository
  42.             ->findOneBy(['name' => $settingNames])
  43.         ;
  44.         if ($onlyValues) {
  45.             return $setting->getValue();
  46.         }
  47.         return $setting;
  48.     }
  49.     public function getValue(string $settingName): string {
  50.         return $this->get($settingNametrue);
  51.     }
  52.     public function synchronize(bool $overwritebool $deleteOrphans): array
  53.     {
  54.         // Initialize counters for logging
  55.         $deletedSettingCount 0;
  56.         $createdSettingCount 0;
  57.         $modifiedSettingCount 0;
  58.         // Get all the setting existing in the database
  59.         $savedSettings $this->settingRepository->findAll();
  60.         // Determining which setting to look for in the database
  61.         $settings $this->settings;
  62.         // If the settingNames argument is null or empty, we observe all setting
  63.         $allSettingNames array_keys($settings);
  64.         // Process existing setting
  65.         $existingSettingNames = [];
  66.         foreach ($savedSettings as $savedSetting) {
  67.             $name $savedSetting->getName();
  68.             // Delete non matching parameters
  69.             if (in_array($name$allSettingNames) === false) {
  70.                 $this->entityManager->remove($savedSetting);
  71.                 $deletedSettingCount++;
  72.             } else {
  73.                 $existingSettingNames[] = $name;
  74.                 // Update type and value to default when overwrite is true
  75.                 if($overwrite === true) {
  76.                     $savedSetting->setDisplayName($settings[$name]['displayName']);
  77.                     $savedSetting->setValue($this->getDefaultValue($name));
  78.                     $modifiedSettingCount++;
  79.                 }
  80.             }
  81.         }
  82.         // Create new Settings when necessary
  83.         foreach (array_diff($allSettingNames$existingSettingNames) as $newSettingName) {
  84.             $setting = new Setting();
  85.             $setting->setName($newSettingName);
  86.             $setting->setValue($this->getDefaultValue($newSettingName));
  87.             $setting->setDisplayName($settings[$newSettingName]['displayName']);
  88.             $this->entityManager->persist($setting);
  89.             $createdSettingCount++;
  90.         }
  91.         return [
  92.             'deleted' => $deletedSettingCount,
  93.             'created' => $createdSettingCount,
  94.             'modified' => $modifiedSettingCount
  95.         ];
  96.     }
  97.     public function getDefaultValue(string $settingName): ?string {
  98.         $settingDefaultData $this->settings[$settingName];
  99.         $originalValue = isset($settingDefaultData['default']) ? $settingDefaultData['default'] : null;
  100.         // Apply logic to get actual value
  101.         return $originalValue;
  102.     }
  103. }