protected function importFiles($item) { $ingester = Omeka_File_Ingest_AbstractIngest::factory('Url', $item, array()); $files = $this->files(); //have to step through one by one so we can save the id map for each $fileRecord and $fileData foreach ($files as $fileData) { try { $fileRecords = $ingester->ingest(array($fileData)); } catch (Exception $e) { _log($e); continue; } $item->saveFiles(); $fileRecord = array_pop($fileRecords); $map = new OmekaApiImportRecordIdMap(); $map->record_type = 'File'; $map->local_id = $fileRecord->id; $map->external_id = $fileData['externalId']; $map->endpoint_uri = $this->endpointUri; $map->save(); } }
/** * Add files to an item. * * @param string|Omeka_File_Ingest_AbstractIngest $transferStrategy * This can either be one of the following strings denoting built-in transfer * methods: * 'Upload', 'Filesystem', 'Url' * Or it could be an implemented Omeka_File_Ingest_AbstractIngest class. * * @param string|array $files This can be a single string, an array of strings, * or an array of arrays, depending on the parameters that are needed by the * underlying strategy. Expected parameters for the built in strategies are * as follows: * <ul> * <li>'Upload' => null|string If a string is given, it represents the * POST parameter name containing the uploaded file(s). If null is given, * all files in the POST will be ingested.</li> * * <li>'Url|Filesystem' => string|array If a string is given, this represents * the source identifier of a single file (the URL representing the file, or * the absolute file path, respectively). If an array is given, it assumes * that each entry in the array must be either an array or a string. If it * an array, there are several default keys that may be present: * <ul> * <li>'source' => Any identifier that is appropriate to the transfer * strategy in use. For 'Url', this should be a valid URL. For 'Filesystem', * it must be an absolute path to the source file to be transferred.</li> * <li>'name' => OPTIONAL The filename to give to the transferred * file. This can be any arbitrary filename and will be listed as the * original filename of the file. This will also be used to generate the * archival filename for the file. If none is given, this defaults to using * the getOriginalFileName() method of the transfer adapter.</li> * <li>'metadata' => OPTIONAL This could contain any metadata that needs to be * associated with the file. This should be indexed in the same fashion * as for items. See ActsAsElementText::addTextsByArray()</li> * </ul></li> * </ul> * @param array $options OPTIONAL May contain the following flags where * appropriate: * <ul> * <li>'ignore_invalid_files' => Do not throw exceptions when * attempting to ingest invalid files. Instead, skip to the next file in * the list and continue processing. False by default. (all except Upload).</li> * <li>'ignoreNoFile' => Ignore errors resulting from POSTs that do not * contain uploaded files as expected (only for Upload).</li> * </ul> * @return array Set of File records ingested. May be empty if no files * were ingested. */ public function addFiles($transferStrategy, $files, array $options = array()) { if ($transferStrategy instanceof Omeka_File_Ingest_AbstractIngest) { $ingester = $transferStrategy; $ingester->setItem($this->_record); $ingester->setOptions($options); } else { $ingester = Omeka_File_Ingest_AbstractIngest::factory($transferStrategy, $this->_record, $options); } $this->_addIngestValidators($ingester); $fileRecords = $ingester->ingest($files); // If we are attaching files to a pre-existing item, only save the files. if ($this->_record->exists()) { $this->_record->saveFiles(); } return $fileRecords; }