From 4cb0ac37a6935a75b62752ca25bcec926dd2f5d1 Mon Sep 17 00:00:00 2001 From: Kevin Papst Date: Fri, 28 Jan 2022 00:04:58 +0100 Subject: [PATCH] unify access to custom fields (#3106) --- src/Entity/Activity.php | 14 ++++++++++++++ src/Entity/Customer.php | 14 ++++++++++++++ src/Entity/Invoice.php | 14 ++++++++++++++ src/Entity/MetaTableTypeInterface.php | 2 +- src/Entity/MetaTableTypeTrait.php | 2 +- src/Entity/Project.php | 14 ++++++++++++++ src/Entity/Timesheet.php | 14 ++++++++++++++ src/Entity/User.php | 11 ++++++++++- src/Invoice/InvoiceItem.php | 11 ++++++++++- tests/Entity/ActivityTest.php | 7 ++++++- tests/Entity/CustomerTest.php | 7 ++++++- tests/Entity/InvoiceTest.php | 8 +++++++- tests/Entity/ProjectTest.php | 7 ++++++- tests/Entity/TimesheetTest.php | 7 ++++++- tests/Entity/UserTest.php | 5 +++++ tests/Invoice/InvoiceItemTest.php | 4 ++++ 16 files changed, 132 insertions(+), 9 deletions(-) diff --git a/src/Entity/Activity.php b/src/Entity/Activity.php index 5291e5d5..fd302267 100644 --- a/src/Entity/Activity.php +++ b/src/Entity/Activity.php @@ -261,6 +261,20 @@ class Activity implements EntityWithMetaFields, EntityWithBudget return null; } + /** + * @param string $name + * @return bool|int|string|null + */ + public function getMetaFieldValue(string $name) + { + $field = $this->getMetaField($name); + if ($field === null) { + return null; + } + + return $field->getValue(); + } + public function setMetaField(MetaTableTypeInterface $meta): EntityWithMetaFields { if (null === ($current = $this->getMetaField($meta->getName()))) { diff --git a/src/Entity/Customer.php b/src/Entity/Customer.php index 5fc6bd39..4728b40a 100644 --- a/src/Entity/Customer.php +++ b/src/Entity/Customer.php @@ -531,6 +531,20 @@ class Customer implements EntityWithMetaFields, EntityWithBudget return null; } + /** + * @param string $name + * @return bool|int|string|null + */ + public function getMetaFieldValue(string $name) + { + $field = $this->getMetaField($name); + if ($field === null) { + return null; + } + + return $field->getValue(); + } + public function setMetaField(MetaTableTypeInterface $meta): EntityWithMetaFields { if (null === ($current = $this->getMetaField($meta->getName()))) { diff --git a/src/Entity/Invoice.php b/src/Entity/Invoice.php index b7d9e642..4e6968f2 100644 --- a/src/Entity/Invoice.php +++ b/src/Entity/Invoice.php @@ -441,6 +441,20 @@ class Invoice implements EntityWithMetaFields return null; } + /** + * @param string $name + * @return bool|int|string|null + */ + public function getMetaFieldValue(string $name) + { + $field = $this->getMetaField($name); + if ($field === null) { + return null; + } + + return $field->getValue(); + } + public function setMetaField(MetaTableTypeInterface $meta): EntityWithMetaFields { if (null === ($current = $this->getMetaField($meta->getName()))) { diff --git a/src/Entity/MetaTableTypeInterface.php b/src/Entity/MetaTableTypeInterface.php index dc7c62f3..5eceb5d8 100644 --- a/src/Entity/MetaTableTypeInterface.php +++ b/src/Entity/MetaTableTypeInterface.php @@ -29,7 +29,7 @@ interface MetaTableTypeInterface public function setName(string $name): MetaTableTypeInterface; /** - * @return mixed|null + * @return int|bool|string|null */ public function getValue(); diff --git a/src/Entity/MetaTableTypeTrait.php b/src/Entity/MetaTableTypeTrait.php index 5153e906..fc788a86 100644 --- a/src/Entity/MetaTableTypeTrait.php +++ b/src/Entity/MetaTableTypeTrait.php @@ -109,7 +109,7 @@ trait MetaTableTypeTrait } /** - * @return mixed|null + * @return int|bool|string|null */ public function getValue() { diff --git a/src/Entity/Project.php b/src/Entity/Project.php index 00b1c59e..0a2ef394 100644 --- a/src/Entity/Project.php +++ b/src/Entity/Project.php @@ -425,6 +425,20 @@ class Project implements EntityWithMetaFields, EntityWithBudget return null; } + /** + * @param string $name + * @return bool|int|string|null + */ + public function getMetaFieldValue(string $name) + { + $field = $this->getMetaField($name); + if ($field === null) { + return null; + } + + return $field->getValue(); + } + public function setMetaField(MetaTableTypeInterface $meta): EntityWithMetaFields { if (null === ($current = $this->getMetaField($meta->getName()))) { diff --git a/src/Entity/Timesheet.php b/src/Entity/Timesheet.php index c46c71de..e54e8130 100644 --- a/src/Entity/Timesheet.php +++ b/src/Entity/Timesheet.php @@ -719,6 +719,20 @@ class Timesheet implements EntityWithMetaFields, ExportItemInterface return null; } + /** + * @param string $name + * @return bool|int|string|null + */ + public function getMetaFieldValue(string $name) + { + $field = $this->getMetaField($name); + if ($field === null) { + return null; + } + + return $field->getValue(); + } + public function setMetaField(MetaTableTypeInterface $meta): EntityWithMetaFields { if (null === ($current = $this->getMetaField($meta->getName()))) { diff --git a/src/Entity/User.php b/src/Entity/User.php index 57344bf1..a0538f83 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -537,7 +537,7 @@ class User implements UserInterface, EquatableInterface, \Serializable /** * @param string $name * @param mixed $default - * @return bool|int|null|string + * @return bool|int|string|null */ public function getPreferenceValue(string $name, $default = null) { @@ -549,6 +549,15 @@ class User implements UserInterface, EquatableInterface, \Serializable return $preference->getValue(); } + /** + * @param string $name + * @return bool|int|string|null + */ + public function getMetaFieldValue(string $name) + { + return $this->getPreferenceValue($name); + } + /** * @param UserPreference $preference * @return User diff --git a/src/Invoice/InvoiceItem.php b/src/Invoice/InvoiceItem.php index 3e7c0933..5c40ebc6 100644 --- a/src/Invoice/InvoiceItem.php +++ b/src/Invoice/InvoiceItem.php @@ -94,13 +94,22 @@ final class InvoiceItem public function getAdditionalField(string $name, $default = null) { - if (isset($this->additionalFields[$name])) { + if (\array_key_exists($name, $this->additionalFields)) { return $this->additionalFields[$name]; } return $default; } + public function getMetaFieldValue(string $field) + { + if (\array_key_exists($field, $this->additionalFields)) { + return $this->additionalFields[$field]; + } + + return null; + } + public function getActivity(): ?Activity { return $this->activity; diff --git a/tests/Entity/ActivityTest.php b/tests/Entity/ActivityTest.php index 2e36d3e9..c7c7c964 100644 --- a/tests/Entity/ActivityTest.php +++ b/tests/Entity/ActivityTest.php @@ -38,6 +38,7 @@ class ActivityTest extends AbstractEntityTest $this->assertInstanceOf(Collection::class, $sut->getMetaFields()); $this->assertEquals(0, $sut->getMetaFields()->count()); $this->assertNull($sut->getMetaField('foo')); + $this->assertNull($sut->getMetaFieldValue('foo')); $this->assertInstanceOf(Collection::class, $sut->getTeams()); } @@ -77,12 +78,14 @@ class ActivityTest extends AbstractEntityTest { $sut = new Activity(); $meta = new ActivityMeta(); - $meta->setName('foo')->setValue('bar')->setType('test'); + $meta->setName('foo')->setValue('bar2')->setType('test'); $this->assertInstanceOf(Activity::class, $sut->setMetaField($meta)); self::assertEquals(1, $sut->getMetaFields()->count()); $result = $sut->getMetaField('foo'); self::assertSame($result, $meta); self::assertEquals('test', $result->getType()); + self::assertEquals('bar2', $result->getValue()); + self::assertEquals('bar2', $sut->getMetaFieldValue('foo')); $meta2 = new ActivityMeta(); $meta2->setName('foo')->setValue('bar')->setType('test2'); @@ -93,6 +96,7 @@ class ActivityTest extends AbstractEntityTest $result = $sut->getMetaField('foo'); self::assertSame($result, $meta); self::assertEquals('test2', $result->getType()); + self::assertEquals('bar2', $sut->getMetaFieldValue('foo')); $sut->setMetaField((new ActivityMeta())->setName('blub')->setIsVisible(true)); $sut->setMetaField((new ActivityMeta())->setName('blab')->setIsVisible(true)); @@ -190,6 +194,7 @@ class ActivityTest extends AbstractEntityTest foreach ($sut->getMetaFields() as $metaField) { $cloneMeta = $clone->getMetaField($metaField->getName()); self::assertEquals($cloneMeta->getValue(), $metaField->getValue()); + self::assertEquals($metaField->getValue(), $clone->getMetaFieldValue($metaField->getName())); } self::assertEquals($clone->getBudget(), $sut->getBudget()); self::assertEquals($clone->getTimeBudget(), $sut->getTimeBudget()); diff --git a/tests/Entity/CustomerTest.php b/tests/Entity/CustomerTest.php index 6a12cad7..96bdcd75 100644 --- a/tests/Entity/CustomerTest.php +++ b/tests/Entity/CustomerTest.php @@ -51,6 +51,7 @@ class CustomerTest extends AbstractEntityTest self::assertInstanceOf(Collection::class, $sut->getMetaFields()); self::assertEquals(0, $sut->getMetaFields()->count()); self::assertNull($sut->getMetaField('foo')); + self::assertNull($sut->getMetaFieldValue('foo')); self::assertInstanceOf(Collection::class, $sut->getTeams()); self::assertEquals(0, $sut->getTeams()->count()); } @@ -117,12 +118,14 @@ class CustomerTest extends AbstractEntityTest { $sut = new Customer(); $meta = new CustomerMeta(); - $meta->setName('foo')->setValue('bar')->setType('test'); + $meta->setName('foo')->setValue('bar2')->setType('test'); self::assertInstanceOf(Customer::class, $sut->setMetaField($meta)); self::assertEquals(1, $sut->getMetaFields()->count()); $result = $sut->getMetaField('foo'); self::assertSame($result, $meta); self::assertEquals('test', $result->getType()); + self::assertEquals('bar2', $result->getValue()); + self::assertEquals('bar2', $sut->getMetaFieldValue('foo')); $meta2 = new CustomerMeta(); $meta2->setName('foo')->setValue('bar')->setType('test2'); @@ -133,6 +136,7 @@ class CustomerTest extends AbstractEntityTest $result = $sut->getMetaField('foo'); self::assertSame($result, $meta); self::assertEquals('test2', $result->getType()); + self::assertEquals('bar2', $sut->getMetaFieldValue('foo')); $sut->setMetaField((new CustomerMeta())->setName('blub')->setIsVisible(true)); $sut->setMetaField((new CustomerMeta())->setName('blab')->setIsVisible(true)); @@ -234,6 +238,7 @@ class CustomerTest extends AbstractEntityTest foreach ($sut->getMetaFields() as $metaField) { $cloneMeta = $clone->getMetaField($metaField->getName()); self::assertEquals($cloneMeta->getValue(), $metaField->getValue()); + self::assertEquals($metaField->getValue(), $clone->getMetaFieldValue($metaField->getName())); } self::assertEquals($clone->getBudget(), $sut->getBudget()); self::assertEquals($clone->getTimeBudget(), $sut->getTimeBudget()); diff --git a/tests/Entity/InvoiceTest.php b/tests/Entity/InvoiceTest.php index 8f105aea..ea89407b 100644 --- a/tests/Entity/InvoiceTest.php +++ b/tests/Entity/InvoiceTest.php @@ -249,13 +249,18 @@ class InvoiceTest extends TestCase public function testMetaFields() { $sut = new Invoice(); + + self::assertNull($sut->getMetaFieldValue('foo')); + $meta = new InvoiceMeta(); - $meta->setName('foo')->setValue('bar')->setType('test'); + $meta->setName('foo')->setValue('bar2')->setType('test'); self::assertInstanceOf(Invoice::class, $sut->setMetaField($meta)); self::assertEquals(1, $sut->getMetaFields()->count()); $result = $sut->getMetaField('foo'); self::assertSame($result, $meta); self::assertEquals('test', $result->getType()); + self::assertEquals('bar2', $result->getValue()); + self::assertEquals('bar2', $sut->getMetaFieldValue('foo')); $meta2 = new InvoiceMeta(); $meta2->setName('foo')->setValue('bar')->setType('test2'); @@ -266,6 +271,7 @@ class InvoiceTest extends TestCase $result = $sut->getMetaField('foo'); self::assertSame($result, $meta); self::assertEquals('test2', $result->getType()); + self::assertEquals('bar2', $sut->getMetaFieldValue('foo')); $sut->setMetaField((new InvoiceMeta())->setName('blub')->setIsVisible(true)); $sut->setMetaField((new InvoiceMeta())->setName('blab')->setIsVisible(true)); diff --git a/tests/Entity/ProjectTest.php b/tests/Entity/ProjectTest.php index bacc2087..af77ea34 100644 --- a/tests/Entity/ProjectTest.php +++ b/tests/Entity/ProjectTest.php @@ -41,6 +41,7 @@ class ProjectTest extends AbstractEntityTest self::assertInstanceOf(Collection::class, $sut->getMetaFields()); self::assertEquals(0, $sut->getMetaFields()->count()); self::assertNull($sut->getMetaField('foo')); + self::assertNull($sut->getMetaFieldValue('foo')); self::assertInstanceOf(Collection::class, $sut->getTeams()); self::assertEquals(0, $sut->getTeams()->count()); self::assertTrue($sut->isVisibleAtDate(new \DateTime())); @@ -101,12 +102,14 @@ class ProjectTest extends AbstractEntityTest { $sut = new Project(); $meta = new ProjectMeta(); - $meta->setName('foo')->setValue('bar')->setType('test'); + $meta->setName('foo')->setValue('bar2')->setType('test'); self::assertInstanceOf(Project::class, $sut->setMetaField($meta)); self::assertEquals(1, $sut->getMetaFields()->count()); $result = $sut->getMetaField('foo'); self::assertSame($result, $meta); self::assertEquals('test', $result->getType()); + self::assertEquals('bar2', $result->getValue()); + self::assertEquals('bar2', $sut->getMetaFieldValue('foo')); $meta2 = new ProjectMeta(); $meta2->setName('foo')->setValue('bar')->setType('test2'); @@ -117,6 +120,7 @@ class ProjectTest extends AbstractEntityTest $result = $sut->getMetaField('foo'); self::assertSame($result, $meta); self::assertEquals('test2', $result->getType()); + self::assertEquals('bar2', $sut->getMetaFieldValue('foo')); $sut->setMetaField((new ProjectMeta())->setName('blub')->setIsVisible(true)); $sut->setMetaField((new ProjectMeta())->setName('blab')->setIsVisible(true)); @@ -218,6 +222,7 @@ class ProjectTest extends AbstractEntityTest foreach ($sut->getMetaFields() as $metaField) { $cloneMeta = $clone->getMetaField($metaField->getName()); self::assertEquals($cloneMeta->getValue(), $metaField->getValue()); + self::assertEquals($metaField->getValue(), $clone->getMetaFieldValue($metaField->getName())); } self::assertEquals($clone->getBudget(), $sut->getBudget()); self::assertEquals($clone->getTimeBudget(), $sut->getTimeBudget()); diff --git a/tests/Entity/TimesheetTest.php b/tests/Entity/TimesheetTest.php index 8d9e338f..42325743 100644 --- a/tests/Entity/TimesheetTest.php +++ b/tests/Entity/TimesheetTest.php @@ -55,6 +55,7 @@ class TimesheetTest extends TestCase self::assertInstanceOf(Collection::class, $sut->getMetaFields()); self::assertEquals(0, $sut->getMetaFields()->count()); self::assertNull($sut->getMetaField('foo')); + self::assertNull($sut->getMetaFieldValue('foo')); } public function testValueCanBeNull() @@ -120,12 +121,14 @@ class TimesheetTest extends TestCase { $sut = new Timesheet(); $meta = new TimesheetMeta(); - $meta->setName('foo')->setValue('bar')->setType('test'); + $meta->setName('foo')->setValue('bar2')->setType('test'); self::assertInstanceOf(Timesheet::class, $sut->setMetaField($meta)); self::assertEquals(1, $sut->getMetaFields()->count()); $result = $sut->getMetaField('foo'); self::assertSame($result, $meta); self::assertEquals('test', $result->getType()); + self::assertEquals('bar2', $result->getValue()); + self::assertEquals('bar2', $sut->getMetaFieldValue('foo')); $meta2 = new TimesheetMeta(); $meta2->setName('foo')->setValue('bar')->setType('test2'); @@ -136,6 +139,7 @@ class TimesheetTest extends TestCase $result = $sut->getMetaField('foo'); self::assertSame($result, $meta); self::assertEquals('test2', $result->getType()); + self::assertEquals('bar2', $sut->getMetaFieldValue('foo')); $sut->setMetaField((new TimesheetMeta())->setName('blub')->setIsVisible(true)); $sut->setMetaField((new TimesheetMeta())->setName('blab')->setIsVisible(true)); @@ -198,6 +202,7 @@ class TimesheetTest extends TestCase foreach ($sut->getMetaFields() as $metaField) { $cloneMeta = $clone->getMetaField($metaField->getName()); self::assertEquals($cloneMeta->getValue(), $metaField->getValue()); + self::assertEquals($metaField->getValue(), $clone->getMetaFieldValue($metaField->getName())); } self::assertEquals($clone->getTags(), $sut->getTags()); self::assertEquals($clone->getTags(), $sut->getTags()); diff --git a/tests/Entity/UserTest.php b/tests/Entity/UserTest.php index dd7fc841..3562f455 100644 --- a/tests/Entity/UserTest.php +++ b/tests/Entity/UserTest.php @@ -137,6 +137,7 @@ class UserTest extends TestCase $user = new User(); self::assertNull($user->getPreference('test')); self::assertNull($user->getPreferenceValue('test')); + self::assertNull($user->getMetaFieldValue('test')); self::assertEquals('foo', $user->getPreferenceValue('test', 'foo')); $preference = new UserPreference(); @@ -145,14 +146,18 @@ class UserTest extends TestCase ->setValue('foobar'); $user->addPreference($preference); self::assertEquals('foobar', $user->getPreferenceValue('test', 'foo')); + self::assertEquals('foobar', $user->getMetaFieldValue('test')); self::assertEquals($preference, $user->getPreference('test')); $user->setPreferenceValue('test', 'Hello World'); self::assertEquals('Hello World', $user->getPreferenceValue('test', 'foo')); + self::assertEquals('Hello World', $user->getMetaFieldValue('test')); self::assertNull($user->getPreferenceValue('test2')); + self::assertNull($user->getMetaFieldValue('test2')); $user->setPreferenceValue('test2', 'I like rain'); self::assertEquals('I like rain', $user->getPreferenceValue('test2')); + self::assertEquals('I like rain', $user->getMetaFieldValue('test2')); $user->setPreferenceValue('theme.layout', 'boxed'); self::assertTrue($user->isSmallLayout()); diff --git a/tests/Invoice/InvoiceItemTest.php b/tests/Invoice/InvoiceItemTest.php index 09b1c62a..bee9168b 100644 --- a/tests/Invoice/InvoiceItemTest.php +++ b/tests/Invoice/InvoiceItemTest.php @@ -31,9 +31,13 @@ class InvoiceItemTest extends TestCase self::assertIsArray($sut->getAdditionalFields()); self::assertEmpty($sut->getAdditionalFields()); self::assertNull($sut->getAdditionalField('foo')); + self::assertNull($sut->getMetaFieldValue('foo')); self::assertEquals('bar', $sut->getAdditionalField('foo', 'bar')); + self::assertNull($sut->getAdditionalField('foo')); + self::assertNull($sut->getMetaFieldValue('foo')); self::assertInstanceOf(InvoiceItem::class, $sut->addAdditionalField('foo', 'bar2')); self::assertEquals('bar2', $sut->getAdditionalField('foo')); + self::assertEquals('bar2', $sut->getMetaFieldValue('foo')); self::assertEquals(0, $sut->getAmount()); self::assertNull($sut->getBegin()); self::assertNull($sut->getActivity());