popsu-d7/sites/all/modules/debut_media/debut_media.module
Bachir Soussi Chiadmi 1bc61b12ad first import
2015-04-08 11:40:19 +02:00

325 lines
10 KiB
Plaintext

<?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(),
);
}
}
}
}