function feed_import_edit_feed_form in Feed Import 7
Same name and namespace in other branches
- 7.3 feed_import.module \feed_import_edit_feed_form()
- 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;
}