You are here

function feed_import_edit_feed_form in Feed Import 7

Same name and namespace in other branches
  1. 7.3 feed_import.module \feed_import_edit_feed_form()
  2. 7.2 feed_import.module \feed_import_edit_feed_form()

Edit feed form

1 string reference to 'feed_import_edit_feed_form'
feed_import_menu in ./feed_import.module
Implements hook_menu().

File

./feed_import.module, line 767
User interface, cron functions for feed_import module

Code

function feed_import_edit_feed_form($form, &$form_state, $id) {

  // Get feed
  $id = (int) $id;
  $feed = FeedImport::loadFeeds(FALSE, $id);
  if (!$feed) {
    drupal_set_message(t("Feed doesn't exist!"), 'error');
    return;
  }

  // Set page title
  drupal_set_title(t('Edit feed @name', array(
    '@name' => $feed['name'],
  )), PASS_THROUGH);

  // Basic feed fields
  $form['id'] = array(
    '#type' => 'value',
    '#value' => $feed['id'],
  );
  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Feed name'),
    '#description' => t('This usually is source name.'),
    '#default_value' => $feed['name'],
    '#required' => TRUE,
  );
  $options = array();
  $entities = FeedImport::getEntityInfo();
  foreach ($entities as &$entity) {
    $options[$entity['name']] = $entity['name'];
  }
  if (!isset($feed['entity_info']['#entity']) || empty($feed['entity_info']['#entity'])) {
    $feed['entity_info']['#entity'] = 'node';
  }
  $form['entity'] = array(
    '#type' => 'select',
    '#options' => $options,
    '#default_value' => isset($feed['entity_info']['#entity']) ? $feed['entity_info']['#entity'] : 'node',
    '#title' => t('Entity name'),
    '#description' => t('Entity where you want to import content. Ex: "node"'),
    '#required' => TRUE,
    '#disabled' => is_array($feed['xpath']['#items']) ? count($feed['xpath']['#items']) : 0,
  );
  $form['url'] = array(
    '#type' => 'textfield',
    '#title' => t('URL to XML feed'),
    '#description' => t('Please use a valid url that returns a valid XML file!'),
    '#default_value' => $feed['url'],
    '#required' => TRUE,
  );
  $options = array();
  $functions = array_keys(FeedImport::processFunctions());
  foreach ($functions as $f) {
    $options[$f] = $f;
  }
  $form['process_function'] = array(
    '#type' => 'select',
    '#options' => $options,
    '#default_value' => isset($feed['xpath']['#process_function']) ? $feed['xpath']['#process_function'] : 'processFeedNormal',
    '#title' => t('Select process function'),
  );
  $form['time'] = array(
    '#type' => 'textfield',
    '#title' => t('Keep imported items (seconds)'),
    '#description' => t("This is used to delete items after expiration. 0 means item don't expire."),
    '#default_value' => $feed['time'],
    '#required' => TRUE,
  );
  $form['enabled'] = array(
    '#type' => 'checkbox',
    '#title' => t('Feed is active'),
    '#default_value' => $feed['enabled'],
  );

  // XPATH settings fieldset
  $form['xpath'] = array(
    '#type' => 'fieldset',
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
    '#title' => t('XPATH settings'),
  );
  $form['xpath']['root'] = array(
    '#type' => 'textfield',
    '#default_value' => isset($feed['xpath']['#root']) ? $feed['xpath']['#root'] : '',
    '#title' => t('Enter xpath item parent'),
    '#description' => t("Usualy this starts with // and it's base query (context for all items)."),
    '#required' => TRUE,
  );
  $form['xpath']['uniq'] = array(
    '#type' => 'textfield',
    '#default_value' => isset($feed['xpath']['#uniq']) ? $feed['xpath']['#uniq'] : '',
    '#title' => t('Enter xpath to a unique identifier of item'),
    '#description' => t("This is unique per item. Usually it's an ID."),
    '#required' => TRUE,
  );

  // XPATH items
  $form['xpath']['items'] = array(
    '#type' => 'container',
    '#attributes' => array(
      'id' => 'xpath_items',
    ),
    '#prefix' => '<label for="xpath_items">' . t('Current fields') . '</label>',
  );
  $xpaths = array();
  if (isset($form_state['#current_item'])) {
    for ($i = 0; $i <= $form_state['#current_item']; $i++) {
      if (isset($form_state['values']['xpath_' . $i])) {
        $default_val = isset($form_state['values']['xpath_' . $i]) ? $form_state['values']['xpath_' . $i] : '';
        if (is_array($default_val)) {
          $default_val = implode(PHP_EOL, $default_val);
        }
        $vars = array(
          '#field' => $form_state['complete form']['xpath']['items']['container_' . $i]['#title'],
          '#xpath' => $default_val,
          '#default_value' => isset($form_state['values']['default_' . $i]) ? $form_state['values']['default_' . $i] : '',
          '#default_action' => isset($form_state['values']['default_action_' . $i]) ? $form_state['values']['default_action_' . $i] : '',
        );
        $xpaths += feed_import_generate_xpath_item($i, $vars);
      }
    }
  }
  else {
    $form_state['#current_item'] = -1;
    if (!empty($feed['xpath']['#items'])) {
      foreach ($feed['xpath']['#items'] as &$field) {
        $form_state['#current_item']++;
        $xpaths += feed_import_generate_xpath_item($form_state['#current_item'], $field, TRUE);
      }
    }
  }
  $cbk = isset($form_state['triggering_element']['#parents'][0]) ? $form_state['triggering_element']['#parents'][0] : '';
  switch (TRUE) {
    case $cbk == 'add_new_item':
      $form_state['#current_item']++;
      $vars = array(
        '#field' => $form_state['values']['add_new_item_field'],
      );
      $xpaths += feed_import_generate_xpath_item($form_state['#current_item'], $vars);
      break;
    case preg_match('/remove_container_([0-9]{1,9})/', $cbk, $match):

      // Delete container
      unset($xpaths['container_' . $match[1]]);
      break;
  }
  $form['xpath']['items'] += $xpaths;
  unset($xpaths);

  // Add new name
  $fields_options = array();
  foreach ($entities[$feed['entity_info']['#entity']]['columns'] as $f => &$v) {
    if (!isset($feed['xpath']['#items'][$f])) {
      $fields_options[$f] = $f;
    }
  }
  $form['xpath']['add_new_item_field'] = array(
    '#type' => 'select',
    '#options' => $fields_options,
    '#title' => t('Add new field'),
    '#description' => t('Select field name and click "' . t('Add field') . '" button'),
  );

  // Add new item button
  $form['xpath']['add_new_item'] = array(
    '#type' => 'button',
    '#value' => t('Add selected field'),
    '#inline' => TRUE,
    '#ajax' => array(
      'event' => 'click',
      'callback' => 'feed_import_ajax_add_new_item',
      'wrapper' => 'xpath_items',
      'method' => 'append',
    ),
  );

  // Submit buttons
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save feed'),
  );
  $form['cancel'] = array(
    '#type' => 'submit',
    '#value' => t('Cancel'),
  );

  // Add js
  $form['#attached'] = array(
    'js' => array(
      drupal_get_path('module', 'feed_import') . '/feed_import.js' => array(
        'type' => 'file',
      ),
    ),
  );
  return $form;
}