You are here

function entityreference_feeds_settings_form in Entity reference feeds 7

Settings form callback.

1 string reference to 'entityreference_feeds_settings_form'
entityreference_feeds_menu in ./entityreference_feeds.module
Implements hook_menu().

File

./entityreference_feeds.module, line 439
This is the main module file for entity reference feeds.

Code

function entityreference_feeds_settings_form() {
  $info = entity_get_info();
  $default_values = variable_get('entityreference_feeds_entity_default_values', array());
  $form['entityreference_feeds_entity_default_values'] = array(
    '#title' => t('Default values'),
    '#type' => 'fieldset',
    '#tree' => TRUE,
  );

  //TODO: check restrictions on which entities can be references in entity reference field to avoid including weird stuff like rules_config etc
  foreach ($info as $entity_type => $entity_type_info) {
    if (entity_type_supports($entity_type, 'create')) {
      $wrapper = entity_metadata_wrapper($entity_type);
      if (!is_object($wrapper)) {
        continue;
      }
      $form['entityreference_feeds_entity_default_values'][$entity_type] = array(
        '#title' => $entity_type,
        '#type' => 'fieldset',
      );
      $entity_type_settings =& $form['entityreference_feeds_entity_default_values'][$entity_type];
      global $user;
      $formats = filter_formats($user);
      foreach ($formats as $format) {
        $format_options[$format->format] = check_plain($format->name);
      }
      $entity_type_settings['input_format'] = array(
        '#type' => 'select',
        '#title' => t('Text format'),
        '#description' => t('Select the input format for the body field of the nodes to be created.'),
        '#options' => $format_options,
        '#default_value' => isset($default_values[$entity_type]['input_format']) ? $default_values[$entity_type]['input_format'] : 'plain_text',
      );
      $bundle_key = $entity_type_info['entity keys']['bundle'];
      foreach ($wrapper
        ->getPropertyInfo() as $name => $property) {
        if (!empty($property['required']) && $name != $bundle_key) {
          $entity_type_settings['values'][$name] = array(
            '#type' => 'textfield',
            '#title' => $property['label'],
            '#description' => isset($property['description']) ? $property['description'] : '',
            '#default_value' => isset($default_values[$entity_type]['values'][$name]) ? $default_values[$entity_type]['values'][$name] : NULL,
          );
          if (!empty($property['options list'])) {
            $entity_type_settings['values'][$name]['#type'] = 'select';
            $entity_type_settings['values'][$name]['#options'] = $wrapper->{$name}
              ->optionsList();
          }

          // @todo: Maybe implement per data-type forms like Rules does?
          $entity_type_settings['values'][$name]['#description'] .= ' ' . t('Expected data type: %type.', array(
            '%type' => $wrapper->{$name}
              ->type(),
          ));
          if ($wrapper->{$name} instanceof EntityDrupalWrapper) {
            $info = $wrapper->{$name}
              ->entityInfo();
            if (!empty($info) && isset($info['entity keys']['id'])) {
              $id_info = $wrapper->{$name}
                ->get($info['entity keys']['id'])
                ->info();
              $entity_type_settings['values'][$name]['#description'] .= ' ' . t('Just enter the identifier of the entity, i.e. %id', array(
                '%id' => $id_info['label'],
              ));
            }
          }
        }
      }
    }
  }
  return system_settings_form($form);
}