You are here

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 . "'");
  }
}