16 import(
'lib.pkp.classes.plugins.ImportExportPlugin');
23 parent::__construct();
29 function register($category, $path, $mainContextId =
null) {
30 $success = parent::register($category, $path, $mainContextId);
41 return 'CSVImportExportPlugin';
45 return __(
'plugins.importexport.csv.displayName');
49 return __(
'plugins.importexport.csv.description');
67 switch (array_shift($args)) {
83 $filename = array_shift($args);
84 $username = array_shift($args);
86 if (!$filename || !$username) {
87 $this->
usage($scriptName);
91 if (!file_exists($filename)) {
92 echo __(
'plugins.importexport.csv.fileDoesNotExist', array(
'filename' => $filename)) .
"\n";
96 $data = file($filename);
98 if (is_array($data) && count($data) > 0) {
101 $user = $userDao->getByUsername($username);
103 echo __(
'plugins.importexport.csv.unknownUser', array(
'username' => $username)) .
"\n";
114 import(
'lib.pkp.classes.submission.SubmissionFile');
118 foreach ($data as $csvLine) {
121 list($pressPath, $authorString, $title, $seriesPath, $year, $isEditedVolume, $locale, $pdfUrl, $doi) = preg_split(
'/\t/', $csvLine);
123 $press = $pressDao->getByPath($pressPath);
127 $supportedLocales = $press->getSupportedSubmissionLocales();
128 if (!is_array($supportedLocales) || count($supportedLocales) < 1) $supportedLocales = array($press->getPrimaryLocale());
129 $authorGroup = $userGroupDao->getDefaultByRoleId($press->getId(), ROLE_ID_AUTHOR);
132 $genre = $genreDao->getByKey(
'MANUSCRIPT', $press->getId());
135 echo __(
'plugins.importexport.csv.noGenre') .
"\n";
139 echo __(
'plugins.importexport.csv.noAuthorGroup', array(
'press' => $pressPath)) .
"\n";
142 if (in_array($locale, $supportedLocales)) {
143 $submission = $submissionDao->newDataObject();
144 $submission->setContextId($press->getId());
145 $submission->setUserId($user->getId());
146 $submission->stampLastActivity();
147 $submission->setStatus(STATUS_PUBLISHED);
148 $submission->setWorkType($isEditedVolume == 1?WORK_TYPE_EDITED_VOLUME:WORK_TYPE_AUTHORED_WORK);
149 $submission->setCopyrightNotice($press->getLocalizedSetting(
'copyrightNotice'), $locale);
150 $submission->setLocale($locale);
152 $series = $seriesDao->getByPath($seriesPath, $press->getId());
154 $submission->setSeriesId($series->getId());
156 echo __(
'plugins.importexport.csv.noSeries', array(
'seriesPath' => $seriesPath)) .
"\n";
159 $submissionId = $submissionDao->insertObject($submission);
161 $contactEmail = $press->getContactEmail();
162 $authorString = trim($authorString,
'"');
163 $authors = preg_split(
'/,\s*/', $authorString);
165 foreach ($authors as $authorString) {
168 $givenName = $familyName = $emailAddress =
null;
169 $authorString = trim($authorString);
170 if (preg_match(
'/^(\w+)(\s+\w+)?\s*(<([^>]+)>)?$/', $authorString, $matches)) {
171 $givenName = $matches[1];
172 if (count($matches) > 2) {
173 $familyName = $matches[2];
175 if (count($matches) == 5) {
176 $emailAddress = $matches[4];
178 $emailAddress = $contactEmail;
181 $author = $authorDao->newDataObject();
182 $author->setSubmissionId($submissionId);
183 $author->setUserGroupId($authorGroup->getId());
184 $author->setGivenName($givenName, $locale);
185 $author->setFamilyName($familyName, $locale);
186 $author->setEmail($emailAddress);
188 $author->setPrimaryContact(1);
189 $firstAuthor =
false;
191 $authorDao->insertObject($author);
194 $submission->setTitle($title, $locale);
195 $submissionDao->updateObject($submission);
198 $publicationFormat = $publicationFormatDao->newDataObject();
199 $publicationFormat->setPhysicalFormat(
false);
200 $publicationFormat->setIsApproved(
true);
201 $publicationFormat->setIsAvailable(
true);
202 $publicationFormat->setSubmissionId($submissionId);
203 $publicationFormat->setProductAvailabilityCode(
'20');
204 $publicationFormat->setEntryKey(
'DA');
205 $publicationFormat->setData(
'name',
'PDF', $submission->getLocale());
206 $publicationFormat->setSequence(REALLY_BIG_NUMBER);
207 $publicationFormatId = $publicationFormatDao->insertObject($publicationFormat);
210 $publicationFormat->setStoredPubId(
'doi', $doi);
213 $publicationFormatDao->updateObject($publicationFormat);
216 $publicationDate = $publicationDateDao->newDataObject();
217 $publicationDate->setDateFormat(
'05');
218 $publicationDate->setRole(
'01');
219 $publicationDate->setDate($year);
220 $publicationDate->setPublicationFormatId($publicationFormatId);
221 $publicationDateDao->insertObject($publicationDate);
224 import(
'lib.pkp.classes.file.TemporaryFileManager');
225 import(
'lib.pkp.classes.file.FileManager');
228 $temporaryFilename = tempnam($temporaryFileManager->getBasePath(),
'remote');
229 $temporaryFileManager->copyFile($pdfUrl, $temporaryFilename);
230 $submissionFile = $submissionFileDao->newDataObjectByGenreId($genre->getId());
231 $submissionFile->setSubmissionId($submissionId);
232 $submissionFile->setSubmissionLocale($submission->getLocale());
233 $submissionFile->setGenreId($genre->getId());
234 $submissionFile->setFileStage(SUBMISSION_FILE_PROOF);
237 $submissionFile->setAssocType(ASSOC_TYPE_REPRESENTATION);
238 $submissionFile->setAssocId($publicationFormatId);
239 $submissionFile->setFileType(
'application/pdf');
242 $submissionFile->setDirectSalesPrice(0);
243 $submissionFile->setSalesType(
'openAccess');
245 $submissionFileDao->insertObject($submissionFile, $temporaryFilename);
247 $fileManager->deleteByPath($temporaryFilename);
249 echo __(
'plugins.importexport.csv.import.submission', array(
'title' => $title)) .
"\n";
251 echo __(
'plugins.importexport.csv.unknownLocale', array(
'locale' => $locale)) .
"\n";
254 echo __(
'plugins.importexport.csv.unknownPress', array(
'pressPath' => $pressPath)) .
"\n";
264 echo __(
'plugins.importexport.csv.cliUsage', array(
265 'scriptName' => $scriptName,
266 'pluginName' => $this->
getName()