14 import(
'lib.pkp.classes.plugins.ImportExportPlugin');
26 parent::__construct();
27 $this->_parentPlugin = $parentPlugin;
33 public function register($category, $path, $mainContextId =
null) {
34 $success = parent::register($category, $path, $mainContextId);
53 return 'SwordImportExportPlugin';
60 return $this->_parentPlugin->getPluginPath();
68 return __(
'plugins.importexport.sword.displayName');
76 return __(
'plugins.importexport.sword.description');
89 switch (array_shift($args)) {
94 $depositPoints = $depositPointDao->getByContextId($context->getId(),
null, SWORD_DEPOSIT_TYPE_MANAGER);
95 $depositPointsData = array(
'' => __(
'common.select'));
96 while ($depositPoint = $depositPoints->next()) {
97 $depositPointsData[$depositPoint->getId()] = $depositPoint->getLocalizedName();
99 $dispatcher =
$request->getDispatcher();
100 $settingUrl = $dispatcher->url(
102 null,
'management',
'settings',
'website',
107 $selectSubmissionsListPanel = new \PKP\components\listPanels\PKPSelectSubmissionsListPanel(
108 'selectSubmissionsListPanel',
109 'select submissions panel',
111 'apiUrl' =>
$request->getDispatcher()->url(
118 'canSelectAll' =>
true,
121 'selectorName' =>
'selectedSubmissions[]',
124 $templateMgr->assign(array(
125 'selectedDepositPoint' =>
$request->getUserVar(
'selectedDepositPoint'),
126 'depositEditorial' =>
$request->getUserVar(
'depositEditorial'),
127 'depositGalleys' =>
$request->getUserVar(
'depositGalleys'),
128 'swordSettingsPageUrl' => $settingUrl,
129 'depositPoints' => $depositPointsData,
130 'pluginJavaScriptURL' => $this->getSwordPlugin()->getJsUrl(
$request),
131 'selectSubmissionsListData' => [
133 'selectSubmissionsListPanel' => $selectSubmissionsListPanel->getConfig()
139 $script =
'$(document).data("depositedIdMap", '. json_encode($depositedIds) .
');';
140 $templateMgr->addJavaScript(
'depositedIds', $script, [
'inline' =>
true,
'contexts' =>
'backend']);
141 $templateMgr->addJavaScript(
142 'disableDepositedIds',
144 [
'contexts' =>
'backend']);
153 $depositPointId =
$request->getUserVar(
'depositPoint');
154 $password =
$request->getUserVar(
'swordPassword');
155 if ($password == SWORD_PASSWORD_SLUG) {
157 $depositPoint = $depositPointDao->getById($depositPointId, $context->getId());
159 $password = $depositPoint->getSwordPassword();
163 $swordDepositPoint =
$request->getUserVar(
'swordDepositPoint');
164 $depositEditorial =
$request->getUserVar(
'depositEditorial');
165 $depositGalleys =
$request->getUserVar(
'depositGalleys');
166 $username =
$request->getUserVar(
'swordUsername');
167 $depositIds = array();
171 array(
'plugin', $this->
getName()),
173 'selectedDepositPoint' => $depositPointId,
174 'depositEditorial' => $depositEditorial,
175 'depositGalleys' => $depositGalleys,
181 $submissionIds =
$request->getUserVar(
'selectedSubmissions');
183 if (empty($submissionIds)) {
185 'title' => __(
'plugins.importexport.sword.requiredFieldErrorTitle'),
186 'message' => __(
'plugins.importexport.sword.requiredFieldErrorMessage'),
190 foreach ($submissionIds as $submissionId) {
191 $submission = $submissionDao->getById($submissionId);
192 if ($submission->getContextId() !=
$request->getContext()->getId()) {
198 if ($depositGalleys) $deposit->addGalleys();
199 if ($depositEditorial) $deposit->addEditorial();
200 $deposit->createPackage();
201 $response = $deposit->deposit(
205 $request->getUserVar(
'swordApiKey'));
207 $stmt_link = array_shift(
208 array_filter($response->sac_links,
function($link) {
209 return $link->sac_linkrel ==
'http://purl.org/net/sword/terms/statement' || $link->sac_linkrel ==
'http://purl.org/net/sword/terms/add';
211 $stmt_href = $stmt_link->sac_linkhref->__toString();
212 $data = $submission->getAllData();
214 if (array_has($data,
'swordStatementIri')) {
215 $ssi = unserialize($data[
'swordStatementIri'],
true);
217 $ssi[$depositPointId] = $stmt_href;
218 $submission->setData(
'swordStatementIri', serialize($ssi));
219 $submissionDao->updateDataObjectSettings(
220 'submission_settings', $submission, [
'submission_id' => $submissionId]);
222 $depositIds[] = $response->sac_id;
224 catch (Exception $e) {
226 'title' => $submission->getLocalizedTitle(),
227 'message' => $e->getMessage(),
233 if (!empty($errors)) {
234 $errorMessage =
'<dl>';
235 foreach ($errors as $error) {
236 $errorMessage .=
"<dt>" . htmlentities($error[
'title']) .
"</dt>";
237 $errorMessage .=
"<dd>" . htmlentities($error[
'message']) .
"</dd>";
239 $errorMessage .=
'</dl>';
240 $templateMgr->assign(array(
241 'title' => __(
'plugins.importexport.sword.depositFailed'),
242 'messageTranslated' => $errorMessage,
243 'backLink' => $backLink,
244 'backLinkLabel' =>
'common.back'
248 $templateMgr->assign(array(
249 'title' => __(
'plugins.importexport.sword.depositSuccessful'),
250 'message' =>
'plugins.importexport.sword.depositSuccessfulDescription',
251 'backLink' => $backLink,
252 'backLinkLabel' =>
'common.continue'
255 $messageTemplateFile = $this->
getSwordPlugin()->getTemplateResource(
'message.tpl');
256 $output = $templateMgr->fetch($messageTemplateFile);
260 $dispatcher =
$request->getDispatcher();
261 $dispatcher->handle404();
268 public function executeCLI($scriptName, &$args) {
269 throw new Exception(
'SWORD plugin command-line import/export not yet implemented!');
275 public function usage($scriptName) {