aboutsummaryrefslogtreecommitdiff
path: root/engine/lib/version.php
blob: 4799b1a8502e8d11328d804ea6fad4b0407b05e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?php

	/**
	 * Elgg version library.
	 * Contains code for handling versioning and upgrades.
	 * 
	 * @package Elgg
	 * @subpackage Core
	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
	 * @copyright Curverider Ltd 2008
	 * @link http://elgg.org/
	 */

	/**
	 * Run any php upgrade scripts which are required
	 *
	 * @param unknown_type $version
	 */
	function upgrade_code($version) 
	{
		global $CONFIG;
		
		// Elgg and its database must be installed to upgrade it!
        if (!is_db_installed() || !is_installed()) return false;
		
		$version = (int) $version;
        	
        if ($handle = opendir($CONFIG->path . 'engine/lib/upgrades/')) {
        		
        	$upgrades = array();
        	
        	while ($updatefile = readdir($handle)) {
        		
        		// Look for upgrades and add to upgrades list
        		if (!is_dir($CONFIG->path . 'engine/lib/upgrades/' . $updatefile)) {
        			if (preg_match('/([0-9]*)\.php/',$updatefile,$matches)) {
        				$core_version = (int) $matches[1];
        				if ($core_version > $version) {
        					$upgrades[] = $updatefile;
        				}
        			}
        		}
        		
        	}
        	
        	// Sort and execute
        	asort($upgrades);
        	if (sizeof($upgrades) > 0) {
        		foreach($upgrades as $upgrade) {
        			try {
        				@include($CONFIG->path . 'engine/lib/upgrades/' . $upgrade);
        			} catch (Exception $e) {
        				error_log($e->getmessage());
        			}	
        			
        		}
        	}

        	return true;
        }
        	
        return false;
	}

	/**
	 * Get the current version information
	 *
	 * @param true|false $humanreadable Whether to return a human readable version (default: false)
	 * @return string|false Depending on success
	 */
		function get_version($humanreadable = false) {
			
			global $CONFIG;
			if (@include($CONFIG->path . "version.php")) {
				if (!$humanreadable) return $version;
				return $release;
			}
			
			return false;
			
		}
		
	/**
	 * Determines whether or not the database needs to be upgraded.
	 *
	 * @return true|false Depending on whether or not the db version matches the code version
	 */
		function version_upgrade_check() {
			
			$dbversion = (int) datalist_get('version');
			$version = get_version();
			
			if ($version > $dbversion) {
				return true;
			}
			return false;
			
		}
		
	/**
	 * Upgrades Elgg
	 *
	 */
		function version_upgrade() {
			
			$dbversion = (int) datalist_get('version');
			
			// Upgrade database
			db_upgrade($dbversion);
			system_message(elgg_echo('upgrade:db'));
			
			// Upgrade core
			if (upgrade_code($dbversion))
				system_message(elgg_echo('upgrade:core'));
			
			// Update the version
			datalist_set('version', get_version());
			
		}
		
	/**
	 * Runs an upgrade check on boot.
	 *
	 */
		function version_boot() {
			
			if (!is_installed()) return false;
			
			if (version_upgrade_check()) {
				version_upgrade();
			}
			
		}
		
	// Register the boot handler for version
		register_elgg_event_handler("boot","system","version_boot");

?>