Rev 76 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4 | daniel-mar | 1 | <?php /* <ViaThinkSoftSignature> |
77 | daniel-mar | 2 | Lme5HcTC/7qI1KUKY012sAKAHRs+Xe2raUjKRYPkpBP0vUbn70cyw8Lql37CmVH4h |
3 | 9eJ9Gs3tCYDZdslW42Rh/WNFVy4hMsyhLUzwvp8pks//pqoAgv3fVDit1x5z8NxIP |
||
4 | 5EWxsAEOWp1ty2aNF/lD9aJHGjq+IZb7fMq5PLWoFMWQGukZovbI+dVBkhiA/2AMZ |
||
5 | r2xie9GESJlyAVfhDtQEiMFSpgpJvbd2SmzJoJg+3aLfpVj6Ro4HF/7KY+kjJxFR4 |
||
6 | rDmK5lmyQqfuwUfG0cqOnQQjODi/LCFSOgF7hyboMT+wAztkMAHhiSWrWd2jgy9Mk |
||
7 | PV1L7ktcyoS+RwFGAJznRG4PGAb7kE4ygS7CMjbh/yGrerOhdsFgI0URBx6UE2Dgh |
||
8 | URlefSxPODIxt7ol39bN7IDJHjz+z1xPDKP9VgACuaNue/oZfrc7gyAjvWJrIahLe |
||
9 | /tPsrn0HURYLZflCSy7VtUKpMtu4RSAKOaM2DJRWR7XAC7LoQWQg672JtK4rHzMX1 |
||
10 | cEKlCM28C+JRTd+FH5V3iLOoLjgGrGQr9coZPJ2r8s8pGNic1L/d2x5YUFWSwv74H |
||
11 | WJuMe8zQ8f541RKFZllU4OueISitWVUd1KYLHEpxa/ioDDXnpH3xD4ILDhrwng67B |
||
12 | 1eabFPtNNHgahtvePAzRlmE+hOKZitOsEOI8bB2IbYAyYbluaj69b8JOWDpWVWiqW |
||
13 | n9g/bXhQu//7CY+X+9p6Lsm5mwtQp2syKe29MSuOYRT3eBRFDs0D1sBLREiivoX1v |
||
14 | 1U6vDHHndtPq1UeaNB3UHxM3Wdmc0X3VDDcGn3qPnl6x4jQSB1Gp9QCIpYprNOLyd |
||
15 | RCVnPwy+qgfU97iEEpDxduJRSaQrmr6KximkE3GrFHxp3j8fwHGA/ryvNK9CRXII+ |
||
16 | tetvf1f60+gEPsrmxziPZgVLGfko5lmugItSXFpS4xdyrtk/pUSHE3cG0Ke2yt25M |
||
17 | f8jGG0nQLLsaUA+6zbPBfMCP3niT1OzoHV4domlqak7KOpmqbjlJoEHrEptDQGnB4 |
||
18 | It41TI37j/7qIfVAJkkpTAWFsOuLd5dwiPBp6JMF7apf/n8rnpXWNDAT8N0NeIGpN |
||
19 | B9lBll/jtnSBVn9hD6zQBt4MkP62gVevLfA54gRqjTAeb+JDM8E4aeQ60n0p3P7lO |
||
20 | PhOPQa2K13nyXaYxL0ogu634jdiN4B8aBlK8UUWFzEE5VFNTIg7tr7bEHd+MeadCt |
||
21 | YUKMq0372Bgp0B3cqfnTC+946xsJYnMUGnqM4A/haK6ttiIpf5w/0O9+uRIf8Fixr |
||
22 | 5blWfXw2HvRuIz2uAoiu+Tk3luxH/SHazJ3FiXgV0TEEzo8/GPH8cHFlFnsKXJB7L |
||
23 | Q== |
||
4 | daniel-mar | 24 | </ViaThinkSoftSignature> */ ?> |
2 | daniel-mar | 25 | <?php |
26 | |||
27 | /* |
||
28 | * VNag - Nagios Framework for PHP |
||
29 | * Developed by Daniel Marschall, ViaThinkSoft <www.viathinksoft.com> |
||
30 | * Licensed under the terms of the Apache 2.0 license |
||
31 | * |
||
76 | daniel-mar | 32 | * Revision 2023-10-13 |
2 | daniel-mar | 33 | */ |
34 | |||
35 | declare(ticks=1); |
||
36 | |||
37 | class MediaWikiVersionCheck extends VNag { |
||
38 | protected $argSystemDir = null; |
||
39 | |||
40 | public function __construct() { |
||
41 | parent::__construct(); |
||
42 | |||
43 | $this->registerExpectedStandardArguments('Vht'); |
||
44 | |||
45 | $this->getHelpManager()->setPluginName('check_mediawiki_version'); |
||
46 | $this->getHelpManager()->setVersion('1.0'); |
||
47 | $this->getHelpManager()->setShortDescription('This plugin checks if a local MediaWiki system has the latest version installed.'); |
||
48 | $this->getHelpManager()->setCopyright('Copyright (C) 2011-$CURYEAR$ Daniel Marschall, ViaThinkSoft.'); |
||
49 | $this->getHelpManager()->setSyntax('$SCRIPTNAME$ [-d <directory>]'); |
||
50 | $this->getHelpManager()->setFootNotes('If you encounter bugs, please contact ViaThinkSoft at www.viathinksoft.com'); |
||
51 | |||
52 | // Individual (non-standard) arguments: |
||
53 | $this->addExpectedArgument($this->argSystemDir = new VNagArgument('d', 'directory', VNagArgument::VALUE_REQUIRED, 'mediawikiPath', 'The local directory where MediaWiki installation is located.')); |
||
54 | } |
||
55 | |||
76 | daniel-mar | 56 | protected function get_local_version($path) { |
2 | daniel-mar | 57 | $path = realpath($path) === false ? $path : realpath($path); |
58 | |||
77 | daniel-mar | 59 | $cont = @file_get_contents("$path/includes/Defines.php"); |
60 | if ($cont !== false) { |
||
61 | if (preg_match('@define\\( \'MW_VERSION\', \'([0-9\\.]+)\' \\);@is', $cont, $m)) return $m[1]; |
||
2 | daniel-mar | 62 | } |
63 | |||
77 | daniel-mar | 64 | $cont = @file_get_contents("$path/includes/DefaultSettings.php"); |
65 | if ($cont !== false) { |
||
66 | if (preg_match('@\\$wgVersion = \'([0-9\\.]+)\';@is', $cont, $m)) return $m[1]; |
||
67 | } |
||
68 | |||
69 | throw new VNagException("Cannot find version information at $path"); |
||
2 | daniel-mar | 70 | } |
71 | |||
72 | protected function get_latest_version() { |
||
76 | daniel-mar | 73 | $cont = $this->url_get_contents('https://www.mediawiki.org/wiki/Download/en'); |
74 | if ($cont === false) { |
||
46 | daniel-mar | 75 | |
76 | // The server replies to some older versions of PHP: 426 Upgrade Required |
||
77 | $ch = curl_init(); |
||
78 | curl_setopt($ch, CURLOPT_URL, "https://www.mediawiki.org/wiki/Download/en"); |
||
79 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true ); |
||
80 | $cont = @curl_exec( $ch ); |
||
81 | curl_close($ch); |
||
82 | |||
83 | if (!$cont) { |
||
77 | daniel-mar | 84 | throw new VNagException("Cannot access website with latest version"); |
46 | daniel-mar | 85 | } |
2 | daniel-mar | 86 | } |
87 | |||
26 | daniel-mar | 88 | if (!preg_match('@//releases\.wikimedia\.org/mediawiki/([^"]+)/mediawiki\-([^"]+)\.tar\.gz"@ismU', $cont, $m)) { |
77 | daniel-mar | 89 | throw new VNagException("Cannot find version information on the website"); |
2 | daniel-mar | 90 | } |
91 | |||
26 | daniel-mar | 92 | return $m[2]; |
2 | daniel-mar | 93 | } |
94 | |||
95 | protected function cbRun($optional_args=array()) { |
||
96 | $system_dir = $this->argSystemDir->getValue(); |
||
97 | if (empty($system_dir)) { |
||
77 | daniel-mar | 98 | throw new VNagException("Please specify the directory of the MediaWiki installation."); |
2 | daniel-mar | 99 | } |
100 | $system_dir = realpath($system_dir) === false ? $system_dir : realpath($system_dir); |
||
101 | |||
102 | if (!is_dir($system_dir)) { |
||
77 | daniel-mar | 103 | throw new VNagException('Directory "'.$system_dir.'" not found.'); |
2 | daniel-mar | 104 | } |
105 | |||
76 | daniel-mar | 106 | $version = $this->get_local_version($system_dir); |
2 | daniel-mar | 107 | |
108 | $latest_version = $this->get_latest_version(); |
||
109 | |||
57 | daniel-mar | 110 | if (version_compare($version,$latest_version) >= 0) { |
2 | daniel-mar | 111 | $this->setStatus(VNag::STATUS_OK); |
112 | $this->setHeadline("Version $version at $system_dir", true); |
||
113 | } else { |
||
114 | $this->setStatus(VNag::STATUS_WARNING); |
||
115 | $this->setHeadline("Version $version is outdated (Latest version is $latest_version) at $system_dir", true); |
||
116 | } |
||
117 | } |
||
118 | } |