class FeedsCSVParser in Feeds 6
Same name and namespace in other branches
- 7.2 plugins/FeedsCSVParser.inc \FeedsCSVParser
- 7 plugins/FeedsCSVParser.inc \FeedsCSVParser
Parses a given file as a CSV file.
Hierarchy
- class \FeedsConfigurable
- class \FeedsPlugin implements FeedsSourceInterface
- class \FeedsParser
- class \FeedsCSVParser
- class \FeedsParser
- class \FeedsPlugin implements FeedsSourceInterface
Expanded class hierarchy of FeedsCSVParser
12 string references to 'FeedsCSVParser'
- FeedsCSVtoTermsTest::test in tests/
feeds_processor_term.test - Test node creation, refreshing/deleting feeds and feed items.
- FeedsCSVtoUsersTest::test in tests/
feeds_processor_user.test - Test node creation, refreshing/deleting feeds and feed items.
- FeedsDateTimeTest::setUp in tests/
feeds_date_time.test - Generates a random database prefix, runs the install scripts on the prefixed database and enable the specified modules. After installation many caches are flushed and the internal browser is setup so that the page requests will run on the new prefix.…
- FeedsMapperContentTaxonomyTestCase::test in tests/
feeds_mapper_content_taxonomy.test - Basic test loading a single entry CSV file.
- FeedsMapperContentTestCase::test in tests/
feeds_mapper_content.test - Basic test loading a doulbe entry CSV file.
File
- plugins/
FeedsCSVParser.inc, line 6
View source
class FeedsCSVParser extends FeedsParser {
/**
* Implementation of FeedsParser::parse().
*/
public function parse(FeedsImportBatch $batch, FeedsSource $source) {
// Load and configure parser.
feeds_include_library('ParserCSV.inc', 'ParserCSV');
$iterator = new ParserCSVIterator(realpath($batch
->getFilePath()));
$source_config = $source
->getConfigFor($this);
$parser = new ParserCSV();
$delimiter = $source_config['delimiter'] == 'TAB' ? "\t" : $source_config['delimiter'];
$parser
->setDelimiter($delimiter);
if (empty($source_config['no_headers'])) {
// Get first line and use it for column names, convert them to lower case.
$header = $this
->parseHeader($parser, $iterator);
if (!$header) {
return;
}
$parser
->setColumnNames($header);
}
// Populate batch.
$batch->items = $this
->parseItems($parser, $iterator);
}
/**
* Get first line and use it for column names, convert them to lower case.
* Be aware that the $parser and iterator objects can be modified in this
* function since they are passed in by reference
*
* @param ParserCSV $parser
* @param ParserCSVIterator $iterator
* @return
* An array of lower-cased column names to use as keys for the parsed items.
*/
protected function parseHeader(ParserCSV $parser, ParserCSVIterator $iterator) {
$parser
->setLineLimit(1);
$rows = $parser
->parse($iterator);
if (!count($rows)) {
return FALSE;
}
$header = array_shift($rows);
foreach ($header as $i => $title) {
$header[$i] = trim(drupal_strtolower($title));
}
return $header;
}
/**
* Parse all of the items from the CSV.
*
* @param ParserCSV $parser
* @param ParserCSVIterator $iterator
* @return
* An array of rows of the CSV keyed by the column names previously set
*/
protected function parseItems(ParserCSV $parser, ParserCSVIterator $iterator) {
// Set line limit to 0 and start byte to last position and parse rest.
$parser
->setLineLimit(0);
$parser
->setStartByte($parser
->lastLinePos());
$rows = $parser
->parse($iterator);
return $rows;
}
/**
* Override parent::getMappingSources().
*/
public function getMappingSources() {
return FALSE;
}
/**
* Override parent::getSourceElement() to use only lower keys.
*/
public function getSourceElement(FeedsImportBatch $batch, $element_key) {
return parent::getSourceElement($batch, drupal_strtolower($element_key));
}
/**
* Define defaults.
*/
public function sourceDefaults() {
return array(
'delimiter' => $this->config['delimiter'],
'no_headers' => $this->config['no_headers'],
);
}
/**
* Source form.
*
* Show mapping configuration as a guidance for import form users.
*/
public function sourceForm($source_config) {
$form = array();
$form['#weight'] = -10;
$mappings = feeds_importer($this->id)->processor->config['mappings'];
$sources = $uniques = array();
foreach ($mappings as $mapping) {
$sources[] = check_plain($mapping['source']);
if ($mapping['unique']) {
$uniques[] = check_plain($mapping['source']);
}
}
$items = array(
t('Import !csv_files with one or more of these columns: !columns.', array(
'!csv_files' => l(t('CSV files'), 'http://en.wikipedia.org/wiki/Comma-separated_values'),
'!columns' => implode(', ', $sources),
)),
format_plural(count($uniques), t('Column <strong>!column</strong> is mandatory and considered unique: only one item per !column value will be created.', array(
'!column' => implode(', ', $uniques),
)), t('Columns <strong>!columns</strong> are mandatory and values in these columns are considered unique: only one entry per value in one of these column will be created.', array(
'!columns' => implode(', ', $uniques),
))),
);
$form['help']['#value'] = '<div class="help">' . theme('item_list', $items) . '</div>';
$form['delimiter'] = array(
'#type' => 'select',
'#title' => t('Delimiter'),
'#description' => t('The character that delimits fields in the CSV file.'),
'#options' => array(
',' => ',',
';' => ';',
'TAB' => 'TAB',
),
'#default_value' => isset($source_config['delimiter']) ? $source_config['delimiter'] : ',',
);
$form['no_headers'] = array(
'#type' => 'checkbox',
'#title' => t('No Headers'),
'#description' => t('Check if the imported CSV file does not start with a header row. If checked, mapping sources must be named \'0\', \'1\', \'2\' etc.'),
'#default_value' => isset($source_config['no_headers']) ? $source_config['no_headers'] : 0,
);
return $form;
}
/**
* Define default configuration.
*/
public function configDefaults() {
return array(
'delimiter' => ',',
'no_headers' => 0,
);
}
/**
* Build configuration form.
*/
public function configForm(&$form_state) {
$form = array();
$form['delimiter'] = array(
'#type' => 'select',
'#title' => t('Default delimiter'),
'#description' => t('Default field delimiter.'),
'#options' => array(
',' => ',',
';' => ';',
'TAB' => 'TAB',
),
'#default_value' => $this->config['delimiter'],
);
$form['no_headers'] = array(
'#type' => 'checkbox',
'#title' => t('No headers'),
'#description' => t('Check if the imported CSV file does not start with a header row. If checked, mapping sources must be named \'0\', \'1\', \'2\' etc.'),
'#default_value' => $this->config['no_headers'],
);
return $form;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
FeedsConfigurable:: |
protected | property | ||
FeedsConfigurable:: |
protected | property | CTools export enabled status of this object. | |
FeedsConfigurable:: |
protected | property | ||
FeedsConfigurable:: |
protected | property | ||
FeedsConfigurable:: |
public | function | Similar to setConfig but adds to existing configuration. | 1 |
FeedsConfigurable:: |
public | function | Submission handler for configForm(). | 3 |
FeedsConfigurable:: |
public | function | Validation handler for configForm(). | 3 |
FeedsConfigurable:: |
public | function | Copy a configuration. | 1 |
FeedsConfigurable:: |
public | function | Determine whether this object is persistent and enabled. I. e. it is defined either in code or in the database and it is enabled. | 1 |
FeedsConfigurable:: |
public | function | Implementation of getConfig(). | 1 |
FeedsConfigurable:: |
public static | function | Instantiate a FeedsConfigurable object. | 1 |
FeedsConfigurable:: |
public | function | Set configuration. | 1 |
FeedsConfigurable:: |
public | function | Override magic method __get(). Make sure that $this->config goes through getConfig() | |
FeedsConfigurable:: |
public | function | Override magic method __isset(). This is needed due to overriding __get(). | |
FeedsCSVParser:: |
public | function |
Define default configuration. Overrides FeedsConfigurable:: |
|
FeedsCSVParser:: |
public | function |
Build configuration form. Overrides FeedsConfigurable:: |
|
FeedsCSVParser:: |
public | function |
Override parent::getMappingSources(). Overrides FeedsParser:: |
|
FeedsCSVParser:: |
public | function |
Override parent::getSourceElement() to use only lower keys. Overrides FeedsParser:: |
|
FeedsCSVParser:: |
public | function |
Implementation of FeedsParser::parse(). Overrides FeedsParser:: |
|
FeedsCSVParser:: |
protected | function | Get first line and use it for column names, convert them to lower case. Be aware that the $parser and iterator objects can be modified in this function since they are passed in by reference | |
FeedsCSVParser:: |
protected | function | Parse all of the items from the CSV. | |
FeedsCSVParser:: |
public | function |
Define defaults. Overrides FeedsPlugin:: |
|
FeedsCSVParser:: |
public | function |
Source form. Overrides FeedsPlugin:: |
|
FeedsParser:: |
public | function | Clear all caches for results for given source. | |
FeedsPlugin:: |
public | function |
Returns TRUE if $this->sourceForm() returns a form. Overrides FeedsSourceInterface:: |
|
FeedsPlugin:: |
protected static | function | Loads on-behalf implementations from mappers/ directory. | |
FeedsPlugin:: |
public | function |
Save changes to the configuration of this object.
Delegate saving to parent (= Feed) which will collect
information from this object by way of getConfig() and store it. Overrides FeedsConfigurable:: |
|
FeedsPlugin:: |
public | function |
A source is being deleted. Overrides FeedsSourceInterface:: |
1 |
FeedsPlugin:: |
public | function |
Validation handler for sourceForm. Overrides FeedsSourceInterface:: |
2 |
FeedsPlugin:: |
public | function |
A source is being saved. Overrides FeedsSourceInterface:: |
1 |
FeedsPlugin:: |
protected | function |
Constructor. Overrides FeedsConfigurable:: |