function availability_calendars_update_6200 in Availability Calendars 6.2
Same name and namespace in other branches
- 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;
}