1
|
<?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
|
$options = media_wysiwyg_get_file_view_mode_options($file);
|
22
|
|
23
|
if (!count($options)) {
|
24
|
throw new Exception('Unable to continue, no available formats for displaying media.');
|
25
|
}
|
26
|
|
27
|
// 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
|
// 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
|
if (!isset($options[$default_view_mode])) {
|
42
|
reset($options);
|
43
|
$default_view_mode = key($options);
|
44
|
}
|
45
|
|
46
|
// Add the previews by reference so that they can easily be altered by
|
47
|
// changing $form['#formats'].
|
48
|
$settings['media']['formatFormFormats'] = &$form_state['storage']['view_mode_previews'];
|
49
|
$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
|
// @TODO: Display more verbose information about which formatter and what it
|
75
|
// does.
|
76
|
$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
|
// If necessary, display the alignment widget.
|
87
|
if (variable_get('media_wysiwyg_alignment', FALSE)) {
|
88
|
$align_default = empty($query_fields['alignment']) ? '' : $query_fields['alignment'];
|
89
|
$align_options = array(
|
90
|
'' => t('None'),
|
91
|
'left' => t('Left'),
|
92
|
'right' => t('Right'),
|
93
|
'center' => t('Center'),
|
94
|
);
|
95
|
if (!isset($align_options[$align_default])) {
|
96
|
// Safety code for a malformed token.
|
97
|
$align_default = '';
|
98
|
}
|
99
|
$form['options']['alignment'] = array(
|
100
|
'#type' => 'select',
|
101
|
'#title' => t('Alignment'),
|
102
|
'#options' => $align_options,
|
103
|
'#description' => t('Choose how you would like the media to be aligned with surrounding content.'),
|
104
|
'#default_value' => $align_default,
|
105
|
);
|
106
|
}
|
107
|
// Add fields from the file, so that we can override them if necessary.
|
108
|
$form['options']['fields'] = array();
|
109
|
foreach ($fields as $field_name => $field_value) {
|
110
|
$file->{$field_name} = $field_value;
|
111
|
}
|
112
|
// Get the external url from the fid array.
|
113
|
$external_url = empty($query_fields['external_url']) ? NULL : $query_fields['external_url'];
|
114
|
// Field to attach external url's to files for linking.
|
115
|
if (variable_get('media_wysiwyg_external_link', FALSE)) {
|
116
|
if ($file->type == 'image') {
|
117
|
$form['options']['external_url'] = array(
|
118
|
'#type' => 'textfield',
|
119
|
'#title' => t('Link Image'),
|
120
|
'#description' => t('Enter a URL to turn the image into a link.'),
|
121
|
'#default_value' => $external_url,
|
122
|
);
|
123
|
}
|
124
|
}
|
125
|
field_attach_form('file', $file, $form['options']['fields'], $form_state);
|
126
|
$instance = field_info_instances('file', $file->type);
|
127
|
foreach ($instance as $field_name => $field_value) {
|
128
|
$info = field_info_field($field_name);
|
129
|
$allow = !empty($instance[$field_name]['settings']['wysiwyg_override']);
|
130
|
// Only single valued fields can be overridden normally, unless Media is
|
131
|
// configured otherwise with "media_wysiwyg_wysiwyg_override_multivalue".
|
132
|
if ($allow && $info['cardinality'] != 1) {
|
133
|
$allow = variable_get('media_wysiwyg_wysiwyg_override_multivalue', FALSE);
|
134
|
}
|
135
|
$form['options']['fields'][$field_name]['#access'] = $allow;
|
136
|
}
|
137
|
|
138
|
// Add view mode preview.
|
139
|
media_wysiwyg_format_form_view_mode($form, $form_state, $file);
|
140
|
|
141
|
// Similar to a form_alter, but we want this to run first so that
|
142
|
// media.types.inc can add the fields specific to a given type (like alt tags
|
143
|
// on media). If implemented as an alter, this might not happen, making other
|
144
|
// alters not be able to work on those fields.
|
145
|
// @todo: We need to pass in existing values for those attributes.
|
146
|
drupal_alter('media_wysiwyg_format_form_prepare', $form, $form_state, $file);
|
147
|
|
148
|
if (!element_children($form['options'])) {
|
149
|
$form['options']['#attributes'] = array('style' => 'display:none');
|
150
|
}
|
151
|
|
152
|
return $form;
|
153
|
}
|
154
|
|
155
|
/**
|
156
|
* Add ajax preview when selecting view mode in wysiwyg editor.
|
157
|
*/
|
158
|
function media_wysiwyg_format_form_view_mode(&$form, $form_state, $file) {
|
159
|
// Check to see if a view mode ("format") has already been specified for
|
160
|
// this media item. First, check for a standard form-submitted value.
|
161
|
if (!empty($form_state['values']['format'])) {
|
162
|
$view_mode = $form_state['values']['format'];
|
163
|
}
|
164
|
// Second, check the request for a JSON-encoded value.
|
165
|
elseif (isset($_GET['fields'])) {
|
166
|
$query_fields = drupal_json_decode($_GET['fields']);
|
167
|
if (isset($query_fields['format'])) {
|
168
|
$view_mode = $query_fields['format'];
|
169
|
}
|
170
|
}
|
171
|
// If we were unable to determine a view mode, or we found a view mode
|
172
|
// that does not exist in the list of format options presented on this
|
173
|
// form, use the default view mode.
|
174
|
if (!isset($view_mode) || !array_key_exists($view_mode, $form['options']['format']['#options'])) {
|
175
|
$view_mode = variable_get('media_wysiwyg_wysiwyg_default_view_mode', 'full');
|
176
|
}
|
177
|
|
178
|
$link_options = array(
|
179
|
'attributes' => array(
|
180
|
'class' => 'button',
|
181
|
'title' => t('Use for replace fox or edit file fields.'),
|
182
|
),
|
183
|
);
|
184
|
if (!empty($_GET['render'])) {
|
185
|
$link_options['query']['render'] = $_GET['render'];
|
186
|
}
|
187
|
|
188
|
$form['preview'] = array();
|
189
|
$form['preview']['#prefix'] = '<div class="media-preview-group"><div class="media-item"><div class="media-thumbnail">';
|
190
|
$form['preview']['#suffix'] = '</div><div class="label-wrapper"><label class="media-filename">' . check_plain($file->filename) . '</label></div></div><div class="edit-file-link">' . l(t('Edit file'), 'file/' . $file->fid . '/edit', $link_options) . '</div></div>';
|
191
|
$form['preview']['thumbnail'] = file_view_file($file, $view_mode);
|
192
|
$form['preview']['thumbnail']['#prefix'] = '<div id="media-preview">';
|
193
|
$form['preview']['thumbnail']['#suffix'] = '</div>';
|
194
|
|
195
|
if (!isset($form['options']['format']['#default_value'])) {
|
196
|
$form['options']['format']['#default_value'] = $view_mode;
|
197
|
}
|
198
|
$form['options']['format']['#ajax'] = array(
|
199
|
'callback' => 'media_wysiwyg_format_form_preview',
|
200
|
'wrapper' => 'media-preview',
|
201
|
);
|
202
|
|
203
|
$wysiwyg_view_mode = db_query('SELECT view_mode FROM {media_view_mode_wysiwyg} WHERE type = :type', array(':type' => $file->type))->fetchField();
|
204
|
$view_modes = media_wysiwyg_get_wysiwyg_allowed_view_modes($file);
|
205
|
$formats = $options = array();
|
206
|
|
207
|
foreach ($view_modes as $view_mode => $view_mode_info) {
|
208
|
$options[$view_mode] = $view_mode_info['label'];
|
209
|
|
210
|
if (!empty($wysiwyg_view_mode)) {
|
211
|
$element = media_wysiwyg_get_file_without_label($file, $wysiwyg_view_mode, array('wysiwyg' => TRUE));
|
212
|
}
|
213
|
else {
|
214
|
$element = media_wysiwyg_get_file_without_label($file, $view_mode, array('wysiwyg' => TRUE));
|
215
|
}
|
216
|
|
217
|
$formats[$view_mode] = drupal_render($element);
|
218
|
}
|
219
|
|
220
|
$form['#formats'] = $formats;
|
221
|
$form['options']['format']['#options'] = $options;
|
222
|
}
|
223
|
|
224
|
/**
|
225
|
* AJAX callback to select portion of format form to be updated with a preview.
|
226
|
*
|
227
|
* @param array $form
|
228
|
* An associative array containing the structure of the form.
|
229
|
* @param array $form_state
|
230
|
* An associative array containing the current state of the form.
|
231
|
*
|
232
|
* @return array
|
233
|
* The preview form item.
|
234
|
*/
|
235
|
function media_wysiwyg_format_form_preview($form, $form_state) {
|
236
|
return $form['preview']['thumbnail'];
|
237
|
}
|