Created
May 19, 2017 03:25
-
-
Save jprasmussen/27dd951fae13fe9ef2b8d0c1a244a9f3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @file | |
* Install, update and uninstall functions for the file_entity module. | |
*/ | |
/** | |
* Implements hook_schema(). | |
*/ | |
function file_entity_schema() { | |
$schema['file_type'] = array( | |
'description' => 'Stores the settings for file types.', | |
'fields' => array( | |
'type' => array( | |
'description' => 'The machine name of the file type.', | |
'type' => 'varchar', | |
'length' => 255, | |
'not null' => TRUE, | |
'default' => '', | |
), | |
'label' => array( | |
'description' => 'The human readable name of the file type.', | |
'type' => 'varchar', | |
'length' => 255, | |
'not null' => TRUE, | |
'default' => '', | |
'translatable' => TRUE, | |
), | |
'description' => array( | |
'description' => 'A brief description of this file type.', | |
'type' => 'text', | |
'not null' => TRUE, | |
'size' => 'medium', | |
'translatable' => TRUE, | |
), | |
'mimetypes' => array( | |
'description' => 'Mimetypes mapped to this file type.', | |
'type' => 'blob', | |
'size' => 'big', | |
'not null' => FALSE, | |
'serialize' => TRUE, | |
), | |
), | |
'primary key' => array('type'), | |
'export' => array( | |
'key' => 'type', | |
'key name' => 'Type', | |
'primary key' => 'type', | |
'default hook' => 'file_default_types', | |
'identifier' => 'file_type', | |
'export type string' => 'ctools_type', | |
'save callback' => 'file_type_save', | |
'delete callback' => 'file_type_delete', | |
'api' => array( | |
'owner' => 'file_entity', | |
'api' => 'file_type', | |
'minimum_version' => 1, | |
'current_version' => 1, | |
), | |
), | |
); | |
$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['file_metadata'] = array( | |
'description' => 'Cache images dimensions.', | |
'fields' => array( | |
'fid' => array( | |
'description' => 'The {file_managed}.fid of the metadata.', | |
'type' => 'int', | |
'unsigned' => TRUE, | |
'not null' => TRUE, | |
'default' => 0, | |
), | |
'name' => array( | |
'description' => "The name of the metadata (e.g. 'width').", | |
'type' => 'varchar', | |
'length' => '255', | |
'not null' => TRUE, | |
), | |
'value' => array( | |
'description' => "The value of the metadata (e.g. '200px').", | |
'type' => 'blob', | |
'not null' => FALSE, | |
'size' => 'big', | |
'serialize' => TRUE, | |
), | |
), | |
'primary key' => array('fid', 'name'), | |
'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); | |
} | |
// Set permissions. | |
$roles = user_roles(); | |
foreach ($roles as $rid => $role) { | |
user_role_grant_permissions($rid, array('view files')); | |
} | |
// Create the title and alt text fields. | |
_file_entity_create_alt_title_fields(); | |
// Configure default pathauto variables if it is currently installed. | |
if (module_exists('pathauto')) { | |
variable_set('pathauto_file_pattern', 'file/[file:name]'); | |
} | |
// Classify existing files according to the currently defined file types. | |
// Queue all files to be classified during cron runs using the Queue API. | |
$queue = DrupalQueue::get('file_entity_type_determine'); | |
$result = db_query('SELECT fid FROM {file_managed}'); | |
foreach ($result as $record) { | |
$queue->createItem($record->fid); | |
} | |
// Warn users that existing files will not have a file type until the queue | |
// has been processed. | |
if ($queue->numberOfItems()) { | |
drupal_set_message(t('Existing files must be classified according to the currently defined file types. These files have been queued for processing and will have their file type determined during cron runs.')); | |
} | |
} | |
/** | |
* Implements hook_uninstall(). | |
*/ | |
function file_entity_uninstall() { | |
drupal_load('module', 'file_entity'); | |
foreach (file_type_load_all(TRUE) as $type) { | |
file_type_delete($type); | |
} | |
// Remove the added column to the core {file_managed} table. | |
db_drop_field('file_managed', 'type'); | |
// Remove variables. | |
variable_del('file_entity_max_filesize'); | |
variable_del('file_entity_default_allowed_extensions'); | |
variable_del('file_entity_alt'); | |
variable_del('file_entity_title'); | |
variable_del('file_entity_allow_insecure_download'); | |
variable_del('file_entity_file_upload_wizard_skip_file_type'); | |
variable_del('file_entity_file_upload_wizard_skip_scheme'); | |
variable_del('file_entity_file_upload_wizard_skip_fields'); | |
// Remove any items from the file type queue if still there. | |
DrupalQueue::get('file_entity_type_determine')->deleteQueue(); | |
} | |
/** | |
* Create the {file_display} database table. | |
*/ | |
function file_entity_update_7000() { | |
if (db_table_exists('file_display')) { | |
return t('The table {file_display} already exists.'); | |
} | |
$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. | |
* | |
* 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'); | |
} | |
/** | |
* Empty update function to trigger a theme registry rebuild. | |
*/ | |
function file_entity_update_7100() { } | |
/** | |
* Update all files with empty types to use the first part of filemime. | |
* | |
* For example, an png image with filemime 'image/png' will be assigned a file | |
* type of 'image'. | |
*/ | |
function file_entity_update_7101() { | |
db_update('file_managed') | |
->expression('type', "SUBSTRING_INDEX(filemime, '/', 1)") | |
->condition('type', '') | |
->execute(); | |
} | |
/** | |
* Empty update function to trigger an entity cache rebuild. | |
*/ | |
function file_entity_update_7102() { | |
} | |
/** | |
* Empty update function. | |
*/ | |
function file_entity_update_7103() { | |
} | |
/** | |
* Assign view file permission when updating without the Media module. | |
*/ | |
function file_entity_update_7104() { | |
if (!module_exists('media')) { | |
$roles = user_roles(FALSE, 'view file'); | |
if (empty($roles)) { | |
// Set permissions. | |
$roles = user_roles(); | |
foreach ($roles as $rid => $role) { | |
// Do not use user_role_grant_permission() since it relies on | |
// hook_permission(), which will not run for file entity module if it | |
// is disabled or the permission is renamed or removed. | |
db_merge('role_permission') | |
->fields(array( | |
'rid' => $rid, | |
'permission' => 'view file', | |
'module' => 'file_entity', | |
)) | |
->condition('rid', $rid) | |
->condition('permission', 'view file') | |
->execute(); | |
} | |
} | |
} | |
} | |
/** | |
* Create the {image_dimensions} database table. | |
*/ | |
function file_entity_update_7200() { | |
if (db_table_exists('image_dimensions')) { | |
return t('The table {image_dimensions} already exists.'); | |
} | |
$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']); | |
} | |
/** | |
* Add the {file_type}, {file_type_mimetypes} tables. | |
*/ | |
function file_entity_update_7201() { | |
$schema = array( | |
'description' => 'Stores the settings for file types.', | |
'fields' => array( | |
'type' => array( | |
'description' => 'The machine name of the file type.', | |
'type' => 'varchar', | |
'length' => 255, | |
'not null' => TRUE, | |
'default' => '', | |
), | |
'label' => array( | |
'description' => 'The human readable name of the file type.', | |
'type' => 'varchar', | |
'length' => 255, | |
'not null' => TRUE, | |
'default' => '', | |
'translatable' => TRUE, | |
), | |
'description' => array( | |
'description' => 'A brief description of this file type.', | |
'type' => 'text', | |
'not null' => TRUE, | |
'size' => 'medium', | |
'translatable' => TRUE, | |
), | |
), | |
'primary key' => array('type'), | |
'export' => array( | |
'key' => 'type', | |
'key name' => 'Type', | |
'primary key' => 'type', | |
'default hook' => 'file_default_types', | |
'identifier' => 'file_type', | |
'export type string' => 'ctools_type', | |
'subrecords callback' => 'file_type_load_subrecords', | |
'save callback' => 'file_type_save', | |
'delete callback' => 'file_type_delete', | |
'api' => array( | |
'owner' => 'file_entity', | |
'api' => 'file_type', | |
'minimum_version' => 1, | |
'current_version' => 1, | |
), | |
), | |
); | |
if (!db_table_exists('file_type')) { | |
db_create_table('file_type', $schema); | |
} | |
$schema = array( | |
'description' => 'Maps mimetypes to file types.', | |
'fields' => array( | |
'type' => array( | |
'description' => 'The machine name of the file type.', | |
'type' => 'varchar', | |
'length' => 255, | |
'not null' => TRUE, | |
'default' => '', | |
), | |
'mimetype' => array( | |
'description' => 'Mimetypes mapped to this file type.', | |
'type' => 'varchar', | |
'length' => 255, | |
'not null' => TRUE, | |
'default' => '', | |
), | |
), | |
'indexes' => array( | |
'file_type' => array('type'), | |
'file_type_mimetype' => array('mimetype'), | |
), | |
); | |
if (!db_table_exists('file_type_mimetypes')) { | |
db_create_table('file_type_mimetypes', $schema); | |
} | |
} | |
/** | |
* Update empty {file_managed}.type records to 'undefined'. | |
* | |
* 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_7202() { | |
db_update('file_managed') | |
// Using 'undefined' instead of FILE_TYPE_NONE, because update functions can | |
// run for disabled modules. | |
->fields(array('type' => 'undefined')) | |
->condition('type', '') | |
->execute(); | |
} | |
/** | |
* Update permission names. | |
*/ | |
function file_entity_update_7203() { | |
$permissions = array( | |
'view file' => 'view files', | |
'edit file' => 'edit any files', | |
); | |
foreach ($permissions as $old => $new) { | |
db_update('role_permission') | |
->fields(array('permission' => $new)) | |
->condition('permission', $old) | |
->execute(); | |
} | |
} | |
/** | |
* Add title and alt text to image file types. | |
*/ | |
function file_entity_update_7204() { | |
// _file_entity_create_alt_title_fields(); | |
} | |
/** | |
* Function to create the title and alt text fields and instances. | |
*/ | |
function _file_entity_create_alt_title_fields() { | |
$t = get_t(); | |
// Create the alt text field and instance. | |
// Define the alt text field. | |
$alt_text_field = array( | |
'active' => '1', | |
'cardinality' => '1', | |
'deleted' => '0', | |
'entity_types' => array(), | |
'field_name' => 'field_file_image_alt_text', | |
'foreign keys' => array( | |
'format' => array( | |
'columns' => array( | |
'format' => 'format', | |
), | |
'table' => 'filter_format', | |
), | |
), | |
'indexes' => array( | |
'format' => array( | |
0 => 'format', | |
), | |
), | |
'module' => 'text', | |
'settings' => array( | |
'max_length' => '255', | |
), | |
'translatable' => '0', | |
'type' => 'text', | |
); | |
// As long as the alt text field doesn't already exist create it. | |
if (!field_info_field($alt_text_field['field_name'])) { | |
field_create_field($alt_text_field); | |
} | |
// Define the alt text instance. | |
$alt_text_instance = array( | |
'bundle' => 'image', | |
'default_value' => NULL, | |
'deleted' => '0', | |
'description' => $t('Alternative text is used by screen readers, search engines, and when the image cannot be loaded. By adding alt text you improve accessibility and search engine optimization.'), | |
'display' => array( | |
'default' => array( | |
'label' => 'above', | |
'settings' => array(), | |
'type' => 'hidden', | |
'weight' => 0, | |
), | |
'full' => array( | |
'label' => 'above', | |
'settings' => array(), | |
'type' => 'hidden', | |
'weight' => 0, | |
), | |
'preview' => array( | |
'label' => 'above', | |
'settings' => array(), | |
'type' => 'hidden', | |
'weight' => 0, | |
), | |
'teaser' => array( | |
'label' => 'above', | |
'settings' => array(), | |
'type' => 'hidden', | |
'weight' => 0, | |
), | |
), | |
'entity_type' => 'file', | |
'field_name' => 'field_file_image_alt_text', | |
'label' => 'Alt Text', | |
'required' => 0, | |
'settings' => array( | |
'text_processing' => '0', | |
'user_register_form' => FALSE, | |
), | |
'widget' => array( | |
'active' => 1, | |
'module' => 'text', | |
'settings' => array( | |
'size' => '60', | |
), | |
'type' => 'text_textfield', | |
'weight' => '-4', | |
), | |
); | |
// For sites that updated from Media 1.x, continue to provide these deprecated | |
// view modes. | |
// @see http://drupal.org/node/1051090 | |
if (variable_get('media__show_deprecated_view_modes')) { | |
$alt_text_instance['display'] += array( | |
'media_link' => array( | |
'label' => 'above', | |
'settings' => array(), | |
'type' => 'hidden', | |
'weight' => 0, | |
), | |
'media_original' => array( | |
'label' => 'above', | |
'settings' => array(), | |
'type' => 'hidden', | |
'weight' => 0, | |
), | |
); | |
} | |
// As long as the alt text instance doesn't already exist create it. | |
if (!field_info_instance($alt_text_instance['entity_type'], $alt_text_instance['field_name'], $alt_text_instance['bundle'])) { | |
field_create_instance($alt_text_instance); | |
} | |
// Create the title text field and instance. | |
// Define the title text field. | |
$title_text_field = array( | |
'active' => '1', | |
'cardinality' => '1', | |
'deleted' => '0', | |
'entity_types' => array(), | |
'field_name' => 'field_file_image_title_text', | |
'foreign keys' => array( | |
'format' => array( | |
'columns' => array( | |
'format' => 'format', | |
), | |
'table' => 'filter_format', | |
), | |
), | |
'indexes' => array( | |
'format' => array( | |
0 => 'format', | |
), | |
), | |
'module' => 'text', | |
'settings' => array( | |
'max_length' => '255', | |
), | |
'translatable' => '0', | |
'type' => 'text', | |
); | |
// As long as the title text field doesn't exist create it. | |
if (!field_info_field($title_text_field['field_name'])) { | |
field_create_field($title_text_field); | |
} | |
// Define the title text instance. | |
$title_text_instance = array( | |
'bundle' => 'image', | |
'default_value' => NULL, | |
'deleted' => '0', | |
'description' => $t('Title text is used in the tool tip when a user hovers their mouse over the image. Adding title text makes it easier to understand the context of an image and improves usability.'), | |
'display' => array( | |
'default' => array( | |
'label' => 'above', | |
'settings' => array(), | |
'type' => 'hidden', | |
'weight' => 1, | |
), | |
'full' => array( | |
'label' => 'above', | |
'settings' => array(), | |
'type' => 'hidden', | |
'weight' => 0, | |
), | |
'preview' => array( | |
'label' => 'above', | |
'settings' => array(), | |
'type' => 'hidden', | |
'weight' => 0, | |
), | |
'teaser' => array( | |
'label' => 'above', | |
'settings' => array(), | |
'type' => 'hidden', | |
'weight' => 0, | |
), | |
), | |
'entity_type' => 'file', | |
'field_name' => 'field_file_image_title_text', | |
'label' => 'Title Text', | |
'required' => 0, | |
'settings' => array( | |
'text_processing' => '0', | |
'user_register_form' => FALSE, | |
), | |
'widget' => array( | |
'active' => 1, | |
'module' => 'text', | |
'settings' => array( | |
'size' => '60', | |
), | |
'type' => 'text_textfield', | |
'weight' => '-3', | |
), | |
); | |
// For sites that updated from Media 1.x, continue to provide these deprecated | |
// view modes. | |
// @see http://drupal.org/node/1051090 | |
if (variable_get('media__show_deprecated_view_modes')) { | |
$title_text_instance['display'] += array( | |
'media_link' => array( | |
'label' => 'above', | |
'settings' => array(), | |
'type' => 'hidden', | |
'weight' => 0, | |
), | |
'media_original' => array( | |
'label' => 'above', | |
'settings' => array(), | |
'type' => 'hidden', | |
'weight' => 0, | |
), | |
); | |
} | |
// As long as the title text instance doesn't already exist create it. | |
if (!field_info_instance($title_text_instance['entity_type'], $title_text_instance['field_name'], $title_text_instance['bundle'])) { | |
field_create_instance($title_text_instance); | |
} | |
} | |
/** | |
* Fix broken indexes caused by incorrect index definitions in update 7201. | |
*/ | |
function file_entity_update_7205() { | |
// Drop broken file type indexes. These may not exist if the broken version | |
// of update 7201 was never run. | |
if (db_index_exists('file_type_mimetypes', 0)) { | |
db_drop_index('file_type_mimetypes', 0); | |
} | |
if (db_index_exists('file_type_mimetypes', 1)) { | |
db_drop_index('file_type_mimetypes', 1); | |
} | |
// Add file type indexes. These may already exist if the fixed version of | |
// update 7201 was run. | |
if (!db_index_exists('file_type_mimetypes', 'file_type')) { | |
db_add_index('file_type_mimetypes', 'file_type', array('type')); | |
} | |
if (!db_index_exists('file_type_mimetypes', 'file_type_mimetype')) { | |
db_add_index('file_type_mimetypes', 'file_type_mimetype', array('mimetype')); | |
} | |
} | |
/** | |
* Configure default pathauto variables if it is currently installed. | |
*/ | |
function file_entity_update_7206() { | |
if (module_exists('pathauto')) { | |
variable_set('pathauto_file_pattern', 'file/[file:name]'); | |
} | |
} | |
/** | |
* Remove the administration files limit variable. | |
*/ | |
function file_entity_update_7207() { | |
variable_del('file_entity_admin_files_limit'); | |
} | |
/** | |
* Add expanded file type permissions to roles with existing file permissions. | |
*/ | |
function file_entity_update_7208() { | |
foreach (array('edit own files', 'edit any files', 'delete own files', 'delete any files', 'download own files', 'download any files') as $old_permission) { | |
$roles = user_roles(FALSE, $old_permission); | |
foreach ($roles as $rid => $name) { | |
$new_permissions = array(); | |
foreach (file_type_get_enabled_types() as $type => $info) { | |
switch ($old_permission) { | |
case 'edit own files': | |
$new_permissions[] = 'edit own ' . $type . ' files'; | |
break; | |
case 'edit any files': | |
$new_permissions[] = 'edit any ' . $type . ' files'; | |
break; | |
case 'delete own files': | |
$new_permissions[] = 'delete own ' . $type . ' files'; | |
break; | |
case 'delete any files': | |
$new_permissions[] = 'delete any ' . $type . ' files'; | |
break; | |
case 'download own files': | |
$new_permissions[] = 'download own ' . $type . ' files'; | |
break; | |
case 'download any files': | |
$new_permissions[] = 'download any ' . $type . ' files'; | |
break; | |
} | |
} | |
if (!empty($new_permissions)) { | |
// Grant new permissions for the role. | |
foreach ($new_permissions as $name) { | |
db_merge('role_permission') | |
->key(array( | |
'rid' => $rid, | |
'permission' => $name, | |
)) | |
->fields(array( | |
'module' => 'file_entity', | |
)) | |
->execute(); | |
} | |
} | |
// Remove old permission from the role. | |
db_delete('role_permission') | |
->condition('rid', $rid) | |
->condition('permission', $old_permission) | |
->condition('module', 'file_entity') | |
->execute(); | |
} | |
} | |
} | |
/** | |
* Remove the {file_type_streams} table if it exists. | |
*/ | |
function file_entity_update_7209() { | |
if (db_table_exists('file_type_streams')) { | |
db_drop_table('file_type_streams'); | |
} | |
} | |
/** | |
* Merge MIME types into the {file_type} table. | |
*/ | |
function file_entity_update_7210() { | |
// Add the new mimetypes field if it doesn't already exist. | |
if (!db_field_exists('file_type', 'mimetypes')) { | |
$field = array( | |
'description' => 'Mimetypes mapped to this file type.', | |
'type' => 'blob', | |
'size' => 'big', | |
'not null' => FALSE, | |
'serialize' => TRUE, | |
); | |
db_add_field('file_type', 'mimetypes', $field); | |
} | |
// Migrate any existing MIME type information into {file_type}. | |
if (db_table_exists('file_type_mimetypes')) { | |
module_load_include('inc', 'file_entity', 'file_entity.file_api'); | |
$types = file_type_load_all(TRUE); | |
foreach ($types as $type) { | |
$mimetypes = db_select('file_type_mimetypes', 'ftm') | |
->fields('ftm', array('mimetype')) | |
->condition('type', $type->type) | |
->execute()->fetchCol(); | |
if (!empty($mimetypes)) { | |
$type->mimetypes = $mimetypes; | |
file_type_save($type); | |
} | |
} | |
// Remove {file_type_mimetypes} after the information is migrated. | |
db_drop_table('file_type_mimetypes'); | |
} | |
} | |
/** | |
* Create the {file_metadata} table. | |
*/ | |
function file_entity_update_7211() { | |
$schema = array( | |
'description' => 'Stores file metadata in a key/value store.', | |
'fields' => array( | |
'fid' => array( | |
'description' => 'The {file_managed}.fid of the metadata.', | |
'type' => 'int', | |
'unsigned' => TRUE, | |
'not null' => TRUE, | |
'default' => 0, | |
), | |
'name' => array( | |
'description' => "The name of the metadata (e.g. 'width').", | |
'type' => 'varchar', | |
'length' => '255', | |
'not null' => TRUE, | |
), | |
'value' => array( | |
'description' => "The value of the metadata (e.g. '200px').", | |
'type' => 'blob', | |
'not null' => FALSE, | |
'size' => 'big', | |
'serialize' => TRUE, | |
), | |
), | |
'primary key' => array('fid', 'name'), | |
'foreign keys' => array( | |
'file_managed' => array( | |
'table' => 'file_managed', | |
'columns' => array('fid' => 'fid'), | |
), | |
), | |
); | |
if (!db_table_exists('file_metadata')) { | |
db_create_table('file_metadata', $schema); | |
} | |
} | |
/** | |
* Migrate the image_dimensions table to the new file_metadata table. | |
*/ | |
function file_entity_update_7212(&$sandbox) { | |
if (!db_table_exists('image_dimensions')) { | |
return; | |
} | |
if (!isset($sandbox['progress'])) { | |
$sandbox['progress'] = 0; | |
$sandbox['current_fid'] = 0; | |
$sandbox['max'] = db_query('SELECT COUNT(DISTINCT fid) FROM {image_dimensions}')->fetchField(); | |
} | |
$results = db_query_range("SELECT fid, width, height FROM {image_dimensions} WHERE fid > :fid ORDER BY fid ASC", 0, 20, array(':fid' => $sandbox['current_fid']))->fetchAllAssoc('fid'); | |
// Clear any existing records in the metadata table in case they exist | |
// because we only want to do one insert. | |
if (!empty($results)) { | |
db_delete('file_metadata') | |
->condition('fid', array_keys($results), 'IN') | |
->condition(db_or() | |
->condition('name', 'width') | |
->condition('name', 'height') | |
) | |
->execute(); | |
} | |
$values = array(); | |
foreach ($results as $result) { | |
foreach (array('width', 'height') as $key) { | |
$values[] = array( | |
'fid' => $result->fid, | |
'name' => $key, | |
'value' => serialize((int) $result->{$key}), | |
); | |
} | |
$sandbox['progress'] += count($results); | |
$sandbox['current_fid'] = $result->fid; | |
} | |
if (!empty($values)) { | |
$query = db_insert('file_metadata'); | |
$query->fields(array('fid', 'name', 'value')); | |
foreach ($values as $value) { | |
$query->values($value); | |
} | |
$query->execute(); | |
} | |
$sandbox['#finished'] = empty($sandbox['max']) ? 1 : ($sandbox['progress'] / $sandbox['max']); | |
if ($sandbox['#finished'] >= 1) { | |
db_drop_table('image_dimensions'); | |
} | |
} | |
/** | |
* Update default alt text and title image field descriptions. | |
*/ | |
function file_entity_update_7213() { | |
if ($title_text_instance = field_info_instance('file', 'field_file_image_title_text', 'image')) { | |
if ($title_text_instance['description'] == 'Title text attribute') { | |
$title_text_instance['description'] = t('Title text is used in the tool tip when a user hovers their mouse over the image. Adding title text makes it easier to understand the context of an image and improves usability.'); | |
field_update_instance($title_text_instance); | |
} | |
} | |
if ($alt_text_instance = field_info_instance('file', 'field_file_image_alt_text', 'image')) { | |
if ($alt_text_instance['description'] == '') { | |
$alt_text_instance['description'] = t('Alternative text is used by screen readers, search engines, and when the image cannot be loaded. By adding alt text you improve accessibility and search engine optimization.'); | |
field_update_instance($alt_text_instance); | |
} | |
} | |
} | |
/** | |
* Fix the default value in {file_managed}.type to match the field schema. | |
*/ | |
function file_entity_update_7214() { | |
db_drop_index('file_managed', 'file_type'); | |
db_change_field('file_managed', 'type', 'type', array( | |
'description' => 'The type of this file.', | |
'type' => 'varchar', | |
'length' => 50, | |
'not null' => TRUE, | |
'default' => 'undefined', | |
)); | |
db_add_index('file_managed', 'file_type', array('type')); | |
} | |
/** | |
* Fix the {file_metadata}.fid schema. | |
*/ | |
function file_entity_update_7215() { | |
// When changing a primary key serial field to an int, we need to add a | |
// temporary index to make this update work. | |
// @see https://drupal.org/node/190027 | |
db_add_index('file_metadata', 'temp', array('fid')); | |
db_drop_primary_key('file_metadata'); | |
db_change_field('file_metadata', 'fid', 'fid', array( | |
'description' => 'The {file_managed}.fid of the metadata.', | |
'type' => 'int', | |
'unsigned' => TRUE, | |
'not null' => TRUE, | |
'default' => 0, | |
)); | |
db_add_primary_key('file_metadata', array('fid', 'name')); | |
db_drop_index('file_metadata', 'temp'); | |
} | |
/** | |
* This update has been removed and will not run. | |
*/ | |
function file_entity_update_7216() { | |
// This update function previously saved default file displays into the | |
// database. It has been removed due to reported problems and is better | |
// addressed by adding support for ctools default content to features. | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment