Open Journal Systems  3.3.0
VersionCheck.inc.php
1 <?php
2 
17 define('VERSION_CODE_PATH', 'dbscripts/xml/version.xml');
18 
19 import('lib.pkp.classes.db.XMLDAO');
20 import('lib.pkp.classes.site.Version');
21 
22 class VersionCheck {
23 
28  static function getLatestVersion() {
30  $includeId = Config::getVar('general', 'installed') &&
31  !defined('RUNNING_UPGRADE') &&
32  Config::getVar('general', 'enable_beacon', true);
33 
34  if ($includeId) {
35  $pluginSettingsDao =& DAORegistry::getDAO('PluginSettingsDAO');
36  $uniqueSiteId = $pluginSettingsDao->getSetting(CONTEXT_SITE, 'UsageEventPlugin', 'uniqueSiteId');
37  } else $uniqueSiteId = null;
38 
39  $request = $application->getRequest();
40  return self::parseVersionXML(
41  $application->getVersionDescriptorUrl() .
42  ($includeId?'?id=' . urlencode($uniqueSiteId) .
43  '&oai=' . urlencode($request->url('index', 'oai'))
44  :'')
45  );
46  }
47 
52  static function getCurrentDBVersion() {
53  $versionDao = DAORegistry::getDAO('VersionDAO'); /* @var $versionDao VersionDAO */
54  return $versionDao->getCurrentVersion();
55  }
56 
61  static function getCurrentCodeVersion() {
62  $versionInfo = self::parseVersionXML(VERSION_CODE_PATH);
63  if ($versionInfo) {
64  return $versionInfo['version'];
65  }
66  return false;
67  }
68 
74  static function parseVersionXML($url) {
75  $xmlDao = new XMLDAO();
76  $data = $xmlDao->parseStruct($url, array());
77  if (!$data) return false;
78 
79  // FIXME validate parsed data?
80  $versionInfo = array();
81 
82  if(isset($data['application'][0]['value']))
83  $versionInfo['application'] = $data['application'][0]['value'];
84  if(isset($data['type'][0]['value']))
85  $versionInfo['type'] = $data['type'][0]['value'];
86  if(isset($data['release'][0]['value']))
87  $versionInfo['release'] = $data['release'][0]['value'];
88  if(isset($data['tag'][0]['value']))
89  $versionInfo['tag'] = $data['tag'][0]['value'];
90  if(isset($data['date'][0]['value']))
91  $versionInfo['date'] = $data['date'][0]['value'];
92  if(isset($data['info'][0]['value']))
93  $versionInfo['info'] = $data['info'][0]['value'];
94  if(isset($data['package'][0]['value']))
95  $versionInfo['package'] = $data['package'][0]['value'];
96  if(isset($data['patch'][0]['value'])) {
97  $versionInfo['patch'] = array();
98  foreach ($data['patch'] as $patch) {
99  $versionInfo['patch'][$patch['attributes']['from']] = $patch['value'];
100  }
101  }
102  if (isset($data['class'][0]['value'])) $versionInfo['class'] = (string) $data['class'][0]['value'];
103 
104  $versionInfo['lazy-load'] = (isset($data['lazy-load'][0]['value']) ? (int) $data['lazy-load'][0]['value'] : 0);
105  $versionInfo['sitewide'] = (isset($data['sitewide'][0]['value']) ? (int) $data['sitewide'][0]['value'] : 0);
106 
107  if(isset($data['release'][0]['value']) && isset($data['application'][0]['value'])) {
108  $versionInfo['version'] = Version::fromString(
109  $data['release'][0]['value'],
110  isset($data['type'][0]['value']) ? $data['type'][0]['value'] : null,
111  $data['application'][0]['value'],
112  isset($data['class'][0]['value']) ? $data['class'][0]['value'] : '',
113  $versionInfo['lazy-load'],
114  $versionInfo['sitewide']
115  );
116  }
117 
118  return $versionInfo;
119  }
120 
127  static function getPatch($versionInfo, $codeVersion = null) {
128  if (!isset($codeVersion)) {
129  $codeVersion = self::getCurrentCodeVersion();
130  }
131  if (isset($versionInfo['patch'][$codeVersion->getVersionString()])) {
132  return $versionInfo['patch'][$codeVersion->getVersionString()];
133  }
134  return null;
135  }
136 
144  static function getValidPluginVersionInfo($versionFile) {
145  $fileManager = new FileManager();
146  if ($fileManager->fileExists($versionFile)) {
147  $versionInfo = self::parseVersionXML($versionFile);
148  } else {
149  throw new Exception(__('manager.plugins.versionFileNotFound'));
150  }
151 
152  // Validate plugin name and type to avoid abuse
153  $productType = explode(".", $versionInfo['type']);
154  if(count($productType) != 2 || $productType[0] != 'plugins') {
155  throw new Exception(__('manager.plugins.versionFileInvalid'));
156  }
157 
158  $pluginVersion = $versionInfo['version'];
159  $namesToValidate = array($pluginVersion->getProduct(), $productType[1]);
160  foreach($namesToValidate as $nameToValidate) {
161  if (!PKPString::regexp_match('/[a-z][a-zA-Z0-9]+/', $nameToValidate)) {
162  throw new Exception(__('manager.plugins.versionFileInvalid'));
163  }
164  }
165 
166  return $pluginVersion;
167  }
168 
174  static function checkIfNewVersionExists() {
175  $versionInfo = self::getLatestVersion();
176  $latestVersion = $versionInfo['release'];
177 
178  $currentVersion = self::getCurrentDBVersion();
179  if ($currentVersion->compare($latestVersion) < 0) return $latestVersion;
180  return false;
181  }
182 }
XMLDAO
Operations for retrieving and modifying objects from an XML data source.
Definition: XMLDAO.inc.php:19
$application
$application
Definition: index.php:65
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
VersionCheck
Provides methods to check for the latest version of OJS.
Definition: VersionCheck.inc.php:22
VersionCheck\getCurrentDBVersion
static getCurrentDBVersion()
Definition: VersionCheck.inc.php:52
VersionCheck\checkIfNewVersionExists
static checkIfNewVersionExists()
Definition: VersionCheck.inc.php:174
VersionCheck\getPatch
static getPatch($versionInfo, $codeVersion=null)
Definition: VersionCheck.inc.php:127
Config\getVar
static getVar($section, $key, $default=null)
Definition: Config.inc.php:35
VersionCheck\getLatestVersion
static getLatestVersion()
Definition: VersionCheck.inc.php:28
Version\fromString
static fromString($versionString, $productType=null, $product=null, $productClass='', $lazyLoad=0, $sitewide=1)
Definition: Version.inc.php:67
VersionCheck\getValidPluginVersionInfo
static getValidPluginVersionInfo($versionFile)
Definition: VersionCheck.inc.php:144
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
PKPString\regexp_match
static regexp_match($pattern, $subject)
Definition: PKPString.inc.php:245
FileManager
Class defining basic operations for file management.
Definition: FileManager.inc.php:35
VersionCheck\getCurrentCodeVersion
static getCurrentCodeVersion()
Definition: VersionCheck.inc.php:61
VersionCheck\parseVersionXML
static parseVersionXML($url)
Definition: VersionCheck.inc.php:74