NativeXmlSubmissionFileFilter::handleRevisionElement PHP Method

handleRevisionElement() public method

Handle a revision element
public handleRevisionElement ( $node, $stageId, $fileId )
$node DOMElement
$stageId int SUBMISSION_FILE_...
$fileId int File id
    function handleRevisionElement($node, $stageId, $fileId)
    {
        static $genresByContextId = array();
        $deployment = $this->getDeployment();
        $submission = $deployment->getSubmission();
        $context = $deployment->getContext();
        $errorOccured = false;
        $revisionId = $node->getAttribute('number');
        $genreId = null;
        $genreName = $node->getAttribute('genre');
        if ($genreName) {
            // Build a cached list of genres by context ID by name
            if (!isset($genresByContextId[$context->getId()])) {
                $genreDao = DAORegistry::getDAO('GenreDAO');
                $genres = $genreDao->getByContextId($context->getId());
                while ($genre = $genres->next()) {
                    foreach ($genre->getName(null) as $locale => $name) {
                        $genresByContextId[$context->getId()][$name] = $genre;
                    }
                }
            }
            if (!isset($genresByContextId[$context->getId()][$genreName])) {
                $deployment->addError(ASSOC_TYPE_SUBMISSION, $submission->getId(), __('plugins.importexport.common.error.unknownGenre', array('param' => $genreName)));
                $errorOccured = true;
            } else {
                $genre = $genresByContextId[$context->getId()][$genreName];
                $genreId = $genre->getId();
            }
        }
        $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO');
        $submissionFile = $submissionFileDao->newDataObjectByGenreId($genreId);
        $submissionFile->setSubmissionId($submission->getId());
        $submissionFile->setGenreId($genreId);
        $submissionFile->setFileStage($stageId);
        $submissionFile->setDateUploaded(Core::getCurrentDate());
        $submissionFile->setDateModified(Core::getCurrentDate());
        if ($node->getAttribute('available') == 'true') {
            $submissionFile->setViewable(true);
        }
        $submissionFile->setOriginalFileName($filename = $node->getAttribute('filename'));
        for ($n = $node->firstChild; $n !== null; $n = $n->nextSibling) {
            if (is_a($n, 'DOMElement')) {
                $filename = $this->handleRevisionChildElement($n, $submission, $submissionFile);
            }
        }
        $uploaderUsername = $node->getAttribute('uploader');
        $uploaderUserGroup = $node->getAttribute('user_group_ref');
        // Determine the user group based on the user_group_ref element.
        $userGroupDao = DAORegistry::getDAO('UserGroupDAO');
        $userGroups = $userGroupDao->getByContextId($context->getId());
        while ($userGroup = $userGroups->next()) {
            if (in_array($uploaderUserGroup, $userGroup->getName(null))) {
                $submissionFile->setUserGroupId($userGroup->getId());
                break;
            }
        }
        if (!$submissionFile->getUserGroupId()) {
            $deployment->addError(ASSOC_TYPE_SUBMISSION, $submission->getId(), __('plugins.importexport.common.error.unknownUserGroup', array('param' => $uploaderUserGroup)));
            $errorOccured = true;
        }
        // Do the same for the user.
        $userDao = DAORegistry::getDAO('UserDAO');
        $user = $userDao->getByUsername($uploaderUsername);
        if ($user) {
            $submissionFile->setUploaderUserId($user->getId());
        } else {
            $deployment->addError(ASSOC_TYPE_SUBMISSION, $submission->getId(), __('plugins.importexport.common.error.unknownUploader', array('param' => $uploaderUsername)));
            $errorOccured = true;
        }
        $fileSize = $node->getAttribute('filesize');
        $submissionFile->setFileSize($fileSize);
        $fileType = $node->getAttribute('filetype');
        $submissionFile->setFileType($fileType);
        $submissionFile->setRevision($revisionId);
        if ($errorOccured) {
            // if error occured, the file cannot be inserted into DB, becase
            // genre, uploader and user group are required (e.g. at name generation).
            $submissionFile = null;
        } else {
            $insertedSubmissionFile = $submissionFileDao->insertObject($submissionFile, $filename, false);
            $deployment->setFileDBId($fileId, $revisionId, $insertedSubmissionFile->getFileId());
        }
        $fileManager = new FileManager();
        $fileManager->deleteFile($filename);
        return $submissionFile;
    }