create collection structure to create sets as terms in taxonomy (#209)

This commit is contained in:
Eduardo Humberto 2019-03-19 19:56:09 -03:00
parent c6cae0c71c
commit 8b14bb0e07
1 changed files with 83 additions and 8 deletions

View File

@ -19,6 +19,7 @@ class Oaipmh_Importer extends Importer {
],
];
protected $NAME_FOR_SETS = 'Sets';
protected $tainacan_api_address, $wordpress_api_address, $actual_collection;
/**
@ -53,7 +54,7 @@ class Oaipmh_Importer extends Importer {
if( $index === 0 ){
if( $collection_id['source_id'] !== 'taxonomies' ){
if( $collection_id['source_id'] !== 'sets' ){
$info = $this->requester( $this->get_url() . "?verb=ListRecords&metadataPrefix=oai_dc&set=" . $collection_id['source_id'] );
$this->add_log('fetching ' . $this->get_url() . "?verb=ListRecords&metadataPrefix=oai_dc&set=" . $collection_id['source_id']);
} else {
@ -96,6 +97,8 @@ class Oaipmh_Importer extends Importer {
$record = $record = $xml->ListRecords->record[$j];
$dc = $record->metadata->children("http://www.openarchives.org/OAI/2.0/oai_dc/");
// TODO: add sets if is necessary
if ($record->metadata->Count() > 0 ) {
$metadata = $dc->children('http://purl.org/dc/elements/1.1/');
$tam_metadata = count($metadata);
@ -134,11 +137,11 @@ class Oaipmh_Importer extends Importer {
$this->add_log('Creating collections');
$collection_xml = $this->fetch_collections();
if( isset($collection_xml->ListSets) ){
if( $collection_xml ){
if( !$this->get_option('using_set') || $this->get_option('using_set') == 'collection' ){
foreach ($collection_xml->ListSets->set as $set) {
foreach ($collection_xml as $set ) {
$setSpec = (string) $set->setSpec;
$setName = (string) $set->setName;
@ -159,17 +162,35 @@ class Oaipmh_Importer extends Importer {
}
} else if( $this->get_option('using_set') == 'taxonomy') {
$collection = $this->create_collection( 'set', $this->NAME_FOR_SETS );
$metadata_map = $this->create_collection_metadata($collection);
$total = intval( $this->get_total_items_from_source(false) );
$this->add_log('total in collection: ' . $total);
$this->add_log('collection id ' . (string) $collection->get_id());
$tax = new Entities\Taxonomy();
$tax->set_name( 'Sets' );
$tax->set_name( $this->NAME_FOR_SETS );
$tax->set_allow_insert('yes');
$tax->set_status('publish');
if ($tax->validate()) {
$tax = $this->tax_repo->insert($tax);
$metadatum_set_id = $this->create_set_metadata( $collection->get_id(), $tax->get_id() );
if( $metadatum_set_id ){
$this->add_collection([
'id' => $collection->get_id(),
'mapping' => $metadata_map,
'total_items' =>ceil( $total / 100 ),
'source_id' => 'sets',
'metadatum_id' => $metadatum_set_id
]);
}
$this->add_log('Taxonomy ' . $tax->get_name() . ' created' );
foreach ($collection_xml->ListSets->set as $set) {
foreach ($collection_xml as $set) {
$setSpec = (string)$set->setSpec;
$setName = (string)$set->setName;
@ -275,7 +296,11 @@ class Oaipmh_Importer extends Importer {
* @return int
*/
public function get_total_items_from_source( $setSpec ) {
$info = $this->requester( $this->get_url() . "?verb=ListRecords&metadataPrefix=oai_dc&set=" . $setSpec);
if($setSpec)
$info = $this->requester( $this->get_url() . "?verb=ListRecords&metadataPrefix=oai_dc&set=" . $setSpec);
else
$info = $this->requester( $this->get_url() . "?verb=ListRecords&metadataPrefix=oai_dc");
if( !isset($info['body']) ){
$this->add_log('ERROR');
@ -410,11 +435,33 @@ class Oaipmh_Importer extends Importer {
*/
protected function fetch_collections(){
$collections_array = [];
$collections_link = $this->get_url() . "?verb=ListSets";
$collections = $this->requester($collections_link);
$collections_array = $this->decode_request($collections, $collections_link);
$xml = $this->decode_request($collections, $collections_link);
// TODO: verify if exists resumption token
if( isset($xml->ListSets->set) ) {
foreach ($xml->ListSets->set as $set) {
$collections_array[] = $set;
}
}
while ( isset($xml->ListSets) && isset($xml->ListSets->resumptionToken) ){
$resumptionToken = (string) $xml->ListSets->resumptionToken;
$collections_link = $this->get_url() . "?verb=ListSets&resumptionToken=" . $resumptionToken;
$collections = $this->requester($collections_link);
$xml = $this->decode_request($collections, $collections_link);
if( isset($xml->ListSets->set) ) {
foreach ($xml->ListSets->set as $set) {
$collections_array[] = $set;
}
}
}
return ($collections_array) ? $collections_array : [];
}
@ -542,6 +589,34 @@ class Oaipmh_Importer extends Importer {
return false;
}
/**
* @param $collection_id
* @param $taxonomy_id
* @return bool|int
* @throws \Exception
*/
public function create_set_metadata( $collection_id, $taxonomy_id ){
$newMetadatum = new Entities\Metadatum();
$name = $this->NAME_FOR_SETS;
$type = 'Taxonomy';
$newMetadatum->set_name($name);
$newMetadatum->set_metadata_type('Tainacan\Metadata_Types\\'.$type);
$newMetadatum->set_collection_id( (isset($collection_id)) ? $collection_id : 'default');
$newMetadatum->set_status('publish');
$newMetadatum->set_metadata_type_options(['taxonomy_id' => $taxonomy_id ]);
if($newMetadatum->validate()){
$inserted_metadata = $this->metadata_repo->insert( $newMetadatum );
$this->add_log('Metadata created: ' . $inserted_metadata->get_name());
return $inserted_metadata->get_id();
} else{
return false;
}
}
public function options_form(){
ob_start();