You are here

function commerce_reports_patterns_load in Commerce Reporting 7.3

Same name and namespace in other branches
  1. 7.4 modules/patterns/commerce_reports_patterns.batch.inc \commerce_reports_patterns_load()
1 string reference to 'commerce_reports_patterns_load'
commerce_reports_patterns_form_submit in modules/patterns/commerce_reports_patterns.admin.inc

File

modules/patterns/commerce_reports_patterns.batch.inc, line 3

Code

function commerce_reports_patterns_load($min_support, &$context) {
  if (empty($context['sandbox'])) {
    $total_transactions = db_query("SELECT COUNT(order_id) FROM {commerce_order} WHERE status IN ('completed', 'pending')")
      ->fetchField();
    $min_transactions = (int) floor($total_transactions * $min_support);
    $context['results'] = array(
      'total_transactions' => $total_transactions,
      'minimum_transactions' => $min_transactions,
      'frequent_sets' => array(
        1 => array(
          array(
            'prefix' => array(),
            'sets' => array(),
          ),
        ),
      ),
    );
    $context['sandbox']['products'] = db_query('SELECT sku, COUNT(li.line_item_id) AS occurences FROM {commerce_product} p LEFT JOIN {commerce_line_item} li ON p.sku = li.line_item_label GROUP BY sku HAVING occurences >= :min_occurences ORDER BY occurences DESC', array(
      ':min_occurences' => $min_transactions,
    ))
      ->fetchAll();
    $context['sandbox']['progress'] = 0;
    $context['sandbox']['max'] = count($context['sandbox']['products']);
    if (!$context['sandbox']['max']) {
      drupal_set_message(t('The value of your minimum support is too high to include any of the available transactions.'), 'error');
      return;
    }
  }
  $product = $context['sandbox']['products'][$context['sandbox']['progress']];
  if ($product) {
    $context['results']['frequent_sets'][1][0]['sets'][] = array(
      'items' => array(
        $product->sku,
      ),
      'tidlist' => db_query("SELECT DISTINCT order_id FROM {commerce_line_item} WHERE line_item_label = :sku", array(
        ':sku' => $product->sku,
      ))
        ->fetchCol(),
    );
  }
  $context['sandbox']['progress']++;
  if ($context['sandbox']['progress'] < $context['sandbox']['max']) {
    $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
  }
  else {
    if (!count($context['results']['frequent_sets'][1][0]['sets'])) {
      unset($context['results']['frequent_sets'][1]);
    }
  }
}