Skip to content
Snippets Groups Projects
Commit 9057feeb authored by Josh Pollock's avatar Josh Pollock
Browse files

Impliment delete by user id feature- YOU MAY BE DELETED

parent 4e88fc61
No related branches found
No related tags found
No related merge requests found
...@@ -3,6 +3,7 @@ namespace calderawp\CalderaFormsQuery\Tests\Integration\Features; ...@@ -3,6 +3,7 @@ namespace calderawp\CalderaFormsQuery\Tests\Integration\Features;
use calderawp\CalderaFormsQuery\CreatesSelectQueries; use calderawp\CalderaFormsQuery\CreatesSelectQueries;
use calderawp\CalderaFormsQuery\Delete\DeleteQueryBuilder;
use calderawp\CalderaFormsQuery\Features\FeatureContainer; use calderawp\CalderaFormsQuery\Features\FeatureContainer;
use calderawp\CalderaFormsQuery\Tests\Integration\IntegrationTestCase; use calderawp\CalderaFormsQuery\Tests\Integration\IntegrationTestCase;
use calderawp\CalderaFormsQuery\Tests\Traits\CanCreateEntryWithEmailField; use calderawp\CalderaFormsQuery\Tests\Traits\CanCreateEntryWithEmailField;
...@@ -119,4 +120,42 @@ class FeatureHelperMethodsTest extends IntegrationTestCase ...@@ -119,4 +120,42 @@ class FeatureHelperMethodsTest extends IntegrationTestCase
$this->assertTrue( 0 < count( $results ) ); $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
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
namespace calderawp\CalderaFormsQuery\Tests\Unit\Features; namespace calderawp\CalderaFormsQuery\Tests\Unit\Features;
use calderawp\CalderaContainers\Service\Container as TheServiceContainer; use calderawp\CalderaContainers\Service\Container as TheServiceContainer;
use calderawp\CalderaFormsQuery\Features\DoesQueries; use calderawp\CalderaFormsQuery\Features\DoesQueries;
use calderawp\CalderaFormsQuery\Features\FeatureContainer; use calderawp\CalderaFormsQuery\Features\FeatureContainer;
...@@ -25,8 +24,8 @@ class FeatureContainerTest extends TestCase ...@@ -25,8 +24,8 @@ class FeatureContainerTest extends TestCase
{ {
$serviceContainer = new TheServiceContainer(); $serviceContainer = new TheServiceContainer();
$container = new FeatureContainer($serviceContainer, $this->getWPDB()); $container = new FeatureContainer($serviceContainer, $this->getWPDB());
$this->assertTrue( is_object( $serviceContainer->make( MySqlBuilder::class ) ) ); $this->assertTrue(is_object($serviceContainer->make(MySqlBuilder::class)));
$this->assertTrue( is_object( $container->getBuilder() ) ); $this->assertTrue(is_object($container->getBuilder()));
$this->assertTrue( $this->assertTrue(
is_a( is_a(
...@@ -36,10 +35,9 @@ class FeatureContainerTest extends TestCase ...@@ -36,10 +35,9 @@ class FeatureContainerTest extends TestCase
); );
$this->assertEquals( $this->assertEquals(
$serviceContainer->make( MySqlBuilder::class ), $serviceContainer->make(MySqlBuilder::class),
$container->getBuilder() $container->getBuilder()
); );
} }
/** /**
...@@ -61,7 +59,7 @@ class FeatureContainerTest extends TestCase ...@@ -61,7 +59,7 @@ class FeatureContainerTest extends TestCase
); );
$this->assertEquals( $this->assertEquals(
$serviceContainer->make( Queries::class ), $serviceContainer->make(Queries::class),
$container->getQueries() $container->getQueries()
); );
} }
...@@ -77,7 +75,8 @@ class FeatureContainerTest extends TestCase ...@@ -77,7 +75,8 @@ class FeatureContainerTest extends TestCase
$container = $this->containerFactory(); $container = $this->containerFactory();
//Select entry //Select entry
$this->assertEquals( $this->entryTableName(), $this->assertEquals(
$this->entryTableName(),
$container $container
->getQueries() ->getQueries()
->entrySelect() ->entrySelect()
...@@ -85,7 +84,8 @@ class FeatureContainerTest extends TestCase ...@@ -85,7 +84,8 @@ class FeatureContainerTest extends TestCase
); );
//Select entry value //Select entry value
$this->assertEquals( $this->entryValueTableName(), $this->assertEquals(
$this->entryValueTableName(),
$container $container
->getQueries() ->getQueries()
->entryValuesSelect() ->entryValuesSelect()
...@@ -93,7 +93,8 @@ class FeatureContainerTest extends TestCase ...@@ -93,7 +93,8 @@ class FeatureContainerTest extends TestCase
); );
//Delete entry //Delete entry
$this->assertEquals( $this->entryTableName(), $this->assertEquals(
$this->entryTableName(),
$container $container
->getQueries() ->getQueries()
->entryDelete() ->entryDelete()
...@@ -101,12 +102,12 @@ class FeatureContainerTest extends TestCase ...@@ -101,12 +102,12 @@ class FeatureContainerTest extends TestCase
); );
//Delete entry values //Delete entry values
$this->assertEquals( $this->entryValueTableName(), $this->assertEquals(
$this->entryValueTableName(),
$container $container
->getQueries() ->getQueries()
->entryValueDelete() ->entryValueDelete()
->getTableName() ->getTableName()
); );
} }
}
}
\ No newline at end of file
...@@ -19,6 +19,4 @@ abstract class TestCase extends FrameworkTestCase ...@@ -19,6 +19,4 @@ abstract class TestCase extends FrameworkTestCase
{ {
//Factories go in this trait so they are share with integration tests //Factories go in this trait so they are share with integration tests
use HasFactories; use HasFactories;
} }
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
namespace calderawp\CalderaFormsQuery; namespace calderawp\CalderaFormsQuery;
trait CanCollectResults trait CanCollectResults
{ {
/** /**
...@@ -67,4 +66,4 @@ trait CanCollectResults ...@@ -67,4 +66,4 @@ trait CanCollectResults
{ {
$this->entryValueGenerator->resetQuery(); $this->entryValueGenerator->resetQuery();
} }
} }
\ No newline at end of file
...@@ -30,8 +30,7 @@ class EntryValues extends DeleteQueryBuilder ...@@ -30,8 +30,7 @@ class EntryValues extends DeleteQueryBuilder
*/ */
public function deleteByEntryIds(array $entryIds) public function deleteByEntryIds(array $entryIds)
{ {
return $this->in($entryIds,'entry_id'); return $this->in($entryIds, 'entry_id');
} }
/** /**
......
...@@ -5,4 +5,4 @@ namespace calderawp\CalderaFormsQuery\Exceptions; ...@@ -5,4 +5,4 @@ namespace calderawp\CalderaFormsQuery\Exceptions;
class Exception extends \Exception class Exception extends \Exception
{ {
} }
\ No newline at end of file
...@@ -3,8 +3,7 @@ ...@@ -3,8 +3,7 @@
namespace calderawp\CalderaFormsQuery\Features; namespace calderawp\CalderaFormsQuery\Features;
interface DoesQueries interface DoesQueries
{ {
} }
\ No newline at end of file
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
namespace calderawp\CalderaFormsQuery\Features; namespace calderawp\CalderaFormsQuery\Features;
use calderawp\CalderaContainers\Container; use calderawp\CalderaContainers\Container;
use calderawp\CalderaContainers\Interfaces\ServiceContainer; use calderawp\CalderaContainers\Interfaces\ServiceContainer;
...@@ -35,7 +34,7 @@ class FeatureContainer extends Container ...@@ -35,7 +34,7 @@ class FeatureContainer extends Container
* @param ServiceContainer $serviceContainer * @param ServiceContainer $serviceContainer
* @param \wpdb $wpdb * @param \wpdb $wpdb
*/ */
public function __construct(ServiceContainer $serviceContainer, \wpdb $wpdb ) public function __construct(ServiceContainer $serviceContainer, \wpdb $wpdb)
{ {
$this->serviceContainer = $serviceContainer; $this->serviceContainer = $serviceContainer;
...@@ -49,11 +48,11 @@ class FeatureContainer extends Container ...@@ -49,11 +48,11 @@ class FeatureContainer extends Container
protected function bindServices() protected function bindServices()
{ {
//@TODO move these to service provider classes //@TODO move these to service provider classes
$this->serviceContainer->singleton( MySqlBuilder::class, function(){ $this->serviceContainer->singleton(MySqlBuilder::class, function () {
return new MySqlBuilder(); return new MySqlBuilder();
}); });
$this->serviceContainer->bind( SelectQueries::class, function (){ $this->serviceContainer->bind(SelectQueries::class, function () {
//@TODO Factory //@TODO Factory
return new SelectQueries( return new SelectQueries(
new EntrySelect( new EntrySelect(
...@@ -68,7 +67,7 @@ class FeatureContainer extends Container ...@@ -68,7 +67,7 @@ class FeatureContainer extends Container
); );
}); });
$this->serviceContainer->bind( DeleteQueries::class, function (){ $this->serviceContainer->bind(DeleteQueries::class, function () {
//@TODO Factory //@TODO Factory
return new DeleteQueries( return new DeleteQueries(
new EntryDelete( new EntryDelete(
...@@ -83,14 +82,14 @@ class FeatureContainer extends Container ...@@ -83,14 +82,14 @@ class FeatureContainer extends Container
); );
}); });
$this->serviceContainer->singleton( Queries::class, function(){ $this->serviceContainer->singleton(Queries::class, function () {
return new Queries( return new Queries(
$this $this
->serviceContainer ->serviceContainer
->make( SelectQueries::class ), ->make(SelectQueries::class),
$this $this
->serviceContainer ->serviceContainer
->make(DeleteQueries::class ) ->make(DeleteQueries::class)
); );
}); });
} }
...@@ -104,7 +103,7 @@ class FeatureContainer extends Container ...@@ -104,7 +103,7 @@ class FeatureContainer extends Container
{ {
return $this return $this
->serviceContainer ->serviceContainer
->make( MySqlBuilder::class ); ->make(MySqlBuilder::class);
} }
/** /**
...@@ -116,7 +115,7 @@ class FeatureContainer extends Container ...@@ -116,7 +115,7 @@ class FeatureContainer extends Container
{ {
return $this return $this
->serviceContainer ->serviceContainer
->make( Queries::class ); ->make(Queries::class);
} }
/** /**
...@@ -131,7 +130,7 @@ class FeatureContainer extends Container ...@@ -131,7 +130,7 @@ class FeatureContainer extends Container
->getQueries() ->getQueries()
->entrySelect() ->entrySelect()
->queryByUserId($userId); ->queryByUserId($userId);
return $this->collectResults( $this->select( $query ) ); return $this->collectResults($this->select($query));
} }
/** /**
...@@ -143,7 +142,7 @@ class FeatureContainer extends Container ...@@ -143,7 +142,7 @@ class FeatureContainer extends Container
* *
* @return array * @return array
*/ */
public function selectByFieldValue($fieldSlug, $fieldValue, $have = true ) public function selectByFieldValue($fieldSlug, $fieldValue, $have = true)
{ {
$type = $have ? 'equals' : 'notEquals'; $type = $have ? 'equals' : 'notEquals';
...@@ -152,21 +151,19 @@ class FeatureContainer extends Container ...@@ -152,21 +151,19 @@ class FeatureContainer extends Container
->entryValuesSelect() ->entryValuesSelect()
->queryByFieldValue($fieldSlug, $fieldValue, $type, 'AND', [ ->queryByFieldValue($fieldSlug, $fieldValue, $type, 'AND', [
'entry_id' 'entry_id'
] ); ]);
$results = $this->select( $queryForEntryValues ); $results = $this->select($queryForEntryValues);
if( empty( $results ) || 0 >= count( $results )){ if (empty($results) || 0 >= count($results)) {
return []; return [];
} }
foreach ( $results as &$result ){ $results = $this->reduceResultsToEntryId($results);
$result = $result->entry_id;
}
$queryForValues = $this $queryForValues = $this
->getQueries() ->getQueries()
->entrySelect() ->entrySelect()
->queryByEntryIds($results); ->queryByEntryIds($results);
return $this->collectResults( $this->select( $queryForValues ) ); return $this->collectResults($this->select($queryForValues));
} }
/** /**
...@@ -175,13 +172,13 @@ class FeatureContainer extends Container ...@@ -175,13 +172,13 @@ class FeatureContainer extends Container
* @param array $entryIds Entry Ids to delete * @param array $entryIds Entry Ids to delete
* @return $this * @return $this
*/ */
public function deleteByEntryIds(array$entryIds) public function deleteByEntryIds(array $entryIds)
{ {
$this->delete( $this->delete(
$this $this
->getQueries() ->getQueries()
->entryDelete() ->entryDelete()
->deleteByEntryIds($entryIds) ->deleteByEntryIds($entryIds)
); );
$this->delete( $this->delete(
$this->getQueries() $this->getQueries()
...@@ -192,6 +189,37 @@ class FeatureContainer extends Container ...@@ -192,6 +189,37 @@ class FeatureContainer extends Container
return $this; 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 * @return string
*/ */
...@@ -218,7 +246,6 @@ class FeatureContainer extends Container ...@@ -218,7 +246,6 @@ class FeatureContainer extends Container
{ {
$results = []; $results = [];
foreach ($entriesValues as $entry) { foreach ($entriesValues as $entry) {
$entry = new \Caldera_Forms_Entry_Entry($entry); $entry = new \Caldera_Forms_Entry_Entry($entry);
$query = $this $query = $this
->getQueries() ->getQueries()
...@@ -261,8 +288,8 @@ class FeatureContainer extends Container ...@@ -261,8 +288,8 @@ class FeatureContainer extends Container
private function select(SelectQueryBuilder $query) private function select(SelectQueryBuilder $query)
{ {
return $this return $this
->getQueries() ->getQueries()
->select($query); ->select($query);
} }
/** /**
...@@ -274,9 +301,19 @@ class FeatureContainer extends Container ...@@ -274,9 +301,19 @@ class FeatureContainer extends Container
private function delete(DeleteQueryBuilder $query) private function delete(DeleteQueryBuilder $query)
{ {
return $this-> return $this->
getQueries() getQueries()
->delete($query); ->delete($query);
} }
/**
} * @param $results
\ No newline at end of file * @return array
*/
private function reduceResultsToEntryId($results,$colum='entry_id')
{
foreach ($results as &$result) {
$result = $result->$colum;
}
return $results;
}
}
...@@ -43,7 +43,7 @@ class Queries implements DoesQueries ...@@ -43,7 +43,7 @@ class Queries implements DoesQueries
* @param SelectQueryBuilder $query * @param SelectQueryBuilder $query
* @return \stdClass[] * @return \stdClass[]
*/ */
public function select( SelectQueryBuilder $query ) public function select(SelectQueryBuilder $query)
{ {
return $this return $this
->selectQueries ->selectQueries
...@@ -56,7 +56,7 @@ class Queries implements DoesQueries ...@@ -56,7 +56,7 @@ class Queries implements DoesQueries
* @param DeleteQueryBuilder $query * @param DeleteQueryBuilder $query
* @return \stdClass[] * @return \stdClass[]
*/ */
public function delete( DeleteQueryBuilder $query ) public function delete(DeleteQueryBuilder $query)
{ {
return $this return $this
->deleteQueries ->deleteQueries
......
...@@ -100,7 +100,7 @@ abstract class QueryBuilder implements CreatesSqlQueries ...@@ -100,7 +100,7 @@ abstract class QueryBuilder implements CreatesSqlQueries
{ {
$values = $this->getBuilder()->getValues(); $values = $this->getBuilder()->getValues();
foreach ($values as $identifier => $value) { foreach ($values as $identifier => $value) {
if (is_array( $value ) || is_object( $value ) ) { if (is_array($value) || is_object($value)) {
continue; continue;
} else { } else {
$values[$identifier] = $this->surroundValue($value); $values[$identifier] = $this->surroundValue($value);
......
...@@ -55,6 +55,4 @@ class Entry extends SelectQueryBuilder ...@@ -55,6 +55,4 @@ class Entry extends SelectQueryBuilder
{ {
return $this->is('user_id', $userId); return $this->is('user_id', $userId);
} }
} }
...@@ -35,10 +35,10 @@ class EntryValues extends SelectQueryBuilder ...@@ -35,10 +35,10 @@ class EntryValues extends SelectQueryBuilder
*/ */
public function queryByFieldValue($fieldSlug, $fieldValue, $type = 'equals', $whereOperator = 'AND', $columns = []) public function queryByFieldValue($fieldSlug, $fieldValue, $type = 'equals', $whereOperator = 'AND', $columns = [])
{ {
if( ! empty( $columns ) ){ if (! empty($columns)) {
$this $this
->getSelectQuery() ->getSelectQuery()
->setColumns( $columns ); ->setColumns($columns);
} }
switch ($type) { switch ($type) {
case 'equals': case 'equals':
......
...@@ -59,5 +59,4 @@ abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuer ...@@ -59,5 +59,4 @@ abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuer
{ {
$this->selectQuery = new \NilPortugues\Sql\QueryBuilder\Manipulation\Select($this->getTableName()); $this->selectQuery = new \NilPortugues\Sql\QueryBuilder\Manipulation\Select($this->getTableName());
} }
} }
...@@ -77,6 +77,4 @@ class SelectQueries implements CreatesSelectQueries ...@@ -77,6 +77,4 @@ class SelectQueries implements CreatesSelectQueries
{ {
$this->entryValueGenerator->resetQuery(); $this->entryValueGenerator->resetQuery();
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment