This library provides for developer-friendly ways to query for or delete Caldera Forms entry data.
- To provide the types of queries we need for reporting and deleting data in order to add GDPR compliance to Caldera Forms
- To provide the types of queries we need for improving Caldera Forms features such as entry viewer, entry export, entry editing and Connected Forms.
composer require calderawp/caldera-forms-query
- WordPress - tested with 4.8, latest and trunk
- PHP 5.6+ - tested with PHP 7.1 and 7.2
- Caldera Forms 1.6.0+ - tested with Caldera Forms 1.6.1 beta 1
- Works
- Does not yet select/delete by date range
- Prepared SQL needs to be sanitized better.
/**
* Examples of simple queries
*
* Using the class: \calderawp\CalderaFormsQuery\Features\FeatureContainer
* Via the static accessor function: calderawp\CalderaFormsQueries\CalderaFormsQueries()
*/
/** First make the function usable without a full namespace */
use function calderawp\CalderaFormsQueries\CalderaFormsQueries;
/** Do Some Queries */
//Select all data by user ID
$entries = CalderaFormsQueries()->selectByUserId(42);
//Select all entries that have a field whose slug is "email" and the value of that field's value is "[email protected]"
$entries = CalderaFormsQueries()->selectByFieldValue( 'email', '[email protected]' );
//Select all entries that do not have field whose slug is "size" and the value of that field's value is "big"
$entries = CalderaFormsQueries()->selectByFieldValue( 'size', 'big', false );
//Delete all data by Entry ID
CalderaFormsQueries()->deleteByEntryIds([1,1,2,3,5,8,42]);
//Delete all data by User ID
CalderaFormsQueries()->deleteByUserId(42);
The selectByFieldValue feature method defaults to limiting queries to 25. You can set the page and limit with the 4th & 5th arguments.
/**
* Examples of simple queries
*
* Using the class: \calderawp\CalderaFormsQuery\Features\FeatureContainer
* Via the static accessor function: calderawp\CalderaFormsQueries\CalderaFormsQueries()
*/
/** First make the function usable without a full namespace */
use function calderawp\CalderaFormsQueries\CalderaFormsQueries;
/** Do Some Queries */
//Select all entries that have a field whose slug is "email" and the value of that field's value is "[email protected]"
//The first 25 entries
$entries = CalderaFormsQueries()->selectByFieldValue( 'email', '[email protected]' );
//The second 25 entries
$entries = CalderaFormsQueries()->selectByFieldValue( 'email', '[email protected]', true, 2 );
//Get 5th page, with 50 results per page
$entries = CalderaFormsQueries()->selectByFieldValue( 'email', '[email protected]', true, 5, 50 );
The feature container provides helper methods that allow for simple queries like those listed above. It also exposes the underlying query generators.
You can access any of the generators using the getQueries()
method. For example:
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries();
$fieldValue = '[email protected]';
$formId = 'CF5afb00e97d698';
$count = Caldera_Forms_Entry_Bulk::count($formId );
$entrySelector = $featureContainer
->getQueries()
->entrySelect();
This is a more complete example showing a selection of entry values where the field with the slug primary_email
is [email protected]
and the field with the slug of first_name
is Mike
. It is also using the is()
method to add WHERE statements, as well as the addPagination()
method to query for the second page of results with 50 results per page.
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries();
$entrySelector = $featureContainer
->getQueries()
->entrySelect()
->is( 'primary_email', '[email protected]' )
->is( 'first_name', 'Mike' )
->addPagination(2,50 );
This example shows selection of all entry values where the entry ID is in an array of entry IDs.
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries();
$entrySelector = $featureContainer
->getQueries()
->entrySelect()
->in( 'entry_id', [ 42, 3 ] );
All query generators extend the \calderawp\CalderaFormsQuery\QueryBuilder
class and impairment \calderawp\CalderaFormsQuery\CreatesSqlQueries
.
Query generators are responsible for creating SQL queries. They do not perform sequel queries.
Select query generators extend \calderawp\CalderaFormsQuery\Select\SelectQueryBuilder
and impliment \calderawp\CalderaFormsQuery\Select\DoesSelectQuery
and \calderawp\CalderaFormsQuery\Select\DoesSelectQueryByEntryId
.
in()
The getQueries()
method of the FeatureContainer
returns a calderawp\CalderaFormsQuery\Features\Queries
instance. This provides us with a select
method when passed a SelectQueryBuilder
returns an array of stdClass
object of results.
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries();
$entryValueSelect = $featureContainer
->getQueries()
->entryValuesSelect()
->is( 'size', 'large' );
$featureContainer->getQueries()->select( $entryValueSelect );
You can also access the generated SQL as a string.
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries();
$sql = $featureContainer
->getQueries()
->entryValuesSelect()
->is( 'size', 'large' )
->getPreparedSql();
The Queries
class also has a delete
method we can pass a DeleteQueryBuilder
to perform a DELETE query against the database.
Requires git and Composer
git clone [email protected]:calderawp/caldera-forms-query.git
cd caldera-forms-query
composer install
A local development environment is included, and provided. It is used for integration tests. Requires Composer, Docker and Docker Compose.
- Install Local Environment And WordPress "Unit" Test Suite
composer wp-install
You should know have WordPress at http://localhost:8888/
- (re)Start Server: Once server is installed, you can start it again
composer wp-start
Follow the steps above to create local development environment, then you can use the commands listed in the next section.
Run these commands from the plugin's root directory.
- Run All Tests and Code Sniffs and Fixes
composer tests
- Run Unit Tests
composer unit-tests
- Run WordPress Integration Tests
composer wp-tests
- Fix All Code Formatting
composer formatting
For now, this library is dependent on Caldera Forms and WordPress (for \WPDB
.) This will change, possibly with breaking changes, when caldera-interop is integrated with this tool.
Copyright 2018 CalderaWP LLC. License: GPL v2 or later.