You are here

function _scanner_get_all_tables_map in Search and Replace Scanner 5.2

Same name and namespace in other branches
  1. 6 scanner.module \_scanner_get_all_tables_map()
  2. 7 scanner.module \_scanner_get_all_tables_map()

Get all text fields. This is all very fragle based on how CCK stores fields. Works for CCK 1.6.

Return value

map of fields and tables.

2 calls to _scanner_get_all_tables_map()
scanner_admin_form in ./scanner.module
Search and Replace Settings form.
_scanner_get_selected_tables_map in ./scanner.module
Get the fields that have been selected for scanning.

File

./scanner.module, line 1032
Search and Replace Scanner - works on all nodes text content.

Code

function _scanner_get_all_tables_map() {

  //note, each array in the multidim array that is returned should be in the

  // following order: type, field, table.

  //this ensures that we can use the sort() function to easily sort the array

  // based on the nodetype.

  //build list of title, body, teaser fields for all node types:
  $ntypes = node_get_types();
  foreach ($ntypes as $type) {
    if ($type->has_title) {
      $tables_map[] = array(
        'type' => $type->type,
        'field' => 'title',
        'table' => 'node_revisions',
      );
    }
    if ($type->has_body) {
      $tables_map[] = array(
        'type' => $type->type,
        'field' => 'body',
        'table' => 'node_revisions',
      );
    }
    $tables_map[] = array(
      'type' => $type->type,
      'field' => 'teaser',
      'table' => 'node_revisions',
    );
  }

  //now build list of CCK-based text fields:
  $results = db_query("SELECT nfi.field_name, nfi.type_name, nf.db_storage " . "FROM {node_field_instance} nfi INNER JOIN {node_field} nf USING (field_name) " . "WHERE nfi.widget_type='text'");
  while ($field = db_fetch_array($results)) {
    if ($field['db_storage']) {
      $table = 'content_type_' . $field['type_name'];
    }
    else {
      $table = 'content_' . $field['field_name'];
    }
    $tables_map[] = array(
      // Modify to match current CCK storage rules.
      'type' => $field['type_name'],
      'field' => $field['field_name'] . '_value',
      'table' => $table,
    );
  }
  return $tables_map;
}