You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
3.0 KiB
87 lines
3.0 KiB
<?php
|
|
include_once INCLUDE_DIR .'class.translation.php';
|
|
|
|
|
|
class ListManager extends Module {
|
|
var $prologue = 'CLI list manager';
|
|
var $arguments = array(
|
|
'action' => array(
|
|
'help' => 'Action to be performed',
|
|
'options' => array(
|
|
'import' => 'Import list items to the system',
|
|
'export' => 'Export list items from the system',
|
|
'show' => 'Show the lists',
|
|
),
|
|
),
|
|
);
|
|
|
|
|
|
var $options = array(
|
|
'file' => array('-f', '--file', 'metavar'=>'path',
|
|
'help' => 'File or stream to process'),
|
|
'id' => array('-ID', '--id', 'metavar'=>'id',
|
|
'help' => 'List ID'),
|
|
);
|
|
|
|
var $stream;
|
|
|
|
function run($args, $options) {
|
|
|
|
Bootstrap::connect();
|
|
|
|
$list = null;
|
|
if ($options['id'])
|
|
$list = DynamicList::lookup($options['id']);
|
|
|
|
switch ($args['action']) {
|
|
case 'import':
|
|
if (!$list)
|
|
$this->fail("List ID required for items import");
|
|
|
|
// Properly detect Macintosh style line endings
|
|
ini_set('auto_detect_line_endings', true);
|
|
if (!$options['file'])
|
|
$this->fail('CSV file to import list items from is required!');
|
|
elseif (!($this->stream = fopen($options['file'], 'rb')))
|
|
$this->fail("Unable to open input file [{$options['file']}]");
|
|
|
|
$extras = array();
|
|
$status = $list->importCsv($this->stream, $extras);
|
|
if (is_numeric($status))
|
|
$this->stderr->write("Successfully imported $status list items\n");
|
|
else
|
|
$this->fail($status);
|
|
break;
|
|
case 'export':
|
|
|
|
if (!$list)
|
|
$this->fail("List ID required for export");
|
|
|
|
$stream = $options['file'] ?: 'php://stdout';
|
|
if (!($this->stream = fopen($stream, 'c')))
|
|
$this->fail("Unable to open output file [{$options['file']}]");
|
|
|
|
fputcsv($this->stream, array('Value', 'Abbrev'));
|
|
foreach ($list->getItems() as $item)
|
|
fputcsv($this->stream, array(
|
|
(string) $item->getValue(),
|
|
$item->getAbbrev()));
|
|
break;
|
|
case 'show':
|
|
$lists = DynamicList::objects()->order_by('-type', 'name');
|
|
foreach ($lists as $list) {
|
|
$this->stdout->write(sprintf("%d %s \n",
|
|
$list->getId(),
|
|
$list->getName(),
|
|
$list->getPluralName() ?: $list->getName()
|
|
));
|
|
}
|
|
break;
|
|
default:
|
|
$this->stderr->write('Unknown action!');
|
|
}
|
|
@fclose($this->stream);
|
|
}
|
|
}
|
|
Module::register('list', 'ListManager');
|
|
?>
|