aboutsummaryrefslogtreecommitdiff
path: root/mod/updateclient/start.php
blob: 25f7ffe980594ff49db1bbafabef45687049ef17 (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
<?php
	/**
	 * Update client.
	 * 
	 * @package ElggUpdateClient
	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
	 * @author Marcus Povey
	 * @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/services/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;
		
			include_once($CONFIG->url . "version.php");
		
			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');
?>