Same filename in other branches
  1. 7.x-2.x quicktabs.install
  2. 8.x-1.x quicktabs.install

Install, update and uninstall functions for the quicktabs module.

Fichier

./quicktabs.install

View source
<?php


/**
 * @file
 *   Install, update and uninstall functions for the quicktabs module.
 */

/**
 * Implements hook_schema().
 */
function quicktabs_schema() {
    $schema['quicktabs'] = array(
        'description' => '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() {
    $output = array();
    if (!db_field_exists('quicktabs', 'renderer')) {
        // 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";
    }
    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',
        ));
        $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']);
            $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']}.";
        }
    }
    return implode('<br />', $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();
}

/**
 * Add support for view modes.
 */
function quicktabs_update_7303() {
    foreach (quicktabs_load_multiple() as $quicktab) {
        $updated = FALSE;
        foreach ($quicktab->tabs as &$tab) {
            if ($tab['type'] === 'node') {
                $tab['view_mode'] = !empty($tab['teaser']) ? 'teaser' : 'full';
                unset($tab['teaser']);
                $updated = TRUE;
            }
        }
        if (!$updated) {
            continue;
        }
        if (empty($quicktab->in_code_only)) {
            $result = drupal_write_record('quicktabs', $quicktab, 'machine_name');
        }
        else {
            $result = drupal_write_record('quicktabs', $quicktab);
        }
        if (!$result) {
            throw new DrupalUpdateException(t('Could not complete the update.'));
        }
    }
    return 'Added support for view modes.';
}

Functions

Titre Deprecated Résumé
quicktabs_schema Implements hook_schema().
quicktabs_update_7300 Update to 7.x-3.x
quicktabs_update_7301 Add the options field which will hold renderer-specific options.
quicktabs_update_7302 Rebuild the registry because of changed method name.
quicktabs_update_7303 Add support for view modes.