function getlocations_location_taxonomize_bulk_taxonomize_op in Get Locations 7.2
Same name and namespace in other branches
- 7 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 136 - 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'];
}