WooCommerce Code Reference

Segmenter extends Segmenter
in package

Date & time interval and numeric range handling class for Reporting API.

Table of Contents

$all_segment_ids  : array<string|int, mixed>|bool
Array of all segment ids.
$query_args  : array<string|int, mixed>
Query arguments supplied by the user for data store.
$report_columns  : array<string|int, mixed>
SQL definition for each column.
$segment_labels  : array<string|int, mixed>
Array of all segment labels.
__construct()  : mixed
Constructor.
add_intervals_segments()  : mixed
Adds an array of segments to data->intervals object.
get_totals_segments()  : array<string|int, mixed>
Returns an array of segments for totals part of REST response.
assign_segments_to_intervals()  : mixed
Assign segments to time intervals by updating original $intervals array.
fill_in_missing_interval_segments()  : mixed
Adds missing segments to intervals, modifies $data.
fill_in_missing_segments()  : array<string|int, mixed>
Adds zeroes for segments not present in the data selection.
get_all_segments()  : array<string|int, mixed>
Return all segment ids for given segmentby query parameter.
get_order_related_intervals_segments()  : array<string|int, mixed>
Calculate segments for intervals query where the segmenting property is bound to order (e.g. coupon or customer type).
get_order_related_segments()  : array<string|int, mixed>
Calculate segments for segmenting property bound to order (e.g. coupon or customer type).
get_order_related_totals_segments()  : array<string|int, mixed>
Calculate segments for totals query where the segmenting property is bound to order (e.g. coupon or customer type).
get_product_related_intervals_segments()  : array<string|int, mixed>
Calculate segments for intervals where the segmenting property is bound to product (e.g. category, product_id, variation_id).
get_product_related_segments()  : array<string|int, mixed>
Calculate segments for segmenting property bound to product (e.g. category, product_id, variation_id).
get_product_related_totals_segments()  : array<string|int, mixed>
Calculate segments for totals where the segmenting property is bound to product (e.g. category, product_id, variation_id).
get_segment_labels()  : array<string|int, mixed>
Return all segment labels for given segmentby query parameter.
get_segment_selections_order_level()  : array<string|int, mixed>
Returns column => query mapping to be used for order-related product-level segmenting query (e.g. orders_count when segmented by category).
get_segment_selections_product_level()  : array<string|int, mixed>
Returns column => query mapping to be used for product-related product-level segmenting query (e.g. coupon discount amount for product X when segmenting by product id or category).
get_segments()  : array<string|int, mixed>
Return array of segments formatted for REST response.
merge_segment_intervals_results()  : array<string|int, mixed>
Merges segmented results for intervals response part.
merge_segment_totals_results()  : array<string|int, mixed>
Merges segmented results for totals response part.
prepare_selections()  : string
Filters definitions for SELECT clauses based on query_args and joins them into one string usable in SELECT clause.
reformat_intervals_segments()  : array<string|int, mixed>
Update row-level db result for segments in 'intervals' section to the format used for output.
reformat_totals_segments()  : array<string|int, mixed>
Update row-level db result for segments in 'totals' section to the format used for output.
segment_selections_orders()  : array<string|int, mixed>
Returns column => query mapping to be used for order-level segmenting query (e.g. discount amount when segmented by coupons).
set_all_segments()  : void
Fetches all segment ids from db and stores it for later use.
segment_cmp()  : string
Compares two report data objects by pre-defined object property and ASC/DESC ordering.

Properties

Methods

__construct()

Constructor.

public __construct(array<string|int, mixed> $query_args, array<string|int, mixed> $report_columns) : mixed
Parameters
$query_args : array<string|int, mixed>

Query arguments supplied by the user for data store.

$report_columns : array<string|int, mixed>

Report columns lookup from data store.

Return values
mixed

add_intervals_segments()

Adds an array of segments to data->intervals object.

public add_intervals_segments(stdClass &$data, array<string|int, mixed> $intervals_query, string $table_name) : mixed
Parameters
$data : stdClass

Data object representing the REST response.

$intervals_query : array<string|int, mixed>

Intervals SQL query parameters.

$table_name : string

Name of the SQL table that is the main order stats table.

Return values
mixed

get_totals_segments()

Returns an array of segments for totals part of REST response.

public get_totals_segments(array<string|int, mixed> $query_params, string $table_name) : array<string|int, mixed>
Parameters
$query_params : array<string|int, mixed>

Totals SQL query parameters.

$table_name : string

Name of the SQL table that is the main order stats table.

Return values
array<string|int, mixed>

assign_segments_to_intervals()

Assign segments to time intervals by updating original $intervals array.

protected assign_segments_to_intervals(array<string|int, mixed> &$intervals, array<string|int, mixed> $intervals_segments) : mixed
Parameters
$intervals : array<string|int, mixed>

Result array from intervals SQL query.

$intervals_segments : array<string|int, mixed>

Result array from interval segments SQL query.

Return values
mixed

fill_in_missing_interval_segments()

Adds missing segments to intervals, modifies $data.

protected fill_in_missing_interval_segments(stdClass &$data) : mixed
Parameters
$data : stdClass

Response data.

Return values
mixed

fill_in_missing_segments()

Adds zeroes for segments not present in the data selection.

protected fill_in_missing_segments(array<string|int, mixed> $segments) : array<string|int, mixed>
Parameters
$segments : array<string|int, mixed>

Array of segments from the database for given data points.

Return values
array<string|int, mixed>

get_all_segments()

Return all segment ids for given segmentby query parameter.

protected get_all_segments() : array<string|int, mixed>
Return values
array<string|int, mixed>

Calculate segments for intervals query where the segmenting property is bound to order (e.g. coupon or customer type).

protected get_order_related_intervals_segments(string $segmenting_select, string $segmenting_from, string $segmenting_where, string $segmenting_groupby, string $table_name, array<string|int, mixed> $intervals_query) : array<string|int, mixed>
Parameters
$segmenting_select : string

SELECT part of segmenting SQL query.

$segmenting_from : string

FROM part of segmenting SQL query.

$segmenting_where : string

WHERE part of segmenting SQL query.

$segmenting_groupby : string

GROUP BY part of segmenting SQL query.

$table_name : string

Name of SQL table which is the stats table for orders.

$intervals_query : array<string|int, mixed>

Array of SQL clauses for intervals query.

Return values
array<string|int, mixed>

Calculate segments for segmenting property bound to order (e.g. coupon or customer type).

protected get_order_related_segments(string $type, string $segmenting_select, string $segmenting_from, string $segmenting_where, string $segmenting_groupby, string $table_name, array<string|int, mixed> $query_params) : array<string|int, mixed>
Parameters
$type : string

Type of segments to return--'totals' or 'intervals'.

$segmenting_select : string

SELECT part of segmenting SQL query.

$segmenting_from : string

FROM part of segmenting SQL query.

$segmenting_where : string

WHERE part of segmenting SQL query.

$segmenting_groupby : string

GROUP BY part of segmenting SQL query.

$table_name : string

Name of SQL table which is the stats table for orders.

$query_params : array<string|int, mixed>

Array of SQL clauses for intervals/totals query.

Return values
array<string|int, mixed>

Calculate segments for totals query where the segmenting property is bound to order (e.g. coupon or customer type).

protected get_order_related_totals_segments(string $segmenting_select, string $segmenting_from, string $segmenting_where, string $segmenting_groupby, string $table_name, array<string|int, mixed> $totals_query) : array<string|int, mixed>
Parameters
$segmenting_select : string

SELECT part of segmenting SQL query.

$segmenting_from : string

FROM part of segmenting SQL query.

$segmenting_where : string

WHERE part of segmenting SQL query.

$segmenting_groupby : string

GROUP BY part of segmenting SQL query.

$table_name : string

Name of SQL table which is the stats table for orders.

$totals_query : array<string|int, mixed>

Array of SQL clauses for intervals query.

Return values
array<string|int, mixed>

Calculate segments for intervals where the segmenting property is bound to product (e.g. category, product_id, variation_id).

protected get_product_related_intervals_segments(array<string|int, mixed> $segmenting_selections, string $segmenting_from, string $segmenting_where, string $segmenting_groupby, string $segmenting_dimension_name, string $table_name, array<string|int, mixed> $intervals_query, string $unique_orders_table) : array<string|int, mixed>
Parameters
$segmenting_selections : array<string|int, mixed>

SELECT part of segmenting SQL query--one for 'product_level' and one for 'order_level'.

$segmenting_from : string

FROM part of segmenting SQL query.

$segmenting_where : string

WHERE part of segmenting SQL query.

$segmenting_groupby : string

GROUP BY part of segmenting SQL query.

$segmenting_dimension_name : string

Name of the segmenting dimension.

$table_name : string

Name of SQL table which is the stats table for orders.

$intervals_query : array<string|int, mixed>

Array of SQL clauses for intervals query.

$unique_orders_table : string

Name of temporary SQL table that holds unique orders.

Return values
array<string|int, mixed>

Calculate segments for segmenting property bound to product (e.g. category, product_id, variation_id).

protected get_product_related_segments(string $type, array<string|int, mixed> $segmenting_selections, string $segmenting_from, string $segmenting_where, string $segmenting_groupby, string $segmenting_dimension_name, string $table_name, array<string|int, mixed> $query_params, string $unique_orders_table) : array<string|int, mixed>
Parameters
$type : string

Type of segments to return--'totals' or 'intervals'.

$segmenting_selections : array<string|int, mixed>

SELECT part of segmenting SQL query--one for 'product_level' and one for 'order_level'.

$segmenting_from : string

FROM part of segmenting SQL query.

$segmenting_where : string

WHERE part of segmenting SQL query.

$segmenting_groupby : string

GROUP BY part of segmenting SQL query.

$segmenting_dimension_name : string

Name of the segmenting dimension.

$table_name : string

Name of SQL table which is the stats table for orders.

$query_params : array<string|int, mixed>

Array of SQL clauses for intervals/totals query.

$unique_orders_table : string

Name of temporary SQL table that holds unique orders.

Return values
array<string|int, mixed>

Calculate segments for totals where the segmenting property is bound to product (e.g. category, product_id, variation_id).

protected get_product_related_totals_segments(array<string|int, mixed> $segmenting_selections, string $segmenting_from, string $segmenting_where, string $segmenting_groupby, string $segmenting_dimension_name, string $table_name, array<string|int, mixed> $totals_query, string $unique_orders_table) : array<string|int, mixed>
Parameters
$segmenting_selections : array<string|int, mixed>

SELECT part of segmenting SQL query--one for 'product_level' and one for 'order_level'.

$segmenting_from : string

FROM part of segmenting SQL query.

$segmenting_where : string

WHERE part of segmenting SQL query.

$segmenting_groupby : string

GROUP BY part of segmenting SQL query.

$segmenting_dimension_name : string

Name of the segmenting dimension.

$table_name : string

Name of SQL table which is the stats table for orders.

$totals_query : array<string|int, mixed>

Array of SQL clauses for totals query.

$unique_orders_table : string

Name of temporary SQL table that holds unique orders.

Return values
array<string|int, mixed>

get_segment_labels()

Return all segment labels for given segmentby query parameter.

protected get_segment_labels() : array<string|int, mixed>
Return values
array<string|int, mixed>

get_segment_selections_order_level()

Returns column => query mapping to be used for order-related product-level segmenting query (e.g. orders_count when segmented by category).

protected get_segment_selections_order_level(string $coupons_lookup_table) : array<string|int, mixed>
Parameters
$coupons_lookup_table : string

Name of SQL table containing the order-level segmenting info.

Return values
array<string|int, mixed>Column => SELECT query mapping.

get_segment_selections_product_level()

Returns column => query mapping to be used for product-related product-level segmenting query (e.g. coupon discount amount for product X when segmenting by product id or category).

protected get_segment_selections_product_level(string $products_table) : array<string|int, mixed>
Parameters
$products_table : string

Name of SQL table containing the product-level segmenting info.

Return values
array<string|int, mixed>Column => SELECT query mapping.

get_segments()

Return array of segments formatted for REST response.

protected get_segments(string $type, array<string|int, mixed> $query_params, string $table_name) : array<string|int, mixed>
Parameters
$type : string

Type of segments to return--'totals' or 'intervals'.

$query_params : array<string|int, mixed>

SQL query parameter array.

$table_name : string

Name of main SQL table for the data store (used as basis for JOINS).

Tags
throws
ParameterException

In case of segmenting by variations, when no parent product is specified.

Return values
array<string|int, mixed>

merge_segment_intervals_results()

Merges segmented results for intervals response part.

protected merge_segment_intervals_results(string $segment_dimension, array<string|int, mixed> $result1, array<string|int, mixed> $result2) : array<string|int, mixed>

E.g. $r1 = array( 0 => array( 'product_id' => 3, 'time_interval' => '2018-12' 'net_amount' => 15, ), ); $r2 = array( 0 => array( 'product_id' => 3, 'time_interval' => '2018-12' 'avg_order_value' => 25, ), );

$merged = array( '2018-12' => array( 'segments' => array( 3 => array( 'segment_id' => 3, 'subtotals' => array( 'net_amount' => 15, 'avg_order_value' => 25, ), ), ), ), );

Parameters
$segment_dimension : string

Name of the segment dimension=key in the result arrays used to match records from result sets.

$result1 : array<string|int, mixed>

Array 1 of segmented figures.

$result2 : array<string|int, mixed>

Array 2 of segmented figures.

Return values
array<string|int, mixed>

merge_segment_totals_results()

Merges segmented results for totals response part.

protected merge_segment_totals_results(string $segment_dimension, array<string|int, mixed> $result1, array<string|int, mixed> $result2) : array<string|int, mixed>

E.g. $r1 = array( 0 => array( 'product_id' => 3, 'net_amount' => 15, ), ); $r2 = array( 0 => array( 'product_id' => 3, 'avg_order_value' => 25, ), );

$merged = array( 3 => array( 'segment_id' => 3, 'subtotals' => array( 'net_amount' => 15, 'avg_order_value' => 25, ) ), );

Parameters
$segment_dimension : string

Name of the segment dimension=key in the result arrays used to match records from result sets.

$result1 : array<string|int, mixed>

Array 1 of segmented figures.

$result2 : array<string|int, mixed>

Array 2 of segmented figures.

Return values
array<string|int, mixed>

prepare_selections()

Filters definitions for SELECT clauses based on query_args and joins them into one string usable in SELECT clause.

protected prepare_selections(array<string|int, mixed> $columns_mapping) : string
Parameters
$columns_mapping : array<string|int, mixed>

Column name -> SQL statememt mapping.

Return values
stringto be used in SELECT clause statements.

reformat_intervals_segments()

Update row-level db result for segments in 'intervals' section to the format used for output.

protected reformat_intervals_segments(array<string|int, mixed> $segments_db_result, string $segment_dimension) : array<string|int, mixed>
Parameters
$segments_db_result : array<string|int, mixed>

Results from the SQL db query for segmenting.

$segment_dimension : string

Name of column used for grouping the result.

Return values
array<string|int, mixed>Reformatted array.

reformat_totals_segments()

Update row-level db result for segments in 'totals' section to the format used for output.

protected reformat_totals_segments(array<string|int, mixed> $segments_db_result, string $segment_dimension) : array<string|int, mixed>
Parameters
$segments_db_result : array<string|int, mixed>

Results from the SQL db query for segmenting.

$segment_dimension : string

Name of column used for grouping the result.

Return values
array<string|int, mixed>Reformatted array.

segment_selections_orders()

Returns column => query mapping to be used for order-level segmenting query (e.g. discount amount when segmented by coupons).

protected segment_selections_orders(string $coupons_lookup_table[, array<string|int, mixed> $overrides = array() ]) : array<string|int, mixed>
Parameters
$coupons_lookup_table : string

Name of SQL table containing the order-level info.

$overrides : array<string|int, mixed> = array()

Array of overrides for default column calculations.

Return values
array<string|int, mixed>Column => SELECT query mapping.

set_all_segments()

Fetches all segment ids from db and stores it for later use.

protected set_all_segments() : void
Return values
void

segment_cmp()

Compares two report data objects by pre-defined object property and ASC/DESC ordering.

private segment_cmp(stdClass $a, stdClass $b) : string
Parameters
$a : stdClass

Object a.

$b : stdClass

Object b.

Return values
string