diff --git a/Tests/Integration/Features/FeatureHelperMethodsTest.php b/Tests/Integration/Features/FeatureHelperMethodsTest.php index 200002a7030de80a7ae454b87c128e7b41077bb4..0374f815cb569c8c4d83c795a2cd2d6ef3dd530a 100644 --- a/Tests/Integration/Features/FeatureHelperMethodsTest.php +++ b/Tests/Integration/Features/FeatureHelperMethodsTest.php @@ -3,6 +3,7 @@ namespace calderawp\CalderaFormsQuery\Tests\Integration\Features; use calderawp\CalderaFormsQuery\CreatesSelectQueries; +use calderawp\CalderaFormsQuery\Delete\DeleteQueryBuilder; use calderawp\CalderaFormsQuery\Features\FeatureContainer; use calderawp\CalderaFormsQuery\Tests\Integration\IntegrationTestCase; use calderawp\CalderaFormsQuery\Tests\Traits\CanCreateEntryWithEmailField; @@ -119,4 +120,42 @@ class FeatureHelperMethodsTest extends IntegrationTestCase $this->assertTrue( 0 < count( $results ) ); } + + /** + * Test deleting all entries for a specific user + * + * @covers FeatureContainer::deleteByUserId() + */ + public function testDeleteByUserId() + { + $container = $this->containerFactory(); + //Create one entry for unknown user + $this->createEntryWithEmail( rand(). 'email.com' ); + + //Create two entries for a known user. + $email = 'nom@noms.noms'; + $userId = $this->factory()->user->create( + [ 'user_email' => $email ] + ); + wp_set_current_user( $userId ); + $this->createEntryWithEmail( $email ); + $this->createEntryWithEmail( $email ); + + //Delete messages for known user + $container->deleteByUserId($userId); + + //Expect no entry results when querying by known user + $results = $container->selectByUserId($userId); + $this->assertSame(0, count($results)); + + + //Expect no entry value results when querying by known user + $results = $container->selectByFieldValue( + $this->getEmailFieldSlug(), + $email + ); + $this->assertSame(0, count($results)); + + + } } \ No newline at end of file diff --git a/Tests/Unit/Features/FeatureContainerTest.php b/Tests/Unit/Features/FeatureContainerTest.php index 82c21510a3c398e6b5a026e8f1c28fdc01430dda..9a106637ef11a08bd1c249593929d663d8069779 100644 --- a/Tests/Unit/Features/FeatureContainerTest.php +++ b/Tests/Unit/Features/FeatureContainerTest.php @@ -3,7 +3,6 @@ namespace calderawp\CalderaFormsQuery\Tests\Unit\Features; - use calderawp\CalderaContainers\Service\Container as TheServiceContainer; use calderawp\CalderaFormsQuery\Features\DoesQueries; use calderawp\CalderaFormsQuery\Features\FeatureContainer; @@ -25,8 +24,8 @@ class FeatureContainerTest extends TestCase { $serviceContainer = new TheServiceContainer(); $container = new FeatureContainer($serviceContainer, $this->getWPDB()); - $this->assertTrue( is_object( $serviceContainer->make( MySqlBuilder::class ) ) ); - $this->assertTrue( is_object( $container->getBuilder() ) ); + $this->assertTrue(is_object($serviceContainer->make(MySqlBuilder::class))); + $this->assertTrue(is_object($container->getBuilder())); $this->assertTrue( is_a( @@ -36,10 +35,9 @@ class FeatureContainerTest extends TestCase ); $this->assertEquals( - $serviceContainer->make( MySqlBuilder::class ), + $serviceContainer->make(MySqlBuilder::class), $container->getBuilder() ); - } /** @@ -61,7 +59,7 @@ class FeatureContainerTest extends TestCase ); $this->assertEquals( - $serviceContainer->make( Queries::class ), + $serviceContainer->make(Queries::class), $container->getQueries() ); } @@ -77,7 +75,8 @@ class FeatureContainerTest extends TestCase $container = $this->containerFactory(); //Select entry - $this->assertEquals( $this->entryTableName(), + $this->assertEquals( + $this->entryTableName(), $container ->getQueries() ->entrySelect() @@ -85,7 +84,8 @@ class FeatureContainerTest extends TestCase ); //Select entry value - $this->assertEquals( $this->entryValueTableName(), + $this->assertEquals( + $this->entryValueTableName(), $container ->getQueries() ->entryValuesSelect() @@ -93,7 +93,8 @@ class FeatureContainerTest extends TestCase ); //Delete entry - $this->assertEquals( $this->entryTableName(), + $this->assertEquals( + $this->entryTableName(), $container ->getQueries() ->entryDelete() @@ -101,12 +102,12 @@ class FeatureContainerTest extends TestCase ); //Delete entry values - $this->assertEquals( $this->entryValueTableName(), + $this->assertEquals( + $this->entryValueTableName(), $container ->getQueries() ->entryValueDelete() ->getTableName() ); } - -} \ No newline at end of file +} diff --git a/Tests/Unit/TestCase.php b/Tests/Unit/TestCase.php index df3ec4c9a29900e67d6fc4550e7d9789446c29c9..713fa951e119cd25ae5d12296c794425561b56f5 100755 --- a/Tests/Unit/TestCase.php +++ b/Tests/Unit/TestCase.php @@ -19,6 +19,4 @@ abstract class TestCase extends FrameworkTestCase { //Factories go in this trait so they are share with integration tests use HasFactories; - - } diff --git a/src/CanCollectResults.php b/src/CanCollectResults.php index 33b5b78d8cecce47907560c0e7a01dd44a7f1a98..6136d2cf609daa383864860c0cfcbac60bd03138 100644 --- a/src/CanCollectResults.php +++ b/src/CanCollectResults.php @@ -3,7 +3,6 @@ namespace calderawp\CalderaFormsQuery; - trait CanCollectResults { /** @@ -67,4 +66,4 @@ trait CanCollectResults { $this->entryValueGenerator->resetQuery(); } -} \ No newline at end of file +} diff --git a/src/Delete/EntryValues.php b/src/Delete/EntryValues.php index f189a6bbb6b58a803e26218353d43486176681cf..71840a0abef78f3687e5437f32e6a3b5b5a328e3 100644 --- a/src/Delete/EntryValues.php +++ b/src/Delete/EntryValues.php @@ -30,8 +30,7 @@ class EntryValues extends DeleteQueryBuilder */ public function deleteByEntryIds(array $entryIds) { - return $this->in($entryIds,'entry_id'); - + return $this->in($entryIds, 'entry_id'); } /** diff --git a/src/Exceptions/Exception.php b/src/Exceptions/Exception.php index 6303effeab98c12c0ff0e2952cd18e09a3cc7180..9e5fee139bb16288ba2a854833b8cd64f3bc06c7 100644 --- a/src/Exceptions/Exception.php +++ b/src/Exceptions/Exception.php @@ -5,4 +5,4 @@ namespace calderawp\CalderaFormsQuery\Exceptions; class Exception extends \Exception { -} \ No newline at end of file +} diff --git a/src/Features/DoesQueries.php b/src/Features/DoesQueries.php index 43699bd5a6e6dd692a7df2ebc02478cd048dea32..000231cfb3f8c4a2ac9eeddeda35f9239b2ce67e 100644 --- a/src/Features/DoesQueries.php +++ b/src/Features/DoesQueries.php @@ -3,8 +3,7 @@ namespace calderawp\CalderaFormsQuery\Features; - interface DoesQueries { -} \ No newline at end of file +} diff --git a/src/Features/FeatureContainer.php b/src/Features/FeatureContainer.php index efb7d1dc423cf11264cb63f51ad283bda5b0b97f..54b046b3b20f1ff97c2319ff5389bc37987ffed5 100644 --- a/src/Features/FeatureContainer.php +++ b/src/Features/FeatureContainer.php @@ -3,7 +3,6 @@ namespace calderawp\CalderaFormsQuery\Features; - use calderawp\CalderaContainers\Container; use calderawp\CalderaContainers\Interfaces\ServiceContainer; @@ -35,7 +34,7 @@ class FeatureContainer extends Container * @param ServiceContainer $serviceContainer * @param \wpdb $wpdb */ - public function __construct(ServiceContainer $serviceContainer, \wpdb $wpdb ) + public function __construct(ServiceContainer $serviceContainer, \wpdb $wpdb) { $this->serviceContainer = $serviceContainer; @@ -49,11 +48,11 @@ class FeatureContainer extends Container protected function bindServices() { //@TODO move these to service provider classes - $this->serviceContainer->singleton( MySqlBuilder::class, function(){ + $this->serviceContainer->singleton(MySqlBuilder::class, function () { return new MySqlBuilder(); }); - $this->serviceContainer->bind( SelectQueries::class, function (){ + $this->serviceContainer->bind(SelectQueries::class, function () { //@TODO Factory return new SelectQueries( new EntrySelect( @@ -68,7 +67,7 @@ class FeatureContainer extends Container ); }); - $this->serviceContainer->bind( DeleteQueries::class, function (){ + $this->serviceContainer->bind(DeleteQueries::class, function () { //@TODO Factory return new DeleteQueries( new EntryDelete( @@ -83,14 +82,14 @@ class FeatureContainer extends Container ); }); - $this->serviceContainer->singleton( Queries::class, function(){ + $this->serviceContainer->singleton(Queries::class, function () { return new Queries( $this ->serviceContainer - ->make( SelectQueries::class ), + ->make(SelectQueries::class), $this ->serviceContainer - ->make(DeleteQueries::class ) + ->make(DeleteQueries::class) ); }); } @@ -104,7 +103,7 @@ class FeatureContainer extends Container { return $this ->serviceContainer - ->make( MySqlBuilder::class ); + ->make(MySqlBuilder::class); } /** @@ -116,7 +115,7 @@ class FeatureContainer extends Container { return $this ->serviceContainer - ->make( Queries::class ); + ->make(Queries::class); } /** @@ -131,7 +130,7 @@ class FeatureContainer extends Container ->getQueries() ->entrySelect() ->queryByUserId($userId); - return $this->collectResults( $this->select( $query ) ); + return $this->collectResults($this->select($query)); } /** @@ -143,7 +142,7 @@ class FeatureContainer extends Container * * @return array */ - public function selectByFieldValue($fieldSlug, $fieldValue, $have = true ) + public function selectByFieldValue($fieldSlug, $fieldValue, $have = true) { $type = $have ? 'equals' : 'notEquals'; @@ -152,21 +151,19 @@ class FeatureContainer extends Container ->entryValuesSelect() ->queryByFieldValue($fieldSlug, $fieldValue, $type, 'AND', [ 'entry_id' - ] ); - $results = $this->select( $queryForEntryValues ); - if( empty( $results ) || 0 >= count( $results )){ + ]); + $results = $this->select($queryForEntryValues); + if (empty($results) || 0 >= count($results)) { return []; } - foreach ( $results as &$result ){ - $result = $result->entry_id; - } + $results = $this->reduceResultsToEntryId($results); $queryForValues = $this ->getQueries() ->entrySelect() ->queryByEntryIds($results); - return $this->collectResults( $this->select( $queryForValues ) ); + return $this->collectResults($this->select($queryForValues)); } /** @@ -175,13 +172,13 @@ class FeatureContainer extends Container * @param array $entryIds Entry Ids to delete * @return $this */ - public function deleteByEntryIds(array$entryIds) + public function deleteByEntryIds(array $entryIds) { $this->delete( $this - ->getQueries() - ->entryDelete() - ->deleteByEntryIds($entryIds) + ->getQueries() + ->entryDelete() + ->deleteByEntryIds($entryIds) ); $this->delete( $this->getQueries() @@ -192,6 +189,37 @@ class FeatureContainer extends Container return $this; } + /** + * Delete all entries and entry values by user ID + * + * @param int $userId + */ + public function deleteByUserId($userId) + { + + $entries = $this->select( + $this + ->getQueries() + ->entrySelect() + ->queryByUserId($userId) + ); + if (!empty($entries)) { + $ids = $this->reduceResultsToEntryId($entries, 'id'); + $this->delete( + $this + ->getQueries() + ->entryDelete() + ->deleteByEntryIds($ids) + ); + $this->delete( + $this + ->getQueries() + ->entryValueDelete() + ->deleteByEntryIds($ids) + ); + } + } + /** * @return string */ @@ -218,7 +246,6 @@ class FeatureContainer extends Container { $results = []; foreach ($entriesValues as $entry) { - $entry = new \Caldera_Forms_Entry_Entry($entry); $query = $this ->getQueries() @@ -261,8 +288,8 @@ class FeatureContainer extends Container private function select(SelectQueryBuilder $query) { return $this - ->getQueries() - ->select($query); + ->getQueries() + ->select($query); } /** @@ -274,9 +301,19 @@ class FeatureContainer extends Container private function delete(DeleteQueryBuilder $query) { return $this-> - getQueries() + getQueries() ->delete($query); } - -} \ No newline at end of file + /** + * @param $results + * @return array + */ + private function reduceResultsToEntryId($results,$colum='entry_id') + { + foreach ($results as &$result) { + $result = $result->$colum; + } + return $results; + } +} diff --git a/src/Features/Queries.php b/src/Features/Queries.php index 0cd720419959bfda14413b63f729bbf2b07fbebd..f6a09736ef06b6fb1c720e27a61984ff63f8f738 100644 --- a/src/Features/Queries.php +++ b/src/Features/Queries.php @@ -43,7 +43,7 @@ class Queries implements DoesQueries * @param SelectQueryBuilder $query * @return \stdClass[] */ - public function select( SelectQueryBuilder $query ) + public function select(SelectQueryBuilder $query) { return $this ->selectQueries @@ -56,7 +56,7 @@ class Queries implements DoesQueries * @param DeleteQueryBuilder $query * @return \stdClass[] */ - public function delete( DeleteQueryBuilder $query ) + public function delete(DeleteQueryBuilder $query) { return $this ->deleteQueries diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php index 6f47af1bcd4f29135589c412b33051ac1342da30..1a731cfad41a45ded8d61c6447b8c365c325f9f2 100644 --- a/src/QueryBuilder.php +++ b/src/QueryBuilder.php @@ -100,7 +100,7 @@ abstract class QueryBuilder implements CreatesSqlQueries { $values = $this->getBuilder()->getValues(); foreach ($values as $identifier => $value) { - if (is_array( $value ) || is_object( $value ) ) { + if (is_array($value) || is_object($value)) { continue; } else { $values[$identifier] = $this->surroundValue($value); diff --git a/src/Select/Entry.php b/src/Select/Entry.php index c1fea3098c3ec62f2596cc4a9158612ea4c9e98d..4ececde6ec6d8520f463e409d76415b3baa82edd 100644 --- a/src/Select/Entry.php +++ b/src/Select/Entry.php @@ -55,6 +55,4 @@ class Entry extends SelectQueryBuilder { return $this->is('user_id', $userId); } - - } diff --git a/src/Select/EntryValues.php b/src/Select/EntryValues.php index a4fa43ab618217cb7cf5228b12a4b29a76081c16..a367a36e716c1ec24ddb335624dd4029fe3d64fb 100644 --- a/src/Select/EntryValues.php +++ b/src/Select/EntryValues.php @@ -35,10 +35,10 @@ class EntryValues extends SelectQueryBuilder */ public function queryByFieldValue($fieldSlug, $fieldValue, $type = 'equals', $whereOperator = 'AND', $columns = []) { - if( ! empty( $columns ) ){ + if (! empty($columns)) { $this ->getSelectQuery() - ->setColumns( $columns ); + ->setColumns($columns); } switch ($type) { case 'equals': diff --git a/src/Select/SelectQueryBuilder.php b/src/Select/SelectQueryBuilder.php index 9c066243732a78d22a0296f6ddd744dff57c645a..b4a50284c73c73c8cbff1d88f103b3cd5e8f6ff2 100644 --- a/src/Select/SelectQueryBuilder.php +++ b/src/Select/SelectQueryBuilder.php @@ -59,5 +59,4 @@ abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuer { $this->selectQuery = new \NilPortugues\Sql\QueryBuilder\Manipulation\Select($this->getTableName()); } - } diff --git a/src/SelectQueries.php b/src/SelectQueries.php index 1cc6aeb9f141fbd5a9f82af9edf4d823ef9f5781..c22c3ca29c1357e7ef0087556c15566fd9607f9b 100644 --- a/src/SelectQueries.php +++ b/src/SelectQueries.php @@ -77,6 +77,4 @@ class SelectQueries implements CreatesSelectQueries { $this->entryValueGenerator->resetQuery(); } - - }