ctools.install

Contains install and update functions for ctools.

File

./ctools.install

View source
<?php


/**
 * @file
 * Contains install and update functions for ctools.
 */

/**
 * Use requirements to ensure that the CTools CSS cache directory can be
 * created and that the PHP version requirement is met.
 */
function ctools_requirements($phase) {
    $requirements = array();
    if ($phase == 'runtime') {
        $t = get_t();
        $requirements['ctools_css_cache'] = array(
            'title' => $t('CTools CSS Cache'),
            'severity' => REQUIREMENT_OK,
            'value' => $t('Exists'),
        );
        $path = 'public://ctools/css';
        if (!file_prepare_directory($path, FILE_CREATE_DIRECTORY)) {
            $requirements['ctools_css_cache']['description'] = $t('The CTools CSS cache directory, %path could not be created due to a misconfigured files directory. Please ensure that the files directory is correctly configured and that the webserver has permission to create directories.', array(
                '%path' => file_uri_target($path),
            ));
            $requirements['ctools_css_cache']['severity'] = REQUIREMENT_ERROR;
            $requirements['ctools_css_cache']['value'] = $t('Unable to create');
        }
        if (!function_exists('error_get_last')) {
            $requirements['ctools_php_52']['title'] = $t('CTools PHP requirements');
            $requirements['ctools_php_52']['description'] = $t('CTools requires certain features only available in PHP 5.2.0 or higher.');
            $requirements['ctools_php_52']['severity'] = REQUIREMENT_WARNING;
            $requirements['ctools_php_52']['value'] = $t('PHP !version', array(
                '!version' => phpversion(),
            ));
        }
    }
    return $requirements;
}

/**
 * Implements hook_schema().
 */
function ctools_schema() {
    return ctools_schema_4();
}

/**
 * Version 4 of the CTools schema.
 */
function ctools_schema_4() {
    $schema = ctools_schema_3();
    // Removed due to alternative database configuration issues.
    // @see https://www.drupal.org/project/ctools/issues/2941920
    return $schema;
}

/**
 * Version 3 of the CTools schema.
 */
function ctools_schema_3() {
    $schema = ctools_schema_2();
    // Update the 'obj' field to be 128 bytes long:
    $schema['ctools_object_cache']['fields']['obj']['length'] = 128;
    return $schema;
}

/**
 * Version 2 of the CTools schema.
 */
function ctools_schema_2() {
    $schema = ctools_schema_1();
    // Update the 'name' field to be 128 bytes long:
    $schema['ctools_object_cache']['fields']['name']['length'] = 128;
    // Update the 'data' field to be type 'blob'.
    $schema['ctools_object_cache']['fields']['data'] = array(
        'type' => 'blob',
        'size' => 'big',
        'description' => 'Serialized data being stored.',
        'serialize' => TRUE,
    );
    // DO NOT MODIFY THIS TABLE -- this definition is used to create the table.
    // Changes to this table must be made in schema_3 or higher.
    $schema['ctools_css_cache'] = array(
        'description' => 'A special cache used to store CSS that must be non-volatile.',
        'fields' => array(
            'cid' => array(
                'type' => 'varchar',
                'length' => '128',
                'description' => 'The CSS ID this cache object belongs to.',
                'not null' => TRUE,
            ),
            'filename' => array(
                'type' => 'varchar',
                'length' => '255',
                'description' => 'The filename this CSS is stored in.',
            ),
            'css' => array(
                'type' => 'text',
                'size' => 'big',
                'description' => 'CSS being stored.',
                'serialize' => TRUE,
            ),
            'filter' => array(
                'type' => 'int',
                'size' => 'tiny',
                'description' => 'Whether or not this CSS needs to be filtered.',
            ),
        ),
        'primary key' => array(
            'cid',
        ),
    );
    return $schema;
}

/**
 * CTools' initial schema; separated for the purposes of updates.
 *
 * DO NOT MAKE CHANGES HERE. This schema version is locked.
 */
function ctools_schema_1() {
    $schema['ctools_object_cache'] = array(
        'description' => t('A special cache used to store objects that are being edited; it serves to save state in an ordinarily stateless environment.'),
        'fields' => array(
            'sid' => array(
                'type' => 'varchar',
                'length' => '64',
                'not null' => TRUE,
                'description' => 'The session ID this cache object belongs to.',
            ),
            'name' => array(
                'type' => 'varchar',
                'length' => '32',
                'not null' => TRUE,
                'description' => 'The name of the object this cache is attached to.',
            ),
            'obj' => array(
                'type' => 'varchar',
                'length' => '32',
                'not null' => TRUE,
                'description' => 'The type of the object this cache is attached to; this essentially represents the owner so that several sub-systems can use this cache.',
            ),
            'updated' => array(
                'type' => 'int',
                'unsigned' => TRUE,
                'not null' => TRUE,
                'default' => 0,
                'description' => 'The time this cache was created or updated.',
            ),
            'data' => array(
                'type' => 'text',
                'size' => 'big',
                'description' => 'Serialized data being stored.',
                'serialize' => TRUE,
            ),
        ),
        'primary key' => array(
            'sid',
            'obj',
            'name',
        ),
        'indexes' => array(
            'updated' => array(
                'updated',
            ),
        ),
    );
    return $schema;
}

/**
 * Implements hook_install().
 */
function ctools_install() {
    // Activate our custom cache handler for the CSS cache.
    variable_set('cache_class_cache_ctools_css', 'CToolsCssCache');
}

/**
 * Implements hook_uninstall().
 */
function ctools_uninstall() {
    variable_del('cache_class_cache_ctools_css');
}

/**
 * Enlarge the ctools_object_cache.name column to prevent truncation and weird
 * errors.
 */
function ctools_update_6001() {
    // Perform updates like this to reduce code duplication.
    $schema = ctools_schema_2();
    db_change_field('ctools_object_cache', 'name', 'name', $schema['ctools_object_cache']['fields']['name']);
}

/**
 * Add the new css cache table.
 */
function ctools_update_6002() {
    // Schema 2 is locked and should not be changed.
    $schema = ctools_schema_2();
    db_create_table('ctools_css_cache', $schema['ctools_css_cache']);
}

/**
 * Take over for the panels_views module if it was on.
 */
function ctools_update_6003() {
    $result = db_query('SELECT status FROM {system} WHERE name = :name', array(
        ':name' => 'panels_views',
    ))->fetchField();
    if ($result) {
        db_delete('system')->condition('name', 'panels_views')
            ->execute();
        module_enable(array(
            'views_content',
        ), TRUE);
    }
}

/**
 * Add primary key to the ctools_object_cache table.
 */
function ctools_update_6004() {
    db_add_primary_key('ctools_object_cache', array(
        'sid',
        'obj',
        'name',
    ));
    db_drop_index('ctools_object_cache', 'sid_obj_name');
}

/**
 * Removed update.
 */
function ctools_update_6005() {
    return array();
}

/**
 * The ctools_custom_content table was originally here, but is now moved to
 * its own module.
 */
function ctools_update_6007() {
    $ret = array();
    if (db_table_exists('ctools_custom_content')) {
        // Enable the module to make everything as seamless as possible.
        module_enable(array(
            'ctools_custom_content',
        ), TRUE);
    }
    return $ret;
}

/**
 * The ctools_object_cache needs to be defined as a blob.
 */
function ctools_update_6008() {
    db_delete('ctools_object_cache')->execute();
    db_change_field('ctools_object_cache', 'data', 'data', array(
        'type' => 'blob',
        'size' => 'big',
        'description' => 'Serialized data being stored.',
        'serialize' => TRUE,
    ));
}

/**
 * Enable the custom CSS cache handler.
 */
function ctools_update_7000() {
    variable_set('cache_class_cache_ctools_css', 'CToolsCssCache');
}

/**
 * Increase the length of the ctools_object_cache.obj column.
 */
function ctools_update_7001() {
    db_change_field('ctools_object_cache', 'obj', 'obj', array(
        'type' => 'varchar',
        'length' => '128',
        'not null' => TRUE,
        'description' => 'The type of the object this cache is attached to; this essentially represents the owner so that several sub-systems can use this cache.',
    ));
}

/**
 * Increase the length of the ctools_object_cache.name column to 255.
 */
function ctools_update_7002() {
    // Removed due to alternative database configuration issues.
    // @see https://www.drupal.org/project/ctools/issues/2941920
}

/**
 * Revert the length of the ctools_object_cache.name column back to 128.
 */
function ctools_update_7003() {
    db_delete('ctools_object_cache')->execute();
    db_change_field('ctools_object_cache', 'name', 'name', array(
        'type' => 'varchar',
        'length' => '128',
        'not null' => TRUE,
        'description' => 'The name of the object this cache is attached to.',
    ));
}

Functions

Title Deprecated Summary
ctools_install Implements hook_install().
ctools_requirements Use requirements to ensure that the CTools CSS cache directory can be created and that the PHP version requirement is met.
ctools_schema Implements hook_schema().
ctools_schema_1 CTools' initial schema; separated for the purposes of updates.
ctools_schema_2 Version 2 of the CTools schema.
ctools_schema_3 Version 3 of the CTools schema.
ctools_schema_4 Version 4 of the CTools schema.
ctools_uninstall Implements hook_uninstall().
ctools_update_6001 Enlarge the ctools_object_cache.name column to prevent truncation and weird errors.
ctools_update_6002 Add the new css cache table.
ctools_update_6003 Take over for the panels_views module if it was on.
ctools_update_6004 Add primary key to the ctools_object_cache table.
ctools_update_6005 Removed update.
ctools_update_6007 The ctools_custom_content table was originally here, but is now moved to its own module.
ctools_update_6008 The ctools_object_cache needs to be defined as a blob.
ctools_update_7000 Enable the custom CSS cache handler.
ctools_update_7001 Increase the length of the ctools_object_cache.obj column.
ctools_update_7002 Increase the length of the ctools_object_cache.name column to 255.
ctools_update_7003 Revert the length of the ctools_object_cache.name column back to 128.