diff --git a/privatemsg.module b/privatemsg.module index ffe1ee3..77fe77e 100644 --- a/privatemsg.module +++ b/privatemsg.module @@ -170,8 +170,8 @@ function privatemsg_menu() { $items['messages'] = array( 'title' => 'Messages', 'title callback' => 'privatemsg_title_callback', - 'page callback' => 'privatemsg_list_page', - 'page arguments' => array('list'), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('privatemsg_list', 'list'), 'file' => 'privatemsg.pages.inc', 'access callback' => 'privatemsg_user_access', 'type' => MENU_NORMAL_ITEM, @@ -179,8 +179,8 @@ function privatemsg_menu() { ); $items['messages/list'] = array( 'title' => 'Messages', - 'page callback' => 'privatemsg_list_page', - 'page arguments' => array('list'), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('privatemsg_list', 'list'), 'file' => 'privatemsg.pages.inc', 'access callback' => 'privatemsg_user_access', 'type' => MENU_DEFAULT_LOCAL_TASK, @@ -267,13 +267,13 @@ function privatemsg_menu() { 'type' => MENU_CALLBACK, 'menu' => 'user-menu', ); - $items['user/%/messages'] = array( + $items['user/%user/messages'] = array( 'title' => 'Messages', - 'page callback' => 'privatemsg_list_page', - 'page arguments' => array('list', 1), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('privatemsg_list', 'list', 1), 'file' => 'privatemsg.pages.inc', - 'access callback' => 'privatemsg_user_access', - 'access arguments' => array('read all private messages'), + 'access callback' => 'privatemsg_user_tab_access', + 'access arguments' => array(1), 'type' => MENU_LOCAL_TASK, ); @@ -336,6 +336,33 @@ function privatemsg_user_access($permission = 'read privatemsg', $account = NULL } /** + * Access callback to view the messages tab on user profiles + * + * @param $account + * The account being viewed + * @return + * TRUE if the user has access, otherwise FALSE + */ +function privatemsg_user_tab_access($account) { + global $user; + + // Check higher-level permissions + if (user_access('read all private messages')) { + return TRUE; + } + + // Check if you're viewing yourself + if ($user->uid == $account->uid) { + // Check basic permissions + if (user_access('read privatemsg')) { + return TRUE; + } + } + + return FALSE; +} + +/** * Check access to the view messages page. * * Function to restrict the access of the view messages page to just the diff --git a/privatemsg.pages.inc b/privatemsg.pages.inc index 63ddaf4..9187858 100644 --- a/privatemsg.pages.inc +++ b/privatemsg.pages.inc @@ -122,39 +122,14 @@ function privatemsg_delete_submit($form, &$form_state) { $form_state['redirect'] = $form_state['values']['delete_destination']; } -/** - * List messages. - * - * @param $argument - * An argument to pass through to the query builder. - * @param $uid - * User id messages of another user should be displayed - * - * @return - * Form array - */ -function privatemsg_list_page($argument = 'list', $uid = NULL) { +function privatemsg_list($form, &$form_state, $argument, $account = NULL) { global $user; - - // Setting default behavior... - $account = $user; - // Because uid is submitted by the menu system, it's a string not a integer. - if ((int)$uid > 0 && $uid != $user->uid) { - // Trying to view someone else's messages... - if (!$account_check = user_load($uid)) { - return MENU_NOT_FOUND; - } - if (!privatemsg_user_access('read all private messages')) { - return MENU_ACCESS_DENIED; - } - // Has rights and user_load return an array so user does exist - $account = $account_check; + + // If no account specfied, use the current user + if (!$account) { + $account = $user; } - - return drupal_get_form('privatemsg_list', $argument, $account); -} - -function privatemsg_list($form, &$form_state, $argument, $account) { + drupal_add_css(drupal_get_path('module', 'privatemsg') . '/styles/privatemsg-list.css'); // If this is an AJAX request, update $_GET['q'] so that table sorting and diff --git a/privatemsg_filter/privatemsg_filter.module b/privatemsg_filter/privatemsg_filter.module index 592f1a6..9cd35db 100644 --- a/privatemsg_filter/privatemsg_filter.module +++ b/privatemsg_filter/privatemsg_filter.module @@ -84,8 +84,8 @@ function privatemsg_filter_menu() { ); $items['messages/inbox'] = array( 'title' => 'Inbox', - 'page callback' => 'privatemsg_list_page', - 'page arguments' => array('inbox'), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('privatemsg_list', 'inbox'), 'file' => 'privatemsg.pages.inc', 'file path' => drupal_get_path('module', 'privatemsg'), 'access callback' => 'privatemsg_user_access', @@ -95,8 +95,8 @@ function privatemsg_filter_menu() { ); $items['messages/sent'] = array( 'title' => 'Sent Messages', - 'page callback' => 'privatemsg_list_page', - 'page arguments' => array('sent'), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('privatemsg_list', 'sent'), 'file' => 'privatemsg.pages.inc', 'file path' => drupal_get_path('module', 'privatemsg'), 'access callback' => 'privatemsg_user_access',