diff --git a/application/Espo/Tools/DynamicLogic/ConditionChecker.php b/application/Espo/Tools/DynamicLogic/ConditionChecker.php index e4c4a7d282..eac84d4c17 100644 --- a/application/Espo/Tools/DynamicLogic/ConditionChecker.php +++ b/application/Espo/Tools/DynamicLogic/ConditionChecker.php @@ -44,8 +44,14 @@ use RuntimeException; use DateTimeImmutable; use DateTimeZone; +/** + * @since 9.1.0 + */ class ConditionChecker { + /** + * Use `ConditionCheckerFactory` instead. + */ public function __construct( private Entity $entity, private ?User $user = null, @@ -296,7 +302,7 @@ class ConditionChecker private function getTimeZone(): DateTimeZone { - return $this->options->timeZone; + return $this->options->timezone; } private function createDateTime(string $value): DateTimeImmutable diff --git a/application/Espo/Tools/DynamicLogic/ConditionChecker/Options.php b/application/Espo/Tools/DynamicLogic/ConditionChecker/Options.php index f5cf992481..6886c71607 100644 --- a/application/Espo/Tools/DynamicLogic/ConditionChecker/Options.php +++ b/application/Espo/Tools/DynamicLogic/ConditionChecker/Options.php @@ -34,6 +34,6 @@ use DateTimeZone; readonly class Options { public function __construct( - public DateTimeZone $timeZone = new DateTimeZone('UTC'), + public DateTimeZone $timezone = new DateTimeZone('UTC'), ) {} } diff --git a/application/Espo/Tools/DynamicLogic/ConditionCheckerFactory.php b/application/Espo/Tools/DynamicLogic/ConditionCheckerFactory.php new file mode 100644 index 0000000000..98c1610fce --- /dev/null +++ b/application/Espo/Tools/DynamicLogic/ConditionCheckerFactory.php @@ -0,0 +1,70 @@ +. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. + ************************************************************************/ + +namespace Espo\Tools\DynamicLogic; + +use DateTimeZone; +use Espo\Core\Utils\Config\ApplicationConfig; +use Espo\Entities\User; +use Espo\ORM\Entity; +use Espo\Tools\DynamicLogic\ConditionChecker\Options; +use Exception; +use RuntimeException; + +/** + * @since 9.1.0 + * @noinspection PhpUnused + */ +class ConditionCheckerFactory +{ + public function __construct( + private User $user, + private ApplicationConfig $applicationConfig, + ) {} + + /** + * @param Entity $entity An entity to check. + */ + public function create(Entity $entity): ConditionChecker + { + try { + $timezone = new DateTimeZone($this->applicationConfig->getTimeZone()); + } catch (Exception $e) { + throw new RuntimeException('', 0, $e); + } + + return new ConditionChecker( + entity: $entity, + user: $this->user, + options: new Options( + timezone: $timezone, + ), + ); + } +}