aboutsummaryrefslogtreecommitdiff
path: root/mod/friendrequest/start.php
blob: 2ea3c80f99da0148662ff79fd49e8010ae48119a (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
139
140
141
142
143
144
145
146
147
148
149
150
151
<?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)
		);
	}
}