Open Journal Systems  3.3.0
batch.php
1 #!/usr/bin/env php
2 <?php
3 
19 require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/tools/bootstrap.inc.php';
20 
23  protected $_markupBatchConversionHelper = null;
24 
26  protected $_markupConversionHelper = null;
27 
29  protected $_markupPlugin = null;
30 
32  protected $_user = null;
33 
35  protected $_context = null;
36 
38  protected $_otsWrapper = null;
39 
41  protected $_parameters = null;
42 
47  public function __construct($argv = array()) {
48  parent::__construct($argv);
49 
50  if (!sizeof($this->argv)) {
51  $this->usage();
52  exit(1);
53  }
54 
55  $this->_parameters = $this->argv;
56  import('plugins.generic.markup.MarkupPlugin');
57  $this->_markupPlugin = new MarkupPlugin();
58  $this->_markupPlugin->register('generic', dirname(__FILE__));
59 
60  // register MarkupJobInfoDAO
61  $this->_markupPlugin->import('classes.MarkupJobInfoDAO');
62  $markupJobInfoDao = new MarkupJobInfoDAO($this->_markupPlugin);
63  DAORegistry::registerDAO('MarkupJobInfoDAO', $markupJobInfoDao);
64  }
65 
70  protected function initProperties() {
71  import('plugins.generic.markup.classes.MarkupConversionHelper');
73  $this->_markupPlugin,
74  $this->_context,
75  $this->_user,
76  false
77  );
78  $this->_markupConversionHelper = new MarkupConversionHelper(
79  $this->_markupPlugin,
80  $this->_otsWrapper,
81  $this->_user
82  );
83  $this->_markupPlugin->import('classes.MarkupBatchConversionHelper');
84  $this->_markupBatchConversionHelper = new MarkupBatchConversionHelper();
85  }
86 
90  public function usage() {
91  print "Usage: " . PHP_EOL;
92  print "\t {$this->scriptName} [user_name] <journal name>\t\t\t\t\tBatch convert a specific journal enabled" . PHP_EOL;
93  print "\t {$this->scriptName} [user_name] [--all]\t\t\t\t\t\tBatch convert all enabled journals" . PHP_EOL;
94  print "\t {$this->scriptName} [--print]\t\t\t\t\t\t\tPrints the list of all enabled journals" . PHP_EOL;
95  print "\t {$this->scriptName} [user_name] [--list] <comma-separated list of journals>\tBatch convert a comma separated list of journals" . PHP_EOL;
96  }
97 
101  public function execute() {
102  $allOption = in_array('--all', $this->_parameters);
103  $listOption = in_array('--list',$this->_parameters);
104  $printOption = in_array('--print',$this->_parameters);
105 
106  if ($printOption) {
107  $this->processPrint();
108  }
109  else {
110  // load user only on first init
111  if (!$this->_user) {
112  $adminUser = array_shift($this->_parameters);
113  $userDao = DAORegistry::getDAO('UserDAO');
114  $this->_user = $userDao->getByUsername($adminUser);
115  }
116  if (!$this->_user) {
117  print "=> " . __('plugins.generic.markup.unknownUser', array('adminUser' => $adminUser)). PHP_EOL;
118  print PHP_EOL;
119  $this->usage();
120  exit(4);
121  }
122 
123  if ($allOption) {
124  $this->processAll();
125  }
126  elseif ($listOption) {
127  $this->processList();
128  }
129  else {
130  $contextPath = $this->_parameters[0];
131  $contextDao = DAORegistry::getDAO('JournalDAO');
132  $context = $contextDao->getByPath($contextPath);
133  $this->processOne($context);
134  }
135  }
136  }
137 
141  protected function processPrint() {
142  $contextDao = DAORegistry::getDAO('JournalDAO');
143  $contexts = $contextDao->getAll(true);
144  print __('plugins.generic.markup.journalList') . PHP_EOL;
145  while ($context = $contexts->next()) {
146  print "=> " . $context->getPath() . " (" . $context->getLocalizedName() . ")" . PHP_EOL;
147  }
148  }
149 
153  protected function processAll() {
154  $contextDao = DAORegistry::getDAO('JournalDAO');
155  $contexts = $contextDao->getAll(true);
156  while ($context = $contexts->next()) {
157  $this->processOne($context);
158  }
159  }
160 
164  protected function processList() {
165  if (!isset($this->_parameters[1])) {
166  print __('plugins.generic.markup.missingJournalList') . PHP_EOL . PHP_EOL;
167  $this->usage();
168  exit(3);
169  }
170 
171  $journals = explode(",", $this->_parameters[1]);
172  $contextDao = DAORegistry::getDAO('JournalDAO');
173  foreach ($journals as $contextPath) {
174  $context = $contextDao->getByPath($contextPath);
175  $this->processOne($context);
176  }
177  }
178 
184  protected function processOne($context) {
185  if (!$context) {
186  print __('plugins.generic.markup.invalidJournalPath') . PHP_EOL;
187  exit(1);
188  }
189 
190  $this->_context = $context;
191  try {
192  $this->initProperties();
193  }
194  catch(Exception $e) {
195  print "=> " . $e->getMessage(). PHP_EOL;
196  print PHP_EOL;
197  $this->usage();
198  exit(2);
199  }
200 
201  print '---------------------------------------------------' . PHP_EOL;
202  print '*****> JOURNAL: ' . $context->getPath() . ' <*****' . PHP_EOL;
203  print '---------------------------------------------------' . PHP_EOL;
204 
205  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
206  $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO');
207  $metadata = $this->_markupBatchConversionHelper->buildSubmissionMetadataByContext($context->getId());
208  $submissionFoundCount = count($metadata);
209  $submissionProcessedCount = 0;
210  foreach ($metadata as $submission) {
211  print "=> " . __('plugins.generic.markup.processingSubmissionText', array('submissionTitle' => $submission['title'])) . PHP_EOL;
212  if ($defaultSubmissionFileId = intval($submission['defaultSubmissionFileId'])) {
213  try {
214  $submissionFile = $submissionFileDao->getLatestRevision($defaultSubmissionFileId);
215  if (empty($submissionFile)) {
216  print "\t => " . __('plugins.generic.markup.archive.noArticle') . PHP_EOL;
217  continue;
218  }
219  $submissionProcessedCount++;
220  // load submission
221  $submissionObj = $submissionDao->getById($submissionFile->getSubmissionId());
222 
224  $context,
225  $this->_user,
226  $defaultSubmissionFileId
227  );
228  $jobId = $this->_markupConversionHelper->triggerConversion(
229  $context,
230  $submissionFile,
231  $submission['stage'],
232  'galley-generate',
233  $jobInfoId
234  );
235  print "\t " . __('plugins.generic.markup.otsJobId', array('jobId' => $jobId)) . PHP_EOL;
236  print "\t " . __('plugins.generic.markup.ojsJobInfoId', array('jobInfoId' => $jobInfoId)) . PHP_EOL;
237  $otsWrapper = $this->_otsWrapper;
238  $data = array();
239  $statusCallbackFn = function($jobStatus) use ($otsWrapper, $data) {
240  $conversionStatus = $otsWrapper->statusCodeToLabel($jobStatus);
241  print "\t" . __('plugins.generic.markup.otsConversionStatus', array('conversionStatus' => $conversionStatus)) . PHP_EOL;
242  };
243  $tmpZipFile = $this->_markupConversionHelper->retrieveConversionJobArchive(
244  $submissionFile,
245  $jobId,
246  $statusCallbackFn
247  );
248  if (($tmpZipFile == false) || !file_exists($tmpZipFile)) {
249  throw new Exception("\t => " . __('plugins.generic.markup.archive-download-failure') . PHP_EOL);
250  }
251  $extractionPath = null;
252  if (($extractionPath = $this->_markupConversionHelper->unzipArchive($tmpZipFile)) === false) {
253  throw new Exception("\t => " . __('plugins.generic.markup.archive-extract-failure') . PHP_EOL);
254  }
255  $fileName = "document" . '__' . date('Y-m-d_h:i:s');
256  $this->_markupConversionHelper->handleArchiveExtractionAfterGalleyGenerate(
257  $extractionPath,
258  $context,
259  $submissionObj,
260  $submissionFile,
261  $fileName
262  );
263  }
264  catch (Exception $e) {
265  print "\t => *** EXCEPTION *** => " . $e->getMessage() . PHP_EOL;
266  }
267  }
268  }
269  print PHP_EOL . __('plugins.generic.markup.batchSummary', array('submissionFoundCount' => $submissionFoundCount, 'submissionProcessedCount' => $submissionProcessedCount)) . PHP_EOL;
270  print PHP_EOL;
271  }
272 }
273 
274 $tool = new BatchConversionTool(isset($argv) ? $argv : array());
275 $tool->execute();
BatchConversionTool\processAll
processAll()
Definition: batch.php:174
BatchConversionTool\execute
execute()
Definition: batch.php:122
CommandLineTool
Initialization code for command-line scripts.
Definition: CliTool.inc.php:44
MarkupConversionHelper\createConversionJobInfo
static createConversionJobInfo($journal, $user, $fileId)
Definition: MarkupConversionHelper.inc.php:563
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
MarkupBatchConversionHelper
Definition: MarkupBatchConversionHelper.inc.php:17
MarkupConversionHelper
Markup conversion Helper class.
Definition: MarkupConversionHelper.inc.php:17
$tool
$tool
Definition: mergeCoverageReportTool.php:120
BatchConversionTool\$_markupConversionHelper
$_markupConversionHelper
Definition: batch.php:32
MarkupConversionHelper\getOTSWrapperInstance
static getOTSWrapperInstance($plugin, $journal, $userObject, $reuseCached=true)
Definition: MarkupConversionHelper.inc.php:590
BatchConversionTool\processOne
processOne($context)
Definition: batch.php:205
BatchConversionTool\$_markupPlugin
$_markupPlugin
Definition: batch.php:38
DAORegistry\registerDAO
static registerDAO($name, $dao)
Definition: DAORegistry.inc.php:40
BatchConversionTool\initProperties
initProperties()
Definition: batch.php:91
BatchConversionTool\$_context
$_context
Definition: batch.php:50
BatchConversionTool\$_user
$_user
Definition: batch.php:44
BatchConversionTool\$_otsWrapper
$_otsWrapper
Definition: batch.php:56
MarkupJobInfoDAO
operations for managing MarkupJobInfo objects
Definition: MarkupJobInfoDAO.inc.php:19
MarkupPlugin
NLM XML and HTML transform plugin class.
Definition: MarkupPlugin.inc.php:32
BatchConversionTool\__construct
__construct($argv=array())
Definition: batch.php:68
BatchConversionTool\$_parameters
$_parameters
Definition: batch.php:62
BatchConversionTool\processList
processList()
Definition: batch.php:185
BatchConversionTool
Handles request for articles batch conversion.
Definition: batch.php:21
BatchConversionTool\processPrint
processPrint()
Definition: batch.php:162
BatchConversionTool\$_markupBatchConversionHelper
$_markupBatchConversionHelper
Definition: batch.php:26
CommandLineTool\$argv
$argv
Definition: CliTool.inc.php:53
BatchConversionTool\usage
usage()
Definition: batch.php:111