EVOLUTION-NINJA
Edit File: emfield.module
<?php /** * Implements hook_field_widget_info(). */ function emfield_field_widget_info() { return array( 'enfield_widget' => array( 'label' => t('Embedded media field'), 'field types' => array('file'), 'settings' => array('size' => 60), 'behaviors' => array( 'multiple values' => FIELD_BEHAVIOR_DEFAULT, 'default value' => FIELD_BEHAVIOR_DEFAULT, ), ), ); } /** * Implements hook_field_widget_settings_form(). */ function emfield_field_widget_settings_form($field, $instance) { $widget = $instance['widget']; $settings = $widget['settings']; $form['size'] = array( '#type' => 'textfield', '#title' => t('Size of textfield'), '#default_value' => $settings['size'], '#required' => TRUE, '#element_validate' => array('element_validate_integer_positive'), ); return $form; } /** * Implements hook_field_widget_error(). */ function emfield_field_widget_error($element, $error, $form, &$form_state) { form_error($element['fid'], $error['message']); } /** * Implements hook_field_widget_form(). */ function emfield_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { $element += array( '#type' => 'textfield', '#default_value' => isset($items[$delta]) ? $items[$delta] : '', '#size' => $instance['widget']['settings']['size'], '#maxlength' => 1024, '#element_validate' => array('emfield_widget_validate'), '#value_callback' => 'emfield_widget_value', ); return array('fid' => $element, 'display' => array( '#type' => 'value', '#value' => 1, )); } /** * Validation callback for an emfield element. */ function emfield_widget_validate($element, &$form_state, $form) { $field = field_widget_field($element, $form_state); $instance = field_widget_instance($element, $form_state); $value = $element['#value']; $fid = NULL; if (!empty($value)) { // Get the fid of a referencable file from the entered url. try { $provider = media_internet_get_provider($value); } catch (Exception $error) { form_error($element, t('%name: Found no valid media with that url.', array('%name' => $instance['label']))); return; } $file = $provider->save(); $fid = $file->fid; } // Set the element's value as the file id that was extracted from the entered // input. form_set_value($element, $fid, $form_state); } /** * Value callback for an emfield element. * * Replace the file fid with a url. */ function emfield_widget_value($element, $input = FALSE, $form_state) { if ($input === FALSE) { // We're building the displayed 'default value': expand the raw fid into // "uri [fid:n]". $fid = $element['#default_value']; if (!empty($fid)) { $q = db_select('file_managed', 'f'); $q->addField('f', 'uri'); $q->addTag('file_access') ->condition('f.fid', $fid['fid']) ->range(0, 1); $result = $q->execute(); // @todo If no result (file doesn't exist or no access). $uri = $result->fetchField(); return file_create_url($uri); } } } /** * Implements hook_content_migrate_field_alter(). */ function emfield_content_migrate_field_alter(&$field_value, &$instance_value) { if (in_array($field_value['module'], array('emfield', 'emimage', 'emaudio', 'emvideo'))) { $field_value['module'] = 'file'; $field_value['type'] = 'file'; // TODO: need to convert settings etc for this field to the D7 version. } } /** * Implements hook_content_migrate_instance_alter(). */ function emfield_content_migrate_instance_alter(&$instance_value, &$field_value) { if (in_array($instance_value['widget']['module'], array('emfield', 'emimage', 'emaudio', 'emvideo'))) { $instance_value['widget']['module'] = 'media'; $instance_value['widget']['type'] = 'media_generic'; $instance_value['widget_type'] = 'media_generic'; // TODO: need to convert settings etc to the D7 version. } } /** * Implements hook_content_migrate_data_record_alter(). */ function emfield_content_migrate_data_record_alter(&$record, &$field, $instance) { if (!empty($record[$field['field_name'] . '_embed'])) { $provider = media_internet_get_provider($record[$field['field_name'] . '_embed']); // This is a hack to stop content migrate from misreading the content. unset($field['type']); if ($provider) { $file = $provider->save(); $record[$field['field_name'] . '_fid'] = $file->fid; } } } /** * Implements hook_module_implements_alter(); */ function emfield_module_implements_alter(&$implementations, $hook) { if ($hook == 'content_migrate_data_record_alter') { // Move emfield_content_migrate_data_record_alter() to the top of the list. $group = $implementations['emfield']; unset($implementations['emfield']); $implementations = array('emfield' => $group) + $implementations; } }