You are here

function availability_calendars_update_7202 in Availability Calendars 7.2

Same name and namespace in other branches
  1. 6.2 availability_calendars.install \availability_calendars_update_7202()

Optimize storage for Availability Calendars settings (issue #31107230).

File

./availability_calendars.install, line 417
Install, update and uninstall functions for the Availability Calendars module.

Code

function availability_calendars_update_7202(&$sandbox) {

  // - Combine these settings in 1 array in the variables table:
  //   - startofweek
  //   - showteaser
  //   - showkey
  //   - firstletter
  //   - hideold
  //   - defaultstatus
  //   - monthcount
  //   - splitday
  //   - nodeview (exists only on system level)
  //   Notes: the settings pernodeoverride and supported content types are kept separate
  // - Rename availability_calendars_settings_system_generate to availability_calendars_styles_generate.
  // - Rename availability_calendar_settings_system-type_... to availability_calendar_settings_content_type_....
  // Group system settings
  $settings_system = availability_calendars_get_settings_old();
  $settings_styles_generate = variable_get('availability_calendars_settings_system_generate');
  $settings_system_pernodeoverride = variable_get('availability_calendars_settings_system_pernodeoverride');

  // Get content type settings into variables.
  // Get each unique node id for which there are settings and group these in a 2nd loop further on
  global $conf;
  $settings_nodes = array();
  $settings_content_types = array();
  foreach ($conf as $name => $value) {
    $matches = array();
    if (preg_match('/^availability_calendars_settings_node_([0-9]+)_/', $name, $matches) > 0) {
      $settings_nodes[$matches[1]] = TRUE;
    }
    else {
      if (preg_match('/^availability_calendars_settings_system-type_(.+)$/', $name, $matches) > 0) {
        $settings_content_types[$matches[1]] = $value;
      }
    }
  }

  // Group node settings
  foreach ($settings_nodes as $nid => &$value) {
    $value = availability_calendars_get_settings_old($nid);
  }

  // We now have all settings (except the styles) in local variables:
  // - Remove old settings.
  availability_calendars_variable_del_all('availability_calendars_settings_');

  // - Store settings under their new names
  variable_set('availability_calendars_settings_system', $settings_system);
  variable_set('availability_calendars_settings_system_pernodeoverride', $settings_system_pernodeoverride);
  variable_set('availability_calendars_styles_generate', $settings_styles_generate);
  foreach ($settings_content_types as $content_type => $value) {
    variable_set('availability_calendars_settings_content_type_' . $content_type, $value);
  }

  // The following loop *might* be time consuming, but for now I'm not rewriting it to do this in batches.
  foreach ($settings_nodes as $nid => $value) {
    variable_set('availability_calendars_settings_node_' . $nid, $value);
  }
}