From 389ca32a3543cbd881aa9e590e67de0b5f7a7e2a Mon Sep 17 00:00:00 2001 From: Josh Pollock <josh@calderawp.com> Date: Sat, 19 May 2018 08:43:25 -0400 Subject: [PATCH] cleanup paginated queries --- .idea/workspace.xml | 238 +++++++--- README.md | 1 - Tests/Unit/Select/EntryTest.php | 32 +- Tests/Unit/SelectQueriesTest.php | 2 - src/Features/FeatureContainer.php | 568 +++++++++++------------- src/Select/DoesSelectQuery.php | 1 - src/Select/DoesSelectQueryByEntryId.php | 1 - src/Select/SelectQueryBuilder.php | 31 +- src/Select/ValueSelectQueryBuilder.php | 1 - 9 files changed, 468 insertions(+), 407 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 21e09e2..ecdf626 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,7 +2,8 @@ <project version="4"> <component name="ChangeListManager"> <list default="true" id="8debb13c-dec3-4d96-b552-5550bc63772b" name="Default" comment=""> - <change beforePath="$PROJECT_DIR$/src/Features/FeatureContainer.php" beforeDir="false" afterPath="$PROJECT_DIR$/src/Features/FeatureContainer.php" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/Tests/plugins/caldera-forms" beforeDir="false" afterPath="$PROJECT_DIR$/Tests/plugins/caldera-forms" afterDir="false" /> </list> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="TRACKING_ENABLED" value="true" /> @@ -15,35 +16,87 @@ <pharConfigPath>$PROJECT_DIR$/composer.json</pharConfigPath> </component> <component name="FileEditorManager"> - <leaf> - <file leaf-file-name="SelectQueryBuilder.php" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/src/Select/SelectQueryBuilder.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="313"> - <caret line="51" column="14" selection-start-line="51" selection-start-column="14" selection-end-line="51" selection-end-column="14" /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="FeatureContainer.php" pinned="false" current-in-tab="true"> - <entry file="file://$PROJECT_DIR$/src/Features/FeatureContainer.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="695"> - <caret line="162" column="41" selection-start-line="162" selection-start-column="41" selection-end-line="162" selection-end-column="41" /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="Select.php" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/vendor/nilportugues/sql-query-builder/src/Manipulation/Select.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="538"> - <caret line="390" column="25" selection-start-line="390" selection-start-column="15" selection-end-line="390" selection-end-column="25" /> - </state> - </provider> - </entry> - </file> - </leaf> + <splitter split-orientation="horizontal" split-proportion="0.5"> + <split-first> + <leaf> + <file leaf-file-name="SelectQueryBuilder.php" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/src/Select/SelectQueryBuilder.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="298"> + <caret line="50" column="14" selection-start-line="50" selection-start-column="14" selection-end-line="50" selection-end-column="14" /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="FeatureContainer.php" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/src/Features/FeatureContainer.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="227"> + <caret line="143" column="38" selection-start-line="143" selection-start-column="38" selection-end-line="143" selection-end-column="38" /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="phpunit" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/vendor/phpunit/phpunit/phpunit"> + <provider selected="true" editor-type-id="text-editor" /> + </entry> + </file> + <file leaf-file-name="TestCase.php" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/vendor/phpunit/phpunit/src/Framework/TestCase.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="159"> + <caret line="797" selection-start-line="797" selection-end-line="797" /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="README.md" pinned="false" current-in-tab="true"> + <entry file="file://$PROJECT_DIR$/README.md"> + <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]"> + <state split_layout="FIRST"> + <first_editor relative-caret-position="323"> + <caret line="73" column="3" selection-start-line="73" selection-start-column="3" selection-end-line="73" selection-end-column="3" /> + </first_editor> + <second_editor /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="Select.php" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/vendor/nilportugues/sql-query-builder/src/Manipulation/Select.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="538"> + <caret line="390" column="25" selection-start-line="390" selection-start-column="15" selection-end-line="390" selection-end-column="25" /> + </state> + </provider> + </entry> + </file> + </leaf> + </split-first> + <split-second> + <leaf> + <file leaf-file-name="FeatureContainer.php" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/src/Features/FeatureContainer.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="354"> + <caret line="204" selection-start-line="204" selection-end-line="204" /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="composer.json" pinned="false" current-in-tab="true"> + <entry file="file://$PROJECT_DIR$/composer.json"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="212"> + <caret line="19" column="48" lean-forward="true" selection-start-line="19" selection-start-column="48" selection-end-line="19" selection-end-column="48" /> + </state> + </provider> + </entry> + </file> + </leaf> + </split-second> + </splitter> </component> <component name="FindInProjectRecents"> <findStrings> @@ -51,6 +104,9 @@ <find>limitStart</find> <find>SelectQueryBuilder</find> <find>OFFSET</find> + <find><</find> + <find>></find> + <find>selectByFieldValue</find> </findStrings> </component> <component name="Git.Settings"> @@ -73,6 +129,7 @@ <option value="$PROJECT_DIR$/Tests/Unit/Select/EntryTest.php" /> <option value="$PROJECT_DIR$/src/Features/Queries.php" /> <option value="$PROJECT_DIR$/src/Features/FeatureContainer.php" /> + <option value="$PROJECT_DIR$/README.md" /> </list> </option> </component> @@ -165,31 +222,6 @@ <item name="src" type="462c0819:PsiDirectoryNode" /> <item name="Features" type="462c0819:PsiDirectoryNode" /> </path> - <path> - <item name="caldera-forms-query" type="b2602c69:ProjectViewProjectNode" /> - <item name="caldera-forms-query" type="462c0819:PsiDirectoryNode" /> - <item name="Tests" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="caldera-forms-query" type="b2602c69:ProjectViewProjectNode" /> - <item name="caldera-forms-query" type="462c0819:PsiDirectoryNode" /> - <item name="Tests" type="462c0819:PsiDirectoryNode" /> - <item name="Unit" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="caldera-forms-query" type="b2602c69:ProjectViewProjectNode" /> - <item name="caldera-forms-query" type="462c0819:PsiDirectoryNode" /> - <item name="Tests" type="462c0819:PsiDirectoryNode" /> - <item name="Unit" type="462c0819:PsiDirectoryNode" /> - <item name="Features" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="caldera-forms-query" type="b2602c69:ProjectViewProjectNode" /> - <item name="caldera-forms-query" type="462c0819:PsiDirectoryNode" /> - <item name="Tests" type="462c0819:PsiDirectoryNode" /> - <item name="Unit" type="462c0819:PsiDirectoryNode" /> - <item name="Select" type="462c0819:PsiDirectoryNode" /> - </path> </expand> <select /> </subPane> @@ -237,7 +269,7 @@ <servers /> </component> <component name="TimeTrackingManager"> - <option name="totallyTimeSpent" value="10296000" /> + <option name="totallyTimeSpent" value="10580000" /> </component> <component name="ToolWindowManager"> <frame x="0" y="23" width="1920" height="1057" extended-state="0" /> @@ -248,8 +280,8 @@ <window_info anchor="bottom" id="Database Changes" order="7" show_stripe_button="false" /> <window_info anchor="bottom" id="Run" order="2" weight="0.3297619" /> <window_info anchor="bottom" id="Version Control" order="7" /> - <window_info anchor="bottom" id="Terminal" order="7" visible="true" weight="0.0" /> - <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.14376996" /> + <window_info active="true" anchor="bottom" id="Terminal" order="7" visible="true" weight="0.39583334" /> + <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.14376996" /> <window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" /> <window_info id="Grunt " order="2" side_tool="true" /> <window_info anchor="right" id="Database" order="3" /> @@ -257,12 +289,25 @@ <window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> <window_info id="Favorites" order="2" side_tool="true" /> <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> + <window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" /> <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> + <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.14376996" /> + <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> + <window_info anchor="bottom" id="TODO" order="6" /> + <window_info anchor="bottom" id="Version Control" order="7" /> + <window_info anchor="bottom" id="Run" order="2" weight="0.3297619" /> + <window_info id="Grunt " order="2" side_tool="true" /> + <window_info anchor="bottom" id="Database Changes" order="7" show_stripe_button="false" /> + <window_info anchor="right" id="Database" order="3" /> <window_info anchor="bottom" id="Message" order="0" /> + <window_info anchor="bottom" id="Event Log" order="7" side_tool="true" /> <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> + <window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> <window_info anchor="bottom" id="Find" order="1" /> + <window_info anchor="bottom" id="Terminal" order="7" visible="true" weight="0.0" /> + <window_info id="Favorites" order="2" side_tool="true" /> </layout> </component> <component name="TypeScriptGeneratedFilesManager"> @@ -272,6 +317,41 @@ <option name="myLimit" value="2678400000" /> </component> <component name="editorHistoryManager"> + <entry file="file://$PROJECT_DIR$/vendor/nilportugues/sql-query-builder/src/Builder/GenericBuilder.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="722"> + <caret line="72" column="37" selection-start-line="72" selection-start-column="37" selection-end-line="72" selection-end-column="37" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/src/Select/SelectQueryBuilder.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="313"> + <caret line="51" column="14" selection-start-line="51" selection-start-column="14" selection-end-line="51" selection-end-column="14" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/src/Features/Queries.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="480"> + <caret line="76" column="33" selection-start-line="76" selection-start-column="33" selection-end-line="76" selection-end-column="33" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/vendor/nilportugues/sql-query-builder/src/Manipulation/Select.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="538"> + <caret line="390" column="25" selection-start-line="390" selection-start-column="15" selection-end-line="390" selection-end-column="25" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/src/Features/FeatureContainer.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="516"> + <caret line="168" column="41" selection-start-line="168" selection-start-column="41" selection-end-line="168" selection-end-column="41" /> + </state> + </provider> + </entry> <entry file="file://$PROJECT_DIR$/src/SelectQueries.php"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="675"> @@ -447,13 +527,6 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/composer.json"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="259"> - <caret line="19" column="48" lean-forward="true" selection-start-line="19" selection-start-column="48" selection-end-line="19" selection-end-column="48" /> - </state> - </provider> - </entry> <entry file="file://$PROJECT_DIR$/Tests/Unit/Features/QueriesTest.php"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="-102" /> @@ -542,8 +615,8 @@ </entry> <entry file="file://$PROJECT_DIR$/src/Select/SelectQueryBuilder.php"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="313"> - <caret line="51" column="14" selection-start-line="51" selection-start-column="14" selection-end-line="51" selection-end-column="14" /> + <state relative-caret-position="298"> + <caret line="50" column="14" selection-start-line="50" selection-start-column="14" selection-end-line="50" selection-end-column="14" /> </state> </provider> </entry> @@ -554,10 +627,37 @@ </state> </provider> </entry> + <entry file="file://$PROJECT_DIR$/vendor/phpunit/phpunit/phpunit"> + <provider selected="true" editor-type-id="text-editor" /> + </entry> + <entry file="file://$PROJECT_DIR$/vendor/phpunit/phpunit/src/Framework/TestCase.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="159"> + <caret line="797" selection-start-line="797" selection-end-line="797" /> + </state> + </provider> + </entry> <entry file="file://$PROJECT_DIR$/src/Features/FeatureContainer.php"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="695"> - <caret line="162" column="41" selection-start-line="162" selection-start-column="41" selection-end-line="162" selection-end-column="41" /> + <state relative-caret-position="227"> + <caret line="143" column="38" selection-start-line="143" selection-start-column="38" selection-end-line="143" selection-end-column="38" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/composer.json"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="212"> + <caret line="19" column="48" lean-forward="true" selection-start-line="19" selection-start-column="48" selection-end-line="19" selection-end-column="48" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/README.md"> + <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]"> + <state split_layout="FIRST"> + <first_editor relative-caret-position="323"> + <caret line="73" column="3" selection-start-line="73" selection-start-column="3" selection-end-line="73" selection-end-column="3" /> + </first_editor> + <second_editor /> </state> </provider> </entry> diff --git a/README.md b/README.md index 993b6b4..e836404 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,6 @@ $entries = CalderaFormsQueries()->selectByFieldValue( 'email', 'delete@please.eu $entries = CalderaFormsQueries()->selectByFieldValue( 'email', 'delete@please.eu', true, 5, 50 ); ``` - ## Development ### Install Requires git and Composer diff --git a/Tests/Unit/Select/EntryTest.php b/Tests/Unit/Select/EntryTest.php index f8192fa..bb6ac1c 100644 --- a/Tests/Unit/Select/EntryTest.php +++ b/Tests/Unit/Select/EntryTest.php @@ -25,22 +25,22 @@ class EntryTest extends TestCase $this->assertEquals($expectedSql, $actualSql); } - /** - * Test query by form ID - * - * @covers Entry::queryByFormsId() - * @covers \calderawp\CalderaFormsQuery\addPagination::() - */ - public function testQueryByFormsIdPaginated() - { - $expectedSql = "SELECT `{$this->entryTableName()}`.* FROM `wp_cf_form_entries` WHERE (`{$this->entryTableName()}`.`form_id` = 'cf12345') LIMIT '26', '50'"; - $actualSql = $this - ->entryGeneratorFactory() - ->queryByFormsId('cf12345') - ->addPagination(2,25 ) - ->getPreparedSql(); - $this->assertEquals($expectedSql, $actualSql); - } + /** + * Test query by form ID + * + * @covers Entry::queryByFormsId() + * @covers \calderawp\CalderaFormsQuery\addPagination::() + */ + public function testQueryByFormsIdPaginated() + { + $expectedSql = "SELECT `{$this->entryTableName()}`.* FROM `wp_cf_form_entries` WHERE (`{$this->entryTableName()}`.`form_id` = 'cf12345') LIMIT '26', '50'"; + $actualSql = $this + ->entryGeneratorFactory() + ->queryByFormsId('cf12345') + ->addPagination(2, 25) + ->getPreparedSql(); + $this->assertEquals($expectedSql, $actualSql); + } /** * Test query by entry ID diff --git a/Tests/Unit/SelectQueriesTest.php b/Tests/Unit/SelectQueriesTest.php index e5cb4c7..0ef695d 100644 --- a/Tests/Unit/SelectQueriesTest.php +++ b/Tests/Unit/SelectQueriesTest.php @@ -45,6 +45,4 @@ class SelectQueriesTest extends TestCase $queries = $this->selectQueriesFactory(); $this->assertTrue(is_array($queries->getResults("SELECT `roy` FROM sivan WHERE mike = 'roy'"))); } - - } diff --git a/src/Features/FeatureContainer.php b/src/Features/FeatureContainer.php index a979f2a..a539192 100644 --- a/src/Features/FeatureContainer.php +++ b/src/Features/FeatureContainer.php @@ -20,119 +20,118 @@ use calderawp\CalderaFormsQuery\SelectQueries; class FeatureContainer extends Container { - /** - * @var ServiceContainer - */ - protected $serviceContainer; - /** - * @var \wpdb - */ - protected $wpdb; + /** + * @var ServiceContainer + */ + protected $serviceContainer; + /** + * @var \wpdb + */ + protected $wpdb; - /** - * FeatureContainer constructor. - * @param ServiceContainer $serviceContainer - * @param \wpdb $wpdb - */ - public function __construct(ServiceContainer $serviceContainer, \wpdb $wpdb) - { - $this->serviceContainer = $serviceContainer; - $this->wpdb = $wpdb; - $this->bindServices(); - } + /** + * FeatureContainer constructor. + * @param ServiceContainer $serviceContainer + * @param \wpdb $wpdb + */ + public function __construct(ServiceContainer $serviceContainer, \wpdb $wpdb) + { + $this->serviceContainer = $serviceContainer; + $this->wpdb = $wpdb; + $this->bindServices(); + } - /** - * Bind services to service container - */ - protected function bindServices() - { - //@TODO move these to service provider classes - $this->serviceContainer->singleton(MySqlBuilder::class, function () { - return new MySqlBuilder(); - }); + /** + * Bind services to service container + */ + protected function bindServices() + { + //@TODO move these to service provider classes + $this->serviceContainer->singleton(MySqlBuilder::class, function () { + return new MySqlBuilder(); + }); - $this->serviceContainer->bind(SelectQueries::class, function () { - //@TODO Factory - return new SelectQueries( - new EntrySelect( - $this->getBuilder(), - $this->entryTableName() - ), - new EntryValueSelect( - $this->getBuilder(), - $this->entryValueTableName() - ), - $this->wpdb - ); - }); + $this->serviceContainer->bind(SelectQueries::class, function () { + //@TODO Factory + return new SelectQueries( + new EntrySelect( + $this->getBuilder(), + $this->entryTableName() + ), + new EntryValueSelect( + $this->getBuilder(), + $this->entryValueTableName() + ), + $this->wpdb + ); + }); - $this->serviceContainer->bind(DeleteQueries::class, function () { - //@TODO Factory - return new DeleteQueries( - new EntryDelete( - $this->getBuilder(), - $this->entryTableName() - ), - new EntryValuesDelete( - $this->getBuilder(), - $this->entryValueTableName() - ), - $this->wpdb - ); - }); + $this->serviceContainer->bind(DeleteQueries::class, function () { + //@TODO Factory + return new DeleteQueries( + new EntryDelete( + $this->getBuilder(), + $this->entryTableName() + ), + new EntryValuesDelete( + $this->getBuilder(), + $this->entryValueTableName() + ), + $this->wpdb + ); + }); - $this->serviceContainer->singleton(Queries::class, function () { - return new Queries( - $this - ->serviceContainer - ->make(SelectQueries::class), - $this - ->serviceContainer - ->make(DeleteQueries::class) - ); - }); - } + $this->serviceContainer->singleton(Queries::class, function () { + return new Queries( + $this + ->serviceContainer + ->make(SelectQueries::class), + $this + ->serviceContainer + ->make(DeleteQueries::class) + ); + }); + } - /** - * Get MySQL builder - * - * @return MySqlBuilder - */ - public function getBuilder() - { - return $this - ->serviceContainer - ->make(MySqlBuilder::class); - } + /** + * Get MySQL builder + * + * @return MySqlBuilder + */ + public function getBuilder() + { + return $this + ->serviceContainer + ->make(MySqlBuilder::class); + } - /** - * Get query runner - * - * @return Queries - */ - public function getQueries() - { - return $this - ->serviceContainer - ->make(Queries::class); - } + /** + * Get query runner + * + * @return Queries + */ + public function getQueries() + { + return $this + ->serviceContainer + ->make(Queries::class); + } - /** - * Select all entries and entry values by user ID - * - * @param int $userId - * @return array - */ - public function selectByUserId($userId) - { - $query = $this - ->getQueries() - ->entrySelect() - ->queryByUserId($userId); - return $this->collectResults($this->select($query)); - } + /** + * Select all entries and entry values by user ID + * + * @param int $userId + * @return array + */ + public function selectByUserId($userId) + { + $query = $this + ->getQueries() + ->entrySelect() + ->queryByUserId($userId); + return $this->collectResults($this->select($query)); + } -<<<<<<< HEAD /** * Find all entries that have or do not have field with a slug and value * @@ -142,13 +141,13 @@ class FeatureContainer extends Container * * @return array */ - public function selectByFieldValue($fieldSlug, $fieldValue, $have = true, $page = 1, $limit = 25 ) + public function selectByFieldValue($fieldSlug, $fieldValue, $have = true, $page = 1, $limit = 25) { $type = $have ? 'equals' : 'notEquals'; $queryForEntryValues = $this ->getQueries() ->entryValuesSelect() - ->addPagination($page,$limit) + ->addPagination($page, $limit) ->queryByFieldValue($fieldSlug, $fieldValue, $type, 'AND', [ 'entry_id' ]); @@ -161,211 +160,180 @@ class FeatureContainer extends Container $queryForValues = $this ->getQueries() ->entrySelect() - ->addPagination($page,$limit) - ->queryByEntryIds($results); -======= - /** - * Select entries by form ID - * - * @param string $formId ID of form to select - * - * @param bool $addValues Optional Add entry values? Default is true. - * @return array - */ - public function selectByFormId($formId, $addValues = true ) - { - $query = $this - ->getQueries() - ->entrySelect() - ->queryByFormsId($formId); - return $this->collectResults($this->select($query), $addValues); - - } ->>>>>>> 527d79ed169861a0db38e730e1ed8f374b533d04 - - /** - * Find all entries that have or do not have field with a slug and value - * - * @param string $fieldSlug Field slug - * @param string $fieldValue Field value - * @param bool $have Optional. Default: true. If true query is for fields with this value - * - * @return array - */ - public function selectByFieldValue($fieldSlug, $fieldValue, $have = true) - { - $type = $have ? 'equals' : 'notEquals'; - $queryForEntryValues = $this - ->getQueries() - ->entryValuesSelect() - ->queryByFieldValue($fieldSlug, $fieldValue, $type, 'AND', [ - 'entry_id' - ]); - $results = $this->select($queryForEntryValues); - if (empty($results) || 0 >= count($results)) { - return []; - } - $results = $this->reduceResultsToEntryId($results); + ->addPagination($page, $limit) + ->queryByEntryIds($results); - $queryForValues = $this - ->getQueries() - ->entrySelect() - ->queryByEntryIds($results); + return $this->collectResults($this->select($queryForValues)); + } - return $this->collectResults($this->select($queryForValues)); - } + /** + * Select entries by form ID + * + * @param string $formId ID of form to select + * + * @param bool $addValues Optional Add entry values? Default is true. + * @return array + */ + public function selectByFormId($formId, $addValues = true) + { + $query = $this + ->getQueries() + ->entrySelect() + ->queryByFormsId($formId); + return $this->collectResults($this->select($query), $addValues); + } - /** - * Delete all entry data, including field values for a collection of entries - * - * @param array $entryIds Entry Ids to delete - * @return $this - */ - public function deleteByEntryIds(array $entryIds) - { - $this->delete( - $this - ->getQueries() - ->entryDelete() - ->deleteByEntryIds($entryIds) - ); - $this->delete( - $this->getQueries() - ->entryValueDelete() - ->deleteByEntryIds($entryIds) - ); + /** + * Delete all entry data, including field values for a collection of entries + * + * @param array $entryIds Entry Ids to delete + * @return $this + */ + public function deleteByEntryIds(array $entryIds) + { + $this->delete( + $this + ->getQueries() + ->entryDelete() + ->deleteByEntryIds($entryIds) + ); + $this->delete( + $this->getQueries() + ->entryValueDelete() + ->deleteByEntryIds($entryIds) + ); - 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) - ); - } - } + /** + * 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 - */ - protected function entryValueTableName() - { - return "{$this->wpdb->prefix}cf_form_entry_values"; - } + /** + * @return string + */ + protected function entryValueTableName() + { + return "{$this->wpdb->prefix}cf_form_entry_values"; + } - /** - * @return string - */ - protected function entryTableName() - { - return "{$this->wpdb->prefix}cf_form_entries"; - } + /** + * @return string + */ + protected function entryTableName() + { + return "{$this->wpdb->prefix}cf_form_entries"; + } - /** - * Collect results using Caldera_Forms_Entry_Entry and Caldera_Forms_Entry_Field to represent values - * - * @param \stdClass[] $entriesValues - * @param bool $addValues Optional Add entry values? Default is true. - * @return array - */ - private function collectResults($entriesValues, $addValues = true) - { - $results = []; - foreach ($entriesValues as $entry) { - $entry = new \Caldera_Forms_Entry_Entry($entry); - $query = $this - ->getQueries() - ->entryValuesSelect() - ->queryByEntryId($entry->id); + /** + * Collect results using Caldera_Forms_Entry_Entry and Caldera_Forms_Entry_Field to represent values + * + * @param \stdClass[] $entriesValues + * @param bool $addValues Optional Add entry values? Default is true. + * @return array + */ + private function collectResults($entriesValues, $addValues = true) + { + $results = []; + foreach ($entriesValues as $entry) { + $entry = new \Caldera_Forms_Entry_Entry($entry); + $query = $this + ->getQueries() + ->entryValuesSelect() + ->queryByEntryId($entry->id); - $entryValuesPrepared = []; - if ($addValues) { - $entriesValues = $this->select($query); - $entryValuesPrepared = $this->collectEntryValues($entriesValues); - } - $results[] = [ - 'entry' => $entry, - 'values' => $entryValuesPrepared - ]; - } - return $results; - } + $entryValuesPrepared = []; + if ($addValues) { + $entriesValues = $this->select($query); + $entryValuesPrepared = $this->collectEntryValues($entriesValues); + } + $results[] = [ + 'entry' => $entry, + 'values' => $entryValuesPrepared + ]; + } + return $results; + } - /** - * Collect entry values as Caldera_Forms_Entry_Field objects - * - * @param \stdClass[] $entriesValues - * @return array - */ - private function collectEntryValues($entriesValues): array - { - $entryValuesPrepared = []; - if (!empty($entriesValues)) { - foreach ($entriesValues as $entryValue) { - $entryValuesPrepared[] = new \Caldera_Forms_Entry_Field($entryValue); - } - } - return $entryValuesPrepared; - } + /** + * Collect entry values as Caldera_Forms_Entry_Field objects + * + * @param \stdClass[] $entriesValues + * @return array + */ + private function collectEntryValues($entriesValues): array + { + $entryValuesPrepared = []; + if (!empty($entriesValues)) { + foreach ($entriesValues as $entryValue) { + $entryValuesPrepared[] = new \Caldera_Forms_Entry_Field($entryValue); + } + } + return $entryValuesPrepared; + } - /** - * Do a select query - * - * @param SelectQueryBuilder $query - * @return \stdClass[] - */ - private function select(SelectQueryBuilder $query) - { - return $this - ->getQueries() - ->select($query); - } + /** + * Do a select query + * + * @param SelectQueryBuilder $query + * @return \stdClass[] + */ + private function select(SelectQueryBuilder $query) + { + return $this + ->getQueries() + ->select($query); + } - /** - * Do a delete query - * - * @param DeleteQueryBuilder $query - * @return \stdClass[] - */ - private function delete(DeleteQueryBuilder $query) - { - return $this-> - getQueries() - ->delete($query); - } + /** + * Do a delete query + * + * @param DeleteQueryBuilder $query + * @return \stdClass[] + */ + private function delete(DeleteQueryBuilder $query) + { + return $this-> + getQueries() + ->delete($query); + } - /** - * @param $results - * @return array - */ - private function reduceResultsToEntryId($results, $colum = 'entry_id') - { - foreach ($results as &$result) { - $result = $result->$colum; - } - return $results; - } + /** + * @param $results + * @return array + */ + private function reduceResultsToEntryId($results, $colum = 'entry_id') + { + foreach ($results as &$result) { + $result = $result->$colum; + } + return $results; + } } diff --git a/src/Select/DoesSelectQuery.php b/src/Select/DoesSelectQuery.php index 9262a19..4b8b929 100644 --- a/src/Select/DoesSelectQuery.php +++ b/src/Select/DoesSelectQuery.php @@ -14,5 +14,4 @@ interface DoesSelectQuery * @return Select */ public function getSelectQuery(); - } diff --git a/src/Select/DoesSelectQueryByEntryId.php b/src/Select/DoesSelectQueryByEntryId.php index 231a72e..6867b4a 100644 --- a/src/Select/DoesSelectQueryByEntryId.php +++ b/src/Select/DoesSelectQueryByEntryId.php @@ -25,5 +25,4 @@ interface DoesSelectQueryByEntryId * @return string */ public function getEntryIdColumn(); - } diff --git a/src/Select/SelectQueryBuilder.php b/src/Select/SelectQueryBuilder.php index dcec06c..c64cb67 100644 --- a/src/Select/SelectQueryBuilder.php +++ b/src/Select/SelectQueryBuilder.php @@ -28,7 +28,6 @@ abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuer public function queryByEntryId($entryId) { return $this->is($this->getEntryIdColumn(), $entryId); - } /** @@ -43,21 +42,21 @@ abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuer return $this; } - /** - * Add pagination to a query - * - * @param int $page What page of query - * @param int $limit How many per page - * - * @return $this - */ - public function addPagination( $page, $limit = 25 ) - { - $start = 1 + ( $page * $limit) - $limit; - $last = $page * $limit; - $this->getCurrentQuery()->limit((int)$start, (int)$last ); - return $this; - } + /** + * Add pagination to a query + * + * @param int $page What page of query + * @param int $limit How many per page + * + * @return $this + */ + public function addPagination($page, $limit = 25) + { + $start = 1 + ( $page * $limit) - $limit; + $last = $page * $limit; + $this->getCurrentQuery()->limit((int)$start, (int)$last); + return $this; + } /** * @return Select diff --git a/src/Select/ValueSelectQueryBuilder.php b/src/Select/ValueSelectQueryBuilder.php index 4b6e176..2894d70 100644 --- a/src/Select/ValueSelectQueryBuilder.php +++ b/src/Select/ValueSelectQueryBuilder.php @@ -3,7 +3,6 @@ namespace calderawp\CalderaFormsQuery\Select; - abstract class ValueSelectQueryBuilder extends SelectQueryBuilder implements DoesSelectQueryByValue { -- GitLab