You are here

function availability_calendars_update_6200 in Availability Calendars 6.2

Same name and namespace in other branches
  1. 7.2 availability_calendars.install \availability_calendars_update_6200()

Add custom states (issue #306461)

File

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

Code

function availability_calendars_update_6200(&$sandbox) {
  $ret = array();

  // Change type of field status of table availability_calendars_day,
  // as it (kind of) refers to the class field of the new states table
  db_change_field($ret, 'availability_calendars_day', 'status', 'status', array(
    'type' => 'varchar',
    'length' => 64,
  ));

  // Add table to store configurable statuses
  $tables = availability_calendars_schema();

  //DRY: get table def from schema
  $table_name = 'availability_calendars_states';
  db_create_table($ret, $table_name, $tables[$table_name]);

  // Add existing (hard-coded) states to the database
  $states = array(
    array(
      'class' => 'calavailable',
      'label' => 'Available',
      'weight' => 1,
    ),
    array(
      'class' => 'calnotavailable',
      'label' => 'Fully booked',
      'weight' => 2,
    ),
    array(
      'class' => 'calnotavailableprov',
      'label' => 'Provisionally booked',
      'weight' => 3,
    ),
  );
  $insert_query = "INSERT INTO {availability_calendars_states} (class,label,weight) VALUES ('%s','%s',%d)";
  $success = TRUE;
  foreach ($states as $state) {
    $success = db_query($insert_query, $state['class'], $state['label'], $state['weight']) !== FALSE && $success;
  }
  $ret[] = array(
    'success' => $success,
    'query' => $insert_query,
  );

  // Update split statuses: the old way of assembling them did not work any more with configurable states and classes
  $split_state_updates = array(
    'calsplit cal-available_notavailable' => 'calsplit cal-calavailable_calnotavailable',
    'calsplit cal-available_notavailableprov' => 'calsplit cal-calavailable_calnotavailableprov',
    'calsplit cal-notavailable_available' => 'calsplit cal-calnotavailable_calavailable',
    'calsplit cal-notavailable_notavailableprov' => 'calsplit cal-calnotavailable_calnotavailableprov',
    'calsplit cal-notavailableprov_available' => 'calsplit cal-calnotavailableprov_calavailable',
    'calsplit cal-notavailableprov_notavailable' => 'calsplit cal-calnotavailableprov_calnotavailable',
  );
  $update_query = "UPDATE {availability_calendars_day} SET status = '%s' WHERE status = '%s'";
  $success = TRUE;
  foreach ($split_state_updates as $state_update_old => $state_update_new) {
    $success = db_query($update_query, $state_update_new, $state_update_old) !== FALSE && $success;
  }
  $ret[] = array(
    'success' => $success,
    'query' => $update_query,
  );
  return $ret;
}