Open Journal Systems  3.3.0
UpgradeTool.inc.php
1 <?php
2 
19 define('RUNNING_UPGRADE', 1);
20 
21 import('classes.install.Upgrade');
22 import('lib.pkp.classes.site.Version');
23 import('lib.pkp.classes.site.VersionCheck');
24 
26 
28  var $command;
29 
34  function __construct($argv = array()) {
35  parent::__construct($argv);
36 
37  if (!isset($this->argv[0]) || !in_array($this->argv[0], array('check', 'latest', 'upgrade', 'download'))) {
38  $this->usage();
39  exit(1);
40  }
41 
42  $this->command = $this->argv[0];
43  AppLocale::requireComponents(LOCALE_COMPONENT_PKP_INSTALLER);
44  }
45 
49  function usage() {
50  echo "Upgrade tool\n"
51  . "Usage: {$this->scriptName} command\n"
52  . "Supported commands:\n"
53  . " check perform version check\n"
54  . " latest display latest version info\n"
55  . " upgrade execute upgrade script\n"
56  . " download download latest version (does not unpack/install)\n";
57  }
58 
62  function execute() {
64  $this->$command();
65  }
66 
70  function check() {
72  }
73 
77  function latest() {
79  }
80 
84  function upgrade() {
85  $installer = new Upgrade(array());
86  $installer->setLogger($this);
87 
88  if ($installer->execute()) {
89  if (count($installer->getNotes()) > 0) {
90  printf("\nRelease Notes\n");
91  printf("----------------------------------------\n");
92  foreach ($installer->getNotes() as $note) {
93  printf("%s\n\n", $note);
94  }
95  }
96 
97  $newVersion = $installer->getNewVersion();
98  printf("Successfully upgraded to version %s\n", $newVersion->getVersionString(false));
99 
100  } else {
101  printf("ERROR: Upgrade failed: %s\n", $installer->getErrorString());
102  }
103  }
104 
108  function download() {
109  $versionInfo = VersionCheck::getLatestVersion();
110  if (!$versionInfo) {
112  printf("Failed to load version info from %s\n", $application->getVersionDescriptorUrl());
113  exit(1);
114  }
115 
116  $download = $versionInfo['package'];
117  $outFile = basename($download);
118 
119  printf("Download: %s\n", $download);
120  printf("File will be saved to: %s\n", $outFile);
121 
122  if (!$this->promptContinue()) {
123  exit(0);
124  }
125 
126  $out = fopen($outFile, 'wb');
127  if (!$out) {
128  printf("Failed to open %s for writing\n", $outFile);
129  exit(1);
130  }
131 
132  $in = fopen($download, 'rb');
133  if (!$in) {
134  printf("Failed to open %s for reading\n", $download);
135  fclose($out);
136  exit(1);
137  }
138 
139  printf('Downloading file...');
140 
141  while(($data = fread($in, 4096)) !== '') {
142  printf('.');
143  fwrite($out, $data);
144  }
145 
146  printf("done\n");
147 
148  fclose($in);
149  fclose($out);
150  }
151 
157  function checkVersion($versionInfo, $displayInfo = false) {
158  if (!$versionInfo) {
160  printf("Failed to load version info from %s\n", $application->getVersionDescriptorUrl());
161  exit(1);
162  }
163 
164  $dbVersion = VersionCheck::getCurrentDBVersion();
165  $codeVersion = VersionCheck::getCurrentCodeVersion();
166  $latestVersion = $versionInfo['version'];
167 
168  printf("Code version: %s\n", $codeVersion->getVersionString(false));
169  printf("Database version: %s\n", $dbVersion->getVersionString(false));
170  printf("Latest version: %s\n", $latestVersion->getVersionString(false));
171 
172  $compare1 = $codeVersion->compare($latestVersion);
173  $compare2 = $dbVersion->compare($codeVersion);
174 
175  if (!$displayInfo) {
176  if ($compare2 < 0) {
177  printf("Database version is older than code version\n");
178  printf("Run \"{$this->scriptName} upgrade\" to update\n");
179  exit(0);
180 
181  } else if($compare2 > 0) {
182  printf("Database version is newer than code version!\n");
183  exit(1);
184 
185  } else if ($compare1 == 0) {
186  printf("Your system is up-to-date\n");
187 
188  } else if($compare1 < 0) {
189  printf("A newer version is available:\n");
190  $displayInfo = true;
191  } else {
192  printf("Current version is newer than latest!\n");
193  exit(1);
194  }
195  }
196 
197  if ($displayInfo) {
198  printf(" tag: %s\n", $versionInfo['tag']);
199  printf(" date: %s\n", $versionInfo['date']);
200  printf(" info: %s\n", $versionInfo['info']);
201  printf(" package: %s\n", $versionInfo['package']);
202  }
203 
204  return $compare1;
205  }
206 
211  function promptContinue($prompt = "Continue?") {
212  printf("%s [y/N] ", $prompt);
213  $continue = fread(STDIN, 255);
214  return (strtolower(substr(trim($continue), 0, 1)) == 'y');
215  }
216 
221  function log($message) {
222  printf("[%s]\n", $message);
223  }
224 
225 }
226 
227 
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
$application
$application
Definition: index.php:65
UpgradeTool
Definition: UpgradeTool.inc.php:25
CommandLineTool
Initialization code for command-line scripts.
Definition: CliTool.inc.php:44
UpgradeTool\$command
$command
Definition: UpgradeTool.inc.php:31
UpgradeTool\usage
usage()
Definition: UpgradeTool.inc.php:52
VersionCheck\getCurrentDBVersion
static getCurrentDBVersion()
Definition: VersionCheck.inc.php:52
UpgradeTool\download
download()
Definition: UpgradeTool.inc.php:111
UpgradeTool\upgrade
upgrade()
Definition: UpgradeTool.inc.php:87
UpgradeTool\promptContinue
promptContinue($prompt="Continue?")
Definition: UpgradeTool.inc.php:214
UpgradeTool\check
check()
Definition: UpgradeTool.inc.php:73
UpgradeTool\__construct
__construct($argv=array())
Definition: UpgradeTool.inc.php:37
VersionCheck\getLatestVersion
static getLatestVersion()
Definition: VersionCheck.inc.php:28
UpgradeTool\execute
execute()
Definition: UpgradeTool.inc.php:65
UpgradeTool\checkVersion
checkVersion($versionInfo, $displayInfo=false)
Definition: UpgradeTool.inc.php:160
UpgradeTool\latest
latest()
Definition: UpgradeTool.inc.php:80
UpgradeTool\log
log($message)
Definition: UpgradeTool.inc.php:224
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
VersionCheck\getCurrentCodeVersion
static getCurrentCodeVersion()
Definition: VersionCheck.inc.php:61
CommandLineTool\$argv
$argv
Definition: CliTool.inc.php:53