説明なし

FeatureFlagsController.php 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace MailPoet\Features;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Entities\FeatureFlagEntity;
  5. class FeatureFlagsController {
  6. /** @var FeaturesController */
  7. private $featuresController;
  8. /** @var FeatureFlagsRepository */
  9. private $featureFlagsRepository;
  10. public function __construct(
  11. FeaturesController $featuresController,
  12. FeatureFlagsRepository $featureFlagsRepository
  13. ) {
  14. $this->featuresController = $featuresController;
  15. $this->featureFlagsRepository = $featureFlagsRepository;
  16. }
  17. public function set($name, $value) {
  18. if (!$this->featuresController->exists($name)) {
  19. throw new \RuntimeException("Feature '$name' does not exist'");
  20. }
  21. $this->featureFlagsRepository->createOrUpdate(['name' => $name, 'value' => $value]);
  22. }
  23. public function getAll() {
  24. $flags = $this->featureFlagsRepository->findAll();
  25. $flagsMap = array_combine(
  26. array_map(
  27. function (FeatureFlagEntity $flag) {
  28. return $flag->getName();
  29. },
  30. $flags
  31. ),
  32. $flags
  33. );
  34. $output = [];
  35. foreach ($this->featuresController->getDefaults() as $name => $default) {
  36. $output[] = [
  37. 'name' => $name,
  38. 'value' => isset($flagsMap[$name]) ? (bool)$flagsMap[$name]->getValue() : $default,
  39. 'default' => $default,
  40. ];
  41. }
  42. return $output;
  43. }
  44. }