Projet

Général

Profil

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

root / drupal7 / sites / all / modules / media / modules / media_wysiwyg / includes / media_wysiwyg.pages.inc @ 1e39edcb

1 ca0757b9 Assos Assos
<?php
2
3
/**
4
 * @file
5
 * Common pages for the Media WYSIWYG module.
6
 */
7
8
/**
9
 * Form callback used when embedding media.
10
 *
11
 * Allows the user to pick a format for their media file.
12
 * Can also have additional params depending on the media type.
13
 */
14
function media_wysiwyg_format_form($form, &$form_state, $file) {
15
  $form_state['file'] = $file;
16
17
  // Allow for overrides to the fields.
18
  $query_fields = isset($_GET['fields']) ? drupal_json_decode($_GET['fields']) : array();
19
  $fields = media_wysiwyg_filter_field_parser(array('fields' => $query_fields), $file);
20
21 0ccfec7f Assos Assos
  $options = media_wysiwyg_get_file_view_mode_options($file);
22 ca0757b9 Assos Assos
23 0ccfec7f Assos Assos
  if (!count($options)) {
24 ca0757b9 Assos Assos
    throw new Exception('Unable to continue, no available formats for displaying media.');
25
  }
26
27 0ccfec7f Assos Assos
  // Generate all the previews.
28
  if (!isset($form_state['storage']['view_mode_previews'])) {
29
    $form_state['storage']['view_mode_previews'] = array();
30
    foreach ($options as $view_mode => $view_mode_label) {
31
      $view_mode_preview = media_wysiwyg_get_file_without_label($file, $view_mode, array('wysiwyg' => TRUE));
32
      $form_state['storage']['view_mode_previews'][$view_mode] = drupal_render($view_mode_preview);
33
    }
34
  }
35
36
  // Add the previews back into the form array so they can be altered.
37
  $form['#formats'] = &$form_state['storage']['view_mode_previews'];
38
39 ca0757b9 Assos Assos
  // Allow for overrides to the display format.
40
  $default_view_mode = is_array($query_fields) && isset($query_fields['format']) ? $query_fields['format'] : variable_get('media_wysiwyg_wysiwyg_default_view_mode', 'full');
41 0ccfec7f Assos Assos
  if (!isset($options[$default_view_mode])) {
42
    reset($options);
43
    $default_view_mode = key($options);
44 ca0757b9 Assos Assos
  }
45
46
  // Add the previews by reference so that they can easily be altered by
47
  // changing $form['#formats'].
48 0ccfec7f Assos Assos
  $settings['media']['formatFormFormats'] = &$form_state['storage']['view_mode_previews'];
49 ca0757b9 Assos Assos
  $form['#attached']['js'][] = array('data' => $settings, 'type' => 'setting');
50
51
  // Add the required libraries, JavaScript and CSS for the form.
52
  $form['#attached']['library'][] = array('media', 'media_base');
53
  $form['#attached']['library'][] = array('system', 'form');
54
  $form['#attached']['css'][] = drupal_get_path('module', 'media_wysiwyg') . '/css/media_wysiwyg.css';
55
  $form['#attached']['js'][] = drupal_get_path('module', 'media_wysiwyg') . '/js/media_wysiwyg.format_form.js';
56
57
  $form['title'] = array(
58
    '#markup' => t('Embedding %filename', array('%filename' => $file->filename)),
59
  );
60
61
  $preview = media_get_thumbnail_preview($file);
62
63
  $form['preview'] = array(
64
    '#type' => 'markup',
65
    '#markup' => drupal_render($preview),
66
  );
67
68
  // These will get passed on to WYSIWYG.
69
  $form['options'] = array(
70
    '#type' => 'fieldset',
71
    '#title' => t('options'),
72
  );
73
74 0ccfec7f Assos Assos
  // @TODO: Display more verbose information about which formatter and what it
75
  // does.
76 ca0757b9 Assos Assos
  $form['options']['format'] = array(
77
    '#type' => 'select',
78
    '#title' => t('Display as'),
79
    '#options' => $options,
80
    '#default_value' => $default_view_mode,
81
    '#description' => t('Choose the type of display you would like for this
82
      file. Please be aware that files may display differently than they do when
83
      they are inserted into an editor.')
84
  );
85
86 bf3c8457 Florent Torregrosa
  // Add fields from the file, so that we can override them if necessary.
87 ca0757b9 Assos Assos
  $form['options']['fields'] = array();
88
  foreach ($fields as $field_name => $field_value) {
89
    $file->{$field_name} = $field_value;
90
  }
91
  field_attach_form('file', $file, $form['options']['fields'], $form_state);
92
  $instance = field_info_instances('file', $file->type);
93
  foreach ($instance as $field_name => $field_value) {
94 da542b7b Assos Assos
    $info = field_info_field($field_name);
95
    // Only single valued fields can be overridden.
96
    $allow = $info['cardinality'] == 1 && !empty($instance[$field_name]['settings']['wysiwyg_override']);
97
    $form['options']['fields'][$field_name]['#access'] = $allow;
98 ca0757b9 Assos Assos
  }
99
100 1e39edcb Assos Assos
  // Add view mode preview.
101
  media_wysiwyg_format_form_view_mode($form, $form_state, $file);
102
103 ca0757b9 Assos Assos
  // Similar to a form_alter, but we want this to run first so that
104
  // media.types.inc can add the fields specific to a given type (like alt tags
105
  // on media). If implemented as an alter, this might not happen, making other
106
  // alters not be able to work on those fields.
107
  // @todo: We need to pass in existing values for those attributes.
108
  drupal_alter('media_wysiwyg_format_form_prepare', $form, $form_state, $file);
109
110
  if (!element_children($form['options'])) {
111
    $form['options']['#attributes'] = array('style' => 'display:none');
112
  }
113
114
  return $form;
115
}
116 1e39edcb Assos Assos
117
/**
118
 * Add ajax preview when selecting view mode in wysiwyg editor.
119
 */
120
function media_wysiwyg_format_form_view_mode(&$form, $form_state, $file)  {
121
  // Check to see if a view mode ("format") has already been specified for
122
  //  this media item. First, check for a standard form-submitted value.
123
  if (!empty($form_state['values']['format'])) {
124
    $view_mode = $form_state['values']['format'];
125
  }
126
  // Second, check the request for a JSON-encoded value.
127
  elseif (isset($_GET['fields'])) {
128
    $query_fields = drupal_json_decode($_GET['fields']);
129
    if (isset($query_fields['format'])) {
130
      $view_mode = $query_fields['format'];
131
    }
132
  }
133
  // If we were unable to determine a view mode, or we found a view mode
134
  //  that does not exist in the list of format options presented on this
135
  //  form, use the default view mode.
136
  if (!isset($view_mode) || !array_key_exists($view_mode, $form['options']['format']['#options'])) {
137
    $view_mode = variable_get('media_wysiwyg_wysiwyg_default_view_mode', 'full');
138
  }
139
140
  $form['preview'] = array();
141
  $form['preview']['#prefix'] = '<div class="media-item"><div class="media-thumbnail">';
142
  $form['preview']['#suffix'] = '</div><div class="label-wrapper"><label class="media-filename">' . $file->filename . '</label></div></div>';
143
  $form['preview']['thumbnail'] = file_view_file($file, $view_mode);
144
  $form['preview']['thumbnail']['#prefix'] = '<div id="media-preview">';
145
  $form['preview']['thumbnail']['#suffix'] = '</div>';
146
147
  if (!isset($form['options']['format']['#default_value'])) {
148
    $form['options']['format']['#default_value'] = $view_mode;
149
  }
150
  $form['options']['format']['#ajax'] = array(
151
    'callback' => 'media_wysiwyg_format_form_preview',
152
    'wrapper' => 'media-preview',
153
  );
154
155
  $wysiwyg_view_mode = db_query('SELECT view_mode FROM {media_view_mode_wysiwyg} WHERE type = :type', array(':type' => $file->type))->fetchField();
156
  $view_modes = media_wysiwyg_get_wysiwyg_allowed_view_modes($file);
157
  $formats = $options = array();
158
159
  foreach ($view_modes as $view_mode => $view_mode_info) {
160
    $options[$view_mode] = $view_mode_info['label'];
161
162
    if (!empty($wysiwyg_view_mode)) {
163
      $element = media_wysiwyg_get_file_without_label($file, $wysiwyg_view_mode, array('wysiwyg' => TRUE));
164
    }
165
    else {
166
      $element = media_wysiwyg_get_file_without_label($file, $view_mode, array('wysiwyg' => TRUE));
167
    }
168
169
    $formats[$view_mode] = drupal_render($element);
170
  }
171
172
  $form['#formats'] = $formats;
173
  $form['options']['format']['#options'] = $options;
174
}
175
176
/**
177
 * AJAX callback to select the portion of the format form to be updated with a preview.
178
 *
179
 * @param array $form
180
 *   An associative array containing the structure of the form.
181
 * @param array $form_state
182
 *   An associative array containing the current state of the form.
183
 *
184
 * @return array
185
 *   The preview form item.
186
 */
187
function media_wysiwyg_format_form_preview($form, $form_state) {
188
  return $form['preview']['thumbnail'];
189
}