/** * Create and queue a new import from Omeka.net or with mixed records. */ public function omekaCsvAction() { $elementDelimiter = $this->session->elementDelimiter; $tagDelimiter = $this->session->tagDelimiter; $fileDelimiter = $this->session->fileDelimiter; $itemTypeId = $this->session->itemTypeId; $collectionId = $this->session->collectionId; $isPublic = $this->session->recordsArePublic; $isFeatured = $this->session->recordsAreFeatured; $isHtml = $this->session->elementsAreHtml; $identifierField = $this->session->identifierField; $containsExtraData = $this->session->containsExtraData; if ($containsExtraData == 'manual') { $containsExtraData = 'no'; } $headings = $this->session->columnNames; $columnMaps = array(); $isSetIdentifier = false; $unknowColumns = array(); foreach ($headings as $heading) { switch ($heading) { case 'Identifier': $columnMaps[] = new CsvImport_ColumnMap_Identifier($heading); $isSetIdentifier = true; break; case 'Action': $columnMaps[] = new CsvImport_ColumnMap_Action($heading, $action); break; case 'Identifier Field': case 'IdentifierField': $columnMaps[] = new CsvImport_ColumnMap_IdentifierField($heading, $identifierField); break; case 'Record Type': case 'RecordType': $columnMaps[] = new CsvImport_ColumnMap_RecordType($heading); break; case 'Item Type': case 'ItemType': $columnMaps[] = new CsvImport_ColumnMap_ItemType($heading, $itemTypeId); break; case 'Item': $columnMaps[] = new CsvImport_ColumnMap_Item($heading); break; case 'Collection': $columnMaps[] = new CsvImport_ColumnMap_Collection($heading, $collectionId); break; case 'Public': $columnMaps[] = new CsvImport_ColumnMap_Public($heading, $isPublic); break; case 'Featured': $columnMaps[] = new CsvImport_ColumnMap_Featured($heading, $isFeatured); break; case 'Tags': $columnMaps[] = new CsvImport_ColumnMap_Tag($heading, $tagDelimiter); break; case 'File': case 'Files': $columnMaps[] = new CsvImport_ColumnMap_File($heading, $fileDelimiter); break; // Default can be a normal element or, if not, an extra data // element that can be added via the hook csv_import_extra_data. // Default can be a normal element or, if not, an extra data // element that can be added via the hook csv_import_extra_data. default: // Here, column names are already checked. $columnMap = new CsvImport_ColumnMap_MixElement($heading, $elementDelimiter); // If this is an element. $columnElementId = $columnMap->getElementId(); if ($columnElementId) { $options = array('columnNameDelimiter' => $columnMap::DEFAULT_COLUMN_NAME_DELIMITER, 'elementDelimiter' => $elementDelimiter, 'isHtml' => $isHtml); } elseif ($containsExtraData == 'yes') { $columnMap = new CsvImport_ColumnMap_ExtraData($heading, $elementDelimiter); $options = array('columnNameDelimiter' => $columnMap::DEFAULT_COLUMN_NAME_DELIMITER, 'elementDelimiter' => $elementDelimiter); } elseif ($containsExtraData == 'no') { $unknowColumns[] = $heading; } // Else ignore the column. // Memorize the identifier if needed, after cleaning. if ($isSetIdentifier === false) { $cleanHeading = explode(CsvImport_ColumnMap_MixElement::DEFAULT_COLUMN_NAME_DELIMITER, $heading); $cleanHeading = implode(CsvImport_ColumnMap_MixElement::DEFAULT_COLUMN_NAME_DELIMITER, array_map('trim', $cleanHeading)); if ($identifierField == $cleanHeading) { $isSetIdentifier = null; $identifierHeading = $heading; } } $columnMap->setOptions($options); $columnMaps[] = $columnMap; break; } } if ($unknowColumns) { $msg = __('Columns "%s" are unknown.', implode('", "', $unknowColumns)); $this->_helper->flashMessenger($msg, 'error'); $this->_helper->redirector->goto('index'); } // A column for identifier is required. It can be any column, specially // Dublin Core:Identifier. if ($isSetIdentifier === null) { $columnMaps[] = new CsvImport_ColumnMap_Identifier($identifierHeading); $isSetIdentifier = true; } if (!$isSetIdentifier) { $msg = __('There is no "Identifier" or identifier field "%s" column.', $identifierField); $this->_helper->flashMessenger($msg, 'error'); $this->_helper->redirector->goto('index'); } $this->session->columnMaps = $columnMaps; $this->_launchImport(); }
/** * Create and queue a new import from Omeka.net or with mixed records. */ public function omekaCsvAction() { $format = $this->session->format; // Specify the export format's file and tag delimiters. switch ($format) { case 'Manage': $elementDelimiter = $this->session->elementDelimiter; $tagDelimiter = $this->session->tagDelimiter; $fileDelimiter = $this->session->fileDelimiter; $itemTypeId = $this->session->itemTypeId; $collectionId = $this->session->collectionId; $isPublic = $this->session->recordsArePublic; $isFeatured = $this->session->recordsAreFeatured; $isHtml = $this->session->elementsAreHtml; $identifierField = $this->session->identifierField; $createCollections = true; $containsExtraData = $this->session->containsExtraData; if ($containsExtraData == 'manual') { $containsExtraData = 'no'; } break; case 'Report': // Do not allow the user to specify it. $tagDelimiter = ','; $fileDelimiter = ','; $itemTypeId = null; $collectionId = null; $action = null; $identifierField = null; $isPublic = null; $isFeatured = null; // Nevertheless, user can choose to import all elements as html // or as raw text. $isHtml = (bool) $this->session->elementsAreHtml; $createCollections = false; $containsExtraData = 'no'; break; // Deprecated. // Deprecated. case 'Mix': case 'Update': $elementDelimiter = $this->session->elementDelimiter; $tagDelimiter = $this->session->tagDelimiter; $fileDelimiter = $this->session->fileDelimiter; $itemTypeId = $this->session->itemTypeId; $collectionId = $this->session->collectionId; $isPublic = $this->session->recordsArePublic; $isFeatured = $this->session->recordsAreFeatured; $isHtml = $this->session->elementsAreHtml; $action = null; $identifierField = null; $createCollections = $this->session->createCollections; $containsExtraData = $this->session->containsExtraData; if ($containsExtraData == 'manual') { $containsExtraData = 'no'; } break; default: $this->_helper->flashMessenger(__('Invalid call.'), 'error'); $this->_helper->redirector->goto('index'); } $headings = $this->session->columnNames; $columnMaps = array(); $isSetIdentifier = false; foreach ($headings as $heading) { switch ($heading) { case 'Identifier': $columnMaps[] = new CsvImport_ColumnMap_Identifier($heading); $isSetIdentifier = true; break; // Deprecated. // Deprecated. case 'sourceItemId': $columnMaps[] = new CsvImport_ColumnMap_SourceItemId($heading); break; // Deprecated. // Deprecated. case 'updateMode': $columnMaps[] = new CsvImport_ColumnMap_UpdateMode($heading); break; case 'Action': $columnMaps[] = new CsvImport_ColumnMap_Action($heading, $action); break; case 'IdentifierField': $columnMaps[] = new CsvImport_ColumnMap_IdentifierField($heading, $identifierField); break; // Deprecated. // Deprecated. case 'updateIdentifier': $columnMaps[] = new CsvImport_ColumnMap_UpdateIdentifier($heading); break; case 'RecordType': // Deprecated. // Deprecated. case 'recordType': $columnMaps[] = new CsvImport_ColumnMap_RecordType($heading); break; // Deprecated. // Deprecated. case 'recordIdentifier': $columnMaps[] = new CsvImport_ColumnMap_RecordIdentifier($heading); break; case 'ItemType': // Used by Csv Report. // Used by Csv Report. case 'itemType': $columnMaps[] = new CsvImport_ColumnMap_ItemType($heading, $itemTypeId); break; case 'Item': $columnMaps[] = new CsvImport_ColumnMap_Item($heading); break; case 'Collection': // Used by Csv Report, Mixed and Update. // Used by Csv Report, Mixed and Update. case 'collection': $columnMaps[] = new CsvImport_ColumnMap_Collection($heading, $collectionId, $createCollections, $format == 'Manage'); break; case 'Public': // Used by Csv Report. // Used by Csv Report. case 'public': $columnMaps[] = new CsvImport_ColumnMap_Public($heading, $isPublic); break; case 'Featured': // Used by Csv Report. // Used by Csv Report. case 'featured': $columnMaps[] = new CsvImport_ColumnMap_Featured($heading, $isFeatured); break; case 'Tags': // Used by Csv Report. // Used by Csv Report. case 'tags': $columnMaps[] = new CsvImport_ColumnMap_Tag($heading, $tagDelimiter); break; // Deprecated. // Deprecated. case 'fileUrl': $columnMaps[] = new CsvImport_ColumnMap_File($heading, '', true); break; case 'File': // Used by Csv Report. // Used by Csv Report. case 'file': $columnMaps[] = new CsvImport_ColumnMap_File($heading, $fileDelimiter); break; // Default can be a normal element or, if not, an extra data // element that can be added via the hook csv_import_extra_data. // This doesn't work with "Report" format. // Default can be a normal element or, if not, an extra data // element that can be added via the hook csv_import_extra_data. // This doesn't work with "Report" format. default: switch ($format) { case 'Report': $columnMap = new CsvImport_ColumnMap_ExportedElement($heading); $options = array('columnNameDelimiter' => $columnMap::DEFAULT_COLUMN_NAME_DELIMITER, 'elementDelimiter' => $elementMap::DEFAULT_ELEMENT_DELIMITER, 'isHtml' => $isHtml); break; case 'Manage': // Deprecated. // Deprecated. case 'Mix': case 'Update': $columnMap = new CsvImport_ColumnMap_MixElement($heading, $elementDelimiter); // If extra data are not used or if this is an element. if ($containsExtraData != 'yes' || $columnMap->getElementId()) { $options = array('columnNameDelimiter' => $columnMap::DEFAULT_COLUMN_NAME_DELIMITER, 'elementDelimiter' => $elementDelimiter, 'isHtml' => $isHtml); } else { $columnMap = new CsvImport_ColumnMap_ExtraData($heading, $elementDelimiter); $options = array('columnNameDelimiter' => $columnMap::DEFAULT_COLUMN_NAME_DELIMITER, 'elementDelimiter' => $elementDelimiter); } // Memorize the identifier if needed, after cleaning. if ($format == 'Manage' && $isSetIdentifier === false) { $cleanHeading = explode(CsvImport_ColumnMap_MixElement::DEFAULT_COLUMN_NAME_DELIMITER, $heading); $cleanHeading = implode(CsvImport_ColumnMap_MixElement::DEFAULT_COLUMN_NAME_DELIMITER, array_map('trim', $cleanHeading)); if ($identifierField == $cleanHeading) { $isSetIdentifier = null; $identifierHeading = $heading; } } break; } $columnMap->setOptions($options); $columnMaps[] = $columnMap; break; } } // Manage requires et special check; if ($format == 'Manage') { // Manage format require that a column for identifier, but this // canbe any column, specially Dublin Core:Identifier. if ($isSetIdentifier === null) { $columnMaps[] = new CsvImport_ColumnMap_Identifier($identifierHeading); $isSetIdentifier = true; } if (!$isSetIdentifier) { $msg = __('There is no "Identifier" or identifier field "%s" column.', $identifierField); $this->_helper->flashMessenger($msg, 'error'); $this->_helper->redirector->goto('index'); } } $this->session->columnMaps = $columnMaps; $this->_launchImport(); }