'The quicktabs table.', 'export' => array( 'key' => 'machine_name', 'identifier' => 'quicktabs', 'default hook' => 'quicktabs_default_quicktabs', 'api' => array( 'owner' => 'quicktabs', 'api' => 'quicktabs', 'minimum_version' => 1, 'current_version' => 1, ), 'export callback' => 'quicktabs_export', ), 'fields' => array( 'machine_name' => array( 'description' => 'The primary identifier for a qt block.', 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, ), 'ajax' => array( 'description' => 'Whether this is an ajax views block.', 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0, ), 'hide_empty_tabs' => array( 'description' => 'Whether this tabset hides empty tabs.', 'type' => 'int', 'size' => 'tiny', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0, ), 'default_tab' => array( 'description' => 'Default tab.', 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0, ), 'title' => array( 'description' => 'The title of this quicktabs block.', 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, ), 'tabs' => array( 'description' => 'A serialized array of the contents of this qt block.', 'type' => 'text', 'size' => 'medium', 'not null' => TRUE, 'serialize' => TRUE, ), 'renderer' => array( 'description' => 'The rendering mechanism.', 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, ), 'style' => array( 'description' => 'The tab style.', 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, ), 'options' => array( 'description' => 'A serialized array of the options for this qt instance.', 'type' => 'text', 'size' => 'medium', 'not null' => FALSE, 'serialize' => TRUE, ), ), 'primary key' => array('machine_name'), ); return $schema; } /** * Update to 7.x-3.x */ function quicktabs_update_7300() { if (!db_field_exists('quicktabs', 'machine_name')) { // Pull all existing quicktabs, and then delete existing quicktabs. We will reinsert. $result = db_query("SELECT * FROM {quicktabs}"); if (!db_query("DELETE FROM {quicktabs}")) { throw new DrupalUpdateException(t('Could not complete the update.')); } db_drop_field('quicktabs', 'qtid'); $name_field = array( 'description' => 'The primary identifier for a qt block.', 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, ); db_add_field('quicktabs', 'machine_name', $name_field); db_add_primary_key('quicktabs', array('machine_name')); $output = $used = array(); foreach ($result as $qt) { $row = (array)$qt; // Generate a machine-readable string $qt_name = strtolower(preg_replace('/[^a-zA-Z0-9_]+/', '_', $row['title'])); $i = 0; while (in_array($i == 0 ? $qt_name : "{$qt_name}_{$i}", $used)) { $i++; } $row['machine_name'] = $used[] = $i == 0 ? $qt_name : "{$qt_name}_{$i}"; unset($row['qtid']); unset($row['style']); $row['renderer'] = 'tabs'; $placeholders = implode(', ', array_keys($row)); $values = array(); // Ugh - really?? Somebody tell me there's a better way to do this :-/ foreach ($row as $name => $value) { $values[':' . $name] = $value; } $tokens = implode(', ', array_keys($values)); db_query("INSERT INTO {quicktabs} ($placeholders) VALUES($tokens)", $values); $output[] = "Converted quicktab {$row['machine_name']}."; } } // Add the renderer field $renderer_field = array( 'description' => 'The rendering mechanism.', 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => 'quicktabs', ); db_add_field('quicktabs', 'renderer', $renderer_field); $output[] = "Added the renderer field"; return implode('
', $output); } /** * Add the options field which will hold renderer-specific options. */ function quicktabs_update_7301() { $options_field = array( 'description' => 'A serialized array of the options for this qt instance.', 'type' => 'text', 'size' => 'medium', 'not null' => FALSE, 'serialize' => TRUE, ); db_add_field('quicktabs', 'options', $options_field); return "Added the options field"; } /** * Rebuild the registry because of changed method name. */ function quicktabs_update_7302() { registry_rebuild(); }