You are here

file_entity.install in D7 Media 7

Install, update and uninstall functions for the file_entity module.

File

file_entity/file_entity.install
View source
<?php

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

/**
 * Implements hook_schema().
 */
function file_entity_schema() {
  $schema['file_display'] = array(
    'description' => 'Stores configuration options for file displays.',
    'fields' => array(
      // @todo Can be refactored as a compond primary key after
      //   http://drupal.org/node/924236 is implemented.
      'name' => array(
        'description' => 'A combined string (FILE_TYPE__VIEW_MODE__FILE_FORMATTER) identifying a file display configuration. For integration with CTools Exportables, stored as a single string rather than as a compound primary key.',
        'type' => 'varchar',
        'length' => '255',
        'not null' => TRUE,
      ),
      'weight' => array(
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'description' => 'Weight of formatter within the display chain for the associated file type and view mode. A file is rendered using the lowest weighted enabled display configuration that matches the file type and view mode and that is capable of displaying the file.',
      ),
      'status' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
        'size' => 'tiny',
        'description' => 'The status of the display. (1 = enabled, 0 = disabled)',
      ),
      'settings' => array(
        'type' => 'blob',
        'not null' => FALSE,
        'size' => 'big',
        'serialize' => TRUE,
        'description' => 'A serialized array of name value pairs that store the formatter settings for the display.',
      ),
    ),
    'primary key' => array(
      'name',
    ),
    // Exportable support via CTools.
    'export' => array(
      'key' => 'name',
      'key name' => 'Name',
      'primary key' => 'name',
      // The {file_display}.status field is used to control whether the display
      // is active in the display chain. CTools-level disabling is something
      // different, and it's not yet clear how to interpret it for file displays.
      // Until that's figured out, prevent CTools-level disabling.
      'can disable' => FALSE,
      'default hook' => 'file_default_displays',
      'identifier' => 'file_display',
      'api' => array(
        'owner' => 'file_entity',
        'api' => 'file_default_displays',
        'minimum_version' => 1,
        'current_version' => 1,
      ),
    ),
  );
  $schema['image_dimensions'] = array(
    'description' => 'Cache images dimensions.',
    'fields' => array(
      'fid' => array(
        'description' => 'File ID.',
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'height' => array(
        'description' => 'The height of the image in pixels.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
      'width' => array(
        'description' => 'The width of the image in pixels..',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
    ),
    'primary key' => array(
      'fid',
    ),
    'foreign keys' => array(
      'file_managed' => array(
        'table' => 'file_managed',
        'columns' => array(
          'fid' => 'fid',
        ),
      ),
    ),
  );
  return $schema;
}

/**
 * Implements hook_schema_alter().
 */
function file_entity_schema_alter(&$schema) {
  $schema['file_managed']['fields']['type'] = array(
    'description' => 'The type of this file.',
    'type' => 'varchar',
    'length' => 50,
    'not null' => TRUE,
    // If the FILE_TYPE_NONE constant ever changes, then change the value here
    // too, and add an update function to deal with existing records. The
    // constant isn't used here, because there may be cases where this function
    // runs without the module file loaded.
    'default' => 'undefined',
  );
  $schema['file_managed']['indexes']['file_type'] = array(
    'type',
  );
}

/**
 * Implements hook_install().
 */
function file_entity_install() {
  $schema = array();
  file_entity_schema_alter($schema);
  $spec = $schema['file_managed']['fields']['type'];
  $indexes_new = array(
    'indexes' => $schema['file_managed']['indexes'],
  );

  // If another module (e.g., Media) had added a {file_managed}.type field,
  // then change it to the expected specification. Otherwise, add the field.
  if (db_field_exists('file_managed', 'type')) {

    // db_change_field() will fail if any records have type=NULL, so update
    // them to the new default value.
    db_update('file_managed')
      ->fields(array(
      'type' => $spec['default'],
    ))
      ->isNull('type')
      ->execute();

    // Indexes using a field being changed must be dropped prior to calling
    // db_change_field(). However, the database API doesn't provide a way to do
    // this without knowing what the old indexes are. Therefore, it is the
    // responsibility of the module that added them to drop them prior to
    // allowing this module to be installed.
    db_change_field('file_managed', 'type', 'type', $spec, $indexes_new);
  }
  else {
    db_add_field('file_managed', 'type', $spec, $indexes_new);
  }
}

/**
 * Implements hook_uninstall().
 */
function file_entity_uninstall() {
  db_drop_field('file_managed', 'type');
}

/**
 * Create the {file_display} database table.
 */
function file_entity_update_7000() {
  $schema['file_display'] = array(
    'description' => 'Stores configuration options for file displays.',
    'fields' => array(
      'name' => array(
        'description' => 'A combined string (FILE_TYPE__VIEW_MODE__FILE_FORMATTER) identifying a file display configuration. For integration with CTools Exportables, stored as a single string rather than as a compound primary key.',
        'type' => 'varchar',
        'length' => '255',
        'not null' => TRUE,
      ),
      'weight' => array(
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'description' => 'Weight of formatter within the display chain for the associated file type and view mode. A file is rendered using the lowest weighted enabled display configuration that matches the file type and view mode and that is capable of displaying the file.',
      ),
      'status' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
        'size' => 'tiny',
        'description' => 'The status of the display. (1 = enabled, 0 = disabled)',
      ),
      'settings' => array(
        'type' => 'blob',
        'not null' => FALSE,
        'size' => 'big',
        'serialize' => TRUE,
        'description' => 'A serialized array of name value pairs that store the formatter settings for the display.',
      ),
    ),
    'primary key' => array(
      'name',
    ),
  );
  db_create_table('file_display', $schema['file_display']);
}

/**
 * Move file display configurations from the 'file_displays' variable to the
 * {file_display} database table.
 */
function file_entity_update_7001() {
  $file_displays = variable_get('file_displays');
  if (!empty($file_displays)) {
    foreach ($file_displays as $file_type => $file_type_displays) {
      if (!empty($file_type_displays)) {
        foreach ($file_type_displays as $view_mode => $view_mode_displays) {
          if (!empty($view_mode_displays)) {
            foreach ($view_mode_displays as $formatter_name => $display) {
              if (!empty($display)) {
                db_merge('file_display')
                  ->key(array(
                  'name' => implode('__', array(
                    $file_type,
                    $view_mode,
                    $formatter_name,
                  )),
                ))
                  ->fields(array(
                  'status' => isset($display['status']) ? $display['status'] : 0,
                  'weight' => isset($display['weight']) ? $display['weight'] : 0,
                  'settings' => isset($display['settings']) ? serialize($display['settings']) : NULL,
                ))
                  ->execute();
              }
            }
          }
        }
      }
    }
  }
  variable_del('file_displays');
}

/**
 * Drupal 7.8 disallows empty string as the value for a bundle key, so update
 * empty {file_managed}.type records to 'undefined' instead.
 */
function file_entity_update_7002() {
  db_update('file_managed')
    ->fields(array(
    'type' => 'undefined',
  ))
    ->condition('type', '')
    ->execute();
}

/**
 * Register the new display formatter.
 */
function file_entity_update_7100() {
}

/**
 * Create the {image_dimensions} database table.
 */
function file_entity_update_7101() {
  if (!db_table_exists('image_dimensions')) {
    $schema['image_dimensions'] = array(
      'description' => 'Cache images dimensions.',
      'fields' => array(
        'fid' => array(
          'description' => 'File ID.',
          'type' => 'serial',
          'unsigned' => TRUE,
          'not null' => TRUE,
        ),
        'height' => array(
          'description' => 'The height of the image in pixels.',
          'type' => 'int',
          'unsigned' => TRUE,
          'not null' => TRUE,
          'default' => 0,
        ),
        'width' => array(
          'description' => 'The width of the image in pixels..',
          'type' => 'int',
          'unsigned' => TRUE,
          'not null' => TRUE,
          'default' => 0,
        ),
      ),
      'primary key' => array(
        'fid',
      ),
      'foreign keys' => array(
        'file_managed' => array(
          'table' => 'file_managed',
          'columns' => array(
            'fid' => 'fid',
          ),
        ),
      ),
    );
    db_create_table('image_dimensions', $schema['image_dimensions']);
  }
}

Functions

Namesort descending Description
file_entity_install Implements hook_install().
file_entity_schema Implements hook_schema().
file_entity_schema_alter Implements hook_schema_alter().
file_entity_uninstall Implements hook_uninstall().
file_entity_update_7000 Create the {file_display} database table.
file_entity_update_7001 Move file display configurations from the 'file_displays' variable to the {file_display} database table.
file_entity_update_7002 Drupal 7.8 disallows empty string as the value for a bundle key, so update empty {file_managed}.type records to 'undefined' instead.
file_entity_update_7100 Register the new display formatter.
file_entity_update_7101 Create the {image_dimensions} database table.