, (*1)
This library provides for developer-friendly ways to query for or delete Caldera Forms entry data., (*2)
Why?
Install
composer require calderawp/caldera-forms-query
, (*3)
Requires
- 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
Status
- Works
- Does not yet select/delete by date range
- Prepared SQL needs to be sanitized better.
Usage
Basic Queries
/**
* 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 "delete@please.eu"
$entries = CalderaFormsQueries()->selectByFieldValue( 'email', 'delete@please.eu' );
//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);
Paginated Queries
The selectByFieldValue feature method defaults to limiting queries to 25. You can set the page and limit with the 4th & 5th arguments., (*4)
/**
* 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 "delete@please.eu"
//The first 25 entries
$entries = CalderaFormsQueries()->selectByFieldValue( 'email', 'delete@please.eu' );
//The second 25 entries
$entries = CalderaFormsQueries()->selectByFieldValue( 'email', 'delete@please.eu', true, 2 );
//Get 5th page, with 50 results per page
$entries = CalderaFormsQueries()->selectByFieldValue( 'email', 'delete@please.eu', true, 5, 50 );
Constructing Other Queries
The feature container provides helper methods that allow for simple queries like those listed above. It also exposes the underlying query generators., (*5)
You can access any of the generators using the getQueries()
method. For example:, (*6)
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries();
$fieldValue = 'X@x.com';
$formId = 'CF5afb00e97d698';
$count = Caldera_Forms_Entry_Bulk::count($formId );
$entrySelector = $featureContainer
->getQueries()
->entrySelect();
is()
Helper Method
This is a more complete example showing a selection of entry values where the field with the slug primary_email
is roy@hiroy.club
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., (*7)
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries();
$entrySelector = $featureContainer
->getQueries()
->entrySelect()
->is( 'primary_email', 'roy@hiroy.club' )
->is( 'first_name', 'Mike' )
->addPagination(2,50 );
in()
Helper Method
This example shows selection of all entry values where the entry ID is in an array of entry IDs., (*8)
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries();
$entrySelector = $featureContainer
->getQueries()
->entrySelect()
->in( 'entry_id', [ 42, 3 ] );
Query Generators
All query generators extend the \calderawp\CalderaFormsQuery\QueryBuilder
class and impairment \calderawp\CalderaFormsQuery\CreatesSqlQueries
., (*9)
Query generators are responsible for creating SQL queries. They do not perform sequel queries., (*10)
Select Query Generators
Select query generators extend \calderawp\CalderaFormsQuery\Select\SelectQueryBuilder
and impliment \calderawp\CalderaFormsQuery\Select\DoesSelectQuery
and \calderawp\CalderaFormsQuery\Select\DoesSelectQueryByEntryId
., (*11)
Useful Methods of SelectQueryBuilder
s
SELECT
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., (*12)
$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., (*13)
$featureContainer = \calderawp\CalderaFormsQueries\CalderaFormsQueries();
$sql = $featureContainer
->getQueries()
->entryValuesSelect()
->is( 'size', 'large' )
->getPreparedSql();
DELETE
The Queries
class also has a delete
method we can pass a DeleteQueryBuilder
to perform a DELETE query against the database., (*14)
Development
Install
Requires git and Composer, (*15)
git clone git@github.com:calderawp/caldera-forms-query.git
cd caldera-forms-query
composer install
Local Development Environment
A local development environment is included, and provided. It is used for integration tests. Requires Composer, Docker and Docker Compose., (*16)
- Install Local Environment And WordPress "Unit" Test Suite
composer wp-install
You should know have WordPress at http://localhost:8888/, (*17)
- (re)Start Server: Once server is installed, you can start it again
composer wp-start
Testing
Install
Follow the steps above to create local development environment, then you can use the commands listed in the next section., (*18)
Use
Run these commands from the plugin's root directory., (*19)
- Run All Tests and Code Sniffs and Fixes
- Run Unit Tests
- Run WordPress Integration Tests
- Fix All Code 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., (*20)
Stuff.
Copyright 2018 CalderaWP LLC. License: GPL v2 or later., (*21)