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