diff options
Diffstat (limited to 'mod/messages/start.php')
| -rw-r--r-- | mod/messages/start.php | 384 | 
1 files changed, 189 insertions, 195 deletions
diff --git a/mod/messages/start.php b/mod/messages/start.php index bca8d3a91..4b704a344 100644 --- a/mod/messages/start.php +++ b/mod/messages/start.php @@ -1,58 +1,85 @@  <?php -  /**  * Elgg internal messages plugin -* This plugin lets user send each other messages. +* This plugin lets users send messages to each other.  *  * @package ElggMessages  */ -/** -* Messages initialisation -* -* These parameters are required for the event API, but we won't use them: -* -* @param unknown_type $event -* @param unknown_type $object_type -* @param unknown_type $object -*/ -function messages_init() { -	// Load system configuration -		global $CONFIG; +elgg_register_event_handler('init', 'system', 'messages_init'); -	//add submenu options -		if (elgg_get_context() == "messages") { -			add_submenu_item(elgg_echo('messages:inbox'), "pg/messages/" . get_loggedin_user()->username); -			add_submenu_item(elgg_echo('messages:sentmessages'), "mod/messages/sent.php"); -		} +function messages_init() { + +	// add submenu options +	if (elgg_get_context() == "messages") { +		add_submenu_item(elgg_echo('messages:inbox'), "pg/messages/" . get_loggedin_user()->username); +		add_submenu_item(elgg_echo('messages:sentmessages'), "mod/messages/sent.php"); +	}  	// Extend system CSS with our own styles, which are defined in the shouts/css view -		elgg_extend_view('css','messages/css'); +	elgg_extend_view('css/elgg', 'messages/css'); -	// Extend the elgg topbar -		elgg_extend_view('elgg_topbar/extend','messages/topbar'); +	// Add icon to the topbar +	elgg_extend_view('elgg_topbar/extend', 'messages/topbar');  	// Register a page handler, so we can have nice URLs -		register_page_handler('messages','messages_page_handler'); +	register_page_handler('messages', 'messages_page_handler'); -	// Register a URL handler for shouts posts -		register_entity_url_handler('messages_url','object','messages'); +	// Register a URL handler +	register_entity_url_handler('messages_url', 'object', 'messages'); -	// Extend avatar user-menu -		elgg_extend_view('profile/menu/links','messages/menu'); +	// Extend avatar hover menu +	elgg_extend_view('profile/menu/links', 'messages/menu');  	// Register a notification handler for site messages -		register_notification_handler("site", "messages_site_notify_handler"); -		elgg_register_plugin_hook_handler('notify:entity:message','object','messages_notification_msg'); -		register_notification_object('object','messages',elgg_echo('messages:new')); - -	// Override metadata permissions -		elgg_register_plugin_hook_handler('permissions_check:metadata','object','messages_can_edit_metadata'); +	register_notification_handler("site", "messages_site_notify_handler"); +	elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'messages_notification_msg'); +	register_notification_object('object', 'messages', elgg_echo('messages:new'));  	// ecml  	elgg_register_plugin_hook_handler('get_views', 'ecml', 'messages_ecml_views_hook'); +	// permission overrides +	elgg_register_plugin_hook_handler('permissions_check:metadata', 'object', 'messages_can_edit_metadata'); +	elgg_register_plugin_hook_handler('permissions_check', 'object', 'messages_can_edit'); +	elgg_register_plugin_hook_handler('container_permissions_check', 'object', 'messages_can_edit_container'); + +	// Register actions +	$action_path = elgg_get_plugin_path() . 'messages/actions'; +	elgg_register_action("messages/send", "$action_path/send.php"); +	elgg_register_action("messages/delete", "$action_path/delete.php"); +} + +/** + * Messages page handler + * + * @param array $page Array of URL components for routing + * @return bool + */ +function messages_page_handler($page) { + +	// The first component of a messages URL is the username +	if (isset($page[0])) { +		set_input('username', $page[0]); +	} + +	// The second part dictates what we're doing +	if (isset($page[1])) { +		switch($page[1]) { +			case "read": +				set_input('message',$page[2]); +				include(dirname(__FILE__) . "/read.php"); +				return true; +				break; +		} +	// If the URL is just 'messages/username', or just 'messages/', load the standard messages index +	} else { +		include(dirname(__FILE__) . "/index.php"); +		return true; +	} + +	return false;  }  /** @@ -71,7 +98,6 @@ function messages_can_edit_metadata($hook_name, $entity_type, $return_value, $pa  	}  	return $return_value; -  }  /** @@ -90,26 +116,18 @@ function messages_can_edit($hook_name, $entity_type, $return_value, $parameters)  	}  	return $return_value; -  }  /** - * We really don't want to send a notification message when a message is sent, if the method is messages ... - * + * Prevent messages from generating a notification   */ -function messages_notification_msg($hook_name, $entity_type, $return_value, $parameters) { - -	global $CONFIG, $messages_pm; - -	if ($parameters['entity'] instanceof ElggEntity) { - -		if ($parameters['entity']->getSubtype() == 'messages') { +function messages_notification_msg($hook_name, $entity_type, $return_value, $params) { +	if ($params['entity'] instanceof ElggEntity) { +		if ($params['entity']->getSubtype() == 'messages') {  			return false;  		}  	} -	return null; -  }  /** @@ -125,7 +143,6 @@ function messages_can_edit_container($hook_name, $entity_type, $return_value, $p  	}  	return $return_value; -  }  /** @@ -138,175 +155,164 @@ function messages_can_edit_container($hook_name, $entity_type, $return_value, $p   * @param int $reply The GUID of the message to reply from (default: none)   * @param true|false $notify Send a notification (default: true)   * @param true|false $add_to_sent If true (default), will add a message to the sender's 'sent' tray - * @return true|false Depending on success + * @return bool   */  function messages_send($subject, $body, $send_to, $from = 0, $reply = 0, $notify = true, $add_to_sent = true) { -		global $messagesendflag; -		$messagesendflag = 1; +	global $messagesendflag; +	$messagesendflag = 1; -		global $messages_pm; -		if ($notify) { -			$messages_pm = 1; -		} else { -			$messages_pm = 0; -		} +	global $messages_pm; +	if ($notify) { +		$messages_pm = 1; +	} else { +		$messages_pm = 0; +	}  	// If $from == 0, set to current user -			if ($from == 0) -				$from = (int) get_loggedin_userid(); - -	// Initialise a new ElggObject -			$message_to = new ElggObject(); -			$message_sent = new ElggObject(); -	// Tell the system it's a message -			$message_to->subtype = "messages"; -			$message_sent->subtype = "messages"; -	// Set its owner to the current user -			// $message_to->owner_guid = get_loggedin_userid(); -			$message_to->owner_guid = $send_to; -			$message_to->container_guid = $send_to; -			$message_sent->owner_guid = $from; -			$message_sent->container_guid = $from; -	// For now, set its access to public (we'll add an access dropdown shortly) -			$message_to->access_id = ACCESS_PUBLIC; -			$message_sent->access_id = ACCESS_PUBLIC; -	// Set its description appropriately -			$message_to->title = $subject; -			$message_to->description = $body; -			$message_sent->title = $subject; -			$message_sent->description = $body; -	// set the metadata -			$message_to->toId = $send_to; // the user receiving the message -			$message_to->fromId = $from; // the user receiving the message -			$message_to->readYet = 0; // this is a toggle between 0 / 1 (1 = read) -			$message_to->hiddenFrom = 0; // this is used when a user deletes a message in their sentbox, it is a flag -			$message_to->hiddenTo = 0; // this is used when a user deletes a message in their inbox -			$message_sent->toId = $send_to; // the user receiving the message -			$message_sent->fromId = $from; // the user receiving the message -			$message_sent->readYet = 0; // this is a toggle between 0 / 1 (1 = read) -			$message_sent->hiddenFrom = 0; // this is used when a user deletes a message in their sentbox, it is a flag -			$message_sent->hiddenTo = 0; // this is used when a user deletes a message in their inbox - -			$message_to->msg = 1; -			$message_sent->msg = 1; - -		// Save the copy of the message that goes to the recipient -			$success = $message_to->save(); - -		// Save the copy of the message that goes to the sender -			if ($add_to_sent) $success2 = $message_sent->save(); - -			$message_to->access_id = ACCESS_PRIVATE; -			$message_to->save(); - -			if ($add_to_sent) { -				$message_sent->access_id = ACCESS_PRIVATE; -				$message_sent->save(); -			} - -		// if the new message is a reply then create a relationship link between the new message -		// and the message it is in reply to -			if($reply && $success){ -				$create_relationship = add_entity_relationship($message_sent->guid, "reply", $reply); -			} - - -			global $CONFIG; -			$message_contents = strip_tags($body); -			if ($send_to != get_loggedin_user() && $notify) -			notify_user($send_to, get_loggedin_userid(), elgg_echo('messages:email:subject'), -				elgg_echo('messages:email:body', array( -						get_loggedin_user()->name, -						$message_contents, -						elgg_get_site_url() . "pg/messages/" . $user->username, -						get_loggedin_user()->name, -						elgg_get_site_url() . "mod/messages/send.php?send_to=" . get_loggedin_userid() -					)) -			); - -			$messagesendflag = 0; -			return $success; +	if ($from == 0) { +		$from = (int) get_loggedin_userid(); +	} -} +	// Initialise 2 new ElggObject +	$message_to = new ElggObject(); +	$message_sent = new ElggObject(); +	$message_to->subtype = "messages"; +	$message_sent->subtype = "messages"; +	$message_to->owner_guid = $send_to; +	$message_to->container_guid = $send_to; +	$message_sent->owner_guid = $from; +	$message_sent->container_guid = $from; +	$message_to->access_id = ACCESS_PUBLIC; +	$message_sent->access_id = ACCESS_PUBLIC; +	$message_to->title = $subject; +	$message_to->description = $body; +	$message_sent->title = $subject; +	$message_sent->description = $body; +	$message_to->toId = $send_to; // the user receiving the message +	$message_to->fromId = $from; // the user receiving the message +	$message_to->readYet = 0; // this is a toggle between 0 / 1 (1 = read) +	$message_to->hiddenFrom = 0; // this is used when a user deletes a message in their sentbox, it is a flag +	$message_to->hiddenTo = 0; // this is used when a user deletes a message in their inbox +	$message_sent->toId = $send_to; // the user receiving the message +	$message_sent->fromId = $from; // the user receiving the message +	$message_sent->readYet = 0; // this is a toggle between 0 / 1 (1 = read) +	$message_sent->hiddenFrom = 0; // this is used when a user deletes a message in their sentbox, it is a flag +	$message_sent->hiddenTo = 0; // this is used when a user deletes a message in their inbox + +	$message_to->msg = 1; +	$message_sent->msg = 1; + +	// Save the copy of the message that goes to the recipient +	$success = $message_to->save(); + +	// Save the copy of the message that goes to the sender +	if ($add_to_sent) { +		$success2 = $message_sent->save(); +	} -/** - * messages page handler; allows the use of fancy URLs - * - * @param array $page From the page_handler function - * @return true|false Depending on success - */ -function messages_page_handler($page) { +	$message_to->access_id = ACCESS_PRIVATE; +	$message_to->save(); -	// The first component of a messages URL is the username -	if (isset($page[0])) { -		set_input('username',$page[0]); +	if ($add_to_sent) { +		$message_sent->access_id = ACCESS_PRIVATE; +		$message_sent->save();  	} -	// The second part dictates what we're doing -	if (isset($page[1])) { -		switch($page[1]) { -			case "read":		set_input('message',$page[2]); -								include(dirname(__FILE__) . "/read.php"); -								return true; -								break; -		} -	// If the URL is just 'messages/username', or just 'messages/', load the standard messages index -	} else { -		include(dirname(__FILE__) . "/index.php"); -		return true; +	// if the new message is a reply then create a relationship link between the new message +	// and the message it is in reply to +	if ($reply && $success){ +		$create_relationship = add_entity_relationship($message_sent->guid, "reply", $reply);  	} -	return false; +	$message_contents = strip_tags($body); +	if ($send_to != get_loggedin_user() && $notify) { +		$subject = elgg_echo('messages:email:subject'); +		$body = elgg_echo('messages:email:body', array( +			get_loggedin_user()->name, +			$message_contents, +			elgg_get_site_url() . "pg/messages/" . $user->username, +			get_loggedin_user()->name, +			elgg_get_site_url() . "mod/messages/send.php?send_to=" . get_loggedin_userid() +		)); + +		notify_user($send_to, get_loggedin_userid(), $subject, $body); +	} +	$messagesendflag = 0; +	return $success;  } +/** + * Message URL override + * + * @param ElggObject $message + * @return string + */  function messages_url($message) { -	return "pg/messages/" . $message->getOwnerEntity()->username . "/read/" . $message->getGUID(); +	$url = elgg_get_site_url() . 'pg/messages/'; +	$url .= $message->getOwnerEntity()->username . '/read/' . $message->getGUID(); +	return $url;  } -// A simple function to count the number of messages that are unread in a user's inbox -function count_unread_messages() { - -	//get the users inbox messages -	//$num_messages = get_entities_from_metadata("toId", get_loggedin_userid(), "object", "messages", 0, 10, 0, "", 0, false); -$num_messages = elgg_get_entities_from_metadata(array('metadata_name_value_pairs' => array( -								'toId' => get_loggedin_userid(), -								'readYet' => 0, -								'msg' => 1 -							), 'owner_guid' => get_loggedin_userid())); - -	if (is_array($num_messages)) -		$counter = sizeof($num_messages); -	else -		$counter = 0; - -	return $counter; +/** + * Count the unread messages in a user's inbox + * + * @return int + */ +function messages_count_unread() { + +	$options = array( +		'metadata_name_value_pairs' => array( +			'toId' => get_loggedin_userid(), +			'readYet' => 0, +			'msg' => 1 +		), +		'owner_guid' => get_loggedin_userid() +	); +	$num_messages = elgg_get_entities_from_metadata($options); + +	if (is_array($num_messages)) { +		return sizeof($num_messages); +	} +	return 0;  } -function messages_site_notify_handler(ElggEntity $from, ElggUser $to, $subject, $message, array $params = NULL) -{ -	global $CONFIG; +/** + * Notification handler + * + * @param ElggEntity $from + * @param ElggUser   $to + * @param string     $subject + * @param string     $message + * @param array      $params + * @return bool + */ +function messages_site_notify_handler(ElggEntity $from, ElggUser $to, $subject, $message, array $params = NULL) { -	if (!$from) +	if (!$from) {  		throw new NotificationException(elgg_echo('NotificationException:MissingParameter', array('from'))); +	} -	if (!$to) +	if (!$to) {  		throw new NotificationException(elgg_echo('NotificationException:MissingParameter', array('to'))); +	}  	global $messages_pm; -	if (!$messages_pm) -		return messages_send($subject,$message,$to->guid,$from->guid,0,false,false); -	else return true; +	if (!$messages_pm) { +		return messages_send($subject, $message, $to->guid, $from->guid, 0, false, false); +	} +	return true;  } +  /**   * Register messages with ECML.   * - * @param unknown_type $hook - * @param unknown_type $entity_type - * @param unknown_type $return_value + * @param string $hook + * @param string $entity_type + * @param array $return_value   * @param unknown_type $params   */  function messages_ecml_views_hook($hook, $entity_type, $return_value, $params) { @@ -314,15 +320,3 @@ function messages_ecml_views_hook($hook, $entity_type, $return_value, $params) {  	return $return_value;  } - - -// Make sure the messages initialisation function is called on initialisation -elgg_register_event_handler('init','system','messages_init'); - -elgg_register_plugin_hook_handler('permissions_check','object','messages_can_edit'); -elgg_register_plugin_hook_handler('container_permissions_check','object','messages_can_edit_container'); - -// Register actions -global $CONFIG; -elgg_register_action("messages/send", $CONFIG->pluginspath . "messages/actions/send.php"); -elgg_register_action("messages/delete", $CONFIG->pluginspath . "messages/actions/delete.php");
\ No newline at end of file  | 
