aboutsummaryrefslogtreecommitdiff
path: root/mod/updateclient/start.php
blob: 3ba743bd783ebc460e78e288d02a1e5b6d2c7363 (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
<?php
	/**
	 * Update client.
	 * 
	 * @package ElggUpdateClient
	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
	 * @author Curverider Ltd
	 * @copyright Curverider Ltd 2008
	 * @link http://elgg.com/
	 */	

	$DEFAULT_UPDATE_SERVER;

	/**
	 * Client update initialisation.
	 */
	function updateclient_init()
	{
		global $DEFAULT_UPDATE_SERVER;
		
		$DEFAULT_UPDATE_SERVER = 'http://updates.elgg.org/pg/api/rest/php/';
		
		// Register a page handler, so we can have nice URLs
		register_page_handler('updateclient','updateclient_page_handler');
		
		$now = time();
		$time = get_plugin_setting('days', 'updateclient');
		$last_checked = get_plugin_setting('last_checked', 'updateclient');
		if (($time) && ($last_checked < $now - (86400 * $time)))
		{
			updateclient_check_core();
		}
	}
	
	/**
	 * Handle pages.
	 *
	 * @param unknown_type $page
	 */
	function updateclient_page_handler($page)
	{
		global $CONFIG;
		
		if (isset($page[0]))
		{
			
    		add_submenu_item(elgg_echo('updateclient:label:core'), $CONFIG->url . "pg/updateclient/core/");
    		//add_submenu_item(elgg_echo('updateclient:label:plugins'), $CONFIG->url . "pg/updateclient/plugins/");
			
			// See what context we're using
			switch($page[0])
			{		
				case "core" :
					include($CONFIG->pluginspath . "updateclient/index.php");
				break;		
				case "plugins" :
					include($CONFIG->pluginspath . "updateclient/plugin.php");
				break;
    			
    			default:
    				include($CONFIG->pluginspath . "updateclient/index.php");
			}
		}
		else
			include($CONFIG->pluginspath . "updateclient/index.php");
	}
	
	/**
	 * Send a message to the admin notifications page.
	 *
	 * @param unknown_type $subject
	 * @param unknown_type $message
	 */
	function updateclient_notify_message($subject, $message)
	{
		return send_admin_message($subject, $message);
	}
	
	/**
	 * Get updates.
	 *
	 * @return unknown
	 */
	function updateclient_check_core()
	{
		global $CONFIG, $DEFAULT_UPDATE_SERVER;
		
		// Phone home and check core
		$url = get_plugin_setting('updateserver', 'updateclient');
		if (!$url) $url = $DEFAULT_UPDATE_SERVER;
		
		$result = send_api_get_call($url, array('method' => 'elgg.system.getlatestversion'), array());
		
		if (($result) && ($result->status == 0))
		{
			$result = $result->result;
		
			// Get version information
			$version = get_version();
			$release = get_version(true);
		
			if (
				($version != $result['version']) ||
				($release != $result['release'])
			)
			{
				// Notify
				updateclient_notify_message(
					elgg_echo('updateclient:message:title'),
					sprintf(elgg_echo('updateclient:message:body'),
						$result['release'],
						$result['version'],
						$result['codename'],
						$result['url'],
						$result['notes']
					)
				);
				
			}
		}
		
		// Set last_checked
		set_plugin_setting('last_checked', time(), 'updateclient');
		
		return true;
	}
	
	// Initialise
	register_elgg_event_handler('init','system','updateclient_init');
?>