diff --git a/application/Espo/Core/FieldProcessing/EmailAddress/Saver.php b/application/Espo/Core/FieldProcessing/EmailAddress/Saver.php index 50f99247b0..47c36832f1 100644 --- a/application/Espo/Core/FieldProcessing/EmailAddress/Saver.php +++ b/application/Espo/Core/FieldProcessing/EmailAddress/Saver.php @@ -70,7 +70,7 @@ class Saver implements SaverInterface $emailAddressData = $entity->get('emailAddressData'); } - if ($emailAddressData !== null) { + if ($emailAddressData !== null && $entity->isAttributeChanged('emailAddressData')) { $this->storeData($entity); return; diff --git a/application/Espo/Core/FieldProcessing/PhoneNumber/Saver.php b/application/Espo/Core/FieldProcessing/PhoneNumber/Saver.php index 9047b7ad7e..ad214cd55b 100644 --- a/application/Espo/Core/FieldProcessing/PhoneNumber/Saver.php +++ b/application/Espo/Core/FieldProcessing/PhoneNumber/Saver.php @@ -75,7 +75,7 @@ class Saver implements SaverInterface $phoneNumberData = $entity->get('phoneNumberData'); } - if ($phoneNumberData !== null) { + if ($phoneNumberData !== null && $entity->isAttributeChanged('phoneNumberData')) { $this->storeData($entity); return; diff --git a/application/Espo/Modules/Crm/Classes/Acl/MassEmail/LinkCheckers/InboundEmailLinkChecker.php b/application/Espo/Modules/Crm/Classes/Acl/MassEmail/LinkCheckers/InboundEmailLinkChecker.php new file mode 100644 index 0000000000..72bc943e59 --- /dev/null +++ b/application/Espo/Modules/Crm/Classes/Acl/MassEmail/LinkCheckers/InboundEmailLinkChecker.php @@ -0,0 +1,48 @@ +. + * + * 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\Modules\Crm\Classes\Acl\MassEmail\LinkCheckers; + +use Espo\Core\Acl\LinkChecker; +use Espo\Entities\InboundEmail; +use Espo\Entities\User; +use Espo\Modules\Crm\Entities\MassEmail; +use Espo\ORM\Entity; + +/** + * @implements LinkChecker + * @noinspection PhpUnused + */ +class InboundEmailLinkChecker implements LinkChecker +{ + public function check(User $user, Entity $entity, Entity $foreignEntity): bool + { + return $foreignEntity->smtpIsForMassEmail(); + } +} diff --git a/application/Espo/Modules/Crm/Resources/metadata/aclDefs/MassEmail.json b/application/Espo/Modules/Crm/Resources/metadata/aclDefs/MassEmail.json index 4df8077061..85bc2edc20 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/aclDefs/MassEmail.json +++ b/application/Espo/Modules/Crm/Resources/metadata/aclDefs/MassEmail.json @@ -1,3 +1,6 @@ { - "ownershipCheckerClassName": "Espo\\Modules\\Crm\\Classes\\Acl\\MassEmail\\OwnershipChecker" + "ownershipCheckerClassName": "Espo\\Modules\\Crm\\Classes\\Acl\\MassEmail\\OwnershipChecker", + "linkCheckerClassNameMap": { + "inboundEmail": "Espo\\Modules\\Crm\\Classes\\Acl\\MassEmail\\LinkCheckers\\InboundEmailLinkChecker" + } } diff --git a/package-lock.json b/package-lock.json index 539e6eac81..eb597e7b3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "espocrm", - "version": "8.1.3", + "version": "8.1.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "espocrm", - "version": "8.1.3", + "version": "8.1.4", "hasInstallScript": true, "license": "AGPL-3.0-or-later", "dependencies": { diff --git a/package.json b/package.json index 543fbf4277..ac64c6d90a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "espocrm", - "version": "8.1.3", + "version": "8.1.4", "description": "Open-source CRM.", "repository": { "type": "git", diff --git a/tests/integration/Espo/Core/FieldProcessing/EmailAddressTest.php b/tests/integration/Espo/Core/FieldProcessing/EmailAddressTest.php index 814eb58ea8..124f5cf4ab 100644 --- a/tests/integration/Espo/Core/FieldProcessing/EmailAddressTest.php +++ b/tests/integration/Espo/Core/FieldProcessing/EmailAddressTest.php @@ -30,10 +30,13 @@ namespace tests\integration\Espo\Core\FieldProcessing; use Espo\Core\ORM\EntityManager; - use Espo\Modules\Crm\Entities\Lead; use Espo\Core\Field\EmailAddress; use Espo\Core\Field\EmailAddressGroup; +use Espo\Core\Record\ServiceContainer; +use Espo\Core\Record\UpdateParams; +use Espo\Modules\Crm\Entities\Contact; + use tests\integration\Core\BaseTestCase; class EmailAddressTest extends BaseTestCase @@ -137,4 +140,22 @@ class EmailAddressTest extends BaseTestCase $this->assertEquals('test-1@test.com', $lead->getEmailAddress()); } + + public function testEmailAddress3(): void + { + $service = $this->getContainer()->getByClass(ServiceContainer::class)->getByClass(Contact::class); + $em = $this->getEntityManager(); + + /** @var Contact $contact */ + $contact = $em->createEntity(Contact::ENTITY_TYPE); + + /** @noinspection PhpUnhandledExceptionInspection */ + $service->update($contact->getId(), (object) [ + 'emailAddress' => 'test@test.com', + ], UpdateParams::create()); + + $em->refreshEntity($contact); + + $this->assertEquals('test@test.com', $contact->getEmailAddress()); + } } diff --git a/tests/integration/Espo/Core/FieldProcessing/PhoneNumberTest.php b/tests/integration/Espo/Core/FieldProcessing/PhoneNumberTest.php index f6d8268f87..81a20ee1c3 100644 --- a/tests/integration/Espo/Core/FieldProcessing/PhoneNumberTest.php +++ b/tests/integration/Espo/Core/FieldProcessing/PhoneNumberTest.php @@ -33,6 +33,10 @@ use Espo\Core\ORM\EntityManager; use Espo\Core\Field\PhoneNumber; use Espo\Core\Field\PhoneNumberGroup; use Espo\Modules\Crm\Entities\Lead; +use Espo\Core\Record\ServiceContainer; +use Espo\Core\Record\UpdateParams; +use Espo\Modules\Crm\Entities\Contact; + use tests\integration\Core\BaseTestCase; class PhoneNumberTest extends BaseTestCase @@ -115,4 +119,22 @@ class PhoneNumberTest extends BaseTestCase $this->assertEquals('+0000000001', $lead->getPhoneNumber()); } + + public function testPhoneNumber2(): void + { + $service = $this->getContainer()->getByClass(ServiceContainer::class)->getByClass(Contact::class); + $em = $this->getEntityManager(); + + /** @var Contact $contact */ + $contact = $em->createEntity(Contact::ENTITY_TYPE); + + /** @noinspection PhpUnhandledExceptionInspection */ + $service->update($contact->getId(), (object) [ + 'phoneNumber' => '+11111111111', + ], UpdateParams::create()); + + $em->refreshEntity($contact); + + $this->assertEquals('+11111111111', $contact->getPhoneNumber()); + } }