file_entity_link.module in File Entity Link 7
File
file_entity_link.module
View source
<?php
define('FILE_ENTITY_LINK_SETTINGS_VAR', 'file_entity_link_settings');
function file_entity_link_theme() {
return array(
'file_entity_link_add_link' => array(
'render element' => 'element',
),
);
}
function theme_file_entity_link_add_link($vars) {
$element = $vars['element'];
$children = drupal_render($element['#contents']);
$element['#uri']['options']['html'] = TRUE;
return l($children, $element['#uri']['path'], $element['#uri']['options']);
}
function file_entity_link_file_view($file, $view_mode, $langcode) {
$settings = variable_get(FILE_ENTITY_LINK_SETTINGS_VAR, array());
if (isset($settings[$file->type][$view_mode]) && $settings[$file->type][$view_mode] && !empty($file->referencing_entity)) {
$entity_type = '';
$referencing_entity = $file->referencing_entity;
if ($referencing_entity instanceof FieldCollectionItemEntity) {
$entity_type = $referencing_entity
->hostEntityType();
$referencing_entity = $referencing_entity
->hostEntity();
}
else {
if (isset($referencing_entity->nid)) {
$entity_type = 'node';
}
elseif (isset($referencing_entity->tid)) {
$entity_type = 'taxonomy_term';
}
}
if (!empty($entity_type)) {
switch ($entity_type) {
default:
$uri = entity_uri('node', $referencing_entity);
}
}
if (!empty($uri)) {
$file->content['file'] = array(
'#contents' => $file->content['file'],
'#uri' => $uri,
'#theme' => 'file_entity_link_add_link',
);
}
}
}
function file_entity_link_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'file_entity_file_display_form') {
$settings = variable_get(FILE_ENTITY_LINK_SETTINGS_VAR, array());
$form['link'] = array(
'#type' => 'item',
'#title' => 'Link options',
'link_file' => array(
'#type' => 'checkbox',
'#title' => 'Link file to referencing entity',
'#default_value' => isset($settings[$form['#file_type']][$form['#view_mode']]) ? $settings[$form['#file_type']][$form['#view_mode']] : FALSE,
),
);
$form['#submit'][] = 'file_entity_link_display_form_submit';
}
}
function file_entity_link_display_form_submit($form, &$form_state) {
$settings = variable_get(FILE_ENTITY_LINK_SETTINGS_VAR, array());
if (!isset($settings[$form['#file_type']])) {
$settings[$form['#file_type']] = array();
}
$settings[$form['#file_type']][$form['#view_mode']] = $form_state['values']['link']['link_file'];
variable_set(FILE_ENTITY_LINK_SETTINGS_VAR, $settings);
}