Projet

Général

Profil

Paste
Télécharger (7,85 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / media_ckeditor / media_ckeditor.module @ 59ae487e

1
<?php
2

    
3
/**
4
 * @file
5
 * Primarily Drupal hooks.
6
 */
7

    
8
/**
9
 * Implements hook_element_info_alter().
10
 */
11
function media_ckeditor_element_info_alter(&$types) {
12
  $types['text_format']['#pre_render'][] = 'media_ckeditor_pre_render_text_format';
13
  $types['media']['#pre_render'][] = 'media_ckeditor_pre_render_media';
14
}
15

    
16
/**
17
 * Adds CKEditor-specific JavaScript.
18
 */
19
function media_ckeditor_pre_render_text_format($element) {
20
  // filter_process_format() copies properties to the expanded 'value' child
21
  // element.
22
  if (!isset($element['format'])) {
23
    return $element;
24
  }
25

    
26
  $field = &$element['value'];
27
  $settings = array(
28
    'field' => $field['#id'],
29
  );
30

    
31
  if (!isset($field['#value'])) {
32
    return $element;
33
  }
34

    
35
  // Add CKEditor-specific JS.
36
  $element['#attached']['js'][] = array(
37
    'data' => drupal_get_path('module', 'media_ckeditor') . '/js/plugins/media/library.js',
38
    'type' => 'file',
39
    'scope' => 'footer',
40
    // It's important that this javascript fire after CKEditor.
41
    'weight' => 20,
42
  );
43

    
44
  // Communicate to javascript whether we will be displaying fully rendered
45
  // file entities in the WYSIWYG.
46
  $element['#attached']['js'][] = array(
47
    'data' => array(
48
      'media_ckeditor' => array(
49
        'fully_rendered_files' => _media_ckeditor_fully_rendered_files_in_wysiwyg(),
50
      ),
51
    ),
52
    'type' => 'setting',
53
  );
54

    
55
  return $element;
56
}
57

    
58
/**
59
 * Implements hook_form_ID_alter().
60
 */
61
function media_ckeditor_form_media_wysiwyg_format_form_alter(&$form, $form_state) {
62
  // Add our overrides to the media format form javascript.
63
  $form['#attached']['js'][] = drupal_get_path('module', 'media_ckeditor') . '/js/media_ckeditor.format_form.js';
64
}
65

    
66
/**
67
 * Implements hook_media_browser_params_alter().
68
 */
69
function media_ckeditor_media_browser_params_alter(&$stored_params) {
70
  // We add this custom param when the media dialog is invoked in library.js.
71
  if (isset($stored_params['id']) && $stored_params['id'] == 'media_wysiwyg') {
72
    // Set the default browser params from settings form if not already set.
73
    if (empty($stored_params['enabledPlugins'])) {
74
      $stored_params['enabledPlugins'] = variable_get('media_wysiwyg_wysiwyg_browser_plugins', array());
75
    }
76
    if (empty($stored_params['file_directory'])) {
77
      $stored_params['file_directory'] = variable_get('media_wysiwyg_wysiwyg_upload_directory', '');
78
    }
79
    if (empty($stored_params['types'])) {
80
      $stored_params['types'] = variable_get('media_wysiwyg_wysiwyg_allowed_types', array(
81
        'audio',
82
        'image',
83
        'video',
84
        'document'
85
      ));
86
    }
87
  }
88
}
89

    
90
/**
91
 * Implements hook_form_FORM_ID_alter().
92
 */
93
function media_ckeditor_form_field_ui_field_edit_form_alter(&$form, &$form_state) {
94
  // Add a checkbox that marks this field as needing an "Insert" button.
95
  if (!empty($form['#instance']['widget']['module'])) {
96
    if ('media' === $form['#instance']['widget']['module']) {
97
      $form['instance']['settings']['wysiwyg_insert'] = array(
98
        '#type' => 'checkbox',
99
        '#title' => t('Show button for inserting files into WYSIWYG editor'),
100
        '#description' => t('If checked, then an "Insert" button will be available to put attached files into the active WYSIWYG editor.'),
101
        '#default_value' => isset($form['#instance']['settings']['wysiwyg_insert']) ? $form['#instance']['settings']['wysiwyg_insert'] : FALSE,
102
      );
103
    }
104
  }
105
}
106

    
107
/**
108
 * Pre-render callback for media elements.
109
 */
110
function media_ckeditor_pre_render_media($element) {
111
  // If the media widget has been configured to have an Insert button, we'll
112
  // communicate that information through javascript settings.
113
  $instance = field_info_instance($element['#entity_type'], $element['#field_name'], $element['#bundle']);
114
  if (!empty($instance['settings']['wysiwyg_insert'])) {
115
    $element['#attached']['js'][] = array(
116
      'type' => 'setting',
117
      'data' => array(
118
        'media_ckeditor' => array(
119
          'wysiwyg_insert' => array(
120
            $element['#field_name'] => TRUE,
121
          ),
122
        ),
123
      ),
124
    );
125
  }
126
  return $element;
127
}
128

    
129

    
130
/**
131
 * Helper function to tell whether we should render full entities in WYSIWYGs.
132
 */
133
function _media_ckeditor_fully_rendered_files_in_wysiwyg() {
134
  if (variable_get('media_ckeditor_fully_rendered_files', FALSE) &&
135
      user_access('view overridden file entities in wysiwyg')) {
136
    return TRUE;
137
  }
138
  return FALSE;
139
}
140

    
141
/**
142
 * Implements hook_menu().
143
 */
144
function media_ckeditor_menu() {
145
  $items = array();
146

    
147
  // Add our AJAX-friendly route for rendering the file entities for use in
148
  // the WYSIWYG editor.
149
  $items['media/rendered-in-wysiwyg'] = array(
150
    'page callback' => 'media_ckeditor_rendered_file_in_wysiwyg',
151
    'access callback' => '_media_ckeditor_fully_rendered_files_in_wysiwyg',
152
    'file' => 'includes/media_ckeditor.pages.inc',
153
    'theme callback' => 'ajax_base_page_theme',
154
    'type' => MENU_CALLBACK,
155
  );
156

    
157
  return $items;
158
}
159

    
160
/**
161
 * A permission to allow users to view overridden files in the WYSIWYG.
162
 */
163
function media_ckeditor_permission() {
164
  return array(
165
    'view overridden file entities in wysiwyg' => array(
166
      'title' => t('View overridden file entities in wysiwyg'),
167
      'description' => t('When users are embedding files in WYSIWYGs, the file entities will be displayed with whatever overrides the user may have specified in the Media popup.'),
168
    ),
169
  );
170
}
171

    
172
/**
173
 * Implements hook_form_FORM_ID_alter().
174
 */
175
function media_ckeditor_form_media_admin_config_browser_alter(&$form, &$form_state) {
176

    
177
  // Add our optional settings to the Media Browser admin form.
178
  $form['media_ckeditor'] = array(
179
    '#type' => 'fieldset',
180
    '#title' => t('Ckeditor WYSIWYG configuration'),
181
    '#collapsible' => TRUE,
182
    '#collapsed' => FALSE,
183
    '#weight' => 50,
184
  );
185
  $form['media_ckeditor']['media_ckeditor_fully_rendered_files'] = array(
186
    '#type' => 'checkbox',
187
    '#title' => t('Display fully rendered files in WYSIWYG'),
188
    '#description' => t('Check this box to render files in the WYSIWYG dynamically, to reflect any field overrides the user may have specified. Note that this requires the user has the corresponding permission: "View overridden file entities in wysiwyg"'),
189
    '#default_value' => variable_get('media_ckeditor_fully_rendered_files', FALSE),
190
  );
191
}
192

    
193
/**
194
 * Implements hook_media_wysiwyg_token_to_markup_alter().
195
 */
196
function media_ckeditor_media_wysiwyg_token_to_markup_alter(&$element, $tag_info, $settings) {
197

    
198
  // Check to see if files embedded in WYSIWYG should be fully rendered. If so,
199
  // replace the simpler Media placeholder with a fully rendered file entity.
200
  if (!empty($settings['wysiwyg']) &&
201
      _media_ckeditor_fully_rendered_files_in_wysiwyg()) {
202
    $file = $tag_info['file'];
203
    $file->override['wysiwyg'] = TRUE;
204
    $view_mode = $tag_info['view_mode'];
205
    $fields = (!empty($settings['fields'])) ? $settings['fields'] : array();
206
    $element = media_ckeditor_render_file_with_overrides($file, $view_mode, $fields);
207
  }
208
}
209

    
210
/**
211
 * Helper function to get a fully rendered file entity with optional overrides.
212
 */
213
function media_ckeditor_render_file_with_overrides($file, $view_mode, $fields = array()) {
214

    
215
  foreach ($fields as $field_name => $value) {
216
    if (isset($file->{$field_name})) {
217
      $file->{$field_name} = $value;
218
    }
219
  }
220

    
221
  $file_array = array($file->fid => $file);
222
  $build = file_entity_metadata_view_file($file_array, $view_mode);
223

    
224
  // Manually remove contextual links.
225
  if (!empty($build['file'][$file->fid]['#contextual_links'])) {
226
    unset($build['file'][$file->fid]['#contextual_links']);
227
  }
228

    
229
  return $build;
230
}
231

    
232
/**
233
 * Implements hook_preprocess_file_entity().
234
 */
235
function media_ckeditor_preprocess_file_entity(&$vars) {
236

    
237
  // If we are rendering this as a fully rendered file entity in a WYSIWYG,
238
  // set $page to TRUE so that the title doesn't display.
239
  // @see file_entity/file_entity.tpl.php.
240
  if (!empty($vars['override']['wysiwyg']) &&
241
      _media_ckeditor_fully_rendered_files_in_wysiwyg()) {
242
    $vars['page'] = TRUE;
243
  }
244
}