$view_mode) {
$bundle_settings['extra_fields']['display']['add_media_link'][$name]['weight'] = 1;
}
// Save the new bundle settings.
field_bundle_settings('node', 'media_gallery', $bundle_settings);
// Enable custom display settings for gallery context view modes for file
// types that can be in a gallery.
foreach (array('audio', 'image', 'video') as $bundle) {
$bundle_settings = field_bundle_settings('file', $bundle);
foreach (media_gallery_file_view_modes() as $view_mode => $label) {
$bundle_settings['view_modes'][$view_mode]['custom_settings'] = TRUE;
}
field_bundle_settings('file', $bundle, $bundle_settings);
}
// Clear caches so that our implementation of hook_image_default_styles() is
// correctly used when all the fields created below need it to be.
// @todo There should obviously be a cleaner way to do this.
cache_clear_all('*', 'cache', TRUE);
drupal_static_reset('image_styles');
drupal_static_reset('image_effects');
if (module_exists('styles') && function_exists('styles_style_flush')) {
styles_style_flush();
}
// Add the taxonomy vocabulary for media gallery collections.
$vocabulary = media_gallery_create_taxonomy_vocab();
// Make sure the standard 'field_tags' field exists.
_media_gallery_ensure_field_tags();
// Create fields (but not instances yet) for media_gallery nodes and
// for the gallery collection vocabulary.
foreach (_media_gallery_controlled_fields() as $field) {
_media_gallery_ensure_field($field);
}
// Attach fields to gallery_collection taxonomy terms.
foreach (_media_gallery_controlled_instances('taxonomy_term') as $instance) {
_media_gallery_ensure_instance($instance);
}
// Now that the gallery_collection vocabulary exists and has fields attached,
// create an "All galleries" term for galleries to belong to by default.
media_gallery_create_taxonomy_term($vocabulary);
// Attach fields to the media gallery node type (including a term reference
// for the default collection).
foreach (_media_gallery_controlled_instances('node') as $instance) {
_media_gallery_ensure_instance($instance);
}
// Make sure all media bundles have the instances we expect.
_media_gallery_ensure_media_instances();
// Set variables for the media gallery node type.
variable_set('node_submitted_media_gallery', FALSE);
variable_set('node_options_media_gallery', array('status'));
variable_set('comment_media_gallery', 0);
}
/**
* Implements hook_requirements().
*/
function media_gallery_requirements() {
$requirements = array();
// If this module is part of an install profile, its requirements will be
// checked before the field system is available. The rest of this function is
// unneeded anyway in that case, so bail out here to avoid fatal errors.
if (!module_exists('field')) {
return $requirements;
}
$t = get_t();
$required_fields = _media_gallery_controlled_fields();
// In addition to the fields we control, we also need the standard field_tags
// that most sites will have gotten from their install profile.
$required_fields['field_tags'] = array('type' => 'taxonomy_term_reference');
foreach ($required_fields as $field_name => $field_definition) {
$field = field_info_field($field_name);
// If the field doesn't exist, we will create it on install.
if (!$field) {
continue;
}
// Between Media Gallery beta2 and beta3, field definitions were changed
// from list_number to list_float, to keep up with Drupal core changes.
// list_update_7001() handles the updating of existing fields, but
// update.php checks all requirements prior to running any update function.
if ($field['type'] == 'list_number' && $field_definition['type'] == 'list_float') {
continue;
}
if ($field['type'] != $field_definition['type']) {
$requirements['existing_field_' . $field_name] = array(
'description' => $t("%field_name already exists and is not of type %type. Installation cannot continue. Please remove this field or change its type.", array('%field_name' => $field_name, '%type' => $field_definition['type'])),
'severity' => REQUIREMENT_ERROR,
);
}
}
return $requirements;
}
/**
* Implements hook_schema().
*/
function media_gallery_schema() {
$schema['media_gallery_weight'] = array(
'description' => 'The weight of media galleries within a given collection.',
'fields' => array(
'tid' => array(
'description' => 'The taxonomy term id corresponding to a media gallery collection.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'nid' => array(
'description' => 'The node id of the media gallery.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'weight' => array(
'description' => 'The weight of the media gallery within the collection.',
'type' => 'int',
'not null' => TRUE,
'default' => 0,
),
),
'primary key' => array('tid', 'nid'),
);
return $schema;
}
/**
* Returns definitions for fields this module both creates and deletes.
*/
function _media_gallery_controlled_fields() {
$fields = array(
// The media items that make up the gallery.
'media_gallery_file' => array(
'field_name' => 'media_gallery_file',
'cardinality' => FIELD_CARDINALITY_UNLIMITED,
'type' => 'file',
),
// The gallery description.
'media_gallery_description' => array(
'field_name' => 'media_gallery_description',
'cardinality' => 1,
'locked' => TRUE,
'type' => 'text_long',
),
// How to format the gallery (if links go to lightbox or node display).
'media_gallery_format' => array(
'field_name' => 'media_gallery_format',
'cardinality' => 1,
'locked' => TRUE,
'type' => 'list_text',
'settings' => array(
'allowed_values_function' => '_media_gallery_get_format_values',
),
),
// Whether or not the lightbox should show extra fields.
'media_gallery_lightbox_extras' => array(
'field_name' => 'media_gallery_lightbox_extras',
'cardinality' => 1,
'locked' => TRUE,
'type' => 'list_boolean',
'settings' => array(
'allowed_values_function' => '_media_gallery_get_lightbox_extras_values',
),
),
// How many columns of thumbnails to show.
'media_gallery_columns' => array(
'field_name' => 'media_gallery_columns',
'cardinality' => 1,
'locked' => TRUE,
'type' => 'list_float',
'settings' => array(
'allowed_values_function' => '_media_gallery_get_columns_values',
),
),
// How many rows of thumbnails to show.
'media_gallery_rows' => array(
'field_name' => 'media_gallery_rows',
'cardinality' => 1,
'locked' => TRUE,
'type' => 'number_integer',
),
// Whether to show title/license on hover or below thumbnail.
'media_gallery_image_info_where' => array(
'field_name' => 'media_gallery_image_info_where',
'cardinality' => 1,
'locked' => TRUE,
'type' => 'list_text',
'settings' => array(
'allowed_values_function' => '_media_gallery_get_image_info_placement_values',
),
),
// Whether to show a "Download original image" checkbox.
'media_gallery_allow_download' => array(
'field_name' => 'media_gallery_allow_download',
'cardinality' => 1,
'locked' => TRUE,
'type' => 'list_boolean',
'settings' => array(
'allowed_values_function' => '_media_gallery_get_allow_download_values',
),
),
// Whether to expose a block for this gallery.
'media_gallery_expose_block' => array(
'field_name' => 'media_gallery_expose_block',
'cardinality' => 1,
'locked' => TRUE,
'type' => 'list_boolean',
'settings' => array(
'allowed_values_function' => '_media_gallery_get_expose_block_values',
),
),
// How many columns of thumbnails to show in the block.
'media_gallery_block_columns' => array(
'field_name' => 'media_gallery_block_columns',
'cardinality' => 1,
'locked' => TRUE,
'type' => 'list_float',
'settings' => array(
'allowed_values_function' => '_media_gallery_get_block_columns_values',
),
),
// How many rows of thumbnails to show in the block.
'media_gallery_block_rows' => array(
'field_name' => 'media_gallery_block_rows',
'cardinality' => 1,
'locked' => TRUE,
'type' => 'number_integer',
),
'media_gallery_collection' => array(
'field_name' => 'media_gallery_collection',
'type' => 'taxonomy_term_reference',
'settings' => array(
'allowed_values' => array(
array(
'vocabulary' => 'gallery_collections',
'parent' => 0,
),
),
),
),
// Fields to create on media items.
'media_description' => array(
'field_name' => 'media_description',
'locked' => TRUE,
'type' => 'text_long',
),
'media_title' => array(
'field_name' => 'media_title',
'locked' => TRUE,
'type' => 'text',
),
'field_license' => array(
'field_name' => 'field_license',
'locked' => TRUE,
'settings' => array(
'allowed_values_function' => '_media_gallery_get_field_license_values',
),
'type' => 'list_text',
'active' => TRUE,
'cardinality' => 1,
),
);
return $fields;
}
/**
* Returns definitions for instances this modules both creates and deletes.
*
* @param $group
* Optional. The group of instances to return. May be 'node' or
* 'taxonomy_term'. If omitted, returns all instances.
*
* @return
* A structured array of instances.
*/
function _media_gallery_controlled_instances($group = NULL) {
$t = get_t();
$node_instances = array(
// The gallery description.
'media_gallery_description' => array(
'field_name' => 'media_gallery_description',
'label' => $t('Description'),
'widget' => array(
'type' => 'text_textarea',
'settings' => array('rows' => 4),
),
'settings' => array(
'text_processing' => 1,
),
'display' => array(
'default' => array(
'type' => 'text_default',
'label' => 'hidden',
'weight' => 0,
),
'full' => array(
'type' => 'text_default',
'label' => 'hidden',
'weight' => 0,
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
'weight' => 0,
),
'media_gallery_block' => array(
'type' => 'hidden',
'label' => 'hidden',
'weight' => 0,
),
),
),
'media_gallery_file' => array(
'field_name' => 'media_gallery_file',
'label' => $t('Gallery media'),
'widget' => array(
'type' => 'media_generic',
'settings' => array(
// Eventually other media types will be allowed.
'allowed_types' => array('audio' => 'audio', 'image' => 'image', 'video' => 'video'),
'allowed_schemes' => array('public' => 'public'),
),
),
'display' => array(
'default' => array(
'type' => 'media_gallery',
'settings' => array('file_view_mode' => 'media_gallery_thumbnail'),
'label' => 'hidden',
'weight' => 2,
),
'full' => array(
'type' => 'media_gallery',
'settings' => array('file_view_mode' => 'media_gallery_thumbnail'),
'label' => 'hidden',
'weight' => 2,
),
'teaser' => array(
'type' => 'media_gallery',
'settings' => array('file_view_mode' => 'media_gallery_collection_thumbnail'),
'label' => 'hidden',
'weight' => 2,
),
'media_gallery_block' => array(
'type' => 'media_gallery',
'settings' => array('file_view_mode' => 'media_gallery_block_thumbnail'),
'label' => 'hidden',
'weight' => 2,
),
),
),
// How to format the gallery (if links go to lightbox or node display).
'media_gallery_format' => array(
'field_name' => 'media_gallery_format',
'label' => $t('Gallery format'),
'required' => TRUE,
'default_value' => array(array('value' => 'lightbox')),
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'full' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'media_gallery_block' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
'widget' => array(
'type' => 'options_buttons',
),
),
// Whether to show a "Exclude title and description" checkbox.
'media_gallery_lightbox_extras' => array(
'field_name' => 'media_gallery_lightbox_extras',
'label' => 'Lightbox title and description',
'description' => $t('Show title and description'),
'default_value' => array(array('value' => 0)),
'widget' => array(
'type' => 'options_onoff',
),
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'full' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'media_gallery_block' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
),
// How many columns to show.
'media_gallery_columns' => array(
'field_name' => 'media_gallery_columns',
'label' => $t('Number of columns'),
'default_value' => array(array('value' => 4)),
'required' => TRUE,
'widget' => array(
'type' => 'options_select',
),
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'full' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'media_gallery_block' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
),
// How many rows to show.
'media_gallery_rows' => array(
'field_name' => 'media_gallery_rows',
'label' => $t('Number of rows'),
'default_value' => array(array('value' => 3)),
'settings' => array(
'min' => '1',
),
'required' => TRUE,
'widget' => array(
'type' => 'number',
),
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'full' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'media_gallery_block' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
),
// Whether to show title/license on hover or below thumbnail.
'media_gallery_image_info_where' => array(
'field_name' => 'media_gallery_image_info_where',
'label' => $t('Media information'),
'required' => TRUE,
'default_value' => array(array('value' => 'hover')),
'widget' => array(
'type' => 'options_select',
),
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'full' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'media_gallery_block' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
),
// Whether to show a "Download original image" checkbox.
'media_gallery_allow_download' => array(
'field_name' => 'media_gallery_allow_download',
'label' => $t('Allow downloading of the original image'),
'description' => $t('Display a "download original image" link'),
'default_value' => array(array('value' => 1)),
'widget' => array(
'type' => 'options_onoff',
),
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'full' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'media_gallery_block' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
),
// Whether to expose a block for this gallery.
'media_gallery_expose_block' => array(
'field_name' => 'media_gallery_expose_block',
'label' => $t('Create a block of most recently added media'),
'default_value' => array(array('value' => 0)),
'widget' => array(
'type' => 'options_onoff',
),
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'full' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'media_gallery_block' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
),
// How many columns to show in the block.
'media_gallery_block_columns' => array(
'field_name' => 'media_gallery_block_columns',
'label' => $t('Number of columns'),
'default_value' => array(array('value' => 2)),
'required' => TRUE,
'widget' => array(
'type' => 'options_select',
),
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'full' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'media_gallery_block' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
),
// How many rows to show in the block.
'media_gallery_block_rows' => array(
'field_name' => 'media_gallery_block_rows',
'label' => $t('Number of rows'),
'default_value' => array(array('value' => 3)),
'required' => TRUE,
'settings' => array(
'min' => 1,
),
'widget' => array(
'type' => 'number',
),
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'full' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'media_gallery_block' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
),
// The 'collection' tag field on media gallery nodes.
'media_gallery_collection' => array(
'field_name' => 'media_gallery_collection',
'label' => $t('Gallery collection'),
'default_value' => array(
array(
'tid' => variable_get('media_gallery_default_collection_tid'),
),
),
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
),
);
foreach ($node_instances as &$instance) {
$instance['entity_type'] = 'node';
$instance['bundle'] = 'media_gallery';
}
unset($instance);
$instances = array_intersect_key($node_instances, array_flip(array('media_gallery_columns', 'media_gallery_rows', 'media_gallery_image_info_where')));
$instances['media_gallery_image_info_where']['label'] = $t('Gallery information');
$instances['field_license'] = array(
'field_name' => 'field_license',
'label' => $t('Default license settings'),
'required' => TRUE,
'default_value' => array(
array('value' => 'nothing'),
),
'description' => $t('Choose a default @cc_link license for all Gallery media. Later you can change the license for each piece of media.', array('@cc_link' => 'Creative Commons')),
'weight' => 14,
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
);
foreach ($instances as $key => $instance) {
// Since we are re-using fields which are defined for the node, we need to
// remove any additional view modes which don't belong to avoid E_NOTICE errors.
$instance['display'] = array_intersect_key($instance['display'], array_flip(array('default', 'full')));
$instance['entity_type'] = 'taxonomy_term';
$instance['bundle'] = 'gallery_collections';
$taxonomy_instances['taxo_term_' . $key] = $instance;
}
switch ($group) {
case 'node':
return $node_instances;
case 'taxonomy_term':
return $taxonomy_instances;
default:
return $node_instances + $taxonomy_instances;
}
}
/**
* Create a field, unless it exists already.
*
* Note that it's not necessary to check field type here, as that's done in the
* requirements step.
*
* @param $field
* The field definition.
*/
function _media_gallery_ensure_field($field) {
$existing_field = field_read_field($field['field_name'], array('include_inactive' => TRUE));
if (empty($existing_field)) {
field_create_field($field);
}
}
function _media_gallery_ensure_instance($instance) {
$existing_instance = field_info_instance($instance['entity_type'], $instance['field_name'], $instance['bundle']);
if (empty($existing_instance)) {
field_create_instance($instance);
}
}
/**
* Returns definitions for instances this module requires on media bundles.
*/
function _media_required_instances() {
$t = get_t();
$media_instances = array(
'media_title' => array(
'field_name' => 'media_title',
'label' => $t('Title'),
'display' => array(
'default' => array('type' => 'hidden'),
'media_gallery_thumbnail' => array('type' => 'text_default', 'label' => 'hidden'),
'media_gallery_lightbox' => array('type' => 'text_default', 'label' => 'hidden'),
'media_gallery_detail' => array('type' => 'text_default', 'label' => 'hidden'),
),
),
'media_description' => array(
'field_name' => 'media_description',
'label' => $t('Description'),
'widget' => array(
'type' => 'text_textarea',
'settings' => array('rows' => 4),
),
'settings' => array(
'text_processing' => 1,
),
'display' => array(
'default' => array('type' => 'text_default', 'label' => 'above'),
'media_gallery_thumbnail' => array('type' => 'text_default', 'label' => 'above'),
'media_gallery_lightbox' => array('type' => 'text_default', 'label' => 'above'),
'media_gallery_detail' => array('type' => 'text_default', 'label' => 'above'),
),
),
'field_tags' => array(
'field_name' => 'field_tags',
'label' => $t('Tags'),
'widget' => array(
'type' => 'taxonomy_autocomplete',
),
'display' => array(
'default' => array('type' => 'hidden'),
),
),
'field_license' => array(
'field_name' => 'field_license',
'label' => $t('License settings for this media'),
'required' => TRUE,
'default_value' => array(
array('value' => 'nothing'),
),
'description' => $t('Select a Creative Commons license for others who use this media.'),
'display' => array(
'default' => array('type' => 'hidden'),
'media_gallery_thumbnail' => array('type' => 'list_default', 'label' => 'hidden'),
'media_gallery_lightbox' => array('type' => 'list_default', 'label' => 'hidden'),
'media_gallery_detail' => array('type' => 'list_default', 'label' => 'hidden'),
),
),
);
return $media_instances;
}
/**
* Make sure the field_tags field exists and is of the right type.
*/
function _media_gallery_ensure_field_tags() {
// Make sure the 'tags' vocabulary exists.
$vocabulary = taxonomy_vocabulary_machine_name_load('tags');
if (!$vocabulary) {
$description = st('Use tags to group articles on similar topics into categories.');
$help = st('Enter a comma-separated list of words to describe your content.');
$vocabulary = (object) array(
'name' => 'Tags',
'description' => $description,
'machine_name' => 'tags',
'help' => $help,
);
taxonomy_vocabulary_save($vocabulary);
}
$field = array(
'field_name' => 'field_tags',
'type' => 'taxonomy_term_reference',
// Set cardinality to unlimited for tagging.
'cardinality' => FIELD_CARDINALITY_UNLIMITED,
'settings' => array(
'allowed_values' => array(
array(
'vocabulary' => $vocabulary->machine_name,
'parent' => 0,
),
),
),
);
_media_gallery_ensure_field($field);
}
/**
* Makes sure media entities have the fields media gallery requires.
*/
function _media_gallery_ensure_media_instances() {
$t = get_t();
$instances = _media_required_instances();
foreach (file_type_get_enabled_types() as $bundle => $type) {
foreach ($instances as $instance) {
$instance_copy = $instance;
$instance_copy += array(
'entity_type' => 'file',
'bundle' => $bundle,
);
$label = in_array($bundle, array('image', 'audio', 'video')) ? $bundle : 'file';
if ($instance_copy['field_name'] == 'field_tags' && !isset($instance_copy['description'])) {
$instance_copy['description'] = $t("Enter a comma-separated list of words to describe your $label.");
}
if ($instance_copy['field_name'] == 'field_license') {
$instance_copy['label'] = $t("License settings for this $label");
$instance_copy['description'] = $t('Select a Creative Commons license for others who use this ' . $label . '.');
}
_media_gallery_ensure_instance($instance_copy);
}
}
}
/**
* Helper function to create required taxonomy vocabulary.
*/
function media_gallery_create_taxonomy_vocab() {
$t = get_t();
$vocabulary = (object) array(
'name' => 'Gallery collections',
'description' => $t('Groups of rich media galleries'),
'machine_name' => 'gallery_collections',
);
taxonomy_vocabulary_save($vocabulary);
variable_set('media_gallery_collection_vid', $vocabulary->vid);
return $vocabulary;
}
/**
* Helper function to create required taxonomy term.
*/
function media_gallery_create_taxonomy_term($vocabulary) {
// Create a taxonomy term for the "All Galleries" collection.
$term = new stdClass();
$term->vid = $vocabulary->vid;
$term->name = 'Galleries';
$term->description = '';
// Choose a text format that will prevent WYSIWYGs from appearing by default.
// When we allow people to create new gallery collections we'll have to
// (carefully) modify the form for adding new ones also.
$term->format = filter_fallback_format();
$term->path = array('alias' => 'galleries');
// Save the term, preventing Pathauto from aliasing it incorrectly.
_media_gallery_prevent_unwanted_pathauto_aliases();
taxonomy_term_save($term);
_media_gallery_allow_all_pathauto_aliases();
// Create a menu link for this taxonomy term. We set the link title to
// 'Taxonomy term' in order to match the title of the corresponding router
// item, since this is what triggers the menu system to display a dynamic
// title for the link.
$menu_item = array(
'menu_name' => 'main-menu',
'weight' => 10,
'link_title' => 'Taxonomy term',
'link_path' => 'taxonomy/term/' . $term->tid,
);
// If the router item doesn't exist yet (for example, if we are installing
// either the Taxonomy module or Drupal itself at the same time as Media
// Gallery), rebuild the menu before saving, to avoid errors.
$router_item_exists = (bool) db_query_range('SELECT 1 FROM {menu_router} WHERE path = :path', 0, 1, array(':path' => 'taxonomy/term/%'))->fetchField();
if (!$router_item_exists) {
menu_rebuild();
}
menu_link_save($menu_item);
// Save the term ID for future use.
variable_set('media_gallery_default_collection_tid', $term->tid);
}
/**
* Implements hook_uninstall().
*/
function media_gallery_uninstall() {
// Delete all existing galleries.
$nids = db_query('SELECT nid FROM {node} n WHERE n.type = :type', array(':type' => 'media_gallery'))->fetchCol();
node_delete_multiple($nids);
// Delete fields and instances.
foreach (array_keys(_media_gallery_controlled_fields()) as $field) {
field_delete_field($field);
}
$instances = _media_gallery_controlled_instances();
$instances += field_info_instances('node', 'media_gallery');
foreach ($instances as $instance_name => $instance) {
field_delete_instance($instance);
}
// Delete the content type itself.
// @todo: We can't run this since the content type already ceased to exist
// when the module was disabled. But we'd like to be able to, so that the
// proper hooks within node_type_delete() get fired.
// node_type_delete('media_gallery');
// Delete the taxonomy vocabulary.
$vid = variable_get('media_gallery_collection_vid');
if ($vid && function_exists('taxonomy_vocabulary_delete')) {
taxonomy_vocabulary_delete($vid);
}
// Delete variables for the media gallery node type.
variable_del('node_submitted_media_gallery');
variable_del('node_options_media_gallery');
variable_del('comment_media_gallery');
variable_del('media_gallery_collection_vid');
variable_del('media_gallery_default_collection_tid');
}
/**
* Set the default value of media_gallery_expose_block to zero
* In order to have the expose block checkbox appear above the column and row number dropdowns
* it was necessary to update those field instances with their initial values, essentially
* refreshing them.
*/
function media_gallery_update_7000() {
$t = get_t();
// Add a check to make sure the instance exists if we want to update it.
$instance = field_info_instance('node', 'media_gallery_expose_block', 'media_gallery');
if ($instance) {
$instance['default_value'] = array(array('value' => 0));
field_update_instance($instance);
}
// Update the media_display field so that it shows the label
foreach (array('video', 'image') as $bundle) {
field_update_instance( array(
'field_name' => 'media_description',
'bundle' => $bundle,
'entity_type' => 'media',
'display' => array(
'default' => array('type' => 'text_default', 'label' => 'above'),
'media_gallery_thumbnail' => array('type' => 'text_default', 'label' => 'above'),
'media_gallery_lightbox' => array('type' => 'text_default', 'label' => 'above'),
'media_gallery_detail' => array('type' => 'text_default', 'label' => 'above'),
),
)
);
}
// Remove the media_gallery_gallery_info field
field_delete_field('media_gallery_gallery_info');
field_delete_field('media_gallery_image_info');
// Ensure that the new field exists
$extra_field = array(
'field_name' => 'media_gallery_lightbox_extras',
'cardinality' => 1,
'locked' => TRUE,
'type' => 'list_boolean',
'settings' => array(
'allowed_values_function' => '_media_gallery_get_lightbox_extras_values',
),
);
_media_gallery_ensure_field($extra_field);
$new_instance = array(
'field_name' => 'media_gallery_lightbox_extras',
'label' => 'Lightbox title and description',
'description' => $t('Show title and description'),
'default_value' => array(array('value' => 0)),
'entity_type' => 'node',
'bundle' => 'media_gallery',
'widget' => array(
'type' => 'options_onoff',
),
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'full' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'media_gallery_block' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
);
_media_gallery_ensure_instance($new_instance);
}
/**
* Updates all gallery nodes to use new default settings.
*/
function media_gallery_update_7001() {
$result = db_query("SELECT nid FROM {node} WHERE type = 'media_gallery'");
foreach ($result as $record) {
$node = node_load($record->nid);
if ($node->media_gallery_format[LANGUAGE_NONE][0]['value'] == 'lightbox_text') {
$node->media_gallery_format[LANGUAGE_NONE][0]['value'] = 'lightbox';
$node->media_gallery_lightbox_extras[LANGUAGE_NONE][0]['value'] = 0;
node_save($node);
}
}
}
/**
* Configure video formatters to desired defaults for gallery view modes.
*/
function media_gallery_update_7002() {
drupal_load('module', 'field');
$bundle = 'video';
$bundle_settings = field_bundle_settings('media', $bundle);
$bundle_settings['view_modes']['media_gallery_thumbnail']['custom_settings'] = TRUE;
$bundle_settings['view_modes']['media_gallery_lightbox']['custom_settings'] = TRUE;
$bundle_settings['view_modes']['media_gallery_detail']['custom_settings'] = TRUE;
$bundle_settings['view_modes']['media_gallery_block_thumbnail']['custom_settings'] = TRUE;
$bundle_settings['view_modes']['media_gallery_collection_thumbnail']['custom_settings'] = TRUE;
field_bundle_settings('media', $bundle, $bundle_settings);
$instance = field_info_instance('media', 'file', $bundle);
$instance['display']['media_gallery_thumbnail'] = array('type' => 'styles_file_media_gallery_thumbnail', 'label' => 'hidden');
$instance['display']['media_gallery_lightbox'] = array('type' => 'styles_file_media_gallery_large', 'label' => 'hidden');
$instance['display']['media_gallery_detail'] = array('type' => 'styles_file_media_gallery_large', 'label' => 'hidden');
$instance['display']['media_gallery_block_thumbnail'] = array('type' => 'styles_file_media_gallery_thumbnail', 'label' => 'hidden');
$instance['display']['media_gallery_collection_thumbnail'] = array('type' => 'styles_file_media_gallery_thumbnail', 'label' => 'hidden');
field_update_instance($instance);
}
/**
* Configure gallery nodes to allow video as well as image media.
*/
function media_gallery_update_7003() {
drupal_load('module', 'field');
$instance = field_info_instance('node', 'media_gallery_media', 'media_gallery');
// If the instance doesn't exist, we can't update it.
if ($instance) {
$instance['widget']['settings']['allowed_types'] = array('image' => 'image', 'video' => 'video');
field_update_instance($instance);
}
}
/**
* Configure media license field to have a per-type label and description.
*/
function media_gallery_update_7004() {
drupal_load('module', 'field');
drupal_load('module', 'media');
$t = get_t();
foreach (media_type_get_types() as $bundle => $type) {
$instance = field_info_instance('media', 'field_license', $bundle);
// If the instance doesn't exist, we can't update it.
if ($instance) {
$label = in_array($bundle, array('image', 'audio', 'video')) ? $bundle : 'file';
$instance['label'] = $t("License settings for this $label");
$instance['description'] = $t('Select a Creative Commons license for others who use this ' . $label . '.');
field_update_instance($instance);
}
}
}
/**
* There was an odd case where galleries created previous to youtube support
* lost some display settings on update. This update fixes those display settings.
*/
function media_gallery_update_7005() {
// Ensure that the media_description field has the proper label
foreach (array('video', 'image') as $bundle) {
$instance = field_info_instance('media', 'media_description', $bundle);
if ($instance) {
$instance['label'] = t('Description');
field_update_instance($instance);
}
}
// Ensure that media videos have the proper display formatters
$instance = field_info_instance('media', 'file', 'video');
if ($instance) {
$instance['display']['media_gallery_thumbnail'] = array('type' => 'styles_file_media_gallery_thumbnail', 'label' => 'hidden');
$instance['display']['media_gallery_lightbox'] = array('type' => 'styles_file_media_gallery_large', 'label' => 'hidden');
$instance['display']['media_gallery_detail'] = array('type' => 'styles_file_media_gallery_large', 'label' => 'hidden');
$instance['display']['media_gallery_block_thumbnail'] = array('type' => 'styles_file_media_gallery_thumbnail', 'label' => 'hidden');
$instance['display']['media_gallery_collection_thumbnail'] = array('type' => 'styles_file_media_gallery_thumbnail', 'label' => 'hidden');
field_update_instance($instance);
}
// Remove the old add_images_link extra field if it still exists
$bundle_settings = field_bundle_settings('node', 'media_gallery');
unset($bundle_settings['extra_fields']['display']['add_images_link']);
$bundle_settings['extra_fields']['display']['add_media_link']['full']['weight'] = 1;
$bundle_settings['extra_fields']['display']['add_media_link']['full']['visible'] = TRUE;
$bundle_settings['extra_fields']['display']['add_media_link']['default']['visible'] = FALSE;
$bundle_settings['extra_fields']['display']['add_media_link']['teaser']['visible'] = FALSE;
$bundle_settings['extra_fields']['display']['add_media_link']['media_gallery_block']['visible'] = FALSE;
field_bundle_settings('node', 'media_gallery', $bundle_settings);
}
/**
* Make sure the gallery node form includes the media_gallery_lightbox_extras
* checkbox.
*/
function media_gallery_update_7006() {
// Whether to show a "Exclude title and description" checkbox.
$field = array(
'field_name' => 'media_gallery_lightbox_extras',
'label' => 'Lightbox title and description',
'description' => 'Show title and description',
'default_value' => array(array('value' => 0)),
'widget' => array(
'type' => 'options_onoff',
),
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'full' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'media_gallery_block' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
);
$instance = array(
'field_name' => 'media_gallery_lightbox_extras',
'label' => 'Lightbox title and description',
'description' => 'Show title and description',
'default_value' => array(array('value' => 0)),
'entity_type' => 'node',
'bundle' => 'media_gallery',
'widget' => array(
'type' => 'options_onoff',
),
'display' => array(
'default' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'full' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'teaser' => array(
'type' => 'hidden',
'label' => 'hidden',
),
'media_gallery_block' => array(
'type' => 'hidden',
'label' => 'hidden',
),
),
);
_media_gallery_ensure_field($field);
_media_gallery_ensure_instance($instance);
}
/**
* Fix stored display settings for the 'add_media_link' extra field to include 'weight'.
*/
function media_gallery_update_7007() {
// _field_extra_fields_pre_render() requires an explicit 'weight' value for
// all extra field settings stored in the database. Early versions of this
// module failed to include that.
$bundle_settings = field_bundle_settings('node', 'media_gallery');
if (isset($bundle_settings['extra_fields']['display']['add_media_link'])) {
foreach ($bundle_settings['extra_fields']['display']['add_media_link'] as $view_mode => &$settings) {
$settings += array('weight' => 1);
}
}
field_bundle_settings('node', 'media_gallery', $bundle_settings);
}
/**
* Ensure that the description fields for galleries and media allow filtered text.
*/
function media_gallery_update_7008() {
// Ensure that the media_description field is filtered text.
foreach (array('video', 'image') as $bundle) {
$instance = field_info_instance('media', 'media_description', $bundle);
if ($instance) {
$instance['settings']['text_processing'] = 1;
field_update_instance($instance);
}
}
// Ensure that the media_gallery_description field is filtered text.
$instance = field_info_instance('node', 'media_gallery_description', 'media_gallery');
if ($instance) {
$instance['settings']['text_processing'] = 1;
field_update_instance($instance);
}
}
/**
* Update old per-view-mode media_gallery_* field formatters to the generic media_gallery formatter with a setting.
*/
function media_gallery_update_7009() {
$instances = array();
$fields = field_read_fields(array('type' => 'media'), array('include_inactive' => TRUE));
foreach ($fields as $field) {
$instances = array_merge($instances, field_read_instances(array('field_id' => $field['id']), array('include_inactive' => TRUE)));
}
foreach ($instances as $instance) {
$update_instance = FALSE;
foreach ($instance['display'] as $view_mode => $display) {
if (in_array($display['type'], array('media_gallery_thumbnail', 'media_gallery_lightbox', 'media_gallery_detail', 'media_gallery_block_thumbnail', 'media_gallery_collection_thumbnail'))) {
$update_instance = TRUE;
$instance['display'][$view_mode]['type'] = 'media_gallery';
$instance['display'][$view_mode]['settings'] = array('file_view_mode' => $display['type']);
}
}
if ($update_instance) {
field_update_instance($instance);
}
}
}
/**
* Configure galleries to allow audio.
*/
function media_gallery_update_7010() {
drupal_load('module', 'field');
$bundle = 'audio';
// Enable audio for the node's media_gallery field.
if ($instance = field_info_instance('node', 'media_gallery_media', 'media_gallery')) {
$instance['widget']['settings']['allowed_types'][$bundle] = $bundle;
field_update_instance($instance);
}
// Enable gallery view modes for audio entities.
$bundle_settings = field_bundle_settings('file', $bundle);
foreach (array('media_gallery_thumbnail', 'media_gallery_lightbox', 'media_gallery_detail', 'media_gallery_block_thumbnail', 'media_gallery_collection_thumbnail') as $view_mode) {
$bundle_settings['view_modes'][$view_mode]['custom_settings'] = TRUE;
}
field_bundle_settings('file', $bundle, $bundle_settings);
}
/**
* Empty update function.
*/
function media_gallery_update_7011() {
}
/**
* Deprecated update function. Moved to 7200.
*/
function media_gallery_update_7012() {
}
/**
* Converts old media_gallery_media field to media_gallery_file field.
*/
function media_gallery_update_7200() {
// Create fields (but not instances yet) for media_gallery nodes and
// for the gallery collection vocabulary.
foreach (_media_gallery_controlled_fields() as $field) {
_media_gallery_ensure_field($field);
}
// Attach fields to the media gallery node type (including a term reference
// for the default collection).
foreach (_media_gallery_controlled_instances('node') as $instance) {
_media_gallery_ensure_instance($instance);
}
// Make sure all media bundles have the instances we expect.
_media_gallery_ensure_media_instances();
// Move content from media_gallery_media to media_gallery_file.
$result = db_query("SELECT nid FROM {node} WHERE type = 'media_gallery'");
foreach ($result as $record) {
$node = node_load($record->nid);
$change = FALSE;
// Check all languages.
foreach ($node->media_gallery_media as $langcode => $media) {
// Only update if the media_gallery_file field is not in use, but
// media_gallery_media is in use.
if (empty($node->media_gallery_file[$langcode]) && !empty($node->media_gallery_media[$langcode])) {
foreach ($media as $file) {
// Copy the file contents over.
$node->media_gallery_file[$langcode][] = array(
'fid' => $file['fid'],
'description' => $file['title'],
'display' => 1,
);
$change = TRUE;
}
}
}
if ($change) {
// A change has occur, so we need to save the node.
node_save($node);
}
}
$instance = array(
'field_name' => 'media_gallery_media',
'entity_type' => 'node',
'bundle' => 'media_gallery',
);
// Remove the old media_gallery_media field.
field_delete_instance($instance, TRUE);
field_delete_field($instance['field_name']);
}