ImportForm.php in Feed Import 8
Contains \Drupal\feed_import\Form\ImportForm
Namespace
Drupal\feed_import\FormFile
src/Form/ImportForm.phpView source
<?php
/**
* @file
* Contains \Drupal\feed_import\Form\ImportForm
*/
namespace Drupal\feed_import\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\feed_import_base\FeedImport;
class ImportForm extends FormBase {
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'feed_import_import';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Feed name'),
'#maxlength' => 64,
'#description' => t('This usually is source name.'),
'#required' => TRUE,
);
$form['machine_name'] = array(
'#type' => 'machine_name',
'#title' => t('Feed machine name'),
'#description' => t('This must be unique for each feed and must be not numeric.') . '<br />' . t('Once saved this can not be changed!'),
'#maxlength' => 64,
'#required' => TRUE,
'#machine_name' => array(
'source' => array(
'name',
),
'exists' => '\\Drupal\\feed_import_base\\FeedImport::loadFeed',
),
);
$form['code'] = array(
'#type' => 'textarea',
'#rows' => 10,
'#title' => t('Enter feed in JSON format'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Import'),
);
return $form;
}
/**
* {@inheritdoc}
*/
public function validateForm(array &$form, FormStateInterface $form_state) {
if ($machine_name = $form_state
->getValue('machine_name')) {
if (is_numeric($machine_name) || is_numeric($machine_name[0])) {
$form_state
->setError($form['machine_name'], t('Machine name must be not numeric!'));
}
}
$code = trim($form_state
->getValue('code'));
if (!$code || !($code = @json_decode($code, TRUE))) {
$form_state
->setError($form['code'], t('Invalid JSON code!'));
return;
}
if (!is_array($code)) {
$form_state
->setError($form['code'], t('Invalid feed format!'));
return;
}
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$options = array(
'name' => $form_state
->getValue('name'),
'machine_name' => $form_state
->getValue('machine_name'),
);
if ($code = $this
->importFromJson($form_state
->getValue('code'), $options)) {
drupal_set_message(t('Feed imported'));
$form_state
->setRedirect('feed_import.admin_edit', [
'fid' => $code->machine_name,
]);
}
else {
drupal_set_message(t('Feed cannot be imported!'), 'error');
$form_state
->setRedirect('feed_import.admin');
}
}
/**
* Import a feed from a json file.
*
* @param string $json The JSON encoded feed configuration
* @param array $options An array of options to add to $json configuration
* @param bool $cleanup TRUE to reset import information
*
* @return mixed A feed configuration object on success or false on error
*/
protected function importFromJson($json, array $options = array(), $cleanup = TRUE, $keep_id = FALSE) {
if ($code = @json_decode($json, TRUE)) {
// Get an empty feed configuration.
$ef = FeedImport::getEmptyFeed();
// Add options.
$code = $options + $code;
// Add empty feed items.
$code += $ef;
// Add settings options if any.
if (!empty($options['settings'])) {
$code['settings'] = $options['settings'] + $code['settings'];
}
// Add empty feed settings.
$code['settings'] += $ef['settings'];
// Not needed anymore.
unset($json, $ef, $options);
if (!$keep_id) {
unset($code['id']);
}
// Convert to object.
$code = (object) $code;
// Cleanup import info.
if ($cleanup) {
$code->cron_import = 0;
$code->last_run = 0;
$code->last_run_duration = 0;
$code->last_run_items = 0;
}
// Check for group, if no group then use machine_name as group.
if (empty($code->settings['hashes']['options']['group'])) {
$code->settings['hashes']['options']['group'] = $code->machine_name;
}
// Save feed.
if (FeedImport::saveFeed($code)) {
return $code;
}
}
return FALSE;
}
}
Classes
Name | Description |
---|---|
ImportForm |