function farm_quantity_log_query_add_filters in farmOS 7
Helper function for adding joins and filters to a quantity log query.
Parameters
\SelectQuery $query: The query object to alter.
string $measure: The quantity measure to search for (ie: weight).
string $label: The quantity label to search for.
2 calls to farm_quantity_log_query_add_filters()
- farm_quantity_log_asset_query in modules/
farm/ farm_quantity/ farm_quantity_log/ farm_quantity_log.module - Build a query to find logs of an asset that defines a quantity.
- farm_quantity_log_query in modules/
farm/ farm_quantity/ farm_quantity_log/ farm_quantity_log.module - Build a query to find logs that define quantity measurements.
File
- modules/
farm/ farm_quantity/ farm_quantity_log/ farm_quantity_log.module, line 308 - Farm quantity log module.
Code
function farm_quantity_log_query_add_filters(&$query, $measure = NULL, $label = NULL) {
// Ensure that $measure and $label are valid strings, because we use them
// directly in the query's WHERE statements below. This is defensive code.
// See note about views_join_subquery in farm_log_asset_query().
if (!is_null($measure)) {
$measures = farm_quantity_measure_options();
if (!array_key_exists($measure, $measures)) {
$measure = '';
}
}
if (!is_null($label)) {
$label = db_like($label);
}
// Add the log ID field.
$query
->addField('ss_log', 'id');
// Join in the Quantity field collection. Use an inner join to exclude logs
// that do not have quantity field collection attached.
$query
->innerJoin('field_data_field_farm_quantity', 'ss_fdffq', "ss_fdffq.entity_type = 'log' AND ss_fdffq.entity_id = ss_log.id AND ss_fdffq.deleted = 0");
// Filter to only include logs with a matching measure. Use an inner join to
// exclude logs that do not have a measure.
if (!empty($measure)) {
$query
->innerJoin('field_data_field_farm_quantity_measure', 'ss_fdffqm', "ss_fdffqm.entity_id = ss_fdffq.field_farm_quantity_value AND ss_fdffqm.deleted = 0");
$query
->where("ss_fdffqm.field_farm_quantity_measure_value = '" . $measure . "'");
}
// Filter to only include logs with a matching label. Use an inner join to
// exclude logs that do not have a label.
if (!empty($label)) {
$query
->innerJoin('field_data_field_farm_quantity_label', 'ss_fdffql', "ss_fdffql.entity_id = ss_fdffq.field_farm_quantity_value AND ss_fdffql.deleted = 0");
$query
->where("ss_fdffql.field_farm_quantity_label_value = '" . $label . "'");
}
}