<?php
import('lib.pkp.plugins.importexport.native.filter.NativeImportFilter');
class NativeXmlIssueGalleyFilter extends NativeImportFilter {
	function __construct($filterGroup) {
		$this->setDisplayName('Native XML issue galley import');
		parent::__construct($filterGroup);
	}
	function getClassName() {
		return 'plugins.importexport.nativee.filter.NativeXmlIssueGalleyFilter';
	}
	function getPluralElementName() { return 'issue_galleys'; }
	function getSingularElementName() { return 'issue_galley'; }
	function handleElement($node) {
		$deployment = $this->getDeployment();
		$context = $deployment->getContext();
		$issue = $deployment->getIssue();
		assert(is_a($issue, 'Issue'));
		$issueGalleyDao = DAORegistry::getDAO('IssueGalleyDAO');
		$issueGalley = $issueGalleyDao->newDataObject();
		$issueGalley->setIssueId($issue->getId());
		$locale = $node->getAttribute('locale');
		if (empty($locale)) $locale = $context->getPrimaryLocale();
		$issueGalley->setLocale($locale);
		$issueGalley->setSequence($issueGalleyDao->getNextGalleySequence($issue->getId()));
		for ($n = $node->firstChild; $n !== null; $n=$n->nextSibling) if (is_a($n, 'DOMElement')) switch($n->tagName) {
			case 'id': $this->parseIdentifier($n, $issueGalley); break;
			case 'label': $issueGalley->setLabel($n->textContent); break;
			case 'issue_file':
				$issueFileDao = DAORegistry::getDAO('IssueFileDAO');
				$issueFile = $issueFileDao->newDataObject();
				$issueFile->setIssueId($issue->getId());
				for ($o = $n->firstChild; $o !== null; $o=$o->nextSibling) if (is_a($o, 'DOMElement')) switch($o->tagName) {
					case 'file_name': $issueFile->setServerFileName($o->textContent); break;
					case 'file_type': $issueFile->setFileType($o->textContent); break;
					case 'file_size': $issueFile->setFileSize($o->textContent); break;
					case 'content_type': $issueFile->setContentType((int)$o->textContent); break;
					case 'original_file_name': $issueFile->setOriginalFileName($o->textContent); break;
					case 'date_uploaded': $issueFile->setDateUploaded($o->textContent); break;
					case 'date_modified': $issueFile->setDateModified($o->textContent); break;
					case 'embed':
						import('classes.file.IssueFileManager');
						$issueFileManager = new IssueFileManager($issue->getId());
						$filePath = $issueFileManager->getFilesDir() . $issueFileManager->contentTypeToPath($issueFile->getContentType()) . '/' . $issueFile->getServerFileName();
						$issueFileManager->writeFile($filePath, $o->textContent);
						break;
				}
				$issueFileId = $issueFileDao->insertObject($issueFile);
				$issueGalley->setFileId($issueFileId);
				break;
		}
		$issueGalleyDao->insertObject($issueGalley);
		return $issueGalley;
	}
	function parseIdentifier($element, $issue) {
		$advice = $element->getAttribute('advice');
		switch ($element->getAttribute('type')) {
			case 'internal': assert(!$advice || $advice == 'ignore'); break;
			case 'public':
				if ($advice == 'update') $issue->setStoredPubId('publisher-id', $element->textContent);
				break;
		}
	}
}
