![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/CoreBundle/Entity/ |
<?php namespace Mautic\CoreBundle\Entity; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; class CommonEntity implements \Stringable { /** * @var array */ protected $changes = []; /** * @var array */ protected $pastChanges = []; public static function loadMetadata(ORM\ClassMetadata $metadata): void { $builder = new ClassMetadataBuilder($metadata); $builder->setMappedSuperClass(); } /** * Wrapper function for isProperty methods. * * @param string $name * * @throws \InvalidArgumentException */ public function __call($name, $arguments) { if (str_starts_with($name, 'is') && method_exists($this, 'get'.ucfirst($name))) { return $this->{'get'.ucfirst($name)}(); } elseif ('getName' == $name && method_exists($this, 'getTitle')) { return $this->getTitle(); } throw new \InvalidArgumentException('Method '.$name.' not exists'); } public function __toString(): string { $string = static::class; if (method_exists($this, 'getId')) { $string .= ' with ID #'.$this->getId(); } return $string; } /** * @param string $prop * @param mixed $val * * @return void */ protected function isChanged($prop, $val) { $getter = (method_exists($this, $prop)) ? $prop : 'get'.ucfirst($prop); $current = $this->$getter(); if ('category' == $prop) { $currentId = ($current) ? $current->getId() : ''; $newId = ($val) ? $val->getId() : null; if ($currentId != $newId) { $this->addChange($prop, [$currentId, $newId]); } } elseif ($current !== $val) { if ($current instanceof Collection || $val instanceof Collection) { if (!isset($this->changes[$prop])) { $this->changes[$prop] = [ 'added' => [], 'removed' => [], ]; } if (is_object($val)) { // Entity is getting added to the collection $this->changes['added'][] = method_exists($val, 'getId') ? $val->getId() : (string) $val; } else { // Entity is getting removed from the collection $this->changes['removed'][] = $val; } } else { if ($current instanceof \DateTime) { $current = $current->format('c'); } elseif (is_object($current)) { $current = (method_exists($current, 'getId')) ? $current->getId() : (string) $current; } elseif (('' === $current && null === $val) || (null === $current && '' === $val)) { // Ingore empty conversion (but allow 0 to '' or null) return; } if ($val instanceof \DateTime) { $val = $val->format('c'); } elseif (is_object($val)) { $val = (method_exists($val, 'getId')) ? $val->getId() : (string) $val; } $this->addChange($prop, [$current, $val]); } } } protected function addChange($key, $value) { if (isset($this->changes[$key]) && is_array($this->changes[$key]) && [0, 1] !== array_keys($this->changes[$key])) { $this->changes[$key] = array_merge($this->changes[$key], $value); } else { $this->changes[$key] = $value; } } /** * @param bool $includePast * * @return mixed[] */ public function getChanges($includePast = false) { if ($includePast && empty($this->changes) && !empty($this->pastChanges)) { return $this->pastChanges; } return $this->changes; } public function resetChanges(): void { $this->pastChanges = $this->changes; $this->changes = []; } public function setChanges(array $changes): void { $this->changes = $changes; } }