You are here

function getlocations_location_taxonomize_bulk_taxonomize_op in Get Locations 7

Same name and namespace in other branches
  1. 7.2 modules/getlocations_location_taxonomize/getlocations_location_taxonomize.module \getlocations_location_taxonomize_bulk_taxonomize_op()

Runs the bulk taxonomize operation

File

modules/getlocations_location_taxonomize/getlocations_location_taxonomize.module, line 137
getlocations_location_taxonomize.module @author Bob Hutchinson http://drupal.org/user/52366 @copyright GNU GPL

Code

function getlocations_location_taxonomize_bulk_taxonomize_op($form_state, &$context) {

  // initialize progress, max, and current if this is the first iteration
  if (!isset($context['sandbox']['progress'])) {
    $field_refs = array();

    // get all fields
    $fields = field_info_fields();

    // take out all non-getlocations_fields fields
    foreach ($fields as $field => $data) {
      if ($data['type'] != 'getlocations_fields') {
        unset($fields[$field]);
      }
    }

    // collect references to all the fields for which taxonomize is enabled
    foreach ($fields as $field) {
      foreach ($field['bundles'] as $entity => $bundles) {
        foreach ($bundles as $bundle) {
          $instance = field_info_instance($entity, $field['field_name'], $bundle);
          if ($instance['widget']['settings']['location_taxonomize'] == 1) {
            $field_refs[] = array(
              $entity,
              $bundle,
              $field['field_name'],
            );
          }
        }
      }
    }

    // collect node ids
    $final = array();
    $count = 0;
    foreach ($field_refs as $field) {
      $e_type = $field[0];
      $bundle = $field[1];
      $field_name = $field[2];
      $replace = array(
        ':etype' => $e_type,
        ':bundle' => $bundle,
      );
      $table = 'field_data_' . $field_name;
      $result = db_query("SELECT entity_id FROM {$table} WHERE entity_type = :etype AND bundle = :bundle ORDER BY entity_id ASC", $replace);
      $result_array = $result
        ->fetchAllAssoc('entity_id');
      foreach ($result_array as $e) {
        if ($e_type == 'node') {
          $id = $e->entity_id;
          $final[$id][] = $field_name;
          $count++;
        }
      }
    }
    $context['sandbox']['progress'] = 0;
    $context['sandbox']['max'] = $count;
    $context['sandbox']['current'] = 0;
    $context['results']['added'] = 0;
    $context['results']['processed'] = 0;
    $context['sandbox']['fields'] = $final;
    if ($count == 0) {
      return;
    }
  }

  // maximum 10 addresses per function iteration
  $limit = 10;

  // iterate through the next group of addresses
  $i = 0;
  $saved = 0;
  $taxonomize = array();
  if (!empty($context['sandbox']['fields'])) {
    foreach ($context['sandbox']['fields'] as $nid => $fields) {
      $node = node_load($nid);
      foreach ($fields as $field) {
        $items = field_get_items('node', $node, $field);
        foreach ($items as $address) {

          // Add the country name

          #$address['country_name'] = location_taxonomize_get_country_name($address['country']);
          $taxonomize[$nid][] = $address;
        }
        $i++;
        array_shift($context['sandbox']['fields'][$nid]);
        if (empty($context['sandbox']['fields'][$nid])) {
          unset($context['sandbox']['fields'][$nid]);
        }
      }
      if ($i > $limit) {
        break;
      }
    }

    // taxonomize
    $results = location_taxonomize_taxonomize_bulk($taxonomize);
    $saved = $results['saved'];
  }
  $added = $saved;
  $context['results']['added'] += $added;
  $context['sandbox']['progress'] += $i;
  $context['message'] = t('Processing address');
  $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
  $context['sandbox']['current'] = $context['sandbox']['progress'];
  $context['results']['processed'] = $context['sandbox']['progress'];
}