changes the way importers props are declared and exposes it

This commit is contained in:
Leo Germani 2018-07-24 14:46:40 -03:00
parent ab0b7915ab
commit dd0796e590
5 changed files with 54 additions and 46 deletions

View File

@ -5,10 +5,6 @@ use Tainacan;
class CSV extends Importer {
protected $manual_mapping = true;
protected $manual_collection = true;
public function __construct($attributes = array()) {
parent::__construct($attributes);

View File

@ -20,20 +20,26 @@ class Importer_Handler {
'name' => 'CSV',
'description' => __('Import items from a CSV file to a chosen collection', 'tainacan'),
'slug' => 'csv',
'class_name' => '\Tainacan\Importer\CSV'
'class_name' => '\Tainacan\Importer\CSV',
'manual_collection' => true,
'manual_mapping' => true,
]);
$this->register_importer([
'name' => 'Test',
'description' => __('Create 2 test colletions with random items', 'tainacan'),
'slug' => 'test',
'class_name' => '\Tainacan\Importer\Test_Importer'
'class_name' => '\Tainacan\Importer\Test_Importer',
'manual_collection' => false,
'manual_mapping' => false,
]);
$this->register_importer([
'name' => 'Tainacan Legacy',
'description' => __('Import structure from legacy version of Tainacan', 'tainacan'),
'slug' => 'tainacan_old',
'class_name' => '\Tainacan\Importer\Old_Tainacan'
'class_name' => '\Tainacan\Importer\Old_Tainacan',
'manual_collection' => false,
'manual_mapping' => false,
]);
do_action('tainacan_register_importers');
@ -58,14 +64,48 @@ class Importer_Handler {
/**
* Register Importer
*
* @param array $importer
* [
* 'slug' => 'example-importer',
* 'class_name' => '\Tainacan\Importer\Test_Importer'
* ]
*
*
* @param array $importer {
* Required. Array or string of arguments describing the importer
*
* @type string $name The name of the importer. e.g. 'Example Importer'
* @type string $slug A unique slug for the importer. e.g. 'This is an example importer description'
* @type string $description The importer description. e.g. 'example-importer'
* @type string $class_name The Importer Class. e.g. '\Tainacan\Importer\Test_Importer'
* @type bool $manual_mapping Wether Tainacan must present the user with an interface to manually map
* the metadata from the source to the target collection.
*
* If set to true, Importer Class must implement the method
* get_source_metadata() to return the metadatum found in the source.
*
* Note that this will only work when importing items to one single collection.
*
* @type bool $manual_collection Wether Tainacan will let the user choose a destination collection.
*
* If set to true, the API endpoints will handle Collection creation and will assign it to
* the importer object using add_collection() method.
*
* Otherwise, the child importer class must create the collections and add them to the collections property also
* using add_collection()
*
*/
public function register_importer(array $importer) {
$this->registered_importers[$importer['slug']] = $importer;
$defaults = [
'manual_mapping' => false,
'manual_collection' => true
];
$attrs = wp_parse_args($importer, $defaults);
if (!isset($attrs['slug']) || !isset($attrs['class_name']) || !isset($attrs['name'])) {
return false;
}
$this->registered_importers[$importer['slug']] = $attrs;
return true;
}
public function unregister_importer($importer_slug) {

View File

@ -21,31 +21,6 @@ abstract class Importer {
*/
protected $tmp_file;
/**
* Wether Tainacan must present the user with an interface to manually map
* the metadata from the source to the target collection.
*
* If set to true in the child class, it must implement the method
* get_source_metadata() to return the metadatum found in the source.
*
* Note that this will only work when importing items to one single collection.
* @var bool
*/
protected $manual_mapping = false;
/**
* Wether Tainacan will let the user choose a destination collection.
*
* If set to true, the API endpoints will handle Collection creation and will assign it to
* the importer object using add_collection() method.
*
* Otherwise, the child importer class must create the collections and add them to the collections property also
* using add_collection()
*
* @var bool
*/
protected $manual_collection = true;
/**
* This array holds the structure that the default step 'process_collections' will handle.
@ -188,9 +163,12 @@ abstract class Importer {
}
$return['class_name'] = get_class($this);
global $Tainacan_Importer_Handler;
$importer_definition = $Tainacan_Importer_Handler->get_importer_by_object($this);
if ($short === false) {
$return['manual_collection'] = $this->manual_collection;
$return['manual_mapping'] = $this->manual_mapping;
$return['manual_collection'] = $importer_definition['manual_collection'];
$return['manual_mapping'] = $importer_definition['manual_mapping'];
$return['accepts'] = $this->accepts;
$return['options_form'] = $this->options_form();
}

View File

@ -5,9 +5,6 @@ use \Tainacan\Entities;
class Old_Tainacan extends Importer{
protected $manual_mapping = false;
protected $manual_collection = false;
protected $steps = [
[

View File

@ -15,9 +15,6 @@ use \Tainacan\Entities;
class Test_Importer extends Importer {
protected $manual_mapping = false;
protected $manual_collection = false;
protected $steps = [
[