<?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');
?>