Open Journal Systems  3.3.0
DOAJExportPlugin.inc.php
1 <?php
2 
16 import('classes.plugins.PubObjectsExportPlugin');
17 
18 define('DOAJ_XSD_URL', 'https://www.doaj.org/schemas/doajArticles.xsd');
19 
20 define('DOAJ_API_DEPOSIT_OK', 201);
21 
22 define('DOAJ_API_URL', 'https://doaj.org/api/v1/');
23 define('DOAJ_API_URL_DEV', 'https://testdoaj.cottagelabs.com/api/v1/');
24 define('DOAJ_API_OPERATION', 'articles');
25 
30  function getName() {
31  return 'DOAJExportPlugin';
32  }
33 
37  function getDisplayName() {
38  return __('plugins.importexport.doaj.displayName');
39  }
40 
44  function getDescription() {
45  return __('plugins.importexport.doaj.description');
46  }
47 
51  function display($args, $request) {
52  parent::display($args, $request);
53  switch (array_shift($args)) {
54  case 'index':
55  case '':
56  $templateMgr = TemplateManager::getManager($request);
57  $templateMgr->display($this->getTemplateResource('index.tpl'));
58  break;
59  }
60  }
61 
66  return 'doaj';
67  }
68 
72  function getSubmissionFilter() {
73  return 'article=>doaj-xml';
74  }
75 
79  function getExportActions($context) {
80  $actions = array(EXPORT_ACTION_EXPORT, EXPORT_ACTION_MARKREGISTERED );
81  if ($this->getSetting($context->getId(), 'apiKey')) {
82  array_unshift($actions, EXPORT_ACTION_DEPOSIT);
83  }
84  return $actions;
85  }
86 
91  return 'DOAJExportDeployment';
92  }
93 
98  return 'DOAJSettingsForm';
99  }
100 
108  function depositXML($objects, $context, $jsonString) {
109 
110  import('lib.pkp.classes.helpers.PKPCurlHelper');
111  $curlCh = PKPCurlHelper::getCurlObject();
112 
113  curl_setopt($curlCh, CURLOPT_RETURNTRANSFER, true);
114  curl_setopt($curlCh, CURLOPT_POST, true);
115  curl_setopt($curlCh, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
116 
117  curl_setopt($curlCh, CURLOPT_POSTFIELDS, $jsonString);
118 
119  $endpoint = ($this->isTestMode($context) ? DOAJ_API_URL_DEV : DOAJ_API_URL);
120  $apiKey = $this->getSetting($context->getId(), 'apiKey');
121  $params = 'api_key=' . $apiKey;
122 
123  curl_setopt(
124  $curlCh,
125  CURLOPT_URL,
126  $endpoint . DOAJ_API_OPERATION . (strpos($endpoint,'?')===false?'?':'&') . $params
127  );
128 
129  $response = curl_exec($curlCh);
130 
131  if ($response === false) {
132  $result = array(array('plugins.importexport.doaj.register.error.mdsError', 'No response from server.'));
133  } elseif ( $status = curl_getinfo($curlCh, CURLINFO_HTTP_CODE) != DOAJ_API_DEPOSIT_OK ) {
134  $result = array(array('plugins.importexport.doaj.register.error.mdsError', "$status - $response"));
135  } else {
136  // Deposit was received
137  $result = true;
138  // set the status
139  $objects->setData($this->getDepositStatusSettingName(), EXPORT_STATUS_REGISTERED);
140  // Update the object
141  $this->updateObject($objects);
142  }
143  curl_close($curlCh);
144  return $result;
145  }
146 
150  function executeExportAction($request, $objects, $filter, $tab, $objectsFileNamePart, $noValidation = null) {
151  $context = $request->getContext();
152  $path = array('plugin', $this->getName());
153  if ($request->getUserVar(EXPORT_ACTION_DEPOSIT)) {
154  assert($filter != null);
155  // Set filter for JSON
156  $filter = 'article=>doaj-json';
157  $resultErrors = array();
158  foreach ($objects as $object) {
159  // Get the JSON
160  $exportJson = $this->exportJSON($object, $filter, $context);
161  // Deposit the JSON
162  $result = $this->depositXML($object, $context, $exportJson);
163  if (is_array($result)) {
164  $resultErrors[] = $result;
165  }
166  }
167  // send notifications
168  if (empty($resultErrors)) {
169  $this->_sendNotification(
170  $request->getUser(),
171  $this->getDepositSuccessNotificationMessageKey(),
172  NOTIFICATION_TYPE_SUCCESS
173  );
174  } else {
175  foreach($resultErrors as $errors) {
176  foreach ($errors as $error) {
177  assert(is_array($error) && count($error) >= 1);
178  $this->_sendNotification(
179  $request->getUser(),
180  $error[0],
181  NOTIFICATION_TYPE_ERROR,
182  (isset($error[1]) ? $error[1] : null)
183  );
184  }
185  }
186  }
187  // redirect back to the right tab
188  $request->redirect(null, null, null, $path, null, $tab);
189  } else {
190  return parent::executeExportAction($request, $objects, $filter, $tab, $objectsFileNamePart, $noValidation);
191  }
192  }
193 
201  function exportJSON($object, $filter, $context) {
202  $filterDao = DAORegistry::getDAO('FilterDAO'); /* @var $filterDao FilterDAO */
203  $exportFilters = $filterDao->getObjectsByGroup($filter);
204  assert(count($exportFilters) == 1); // Assert only a single serialization filter
205  $exportFilter = array_shift($exportFilters);
206  $exportDeployment = $this->_instantiateExportDeployment($context);
207  $exportFilter->setDeployment($exportDeployment);
208  return $exportFilter->execute($object, true);
209  }
210 }
211 
DOAJExportPlugin\getExportDeploymentClassName
getExportDeploymentClassName()
Definition: DOAJExportPlugin.inc.php:90
DOAJExportPlugin\getSubmissionFilter
getSubmissionFilter()
Definition: DOAJExportPlugin.inc.php:72
DOAJExportPlugin\getName
getName()
Definition: DOAJExportPlugin.inc.php:30
DOAJExportPlugin
DOAJ export plugin.
Definition: DOAJExportPlugin.inc.php:26
PubObjectsExportPlugin\getDepositStatusSettingName
getDepositStatusSettingName()
Definition: PubObjectsExportPlugin.inc.php:521
PubObjectsExportPlugin\_sendNotification
_sendNotification($user, $message, $notificationType, $param=null)
Definition: PubObjectsExportPlugin.inc.php:709
DOAJExportPlugin\exportJSON
exportJSON($object, $filter, $context)
Definition: DOAJExportPlugin.inc.php:201
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
DOAJExportPlugin\getDescription
getDescription()
Definition: DOAJExportPlugin.inc.php:44
DOAJExportPlugin\getPluginSettingsPrefix
getPluginSettingsPrefix()
Definition: DOAJExportPlugin.inc.php:65
PKPCurlHelper\getCurlObject
static getCurlObject($url=null, $useProxySettings=true)
Definition: PKPCurlHelper.inc.php:23
PubObjectsExportPlugin\isTestMode
isTestMode($context)
Definition: PubObjectsExportPlugin.inc.php:513
PubObjectsExportPlugin\_instantiateExportDeployment
_instantiateExportDeployment($context)
Definition: PubObjectsExportPlugin.inc.php:732
DOAJExportPlugin\getSettingsFormClassName
getSettingsFormClassName()
Definition: DOAJExportPlugin.inc.php:97
Plugin\getSetting
getSetting($contextId, $name)
Definition: Plugin.inc.php:473
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
PubObjectsExportPlugin
Basis class for XML metadata export plugins.
Definition: PubObjectsExportPlugin.inc.php:33
Plugin\getTemplateResource
getTemplateResource($template=null, $inCore=false)
Definition: Plugin.inc.php:349
DOAJExportPlugin\executeExportAction
executeExportAction($request, $objects, $filter, $tab, $objectsFileNamePart, $noValidation=null)
Definition: DOAJExportPlugin.inc.php:150
PubObjectsExportPlugin\updateObject
updateObject($object)
Definition: PubObjectsExportPlugin.inc.php:421
Plugin\$request
$request
Definition: Plugin.inc.php:68
DOAJExportPlugin\depositXML
depositXML($objects, $context, $jsonString)
Definition: DOAJExportPlugin.inc.php:108
DOAJExportPlugin\getExportActions
getExportActions($context)
Definition: DOAJExportPlugin.inc.php:79
DOAJExportPlugin\getDisplayName
getDisplayName()
Definition: DOAJExportPlugin.inc.php:37
DOAJExportPlugin\display
display($args, $request)
Definition: DOAJExportPlugin.inc.php:51