function feed_import_edit_feed_form in Feed Import 7.2
Same name and namespace in other branches
- 7.3 feed_import.module \feed_import_edit_feed_form()
- 7 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 1028 - 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');
drupal_goto(FEED_IMPORT_PATH);
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 feed'),
'#description' => t('Please use a valid url that returns valid content!'),
'#default_value' => $feed['url'],
'#required' => TRUE,
);
$options = array();
$functions = FeedImport::processFunctions();
foreach ($functions as $f => &$func) {
$options[$f] = $f;
}
$form['process_function'] = array(
'#type' => 'select',
'#options' => $options,
'#default_value' => isset($feed['xpath']['#process_function']) ? $feed['xpath']['#process_function'] : reset($options),
'#title' => t('Select process function'),
'#ajax' => array(
'event' => 'change',
'callback' => 'feed_import_ajax_change_process_function_settings',
'wrapper' => 'process_function_settings',
'method' => 'replace',
),
);
// Process function settings.
$form['settings'] = array(
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#title' => t('Process function settings'),
'#tree' => TRUE,
'#attributes' => array(
'id' => 'process_function_settings',
),
);
if (isset($form_state['values']['process_function'])) {
$process_func = $form_state['values']['process_function'];
$form['settings']['#collapsed'] = FALSE;
}
else {
$process_func = $form['process_function']['#default_value'];
}
// Get current process function info.
$functions = $functions[$process_func];
// Add settings info.
if (!empty($functions['settings'])) {
$form['settings']['info'] = array(
'#markup' => $functions['info'] . '<br /><u>' . t('If a field value is not valid default value will be used without any warnings!') . '</u>',
);
$use_default = $process_func == $feed['xpath']['#process_function'];
foreach ($functions['settings'] as $field_name => &$field_info) {
if ($use_default && isset($feed['xpath']['#settings'][$field_name])) {
$field_info['default'] = $feed['xpath']['#settings'][$field_name];
}
$form['settings'][$field_name] = array(
'#type' => 'textfield',
'#title' => check_plain($field_info['title']),
'#description' => check_plain($field_info['description']),
'#default_value' => $field_info['default'],
);
$field_info = NULL;
}
}
else {
$form['settings']['info'] = array(
'#markup' => t("This process function doesn't have settings."),
);
}
unset($functions);
$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('Import at cron'),
'#default_value' => $feed['enabled'],
'#description' => t('Check this if you want to import feed items when cron runs.'),
);
// 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 parent item xpath'),
'#description' => t("Usualy this starts with // and it's base query (context for all items)."),
);
$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. If empty then items will not be monitorized."),
);
$form['xpath']['skip_imported_items'] = array(
'#type' => 'checkbox',
'#title' => t('Skip already imported items'),
'#default_value' => !empty($feed['xpath']['#skip_imported_items']),
'#description' => t('This is possible only when items are monitorized.'),
);
// 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['#field_added'] = FALSE;
$vars = $form_state['values']['add_new_item_mode'] ? 'add_new_item_field' : 'add_new_item_manual';
$vars = drupal_strtolower($form_state['values'][$vars]);
if (empty($vars)) {
break;
}
else {
$i = 0;
while (isset($form_state['complete form']['xpath']['items']['container_' . $i])) {
if ($form_state['complete form']['xpath']['items']['container_' . $i]['#title'] == $vars) {
break 2;
}
$i++;
}
unset($i);
}
$form_state['#field_added'] = TRUE;
$form_state['#current_item']++;
$xpaths += feed_import_generate_xpath_item($form_state['#current_item'], array(
'#field' => $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_mode'] = array(
'#type' => 'checkbox',
'#title' => t('Use defined fields'),
'#default_value' => TRUE,
);
$form['xpath']['add_new_item_field'] = array(
'#type' => 'select',
'#options' => $fields_options,
'#title' => t('Select defined field'),
'#description' => t('Select field name and click "' . t('Add field') . '" button'),
'#states' => array(
'visible' => array(
':input[name=add_new_item_mode]' => array(
'checked' => TRUE,
),
),
),
);
$form['xpath']['add_new_item_manual'] = array(
'#type' => 'textfield',
'#title' => t('Enter field name'),
'#description' => t('Write field name and click "' . t('Add field') . '" button'),
'#states' => array(
'visible' => array(
':input[name=add_new_item_mode]' => array(
'checked' => FALSE,
),
),
),
);
// Add new item button.
$form['xpath']['add_new_item'] = array(
'#type' => 'button',
'#value' => t('Add 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;
}