|
eads@0
|
1 <?php |
|
eads@0
|
2 // $Id; |
|
eads@0
|
3 /** |
|
eads@0
|
4 * @file |
|
eads@0
|
5 * Defines a special textarea, with drag and drop media driven by Scald and |
|
eads@0
|
6 * dnd.module when rich text editing is enabled on the textarea via the |
|
eads@0
|
7 * WYSIWYG API. |
|
eads@0
|
8 */ |
|
eads@0
|
9 |
|
eads@0
|
10 /** |
|
eads@0
|
11 * Implementation of hook_theme(). |
|
eads@0
|
12 */ |
|
eads@0
|
13 function mee_theme() { |
|
eads@0
|
14 $theme = array( |
|
eads@0
|
15 'mee_textarea' => array( |
|
eads@0
|
16 'arguments' => array('element' => NULL), |
|
eads@0
|
17 ), |
|
eads@0
|
18 'mee_formatter_default' => array( |
|
eads@0
|
19 'arguments' => array('element' => NULL), |
|
eads@0
|
20 ), |
|
eads@0
|
21 ); |
|
tom@2
|
22 |
|
tom@2
|
23 $scald_config = variable_get('scald_config', 0); |
|
tom@2
|
24 foreach ($scald_config->contexts as $context => $details) { |
|
tom@2
|
25 $theme['mee_formatter_'. $context] = array( |
|
tom@2
|
26 'arguments' => array('element' => NULL), |
|
tom@2
|
27 'function' => 'theme_mee_context_formatter', |
|
tom@2
|
28 ); |
|
tom@2
|
29 } |
|
eads@0
|
30 return $theme; |
|
eads@0
|
31 } |
|
eads@0
|
32 |
|
eads@0
|
33 /** |
|
eads@0
|
34 * Implementation of hook_field_info(). |
|
eads@0
|
35 */ |
|
eads@0
|
36 function mee_field_info() { |
|
eads@0
|
37 return array( |
|
eads@0
|
38 'multimedia_editorial_element' => array( |
|
eads@0
|
39 'label' => t('Multimedia Editorial Element (MEE)'), |
|
eads@0
|
40 'description' => t('MEE combines Scald, WYSIWYG, and DnD to create a multimedia enabled text field.'), |
|
eads@0
|
41 ), |
|
eads@0
|
42 ); |
|
eads@0
|
43 } |
|
eads@0
|
44 |
|
eads@0
|
45 /** |
|
eads@0
|
46 * Implementation of hook_field_settings(). |
|
eads@0
|
47 */ |
|
eads@0
|
48 function mee_field_settings($op, $field) { |
|
eads@0
|
49 switch ($op) { |
|
eads@0
|
50 case 'form': |
|
eads@0
|
51 $form = array(); |
|
eads@0
|
52 $options = array(0 => t('Plain text'), 1 => t('Filtered text (user selects input format)')); |
|
eads@0
|
53 $form['mee_processing'] = array( |
|
eads@0
|
54 '#type' => 'radios', |
|
eads@0
|
55 '#title' => t('Text processing'), |
|
eads@0
|
56 '#default_value' => is_numeric($field['mee_processing']) ? $field['mee_processing'] : 1, |
|
eads@0
|
57 '#options' => $options, |
|
eads@0
|
58 '#description' => t('Filtered text, with a WYSIWYG editor defined on one or more input formats, is strongly recommended.'), |
|
eads@0
|
59 ); |
|
eads@0
|
60 // @TODO Ask Drupal about available libraries |
|
eads@0
|
61 $form['mee_dnd_callback_url'] = array( |
|
eads@0
|
62 '#type' => 'textfield', |
|
eads@0
|
63 '#title' => t('Library callback URL'), |
|
eads@0
|
64 '#default_value' => url($field['mee_dnd_callback_url']) ? $field['mee_dnd_callback_url'] : '', |
|
eads@0
|
65 '#description' => t('The absolute URL or relative path of a callback URL that provides proper JSON to the drag and drop library.'), |
|
eads@0
|
66 ); |
|
tom@4
|
67 // @@@TODO: Add an "Editor Context" option on a per-field basis |
|
tom@4
|
68 // @@@TODO: Add a "Display Context" option on a per-field basis (this is an override) |
|
eads@0
|
69 return $form; |
|
eads@0
|
70 |
|
eads@0
|
71 case 'save': |
|
tom@4
|
72 return array('mee_processing', 'mee_dnd_callback_url', 'mee_scald_editor_context'); |
|
eads@0
|
73 |
|
eads@0
|
74 case 'database columns': |
|
eads@0
|
75 $columns['value'] = array('type' => 'text', 'size' => 'big', 'not null' => FALSE, 'sortable' => TRUE); |
|
eads@0
|
76 $columns['dnd_callback_url'] = array('type' => 'text', 'size' => 'small', 'not null' => FALSE); |
|
eads@0
|
77 if (!empty($field['mee_processing'])) { |
|
eads@0
|
78 $columns['format'] = array('type' => 'int', 'unsigned' => TRUE, 'not null' => FALSE); |
|
eads@0
|
79 } |
|
eads@0
|
80 return $columns; |
|
eads@0
|
81 |
|
eads@0
|
82 case 'views data': |
|
eads@0
|
83 return content_views_field_views_data($field); |
|
eads@0
|
84 } |
|
eads@0
|
85 } |
|
eads@0
|
86 |
|
eads@0
|
87 /** |
|
eads@0
|
88 * Implementation of hook_field(). |
|
eads@0
|
89 */ |
|
eads@0
|
90 function mee_field($op, &$node, $field, &$items, $teaser, $page) { |
|
eads@0
|
91 switch ($op) { |
|
tom@2
|
92 case 'presave': |
|
tom@2
|
93 // @@@TODO: parse the field & replace editor reps with SAS |
|
tom@2
|
94 break; // end 'submit' |
|
tom@2
|
95 |
|
tom@2
|
96 case 'insert': |
|
tom@2
|
97 foreach ($items as $delta => $item) { |
|
tom@3
|
98 $scald_included = scald_included($item); |
|
tom@3
|
99 |
|
tom@3
|
100 $temp_atom = new stdClass; |
|
tom@3
|
101 $temp_atom->type = 'composite'; |
|
tom@3
|
102 $temp_atom->provider = 'mee'; |
|
tom@3
|
103 $temp_atom->base_id = $node->nid . ':' . $delta; |
|
tom@3
|
104 $temp_atom->publisher = $node->uid; |
|
tom@3
|
105 $temp_atom->title = $node->title; |
|
tom@3
|
106 $temp_atom->authors = array(scald_uid_to_aid($node->uid)); |
|
tom@2
|
107 $temp_atom->relationships = empty($scald_included) ? array() : array('includes' => $scald_included); |
|
tom@3
|
108 |
|
tom@2
|
109 $sid = scald_register_atom($temp_atom); |
|
tom@2
|
110 } |
|
tom@2
|
111 break; // end 'insert' |
|
tom@2
|
112 |
|
tom@2
|
113 case 'update': |
|
tom@2
|
114 foreach ($items as $delta => $item) { |
|
tom@3
|
115 $scald_included = scald_included($item); |
|
tom@2
|
116 |
|
tom@3
|
117 // @@@TODO: Handle failure of fetch |
|
tom@3
|
118 $atom = scald_fetch(scald_search(array('base_id' => $node->nid . ':' . $delta), FALSE, TRUE)); |
|
tom@3
|
119 $atom->publisher = $node->uid; |
|
tom@3
|
120 $atom->title = $node->title; |
|
tom@3
|
121 $atom->authors = array( |
|
tom@3
|
122 $temp_atom->relationships = empty($scald_included) ? array() : array('includes' => $scald_included); |
|
tom@3
|
123 |
|
tom@3
|
124 scald_update_atom($atom); |
|
tom@2
|
125 } |
|
tom@2
|
126 break; // end 'update' |
|
tom@2
|
127 |
|
tom@2
|
128 case 'delete': |
|
tom@3
|
129 foreach ($items as $delta => $item) { |
|
tom@3
|
130 scald_unregister_atom(scald_search(array('base_id' => $node->nid . ':' . $delta), FALSE, TRUE)); |
|
tom@3
|
131 } |
|
tom@2
|
132 break; // end 'delete' |
|
tom@2
|
133 |
|
eads@0
|
134 case 'sanitize': |
|
eads@0
|
135 foreach ($items as $delta => $item) { |
|
eads@0
|
136 if (!empty($field['mee_processing'])) { |
|
eads@0
|
137 $check = is_null($node) || (isset($node->build_mode) && $node->build_mode == NODE_BUILD_PREVIEW); |
|
eads@0
|
138 $text = isset($item['value']) ? check_markup($item['value'], $item['format'], $check) : ''; |
|
eads@0
|
139 } |
|
eads@0
|
140 else { |
|
eads@0
|
141 $text = check_plain($item['value']); |
|
eads@0
|
142 } |
|
eads@0
|
143 $items[$delta]['safe'] = $text; |
|
eads@0
|
144 } |
|
tom@2
|
145 break; // end 'sanitize' |
|
eads@0
|
146 } |
|
eads@0
|
147 } |
|
eads@0
|
148 |
|
eads@0
|
149 /** |
|
eads@0
|
150 * Implementation of hook_content_is_empty(). |
|
eads@0
|
151 */ |
|
eads@0
|
152 function mee_content_is_empty($item, $field) { |
|
eads@0
|
153 if (empty($item['value']) && (string)$item['value'] !== '0') { |
|
eads@0
|
154 return TRUE; |
|
eads@0
|
155 } |
|
eads@0
|
156 return FALSE; |
|
eads@0
|
157 } |
|
eads@0
|
158 |
|
eads@0
|
159 /** |
|
eads@0
|
160 * Implementation of hook_field_formatter_info(). |
|
eads@0
|
161 */ |
|
eads@0
|
162 function mee_field_formatter_info() { |
|
eads@0
|
163 $formatters = array( |
|
eads@0
|
164 'default' => array( |
|
eads@0
|
165 'label' => t('Filtered text'), |
|
eads@0
|
166 'field types' => array('multimedia_editorial_element'), |
|
eads@0
|
167 'multiple values' => CONTENT_HANDLE_CORE, |
|
eads@0
|
168 ), |
|
eads@0
|
169 'plain' => array( |
|
eads@0
|
170 'label' => t('Plain text'), |
|
eads@0
|
171 'field types' => array('multimedia_editorial_element'), |
|
eads@0
|
172 'multiple values' => CONTENT_HANDLE_CORE, |
|
eads@0
|
173 ), |
|
eads@0
|
174 ); |
|
eads@0
|
175 //@TODO generate context processor based field formatters |
|
eads@0
|
176 //foreach (scald_contexts() as $context) { |
|
eads@0
|
177 // $formatters[$context] = array( |
|
eads@0
|
178 // 'label' => t('Scald context processor: @context', array('@context' => $context), |
|
eads@0
|
179 // 'field types' => 'mee', |
|
eads@0
|
180 // ); |
|
eads@0
|
181 //} |
|
eads@0
|
182 return $formatters; |
|
eads@0
|
183 } |
|
eads@0
|
184 |
|
eads@0
|
185 function theme_mee_formatter_default($element) { |
|
tom@4
|
186 return scald_sas_to_rendered($element['#item']['safe']); |
|
eads@0
|
187 } |
|
eads@0
|
188 |
|
eads@0
|
189 /** |
|
eads@0
|
190 * Theme function for 'plain' text field formatter. |
|
eads@0
|
191 */ |
|
eads@0
|
192 function theme_mee_formatter_plain($element) { |
|
tom@4
|
193 return strip_tags(scald_sas_to_rendered($element['#item']['safe'], 'title', TRUE)); |
|
eads@0
|
194 } |
|
eads@0
|
195 |
|
tom@4
|
196 //function theme_mee_context_formatter($element) { |
|
tom@4
|
197 // return 'foo'; |
|
tom@4
|
198 //} |
|
eads@0
|
199 |
|
eads@0
|
200 /** |
|
eads@0
|
201 * Implementation of hook_widget_info(). |
|
eads@0
|
202 */ |
|
eads@0
|
203 function mee_widget_info() { |
|
eads@0
|
204 return array( |
|
eads@0
|
205 'mee_textarea' => array( |
|
eads@0
|
206 'label' => t('MEE Textarea'), |
|
eads@0
|
207 'field types' => array('multimedia_editorial_element'), |
|
eads@0
|
208 'multiple values' => CONTENT_HANDLE_CORE, |
|
eads@0
|
209 ), |
|
eads@0
|
210 ); |
|
eads@0
|
211 } |
|
eads@0
|
212 |
|
eads@0
|
213 /** |
|
eads@0
|
214 * Implementation of FAPI hook_elements(). |
|
eads@0
|
215 * |
|
eads@0
|
216 * Any FAPI callbacks needed for individual widgets can be declared here, |
|
eads@0
|
217 * and the element will be passed to those callbacks for processing. |
|
eads@0
|
218 * |
|
eads@0
|
219 * Drupal will automatically theme the element using a theme with |
|
eads@0
|
220 * the same name as the hook_elements key. |
|
eads@0
|
221 */ |
|
eads@0
|
222 function mee_elements() { |
|
eads@0
|
223 return array( |
|
eads@0
|
224 'mee_textarea' => array( |
|
eads@0
|
225 '#input' => TRUE, |
|
eads@0
|
226 '#columns' => array('value', 'format'), '#delta' => 0, |
|
eads@0
|
227 '#process' => array('mee_textarea_process', 'dnd_process_textarea'), |
|
eads@0
|
228 '#filter_value' => FILTER_FORMAT_DEFAULT, |
|
eads@0
|
229 ), |
|
eads@0
|
230 ); |
|
eads@0
|
231 } |
|
eads@0
|
232 |
|
eads@0
|
233 /** |
|
eads@0
|
234 * Implementation of hook_widget_settings(). |
|
eads@0
|
235 */ |
|
eads@0
|
236 function mee_widget_settings($op, $widget) { |
|
eads@0
|
237 switch ($op) { |
|
eads@0
|
238 case 'form': |
|
eads@0
|
239 $form = array(); |
|
eads@0
|
240 $rows = (isset($widget['rows']) && is_numeric($widget['rows'])) ? $widget['rows'] : 5; |
|
eads@0
|
241 $size = (isset($widget['size']) && is_numeric($widget['size'])) ? $widget['size'] : 60; |
|
eads@0
|
242 $form['rows'] = array( |
|
eads@0
|
243 '#type' => 'textfield', |
|
eads@0
|
244 '#title' => t('Rows'), |
|
eads@0
|
245 '#default_value' => $rows, |
|
eads@0
|
246 '#element_validate' => array('_mee_widget_settings_row_validate'), |
|
eads@0
|
247 '#required' => TRUE, |
|
eads@0
|
248 ); |
|
eads@0
|
249 $form['size'] = array('#type' => 'hidden', '#value' => $size); |
|
eads@0
|
250 return $form; |
|
eads@0
|
251 |
|
eads@0
|
252 case 'save': |
|
eads@0
|
253 return array('rows', 'size'); |
|
eads@0
|
254 } |
|
eads@0
|
255 } |
|
eads@0
|
256 |
|
eads@0
|
257 function _mee_widget_settings_row_validate($element, &$form_state) { |
|
eads@0
|
258 $value = $form_state['values']['rows']; |
|
eads@0
|
259 if (!is_numeric($value) || intval($value) != $value || $value <= 0) { |
|
eads@0
|
260 form_error($element, t('"Rows" must be a positive integer.')); |
|
eads@0
|
261 } |
|
eads@0
|
262 } |
|
eads@0
|
263 |
|
eads@0
|
264 function _mee_widget_settings_size_validate($element, &$form_state) { |
|
eads@0
|
265 $value = $form_state['values']['size']; |
|
eads@0
|
266 if (!is_numeric($value) || intval($value) != $value || $value <= 0) { |
|
eads@0
|
267 form_error($element, t('"Size" must be a positive integer.')); |
|
eads@0
|
268 } |
|
eads@0
|
269 } |
|
eads@0
|
270 |
|
eads@0
|
271 /** |
|
eads@0
|
272 * Implementation of hook_widget(). |
|
eads@0
|
273 * |
|
eads@0
|
274 * Attach a single form element to the form. It will be built out and |
|
eads@0
|
275 * validated in the callback(s) listed in hook_elements. We build it |
|
eads@0
|
276 * out in the callbacks rather than here in hook_widget so it can be |
|
eads@0
|
277 * plugged into any module that can provide it with valid |
|
eads@0
|
278 * $field information. |
|
eads@0
|
279 * |
|
eads@0
|
280 * Content module will set the weight, field name and delta values |
|
eads@0
|
281 * for each form element. This is a change from earlier CCK versions |
|
eads@0
|
282 * where the widget managed its own multiple values. |
|
eads@0
|
283 * |
|
eads@0
|
284 * If there are multiple values for this field, the content module will |
|
eads@0
|
285 * call this function as many times as needed. |
|
eads@0
|
286 * |
|
eads@0
|
287 * @param $form |
|
eads@0
|
288 * the entire form array, $form['#node'] holds node information |
|
eads@0
|
289 * @param $form_state |
|
eads@0
|
290 * the form_state, $form_state['values'][$field['field_name']] |
|
eads@0
|
291 * holds the field's form values. |
|
eads@0
|
292 * @param $field |
|
eads@0
|
293 * the field array |
|
eads@0
|
294 * @param $items |
|
eads@0
|
295 * array of default values for this field |
|
eads@0
|
296 * @param $delta |
|
eads@0
|
297 * the order of this item in the array of subelements (0, 1, 2, etc) |
|
eads@0
|
298 * |
|
eads@0
|
299 * @return |
|
eads@0
|
300 * the form item for a single element for this field |
|
eads@0
|
301 */ |
|
eads@0
|
302 function mee_widget(&$form, &$form_state, $field, $items, $delta = 0) { |
|
eads@0
|
303 $element = array( |
|
eads@0
|
304 '#type' => $field['widget']['type'], |
|
tom@4
|
305 '#default_value' => isset($items[$delta]) ? scald_sas_to_rendered($items[$delta], $field['mee_scald_editor_context'], TRUE) : '', |
|
eads@0
|
306 ); |
|
eads@0
|
307 return $element; |
|
eads@0
|
308 } |
|
eads@0
|
309 |
|
eads@0
|
310 /** |
|
eads@0
|
311 * Process an individual element. |
|
eads@0
|
312 * |
|
eads@0
|
313 * Build the form element. When creating a form using FAPI #process, |
|
eads@0
|
314 * note that $element['#value'] is already set. |
|
eads@0
|
315 * |
|
eads@0
|
316 * The $fields array is in $form['#field_info'][$element['#field_name']]. |
|
eads@0
|
317 */ |
|
eads@0
|
318 function mee_textarea_process($element, $edit, $form_state, $form) { |
|
eads@0
|
319 drupal_add_css(drupal_get_path('module', 'mee') .'/css/mee.css'); |
|
eads@0
|
320 |
|
eads@0
|
321 $field = $form['#field_info'][$element['#field_name']]; |
|
eads@0
|
322 $field_key = $element['#columns'][0]; |
|
eads@0
|
323 $element[$field_key] = array( |
|
eads@0
|
324 '#type' => 'textarea', |
|
eads@0
|
325 '#default_value' => isset($element['#value'][$field_key]) ? $element['#value'][$field_key] : NULL, |
|
eads@0
|
326 '#rows' => !empty($field['widget']['rows']) ? $field['widget']['rows'] : 10, |
|
eads@0
|
327 '#weight' => 0, |
|
eads@0
|
328 // The following values were set by the content module and need |
|
eads@0
|
329 // to be passed down to the nested element. |
|
eads@0
|
330 '#title' => $element['#title'], |
|
eads@0
|
331 '#description' => $element['#description'], |
|
eads@0
|
332 '#required' => $element['#required'], |
|
eads@0
|
333 '#field_name' => $element['#field_name'], |
|
eads@0
|
334 '#type_name' => $element['#type_name'], |
|
eads@0
|
335 '#delta' => $element['#delta'], |
|
eads@0
|
336 '#columns' => $element['#columns'], |
|
eads@0
|
337 '#prefix' => '<div class="mee-wrap-editor-library">', |
|
eads@0
|
338 '#suffix' => '</div>', |
|
eads@0
|
339 '#dnd-enabled' => TRUE, |
|
eads@0
|
340 '#dnd-settings' => array( |
|
eads@0
|
341 'drop_selector' => '#'. $element['#id'] .' .drop', |
|
eads@0
|
342 'url' => $field['mee_dnd_callback_url'], |
|
eads@0
|
343 ), |
|
eads@0
|
344 ); |
|
eads@0
|
345 |
|
eads@0
|
346 if (!empty($field['mee_processing'])) { |
|
eads@0
|
347 $filter_key = (count($element['#columns']) == 2) ? $element['#columns'][1] : 'format'; |
|
eads@0
|
348 $format = isset($element['#value'][$filter_key]) ? $element['#value'][$filter_key] : FILTER_FORMAT_DEFAULT; |
|
eads@0
|
349 $parents = array_merge($element['#parents'] , array($filter_key)); |
|
eads@0
|
350 $element[$filter_key] = filter_form($format, 1, $parents); |
|
eads@0
|
351 } |
|
eads@0
|
352 |
|
eads@0
|
353 // Used so that hook_field('validate') knows where to flag an error. |
|
eads@0
|
354 $element['_error_element'] = array( |
|
eads@0
|
355 '#type' => 'value', |
|
eads@0
|
356 '#value' => implode('][', array_merge($element['#parents'], array($field_key))), |
|
eads@0
|
357 ); |
|
eads@0
|
358 |
|
eads@0
|
359 |
|
eads@0
|
360 return $element; |
|
eads@0
|
361 } |
|
eads@0
|
362 |
|
eads@0
|
363 /** |
|
eads@0
|
364 * FAPI theme for an individual text elements. |
|
eads@0
|
365 * |
|
eads@0
|
366 * The textfield or textarea is already rendered by the |
|
eads@0
|
367 * textfield or textarea themes and the html output |
|
eads@0
|
368 * lives in $element['#children']. Override this theme to |
|
eads@0
|
369 * make custom changes to the output. |
|
eads@0
|
370 * |
|
eads@0
|
371 * $element['#field_name'] contains the field name |
|
eads@0
|
372 * $element['#delta] is the position of this element in the group |
|
eads@0
|
373 */ |
|
eads@0
|
374 function theme_mee_textarea($element) { |
|
eads@0
|
375 return $element['#children']; |
|
eads@0
|
376 } |
|
tom@2
|
377 |
|
tom@2
|
378 |
|
tom@2
|
379 |
|
tom@2
|
380 |
|
tom@2
|
381 |
|
tom@2
|
382 |
|
tom@2
|
383 /******************************************************************************* |
|
tom@2
|
384 * SCALD HOOK IMPLEMENTATIONS |
|
tom@2
|
385 ******************************************************************************/ |
|
tom@2
|
386 |
|
tom@2
|
387 /** |
|
tom@2
|
388 * Implementation of hook_scald_provider(). |
|
tom@2
|
389 */ |
|
tom@2
|
390 function mee_scald_provider() { |
|
tom@2
|
391 return array( |
|
tom@2
|
392 'atoms' => array( |
|
tom@2
|
393 'composite' => t('The MEE CCK field.'), |
|
tom@2
|
394 ), |
|
tom@2
|
395 ); |
|
tom@2
|
396 } |
|
tom@2
|
397 |
|
tom@2
|
398 |
|
tom@2
|
399 |
|
tom@2
|
400 /** |
|
tom@2
|
401 * Implementation of hook_scald_register_atom(). |
|
tom@2
|
402 */ |
|
tom@2
|
403 function mee_scald_register_atom($atom, $mode) { |
|
tom@2
|
404 |
|
tom@2
|
405 } // end mee_scald_register_atom() |
|
tom@2
|
406 |
|
tom@2
|
407 |
|
tom@2
|
408 |
|
tom@2
|
409 /** |
|
tom@2
|
410 * Implementation of hook_scald_update_atom(). |
|
tom@2
|
411 */ |
|
tom@2
|
412 function mee_scald_update_atom($atom, $mode) { |
|
tom@2
|
413 |
|
tom@2
|
414 } // end mee_scald_update_atom() |
|
tom@2
|
415 |
|
tom@2
|
416 |
|
tom@2
|
417 |
|
tom@2
|
418 /** |
|
tom@2
|
419 * Implementation of hook_scald_unregister_atom(). |
|
tom@2
|
420 */ |
|
tom@2
|
421 function mee_scald_unregister_atom($atom, $mode) { |
|
tom@2
|
422 |
|
tom@2
|
423 } // end mee_scald_unregister_atom() |
|
tom@2
|
424 |
|
tom@2
|
425 |
|
tom@2
|
426 |
|
tom@2
|
427 /** |
|
tom@2
|
428 * Implementation of hook_scald_fetch(). |
|
tom@2
|
429 */ |
|
tom@2
|
430 function mee_scald_fetch(&$atom) { |
|
tom@2
|
431 list($nid, $delta) = split(':', $atom->base_id); |
|
tom@2
|
432 $node = node_load($nid); |
|
tom@2
|
433 $atom->title = $node->title . '(' . $delta . ')'; |
|
tom@2
|
434 $atom->description = $atom->title; // @@@TODO: Maybe make this a better description? |
|
tom@2
|
435 $atom->thumbnail_source = drupal_get_path('module', 'scald_composites') . '/assets/thumbnail_composite.png'; |
|
tom@2
|
436 } // end mee_scald_fetch() |
|
tom@2
|
437 |
|
tom@2
|
438 |
|
tom@2
|
439 |
|
tom@2
|
440 /** |
|
tom@2
|
441 * Implementation of hook_scald_prerender(). |
|
tom@2
|
442 */ |
|
tom@2
|
443 function mee_scald_prerender(&$atom, $mode) { |
|
tom@2
|
444 |
|
tom@2
|
445 } // end mee_scald_prerender() |
|
tom@2
|
446 |