function importIssues(&$journal, &$issueNodes, &$issues, &$errors, &$user, $isCommandLine) { $dependentItems = array(); $errors = array(); $issues = array(); $hasErrors = false; foreach ($issueNodes as $issueNode) { $result = NativeImportDom::importIssue($journal, $issueNode, $issue, $issueErrors, $user, $isCommandLine, $dependentItems, false); if ($result) { // Success. Add this issue to the list of // successfully imported issues. $issues[] = $issue; } else { // Failure. Record the errors and keep trying // with the next issue, even though we will just // delete any successful issues, so that the // user can be presented with as many relevant // error messages as possible. $errors = array_merge($errors, $issueErrors); $hasErrors = true; } } if ($hasErrors) { // There were errors. Delete all the issues we've // successfully created. NativeImportDom::cleanupFailure($dependentItems); $issueDao =& DAORegistry::getDAO('IssueDAO'); foreach ($issues as $issue) { $issueDao->deleteIssue($issue); } return false; } return true; }
function handleImport(&$context, &$doc, &$errors, &$issues, &$articles, $isCommandLine) { $errors = array(); $issues = array(); $articles = array(); $user =& $context['user']; $journal =& $context['journal']; $rootNodeName = $this->getRootNodeName($doc); $this->import('NativeImportDom'); switch ($rootNodeName) { case 'issues': return NativeImportDom::importIssues($journal, $doc->children, $issues, $errors, $user, $isCommandLine); break; case 'issue': $dependentItems = array(); $result = NativeImportDom::importIssue($journal, $doc, $issue, $errors, $user, $isCommandLine, $dependentItems); if ($result) { $issues = array($issue); } return $result; break; case 'articles': $section =& $context['section']; $issue =& $context['issue']; return NativeImportDom::importArticles($journal, $doc->children, $issue, $section, $articles, $errors, $user, $isCommandLine); break; case 'article': $section =& $context['section']; $issue =& $context['issue']; $result = NativeImportDom::importArticle($journal, $doc, $issue, $section, $article, $errors, $user, $isCommandLine); if ($result) { $articles = array($article); } return $result; break; default: $errors[] = array('plugins.importexport.native.import.error.unsupportedRoot', array('rootName' => $rootNodeName)); return false; break; } }
/** * Import issues from DuraCloud. * @param $user User * @param $journal Journal * @param $contentId string * @return array with result for each contentId (see importIssue) */ function importIssues(&$user, &$journal, $contentIds) { // Get the file from DuraCloud. $dcc = $this->getDuraCloudConnection(); $ds = new DuraStore($dcc); $result = array(); $dependentItems = $errors = array(); $nativeImportExportPlugin =& $this->getNativeImportExportPlugin(); foreach ($contentIds as $contentId) { $content = $ds->getContent($this->getDuraCloudSpace(), $contentId); if (!$content) { $result[$contentId] = false; continue; } // Get and reset the resource $fp =& $content->getResource(); fseek($fp, 0); // Parse the document $doc =& $nativeImportExportPlugin->getDocument($fp); // Import the issue $nativeImportExportPlugin->import('NativeImportDom'); $issue = null; NativeImportDom::importIssue($journal, $doc, $issue, $errors, $user, false, $dependentItems); $result[$contentId] =& $issue; unset($issue, $fp); } return $result; }