21 import(
'lib.pkp.classes.metadata.MetadataDataObjectAdapter');
31 return 'plugins.metadata.dc11.filter.Dc11SchemaArticleAdapter';
54 assert(is_a($article,
'Submission'));
65 $journal = $oaiDao->getJournal($article->getData(
'contextId'));
66 $section = $oaiDao->getSection($article->getSectionId());
67 if (is_a($article,
'Submission')) {
68 $issue = $oaiDao->getIssue($article->getCurrentPublication()->getData(
'issueId'));
77 $authors = $article->getAuthors();
78 foreach($authors as $author) {
79 $dc11Description->addStatement(
'dc:creator', $author->getFullName(
false,
true));
86 $subjects = array_merge_recursive(
87 (array) $submissionKeywordDao->getKeywords($article->getCurrentPublication()->getId(), $supportedLocales),
88 (array) $submissionSubjectDao->getSubjects($article->getCurrentPublication()->getId(), $supportedLocales)
96 $publisherInstitution = $journal->getData(
'publisherInstitution');
97 if (!empty($publisherInstitution)) {
98 $publishers = array($journal->getPrimaryLocale() => $publisherInstitution);
100 $publishers = $journal->getName(
null);
105 $contributors = (array) $article->getSponsor(
null);
106 foreach ($contributors as $locale => $contributor) {
107 $contributors[$locale] = array_map(
'trim', explode(
';', $contributor));
113 if (is_a($article,
'Submission')) {
114 if ($article->getDatePublished()) $dc11Description->addStatement(
'dc:date', date(
'Y-m-d', strtotime($article->getDatePublished())));
115 elseif (isset($issue) && $issue->getDatePublished()) $dc11Description->addStatement(
'dc:date', date(
'Y-m-d', strtotime($issue->getDatePublished())));
119 $driverType =
'info:eu-repo/semantics/article';
120 $dc11Description->addStatement(
'dc:type', $driverType, METADATA_DESCRIPTION_UNKNOWN_LOCALE);
121 $types = $section->getIdentifyType(
null);
122 $types = array_merge_recursive(
124 (array) $article->getType(
null)
127 $driverVersion =
'info:eu-repo/semantics/publishedVersion';
128 $dc11Description->addStatement(
'dc:type', $driverVersion, METADATA_DESCRIPTION_UNKNOWN_LOCALE);
132 if (is_a($article,
'Submission')) {
134 $galleys = $articleGalleyDao->getByPublicationId($article->getCurrentPublication()->getId());
136 while ($galley = $galleys->next()) {
137 $dc11Description->addStatement(
'dc:format', $galley->getFileType());
142 import(
'classes.issue.IssueAction');
145 $includeUrls = $journal->getSetting(
'publishingMode') != PUBLISHING_MODE_NONE || $issueAction->subscribedUser($request->getUser(), $journal,
null, $article->getId());
146 if (is_a($article,
'Submission') && $includeUrls) {
147 $dc11Description->addStatement(
'dc:identifier', $request->url($journal->getPath(),
'article',
'view', array($article->getBestId())));
151 $sources = $journal->getName(
null);
152 $pages = $article->getPages();
153 if (!empty($pages)) $pages =
'; ' . $pages;
154 foreach ($sources as $locale => $source) {
155 if (is_a($article,
'Submission')) {
156 $sources[$locale] .=
'; ' . $issue->getIssueIdentification(array(), $locale);
158 $sources[$locale] .= $pages;
161 if ($issn = $journal->getData(
'onlineIssn')) {
162 $dc11Description->addStatement(
'dc:source', $issn, METADATA_DESCRIPTION_UNKNOWN_LOCALE);
164 if ($issn = $journal->getData(
'printIssn')) {
165 $dc11Description->addStatement(
'dc:source', $issn, METADATA_DESCRIPTION_UNKNOWN_LOCALE);
170 if (is_a($article,
'Submission')) {
172 $galleys = $articleGalleyDao->getByPublicationId($article->getCurrentPublication()->getId())->toArray();
177 if (is_a($article,
'Submission')) {
178 foreach ($galleys as $galley) {
179 $galleyLocale = $galley->getLocale();
180 if(!is_null($galleyLocale) && !in_array($galleyLocale, $locales)) {
181 $locales[] = $galleyLocale;
186 $articleLanguage = $article->getLanguage();
187 if (empty($locales) && !empty($articleLanguage)) {
188 $dc11Description->addStatement(
'dc:language', strip_tags($articleLanguage));
193 if ($includeUrls)
foreach ($galleys as $galley) {
194 $relation = $request->url($journal->getPath(),
'article',
'view', array($article->getBestId(), $galley->getBestGalleyId()));
195 $dc11Description->addStatement(
'dc:relation', $relation);
200 foreach ($pubIdPlugins as $pubIdPlugin) {
201 if ($issue && $pubIssueId = $issue->getStoredPubId($pubIdPlugin->getPubIdType())) {
202 $dc11Description->addStatement(
'dc:source', $pubIssueId, METADATA_DESCRIPTION_UNKNOWN_LOCALE);
204 if ($pubArticleId = $article->getStoredPubId($pubIdPlugin->getPubIdType())) {
205 $dc11Description->addStatement(
'dc:identifier', $pubArticleId);
207 foreach ($galleys as $galley) {
208 if ($pubGalleyId = $galley->getStoredPubId($pubIdPlugin->getPubIdType())) {
209 $dc11Description->addStatement(
'dc:relation', $pubGalleyId);
218 $copyrightHolder = $article->getLocalizedCopyrightHolder();
219 $copyrightYear = $article->getCopyrightYear();
220 if (!empty($copyrightHolder) && !empty($copyrightYear)) {
221 $dc11Description->addStatement(
'dc:rights', __(
'submission.copyrightStatement', array(
'copyrightHolder' => $copyrightHolder,
'copyrightYear' => $copyrightYear)));
223 if ($licenseUrl = $article->getLicenseURL()) $dc11Description->addStatement(
'dc:rights', $licenseUrl);
225 HookRegistry::call(
'Dc11SchemaArticleAdapter::extractMetadataFromDataObject', array($this, $article, $journal, $issue, &$dc11Description));
227 return $dc11Description;
250 foreach(
stripAssocArray((array) $localizedValues) as $locale => $values) {
251 if (is_scalar($values)) $values = array($values);
252 foreach($values as $value) {
253 if (!empty($value)) {
254 $description->addStatement($propertyName, $value, $locale);