You are here

function filefield_update_3 in FileField 5.2

Same name and namespace in other branches
  1. 6.2 filefield.install \filefield_update_3()

Update to filefield 5.x-2.3: Move the 'show_list' widget setting to the (inverse) 'force_list' field setting.

File

./filefield.install, line 40

Code

function filefield_update_3() {
  $ret = array();
  include_once drupal_get_path('module', 'content') . '/content.module';
  include_once drupal_get_path('module', 'content') . '/content_admin.inc';
  $fields = content_fields();
  foreach ($fields as $field) {
    switch ($field['type']) {
      case 'file':
        $result = db_query("SELECT * FROM {node_field_instance} WHERE field_name = '%s'", $field['field_name']);
        while ($instance = db_fetch_object($result)) {
          $widget_settings = unserialize($instance->widget_settings);
          if (isset($widget_settings['show_list'])) {
            $show_list = $widget_settings['show_list'];
            unset($widget_settings['show_list']);

            // write the widget settings without 'show_list' to the instance
            $ret[] = update_sql("UPDATE {node_field_instance}\n               SET widget_settings = '" . serialize($widget_settings) . "'\n               WHERE field_name = '" . $field['field_name'] . "'\n               AND type_name = '" . $instance->type_name . "'");

            // write the field settings with the new $force_list to the global settings
            $global = db_result(db_query("SELECT * FROM {node_field} WHERE field_name = '%s'", $field['field_name']));
            $field_settings = unserialize($global->global_settings);
            $field_settings['force_list'] = $show_list == 0 ? 1 : 0;
            $ret[] = update_sql("UPDATE {node_field}\n               SET global_settings = '" . serialize($field_settings) . "'\n               WHERE field_name = '" . $field['field_name'] . "'");
          }
        }
        break;
    }
  }
  db_query('DELETE FROM {cache}');
  db_query('DELETE FROM {cache_content}');
  return $ret;
}