<?php
/**
 * Elgg friend request plugin.
 *
 * @package ElggFriendRequest
 */

elgg_register_event_handler('init', 'system', 'friendrequest_init');

function friendrequest_init() {
	
	//This will let users view their friend requests
	elgg_register_page_handler('friendrequests', 'friendrequest_page_handler');
	
	elgg_register_plugin_hook_handler('register', 'menu:topbar', 'friendrequest_topbar_menu');
	elgg_register_plugin_hook_handler('register', 'menu:page', 'friendrequest_page_menu');
	
	//We need to override the friend remove action to remove the relationship we created
	$actions_dir = elgg_get_plugins_path().'friendrequest/actions/friends';
	elgg_register_action('friends/add', "$actions_dir/add.php");
	elgg_register_action('friends/remove', "$actions_dir/remove.php");
   	
   	$actions_dir = elgg_get_plugins_path().'friendrequest/actions/friendrequest';
	elgg_register_action('friendrequest/decline', "$actions_dir/decline.php");
   	
   	//Regular Elgg engine sends out an email via an event. The 400 priority will let us run first.
	//Then we return false to stop the event chain. The normal event handler will never get to run.
	//elgg_register_event_handler('create', 'friend', 'friendrequest_event_create_friend', 400);
	
	//Handle our add action event:
	elgg_register_event_handler('create', 'friendrequest', 'friendrequest_event_create_friendrequest');
	
}

function friendrequest_page_handler($page){
	
	//Keep the URLs uniform:
	if (isset($page[0])) {
		forward("friendrequests");
	}
	
	gatekeeper();
	
	elgg_push_context('friends');

	$title = elgg_echo('friendrequest');
	
	$page_owner = elgg_get_logged_in_user_entity();
	elgg_set_page_owner_guid($page_owner->guid);
		
	$requests = elgg_get_entities_from_relationship(array(
		'type' => 'user',
		'relationship' => 'friendrequest',
		'relationship_guid' => $page_owner->guid,
		'inverse_relationship' => true,
		'limit' => 0,
	));
	$content = elgg_view('friendrequest/requests', array(
		'requests' => $requests,
	));

	$params = array(
		'content' => $content,
		'title' => $title,
		'filter' => '',
	);
	$body = elgg_view_layout('content', $params);

	echo elgg_view_page($title, $body);
	
	return true;
}

function friendrequest_count(){
	return elgg_get_entities_from_relationship(array(
		'type' => 'user',
		'relationship' => 'friendrequest',
		'relationship_guid' => elgg_get_logged_in_user_guid(),
		'inverse_relationship' => true,
		'limit' => 0,
		'count' => true,
	));
}

function friendrequest_topbar_menu($hook, $entity_type, $returnvalue, $params) {
	$count = friendrequest_count();
	if($count) {
		foreach($returnvalue as $item) {
			if($item->getName() == 'friends') {
				$item->setText(
					$item->getText() . elgg_view('output/url', array(
						'href' => 'friendrequests',
						'text' => "<span class=\"messages-new\">$count</span>",
						'title' => elgg_echo('friendrequest'),
					))
				);
				return $returnvalue;
			}
		}
	}
	return $returnvalue;
}

function friendrequest_page_menu($hook, $entity_type, $returnvalue, $params) {
	if(elgg_in_context('friends')){
		foreach($returnvalue as $i => $item) {
			if($item->getName() == 'friends:of') {
				unset($returnvalue[$i]);
			}
		}
		if (elgg_is_logged_in()) {
			$count = friendrequest_count();		
			$item = new ElggMenuItem('friendrequests', elgg_echo('friendrequest').($count? " ($count)": ""), "friendrequests");
			$returnvalue[] = $item;
		}
	}
	return $returnvalue;
}

function friendrequest_event_create_friend($event, $object_type, $object){var_dump($object);elgg_echo('hola');
	if (($object instanceof ElggRelationship) && ($event == 'create') && ($object_type == 'friend')) {
		//We don't want anything happening here... (no email/etc)
		
		//Returning false will interrupt the rest of the chain.
		//The normal handler for the create friend event has a priority of 500 so it will never be called.	
		return false;
	}
	return true; //Shouldn't get here...
}

function friendrequest_event_create_friendrequest($event, $object_type, $object){
	if (($object instanceof ElggRelationship) && ($event == 'create') && ($object_type == 'friendrequest')) {
		$requester = get_entity($object->guid_one);
		$requested = get_entity($object->guid_two);

		$friendrequests_url = elgg_get_site_url() . "friendrequests/";

		// Notify target user
		return notify_user(
			$requested,
			$requester,
			elgg_echo('friendrequest:newfriend:subject', array(
				$requester->name
			), $requested->language), 
			elgg_echo('friendrequest:newfriend:body', array(
				$requester->name,
				$friendrequests_url,
			), $requested->language)
		);
	}
}