Open Journal Systems  3.3.0
MarkupGatewayPlugin.inc.php
1 <?php
2 
17 import('lib.pkp.classes.plugins.GatewayPlugin');
18 
20 
22  protected $_parentPluginName = null;
23 
25  protected $_user = null;
26 
28  protected $_plugin = null;
29 
31  protected $_xmlpsWrapper = null;
32 
34  protected $_fileId = null;
35 
37  protected $_stageId = null;
38 
40  protected $_jobId = null;
41 
42  function __construct($parentPluginName) {
43  parent::__construct();
44 
45  $this->_parentPluginName = $parentPluginName;
46  $this->_plugin = PluginRegistry::getPlugin('generic', $parentPluginName);
47  }
48 
54  protected function _initXMLPSWrapper($request) {
55  $this->import('classes.MarkupConversionHelper');
56  $this->_xmlpsWrapper = MarkupConversionHelper::getOTSWrapperInstance(
57  $this->_plugin,
58  $request->getJournal(),
59  $this->_user
60  );
61  }
62 
68  function getHideManagement() {
69  return true;
70  }
71 
78  function getName() {
79  return 'MarkupGatewayPlugin';
80  }
81 
87  function getDisplayName() {
88  return __('plugins.generic.markup.displayName');
89  }
90 
96  function getDescription() {
97  return __('plugins.generic.markup.description');
98  }
99 
105  function &getMarkupPlugin() {
106  return $this->_plugin;
107  }
108 
114  function getPluginPath() {
115  $plugin =& $this->getMarkupPlugin();
116  return $plugin->getPluginPath();
117  }
118 
124  function getTemplatePath() {
125  $plugin =& $this->getMarkupPlugin();
126  return $plugin->getTemplatePath();
127  }
128 
134  function getCssPath() {
135  $plugin =& $this->getMarkupPlugin();
136  return $plugin->getCssPath();
137  }
138 
144  function getJsPath() {
145  $plugin =& $this->getMarkupPlugin();
146  return $plugin->getJsPath();
147  }
148 
154  function getEnabled() {
155  $plugin =& $this->getMarkupPlugin();
156  return $plugin->getEnabled(); // Should always be true anyway if this is loaded
157  }
158 
164  function getManagementVerbs() {
165  return array();
166  }
167 
178  function fetch($args, $request) {
179 
180  // Parse keys and values from arguments
181  $keys = array();
182  $values = array();
183  foreach ($args as $index => $arg) {
184  if ($arg == 'true') $arg = true;
185  if ($arg == 'false') $arg = false;
186 
187  if ($index % 2 == 0) {
188  $keys[] = $arg;
189  } else {
190  $values[] = $arg;
191  }
192  }
193  $args = array_combine($keys, $values);
194 
195  // TODO validate that filestage and target arguments are available
196 
197  if (!$this->getEnabled()) {
198  echo __('plugins.generic.markup.archive.enable');
199  exit;
200  }
201 
202  // Make sure we're within a Journal context
203  $journal = $this->getRequest()->getJournal();
204  if (!$journal) {
205  echo __('plugins.generic.markup.archive.noJournal');
206  exit;
207  }
208 
209  // load submission
210  $fileId = isset($args['fileId']) ? (int) $args['fileId'] : false;
211  if (!$fileId) {
212  echo __('plugins.generic.markup.archive.noArticleID');
213  exit;
214  }
215 
216  // load user
217  $userDao = DAORegistry::getDAO('UserDAO');
218  $userId = isset($args['userId']) ? (int) $args['userId'] : false;
219  if (!$userId) {
220  fatalError(__('plugins.generic.markup.archive.noArticleID'));
221  exit;
222  }
223 
224  // access key
225  $accessKey = isset($args['accessKey']) ? $args['accessKey'] : null;
226  if (empty($accessKey)) {
227  fatalError(__('plugins.generic.markup.archive.noAccessKey'));
228  exit;
229  }
230 
231  $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO');
232  $submissionFile = $submissionFileDao->getLatestRevision($fileId);
233  if (empty($submissionFile)) {
234  echo __('plugins.generic.markup.archive.noArticle');
235  exit;
236  }
237 
238  $this->_fileId = $fileId;
239  $this->_user = $userDao->getById($args['userId']);
240  $this->_jobId = isset($args['jobId']) ? $args['jobId'] : '';
241  $this->_stageId = isset($args['stageId']) ? (int) $args['stageId'] : false;
242 
243  // validate access key
244  $this->_plugin->import('classes.MarkupConversionHelper');
245  if (!$this->_user || !MarkupConversionHelper::validateAccessToken($this->_user, $accessKey)) {
246  fatalError(__('plugins.generic.markup.archive.noAccessKey'));
247  exit;
248  }
249 
250  // initialize OTS wrapper
251  $this->_initXMLPSWrapper($request);
252 
253  // initialize conversion helper object
254  $this->_conversionHelper = new MarkupConversionHelper($this->_plugin, $this->_xmlpsWrapper, $this->_user);
255 
256  // process
257  $stageId = (int)$args['stageId'];
258  $target = strval($args['target']);
259  $this->_process($submissionFile, $submissionFile->getFileStage(), $target);
260  }
261 
271  function _process($submissionFile, $fileStage, $target) {
272  $journal = $this->getRequest()->getJournal();
273  $journalId = $journal->getId();
274 
275  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
276  $submission = $submissionDao->getById($submissionFile->getSubmissionId());
277 
278  $tmpZipFile = null;
279 
280  try {
281  $jobId = $this->_conversionHelper->triggerConversion($journal, $submissionFile, $stage, $target, $this->_jobId);
282  $tmpZipFile = $this->_conversionHelper->retrieveConversionJobArchive($submissionFile, $jobId);
283  if (($tmpZipFile == false) || !file_exists($tmpZipFile)) {
284  return;
285  }
286 
287  }
288  catch (Exception $e) {
289  // @TODO log error
290  error_log('EXCEPTION!!! ' . $e->getMessage());
291  return;
292  }
293 
294  // save archive as production ready file
295  // @TODO @TBD
296 
297  // Extract archive
298  $extractionPath = null;
299  if (($extractionPath = $this->_conversionHelper->unzipArchive($tmpZipFile)) === false) {
300  return;
301  }
302  // find current user's group
303  $userGroupDao = DAORegistry::getDAO('UserGroupDAO');
304  $userGroups = $userGroupDao->getByUserId($this->_user->getId(), $journal->getId());
305  $userGroup = $userGroups->next();
306 
307  $fileName = "document" . '__' . date('Y-m-d_h:i:s');
308  switch ($target) {
309  case 'xml-conversion':
310  $this->_conversionHelper->handleArchiveExtractionAfterXmlConversion(
311  $extractionPath,
312  $journal,
313  $submission,
314  $submissionFile,
315  $fileStage,
316  $fileName
317  );
318  break;
319 
320  case 'galley-generate':
321  $this->_conversionHelper->handleArchiveExtractionAfterGalleyGenerate(
322  $extractionPath,
323  $journal,
324  $submission,
325  $submissionFile,
326  $fileName
327  );
328  break;
329  }
330 
331  @unlink($tmpZipFile);
332  @rmdir($extractionPath);
333  }
334 
335 }
MarkupGatewayPlugin\_initXMLPSWrapper
_initXMLPSWrapper($request)
Definition: MarkupGatewayPlugin.inc.php:75
MarkupGatewayPlugin\fetch
fetch($args, $request)
Definition: MarkupGatewayPlugin.inc.php:199
MarkupConversionHelper\validateAccessToken
static validateAccessToken($user, $accessKey)
Definition: MarkupConversionHelper.inc.php:655
MarkupGatewayPlugin\getJsPath
getJsPath()
Definition: MarkupGatewayPlugin.inc.php:165
MarkupGatewayPlugin\__construct
__construct($parentPluginName)
Definition: MarkupGatewayPlugin.inc.php:63
Plugin\getRequest
& getRequest()
Definition: Plugin.inc.php:828
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
MarkupGatewayPlugin\getEnabled
getEnabled()
Definition: MarkupGatewayPlugin.inc.php:175
MarkupConversionHelper
Markup conversion Helper class.
Definition: MarkupConversionHelper.inc.php:17
Plugin\__construct
__construct()
Definition: Plugin.inc.php:73
MarkupGatewayPlugin\$_user
$_user
Definition: MarkupGatewayPlugin.inc.php:31
MarkupGatewayPlugin\$_jobId
$_jobId
Definition: MarkupGatewayPlugin.inc.php:61
MarkupGatewayPlugin\getTemplatePath
getTemplatePath()
Definition: MarkupGatewayPlugin.inc.php:145
MarkupGatewayPlugin\_process
_process($submissionFile, $fileStage, $target)
Definition: MarkupGatewayPlugin.inc.php:292
MarkupGatewayPlugin\getCssPath
getCssPath()
Definition: MarkupGatewayPlugin.inc.php:155
MarkupGatewayPlugin\$_plugin
$_plugin
Definition: MarkupGatewayPlugin.inc.php:37
MarkupConversionHelper\getOTSWrapperInstance
static getOTSWrapperInstance($plugin, $journal, $userObject, $reuseCached=true)
Definition: MarkupConversionHelper.inc.php:590
MarkupGatewayPlugin\$_parentPluginName
$_parentPluginName
Definition: MarkupGatewayPlugin.inc.php:25
MarkupGatewayPlugin\$_stageId
$_stageId
Definition: MarkupGatewayPlugin.inc.php:55
MarkupGatewayPlugin\getPluginPath
getPluginPath()
Definition: MarkupGatewayPlugin.inc.php:135
MarkupGatewayPlugin\getName
getName()
Definition: MarkupGatewayPlugin.inc.php:99
MarkupGatewayPlugin\getMarkupPlugin
& getMarkupPlugin()
Definition: MarkupGatewayPlugin.inc.php:126
MarkupGatewayPlugin\$_xmlpsWrapper
$_xmlpsWrapper
Definition: MarkupGatewayPlugin.inc.php:43
MarkupGatewayPlugin\$_fileId
$_fileId
Definition: MarkupGatewayPlugin.inc.php:49
MarkupGatewayPlugin\getDisplayName
getDisplayName()
Definition: MarkupGatewayPlugin.inc.php:108
Plugin\$request
$request
Definition: Plugin.inc.php:68
PluginRegistry\getPlugin
static getPlugin($category, $name)
Definition: PluginRegistry.inc.php:85
MarkupGatewayPlugin\getDescription
getDescription()
Definition: MarkupGatewayPlugin.inc.php:117
MarkupGatewayPlugin\getManagementVerbs
getManagementVerbs()
Definition: MarkupGatewayPlugin.inc.php:185
MarkupGatewayPlugin\getHideManagement
getHideManagement()
Definition: MarkupGatewayPlugin.inc.php:89
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
GatewayPlugin
Abstract class for gateway plugins.
Definition: GatewayPlugin.inc.php:18
MarkupGatewayPlugin
Responds to requests for markup files for particular journal article; sends request to markup an arti...
Definition: MarkupGatewayPlugin.inc.php:19