175 lines
5.1 KiB
PHP
175 lines
5.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file plugins/importexport/native/NativeImportExportPlugin.php
|
|
*
|
|
* Copyright (c) 2014-2021 Simon Fraser University
|
|
* Copyright (c) 2003-2021 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class NativeImportExportPlugin
|
|
*
|
|
* @ingroup plugins_importexport_native
|
|
*
|
|
* @brief Native XML import/export plugin
|
|
*/
|
|
|
|
namespace APP\plugins\importexport\native;
|
|
|
|
use APP\facades\Repo;
|
|
use APP\template\TemplateManager;
|
|
use PKP\plugins\importexport\native\PKPNativeImportExportDeployment;
|
|
|
|
class NativeImportExportPlugin extends \PKP\plugins\importexport\native\PKPNativeImportExportPlugin
|
|
{
|
|
/**
|
|
* @see ImportExportPlugin::display()
|
|
*/
|
|
public function display($args, $request)
|
|
{
|
|
parent::display($args, $request);
|
|
|
|
if ($this->isResultManaged) {
|
|
if ($this->result) {
|
|
return $this->result;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
$templateMgr = TemplateManager::getManager($request);
|
|
|
|
switch ($this->opType) {
|
|
case 'exportIssuesBounce':
|
|
return $this->getBounceTab(
|
|
$request,
|
|
__('plugins.importexport.native.export.issues.results'),
|
|
'exportIssues',
|
|
['selectedIssues' => $request->getUserVar('selectedIssues')]
|
|
);
|
|
case 'exportIssues':
|
|
$selectedEntitiesIds = (array) $request->getUserVar('selectedIssues');
|
|
$deployment = $this->getDeployment();
|
|
|
|
$this->getExportIssuesDeployment($selectedEntitiesIds, $deployment);
|
|
|
|
return $this->getExportTemplateResult($deployment, $templateMgr, 'issues');
|
|
default:
|
|
$dispatcher = $request->getDispatcher();
|
|
$dispatcher->handle404();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the issues and proceed to the export
|
|
*
|
|
* @param array $issueIds Array of issueIds to export
|
|
* @param PKPNativeImportExportDeployment $deployment
|
|
* @param array $opts
|
|
*/
|
|
public function getExportIssuesDeployment($issueIds, &$deployment, $opts = [])
|
|
{
|
|
$issues = [];
|
|
foreach ($issueIds as $issueId) {
|
|
$issue = Repo::issue()->get($issueId);
|
|
$issue = $issue->getJournalId() == $deployment->getContext()->getId() ? $issue : null;
|
|
if ($issue) {
|
|
$issues[] = $issue;
|
|
}
|
|
}
|
|
|
|
$deployment->export('issue=>native-xml', $issues, $opts);
|
|
}
|
|
|
|
/**
|
|
* Get the XML for a set of issues.
|
|
*
|
|
* @param array $issueIds
|
|
* @param \PKP\context\Context $context
|
|
* @param \PKP\user\User $user
|
|
* @param array $opts
|
|
*
|
|
* @return string XML contents representing the supplied issue IDs.
|
|
*/
|
|
public function exportIssues($issueIds, $context, $user, $opts = [])
|
|
{
|
|
$deployment = new NativeImportExportDeployment($context, $user);
|
|
$this->getExportIssuesDeployment($issueIds, $deployment, $opts);
|
|
|
|
return $this->exportResultXML($deployment);
|
|
}
|
|
|
|
/**
|
|
* @see PKPNativeImportExportPlugin::getImportFilter
|
|
*/
|
|
public function getImportFilter($xmlFile)
|
|
{
|
|
$filter = 'native-xml=>issue';
|
|
// is this articles import:
|
|
$xmlString = file_get_contents($xmlFile);
|
|
$document = new \DOMDocument('1.0', 'utf-8');
|
|
$document->loadXml($xmlString);
|
|
if (in_array($document->documentElement->tagName, ['article', 'articles'])) {
|
|
$filter = 'native-xml=>article';
|
|
}
|
|
|
|
return [$filter, $xmlString];
|
|
}
|
|
|
|
/**
|
|
* @see PKPNativeImportExportPlugin::getExportFilter
|
|
*/
|
|
public function getExportFilter($exportType)
|
|
{
|
|
$filter = 'issue=>native-xml';
|
|
if ($exportType == 'exportSubmissions') {
|
|
$filter = 'article=>native-xml';
|
|
}
|
|
|
|
return $filter;
|
|
}
|
|
|
|
/**
|
|
* @see PKPNativeImportExportPlugin::getAppSpecificDeployment
|
|
*/
|
|
public function getAppSpecificDeployment($context, $user)
|
|
{
|
|
return new NativeImportExportDeployment($context, $user);
|
|
}
|
|
|
|
/**
|
|
* @see PKPImportExportPlugin::executeCLI()
|
|
*/
|
|
public function executeCLI($scriptName, &$args)
|
|
{
|
|
$result = parent::executeCLI($scriptName, $args);
|
|
|
|
if ($result) {
|
|
return $result;
|
|
}
|
|
|
|
$cliDeployment = $this->cliDeployment;
|
|
$deployment = $this->getDeployment();
|
|
|
|
switch ($cliDeployment->command) {
|
|
case 'export':
|
|
switch ($cliDeployment->exportEntity) {
|
|
case 'issue':
|
|
case 'issues':
|
|
$this->getExportIssuesDeployment(
|
|
$cliDeployment->args,
|
|
$deployment,
|
|
$cliDeployment->opts
|
|
);
|
|
|
|
$this->cliToolkit->getCLIExportResult($deployment, $cliDeployment->xmlFile);
|
|
$this->cliToolkit->getCLIProblems($deployment);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
$this->usage($scriptName);
|
|
}
|
|
}
|