/** * Add a file to an existing study * @param DataverseStudy $study * @param SuppFile $suppFile * @return DataverseFile */ function &addFileToStudy(&$study, &$suppFile) { $packager = new DataversePackager(); $packager->addFile($suppFile); $packager->createPackage(); // Deposit the package $journal =& Request::getJournal(); $client = $this->_initSwordClient(); $depositReceipt = $client->deposit($study->getEditMediaUri(), $this->getSetting($journal->getId(), 'username'), $this->getSetting($journal->getId(), 'password'), '', $packager->getPackageFilePath(), $packager->getPackaging(), $packager->getContentType(), false); // in progress? false if ($depositReceipt->sac_status != DATAVERSE_PLUGIN_HTTP_STATUS_CREATED) { return false; } // Get the study statement & update the Dataverse file with content source URI $studyStatement = $client->retrieveAtomStatement($study->getStatementUri(), $this->getSetting($journal->getId(), 'username'), $this->getSetting($journal->getId(), 'password'), ''); // Need the study statement to update Dataverse files if (!isset($studyStatement)) { return false; } // Create a new Dataverse file for inserted suppfile $this->import('classes.DataverseFile'); $dvFile = new DataverseFile(); $dvFile->setSuppFileId($suppFile->getId()); $dvFile->setStudyId($study->getId()); $dvFile->setSubmissionId($study->getSubmissionId()); foreach ($studyStatement->sac_entries as $entry) { $dvUriFileName = substr($entry->sac_content_source, strrpos($entry->sac_content_source, '/') + 1); if ($dvUriFileName == str_replace(' ', '_', $suppFile->getOriginalFileName())) { $dvFile->setContentSourceUri($entry->sac_content_source); break; } } if (!$dvFile->getContentSourceUri()) { return false; } $dvFileDao =& DAORegistry::getDAO('DataverseFileDAO'); $dvFileDao->insertDataverseFile($dvFile); // Finally, file may have metadata that needs to be in study cataloguing information $articleDao =& DAORegistry::getDAO('ArticleDAO'); $article =& $articleDao->getArticle($study->getSubmissionId(), $journal->getId(), true); $this->updateStudy($article, $study); return $dvFile; }