You are here

function custom_formatters_export_ui_form_js_preview in Custom Formatters 7.2

AJAX callback form Custom formatters preview form.

Parameters

array $form: The form api array.

array $form_state: The form state array.

null|object $object: The Custom formatter object if supplied, else NULL.

Return value

array A fapi array.

1 call to custom_formatters_export_ui_form_js_preview()
custom_formatters_export_ui_form_js_preview_devel_generate in includes/devel_generate.inc
Submit callback for Custom Formatters live preview via Devel Generate.
1 string reference to 'custom_formatters_export_ui_form_js_preview'
custom_formatters_export_ui_form in plugins/export_ui/custom_formatters.inc
Custom Formatters settings form.

File

plugins/export_ui/custom_formatters.inc, line 338
CTools Export UI plugin for SexyBookmarks profiles.

Code

function custom_formatters_export_ui_form_js_preview($form, $form_state, $object = NULL) {

  // Clear messages.
  drupal_get_messages(NULL, TRUE);

  // Build preview elements.
  $elements['obj_type'] = $form_state['values']['preview']['entity_type'];
  $elements['object'] = $object;
  if (is_null($elements['object'])) {
    $objects = entity_load($elements['obj_type'], array(
      $form_state['values']['preview']['entity'],
    ));
    $elements['object'] = $objects[$form_state['values']['preview']['entity']];
  }
  if (strstr($form_state['values']['preview']['field'], 'field_')) {
    $elements['field'] = field_info_field($form_state['values']['preview']['field']);
    $elements['instance'] = field_info_instance($elements['obj_type'], $elements['field']['field_name'], $form_state['values']['preview']['bundle']);
    $elements['langcode'] = field_language($elements['obj_type'], $elements['object'], $elements['field']['field_name']);
    $elements['items'] = field_get_items($elements['obj_type'], $elements['object'], $elements['instance']['field_name'], $elements['langcode']);

    // Prepare field view.
    $functions = array(
      "{$elements['field']['module']}_field_prepare_view",
      "{$elements['field']['module']}_field_load",
    );
    foreach ($functions as $function) {
      if (function_exists($function)) {
        $elements['items'] = array(
          $elements['items'],
        );
        $function($elements['obj_type'], array(
          $elements['object'],
        ), $elements['field'], array(
          $elements['instance'],
        ), $elements['langcode'], $elements['items'], FIELD_LOAD_CURRENT);
        $elements['items'] = $elements['items'][0];
      }
    }
    $elements['display'] = $elements['instance']['display']['default'];
  }
  drupal_alter('custom_formatters_preview_elements', $elements, $form_state['values']);
  extract($elements);

  // @TODO - Allow this to be done via form_builder.inc or any other Foramtter
  // Settings integration modules.
  $display['settings'] = isset($form_state['input']['settings']['preview']) ? $form_state['input']['settings']['preview'] : $display['settings'];

  // Disable contextual links in preview.
  $display['#cf_options'] = array(
    '#contextual_links' => FALSE,
  );
  $formatter = (object) $form_state['values'];

  // Build the preview html.
  $element = custom_formatters_field_formatter_view($obj_type, $object, $field, $instance, $langcode, $items, $display, $formatter);
  $variables = array(
    'element' => array_merge($element, array(
      '#label_display' => 'hidden',
      '#title' => NULL,
      '#items' => $element,
      '#field_name' => $field['field_name'],
      '#field_type' => $field['type'],
    )),
  );
  foreach (array_keys($element) as $delta) {
    $variables['item_attributes'][$delta] = NULL;
  }
  $js = drupal_add_js();
  $form['engine']['preview']['preview']['content'] = array(
    '#markup' => theme('field', $variables),
  );
  $js = array_diff_assoc(drupal_add_js(), $js);
  $form['engine']['preview']['preview']['content']['#markup'] .= drupal_get_js('header', $js);

  // Preview debugging; Show the output HTML.
  if (module_exists('devel') && isset($formatter->preview) && $formatter->preview['options']['dpm']['html']) {
    dpm(theme('field', $variables));
  }
  return $form['engine']['preview']['preview'];
}