first import
This commit is contained in:
@@ -0,0 +1,324 @@
|
||||
<?php
|
||||
|
||||
include_once('debut_media.features.inc');
|
||||
|
||||
/**
|
||||
* Implements hook_init().
|
||||
*
|
||||
* Add javascript and css required for the media browser link.
|
||||
*/
|
||||
function debut_media_init() {
|
||||
if (arg(0) == 'file' && is_null(arg(1))) {
|
||||
$path = drupal_get_path('module', 'media');
|
||||
$element['#attached'] = array(
|
||||
'js' => array($path . '/js/media.admin.js'),
|
||||
'css' => array($path . '/css/media.css'),
|
||||
);
|
||||
module_load_include('inc', 'media', 'includes/media.browser');
|
||||
media_attach_browser_js($element);
|
||||
// Render an empty element to add the js and css.
|
||||
drupal_render($element);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_menu_alter().
|
||||
*
|
||||
* Add a local action link to the media page.
|
||||
*/
|
||||
function debut_media_menu_alter(&$items) {
|
||||
if (isset($items['media/browser'])) {
|
||||
$items['media/add'] = $items['media/browser'];
|
||||
$items['media/add']['type'] = MENU_LOCAL_ACTION;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_entity_info_alter().
|
||||
*
|
||||
* Enable custom settings for the 'full' file view mode.
|
||||
* See http://drupal.org/node/1291428.
|
||||
*/
|
||||
function debut_media_entity_info_alter(&$entity_info) {
|
||||
$entity_info['file']['view modes']['full']['custom settings'] = TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_module_implements_alter().
|
||||
*
|
||||
* Extends the core file entity to be fieldable. Modules can define file types
|
||||
* via hook_file_type_info(). For each defined type, create a bundle, so that
|
||||
* fields can be configured per file type.
|
||||
*/
|
||||
function debut_media_module_implements_alter(&$implementations, $hook) {
|
||||
if ($hook == 'entity_info_alter') {
|
||||
// Move debut_media_entity_info_alter() to the end of the list.
|
||||
// module_implements() iterates through $implementations with a foreach
|
||||
// loop which PHP iterates in the order that the items were added, so to
|
||||
// move an item to the end of the array, we remove it and then add it.
|
||||
$group = $implementations['debut_media'];
|
||||
unset($implementations['debut_media']);
|
||||
$implementations['debut_media'] = $group;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_views_data_alter().
|
||||
*
|
||||
* Use the media_title field for the file fid argument's name field.
|
||||
*
|
||||
* @todo: determine why this doesn't appear to work with views contextual
|
||||
* filters;
|
||||
*/
|
||||
function debut_media_views_data_alter(&$data) {
|
||||
$data['file_managed']['fid']['argument']['name field'] = 'media_title';
|
||||
$data['file_managed']['fid']['argument']['name table'] = 'field_data_media_title';
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_page_alter().
|
||||
*
|
||||
* Set the page title for media items to the title of the item.
|
||||
*/
|
||||
function debut_media_page_alter(&$variables) {
|
||||
if (arg(0) == 'file' && $file = menu_get_object('file')) {
|
||||
if (!empty($file->media_title['und'][0]['safe_value'])) {
|
||||
drupal_set_title($file->media_title['und'][0]['safe_value']);
|
||||
}
|
||||
}
|
||||
// Add late in the page generation process to override the jcarousel css.
|
||||
drupal_add_css(drupal_get_path('module', 'debut_media') . '/debut_media.css');
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of Styles module hook_styles_default_styles().
|
||||
*/
|
||||
function debut_media_styles_default_styles() {
|
||||
return array(
|
||||
'file' => array(
|
||||
'styles' => array(
|
||||
'medium_large' => array(
|
||||
'label' => 'Medium large',
|
||||
'description' => 'A medium large format of the media.',
|
||||
),
|
||||
'small_square_thumbnail' => array(
|
||||
'label' => 'Small square thumbnail',
|
||||
'description' => 'A small, square format of the media.',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of Styles module hook_styles_default_presets_alter().
|
||||
*/
|
||||
function debut_media_styles_default_presets_alter(&$presets) {
|
||||
foreach (array_keys(debut_media_image_default_styles()) as $image_style) {
|
||||
// Cover the containers defined by file_styles and media_youtube.
|
||||
foreach (array('application', 'image', 'audio', 'video', 'default', 'media_youtube', 'media_vimeo') as $type) {
|
||||
// Ensure another module hasn't removed the container.
|
||||
if (isset($presets['file']['containers'][$type])) {
|
||||
$presets['file']['containers'][$type]['styles'][$image_style] = array(
|
||||
'default preset' => 'medium_large',
|
||||
);
|
||||
$presets['file']['containers'][$type]['presets'][$image_style] = array(
|
||||
array(
|
||||
'name' => 'image_style',
|
||||
'settings' => array(
|
||||
'image_style' => $image_style,
|
||||
),
|
||||
),
|
||||
array(
|
||||
'name' => 'thumbnail',
|
||||
'settings' => array(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of hook_field_default_fields_alter().
|
||||
*
|
||||
* Selectively add media fields to content types provided by features. To
|
||||
* receive a media_field instance, the feature should include the following in
|
||||
* its .info file:
|
||||
* debut[media][node_types][my_content_type] = my_content_type
|
||||
* where my_content_type is the name of a feature-provided content type.
|
||||
*
|
||||
* The media field status of a feature's content type can be altered by using
|
||||
* hook_system_info_alter(). Example:
|
||||
* %code
|
||||
* function example_system_info_alter(&$info, $module, $type) {
|
||||
* if ($type == $module && $module->name == 'debut_article') {
|
||||
* unset($info['debut']['media']['article']);
|
||||
* }
|
||||
* }
|
||||
* %endcode
|
||||
*/
|
||||
function debut_media_field_default_fields_alter(&$items) {
|
||||
// Get features modules and determine which if claim media.
|
||||
$features = features_get_features();
|
||||
$node_types = array();
|
||||
foreach ($features as $feature) {
|
||||
$info = $feature->info;
|
||||
if (isset($info['debut']) && isset($info['debut']['media']) && isset($info['debut']['media']['node_types'])) {
|
||||
// Key the array by node type to match the format of the 'service_links_node_types' variable.
|
||||
$node_types = array_merge($node_types, array_combine($info['debut']['media']['node_types'], $info['debut']['media']['node_types']));
|
||||
}
|
||||
}
|
||||
// Add media fields to the designated node types.
|
||||
if (!empty($node_types)) {
|
||||
$field = debut_media_media_field();
|
||||
foreach ($node_types as $type) {
|
||||
// Don't override an existing field. This allows features to provide
|
||||
// their own version of the field.
|
||||
if (!isset($items["node-$type-field_media"])) {
|
||||
$field['field_instance']['bundle'] = $type;
|
||||
$items["node-$type-field_media"] = $field;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the structure of the media field.
|
||||
*
|
||||
* The instance bundle is marked as 'placeholder'. It should be converted to
|
||||
* the appropriate node type before being used.
|
||||
*/
|
||||
function debut_media_media_field() {
|
||||
$field = array(
|
||||
'field_config' => array(
|
||||
'active' => '1',
|
||||
'cardinality' => '-1',
|
||||
'deleted' => '0',
|
||||
'entity_types' => array(),
|
||||
'field_name' => 'field_media',
|
||||
'foreign keys' => array(
|
||||
'fid' => array(
|
||||
'columns' => array(
|
||||
'fid' => 'fid',
|
||||
),
|
||||
'table' => 'file_managed',
|
||||
),
|
||||
),
|
||||
'indexes' => array(
|
||||
'fid' => array(
|
||||
0 => 'fid',
|
||||
),
|
||||
),
|
||||
'module' => 'file',
|
||||
'settings' => array(
|
||||
'display_default' => 0,
|
||||
'display_field' => 0,
|
||||
'uri_scheme' => 'public',
|
||||
),
|
||||
'translatable' => '0',
|
||||
'type' => 'file',
|
||||
),
|
||||
'field_instance' => array(
|
||||
'bundle' => 'placeholder',
|
||||
'deleted' => '0',
|
||||
'description' => '',
|
||||
'display' => array(
|
||||
'default' => array(
|
||||
'label' => 'hidden',
|
||||
'module' => 'file_entity',
|
||||
'settings' => array(
|
||||
'file_view_mode' => 'media_large',
|
||||
),
|
||||
'type' => 'file_rendered',
|
||||
'weight' => '4',
|
||||
),
|
||||
'teaser' => array(
|
||||
'label' => 'above',
|
||||
'settings' => array(),
|
||||
'type' => 'hidden',
|
||||
'weight' => 0,
|
||||
),
|
||||
),
|
||||
'entity_type' => 'node',
|
||||
'field_name' => 'field_media',
|
||||
'label' => 'Media',
|
||||
'required' => 0,
|
||||
'settings' => array(
|
||||
'description_field' => 0,
|
||||
'file_directory' => '',
|
||||
'file_extensions' => 'jpg jpeg gif png txt doc xls pdf ppt pps odt ods odp',
|
||||
'max_filesize' => '',
|
||||
'user_register_form' => FALSE,
|
||||
),
|
||||
'widget' => array(
|
||||
'active' => 1,
|
||||
'module' => 'media',
|
||||
'settings' => array(
|
||||
'allowed_schemes' => array(
|
||||
'public' => 'public',
|
||||
'vimeo' => 'vimeo',
|
||||
'youtube' => 'youtube',
|
||||
),
|
||||
'allowed_types' => array(
|
||||
'audio' => 0,
|
||||
'default' => 'default',
|
||||
'image' => 'image',
|
||||
'video' => 'video',
|
||||
),
|
||||
'browser_plugins' => array(
|
||||
'library' => 0,
|
||||
'media_default--media_browser_1' => 0,
|
||||
'media_internet' => 0,
|
||||
'upload' => 0,
|
||||
),
|
||||
'progress_indicator' => 'throbber',
|
||||
),
|
||||
'type' => 'media_generic',
|
||||
'weight' => '10',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
return $field;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_file_default_displays_alter().
|
||||
*
|
||||
* Clone settings for 'media_large' to new 'full' view mode. Add a generic file
|
||||
* fallback for each view mode + file type combo.
|
||||
*
|
||||
* @todo: remove 'media_large' to 'full' cloning once media provider modules
|
||||
* catch up. See http://drupal.org/node/1291428.
|
||||
*/
|
||||
function debut_media_file_default_displays_alter(&$items) {
|
||||
$info = entity_get_info('file');
|
||||
$bundles = array_keys($info['bundles']);
|
||||
$view_modes = array_keys($info['view modes']);
|
||||
|
||||
foreach ($items as $key => $data) {
|
||||
list($file_type, $view_mode, $formatter_name) = explode('__', $key);
|
||||
if ($view_mode == 'media_large') {
|
||||
$display_name = implode('__', array($file_type, 'full', $formatter_name));
|
||||
if (!isset($items[$display_name])) {
|
||||
$items[$display_name] = clone($data);
|
||||
$items[$display_name]->name = $display_name;
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ($bundles as $file_type) {
|
||||
foreach ($view_modes as $view_mode) {
|
||||
$display_name = implode('__', array($file_type, $view_mode, 'file_field_file_default'));
|
||||
if (!isset($items[$display_name])) {
|
||||
$items[$display_name] = (object) array(
|
||||
'api_version' => 1,
|
||||
'name' => $display_name,
|
||||
'status' => 1,
|
||||
'weight' => 35,
|
||||
'settings' => array(),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user