Index: buddylist.module =================================================================== RCS file: /cvs/drupal/contributions/modules/buddylist/buddylist.module,v retrieving revision 1.89 diff -u -r1.89 buddylist.module --- buddylist.module 13 Mar 2007 18:19:14 -0000 1.89 +++ buddylist.module 19 Mar 2007 20:32:59 -0000 @@ -204,6 +204,34 @@ 'weight' => 0, 'callback arguments' => array('buddylist_pending_requests', $id) ); + + $items[] = array( + 'path' => 'buddylist/'. $id .'/buddies/requested/accept', + 'title' => t('Accept Request'), + 'access' => $editAccess, + 'type' => MENU_CALLBACK, + 'callback' => 'drupal_get_form', + 'callback arguments' => array('buddylist_pending_requested_accept',$id), + ); + + $items[] = array( + 'path' => 'buddylist/'. $id .'/buddies/requested/deny', + 'title' => t('Deny Request'), + 'access' => $editAccess, + 'type' => MENU_CALLBACK, + 'callback' => 'drupal_get_form', + 'callback arguments' => array('buddylist_pending_requested_deny',$id), + ); + + $items[] = array( + 'path' => 'buddylist/'. $id .'/buddies/request/cancel', + 'title' => t('Cancel Request'), + 'access' => $editAccess, + 'type' => MENU_CALLBACK, + 'callback' => 'drupal_get_form', + 'callback arguments' => array('buddylist_cancel_request',$id), + ); + } // other callbacks @@ -717,6 +745,17 @@ return l(t('Add %name to my @buddy list', array('%name' => $buddyuser->name) + buddylist_translation()), 'buddy/add/' . $buddyuser->uid, NULL, drupal_get_destination(), NULL, FALSE, TRUE); } +function theme_buddylist_accept_request_link($requestee_uid, $requester_uid) { + return l(t('Accept'), 'buddylist/' . $requestee_uid . '/buddies/requested/accept/' . $requester_uid, array('title' => 'Accept'), drupal_get_destination(), NULL, FALSE, TRUE); +} + +function theme_buddylist_deny_request_link($requestee_uid, $requester_uid) { + return l(t('Deny'), 'buddylist/' . $requestee_uid . '/buddies/requested/deny/' . $requester_uid, array('title' => 'Deny'), drupal_get_destination(), NULL, FALSE, TRUE); +} + +function theme_buddylist_sent_requests_cancel_link($requestee_uid, $requester_uid) { + return l(t('Cancel'), 'buddylist/' . $requestee_uid . '/buddies/request/cancel/' . $requester_uid, array('title' => 'Cancel'), drupal_get_destination(), NULL, FALSE, TRUE); +} /** * Displays a list of a given user's buddies. @@ -797,7 +836,7 @@ while ($row = db_fetch_object($result)) { $html_row = array(); $html_row[] = theme('username', $row); - $html_row[] = drupal_get_form('buddylist_approval_form', $account->uid, $row->uid, $row->name); + $html_row[] = theme('buddylist_accept_request_link', $account->uid, $row->uid) . "|" . theme('buddylist_deny_request_link', $account->uid, $row->uid); $html_rows[] = $html_row; } @@ -831,7 +870,7 @@ while ($row = db_fetch_object($result)) { $html_row = array(); $html_row[] = theme('username', $row); - $html_row[] = drupal_get_form('buddylist_request_cancel_form', $row->uid, $account->uid); + $html_row[] = theme('buddylist_sent_requests_cancel_link', $account->uid, $row->uid); $html_rows[] = $html_row; } @@ -841,36 +880,128 @@ return $output; } +function buddylist_pending_requested_accept($requestee_uid, $requester_uid) { + $requestee_account = user_load(array('uid' => $requestee_uid)); + $requester_account = user_load(array('uid' => $requester_uid)); + $output = confirm_form( + buddylist_confirm_form($requester_account, $requestee_account), + t('Accept Request'), + 'buddylist/'.$requestee_uid.'/buddies/requests', + t("Are you sure you want to accept the request from !name?", array('!name' => theme('username', $requester_account))), + t('Yes'), t('No'), + 'buddylist_request_accept_confirm'); + + return $output; +} -function buddylist_approval_form($requestee_uid, $requester_uid) { - $form = array(); +function buddylist_cancel_request($requestee_uid, $requester_uid){ + $requestee_account = user_load(array('uid' => $requestee_uid)); + $requester_account = user_load(array('uid' => $requester_uid)); + $output = confirm_form( + buddylist_request_cancel_form($requestee_uid, $requester_uid), + t('Cancel Request'), + 'buddylist/'.$requestee_uid.'/buddies/requests', + t("Are you sure you want to cancel the request to !name?", array('!name' => theme('username', $requester_account))), + t('Yes'), t('No'), + 'buddylist_cancel_request_confirm'); + + return $output; - $form['requestee_uid'] = array( - '#type' => 'hidden', - '#value' => $requestee_uid, - ); +} - $form['requester_uid'] = array( - '#type' => 'hidden', - '#value' => $requester_uid - ); +function buddylist_cancel_request_submit($form_id, $form_values){ + db_query('DELETE FROM {buddylist_pending_requests} WHERE requestee_uid = %d AND requester_uid = %d', $form_values['requester_uid'], $form_values['requestee_uid']); - $form['approve'] = array( - '#type' => 'submit', - '#value' => t('Approve') - ); + $former_potential_buddy = user_load(array('uid' => $form_values['requester_uid'])); + drupal_set_message(t('The request to add !user_name has been cancelled.', array('!user_name' => theme('username', $former_potential_buddy)))); - $form['deny'] = array( - '#type' => 'submit', - '#value' => t('Deny'), - ); + return 'buddylist/'. $form_values['requester_uid'] .'/buddies/requests'; +} + +function buddylist_pending_requested_deny($requestee_uid, $requester_uid) { + $requestee_account = user_load(array('uid' => $requestee_uid)); + $requester_account = user_load(array('uid' => $requester_uid)); + $output = confirm_form( + buddylist_confirm_form($requester_account, $requestee_account), + t('Accept Request'), + 'buddylist/'.$requestee_uid.'/buddies/requests', + t("Are you sure you want to deny the request from !name?", array('!name' => theme('username', $requester_account))), + t('Yes'), t('No'), + 'buddylist_request_deny_confirm'); + + return $output; +} + +function buddylist_pending_requested_accept_submit($form_id, $form_values) { + $requestee_account = $form_values['requestee_account']; // most likely global user, unless admin looking + $requester_account = $form_values['requester_account']; + // Delete pending request from {buddylist_penging_requests} + $result = db_query('SELECT * FROM {buddylist_pending_requests} WHERE requestee_uid = %d AND requester_uid = %d', $requestee_account->uid, $requester_account->uid); + + if (db_num_rows($result) == 0) { + // The other user cancelled since viewing this page + drupal_set_message(t('!linktouser has cancelled the request to join your @buddylist.', array('!linktouser' => theme('username', $requester_account)) + buddylist_translation())); + return 'buddylist/'. $requestee_account->uid .'/buddies/requests'; + } + + db_query('DELETE FROM {buddylist_pending_requests} WHERE requestee_uid = %d AND requester_uid = %d', $requestee_account->uid, $requester_account->uid); + + // Make sure, for some weird reason, we don't already have these guys marked as buddies of each other in the database + $result = db_query('SELECT * FROM {buddylist} WHERE uid = %d AND buddy = %d', $requestee_account->uid, $requester_account->uid); + + $time = time(); + + if (!db_num_rows($result)) { + db_query('INSERT INTO {buddylist} (uid, buddy, timestamp, received) VALUES (%d, %d, %d, %d)', $requestee_account->uid, $requester_account->uid, $time, 1); + } + + $result = db_query('SELECT * FROM {buddylist} WHERE uid = %d AND buddy = %d', $requester_account->uid, $requestee_account->uid); + if (!db_num_rows($result)) { + db_query('INSERT INTO {buddylist} (uid, buddy, timestamp, received) VALUES (%d, %d, %d, %d)', $requester_account->uid, $requestee_account->uid, $time, 1); + } + + if (variable_get('buddylist_send_approval', FALSE)) { + buddylist_mail_user('approval', $requester_account, $requestee_account); + } + + drupal_set_message(t('Congratulations! !linktouser is now your buddy.', array('!linktouser' => theme('username', $requester_account)) + buddylist_translation())); + + return 'buddylist/'. $requestee_account->uid .'/buddies/requests'; +} + +function buddylist_pending_requested_deny_submit($form_id, $form_values) { + $requestee_account = $form_values['requestee_account']; // most likely global user, unless admin looking + $requester_account = $form_values['requester_account']; + + // Delete pending request from {buddylist_penging_requests} + db_query('DELETE FROM {buddylist_pending_requests} WHERE requestee_uid = %d AND requester_uid = %d', $requestee_account->uid, $requester_account->uid); + + drupal_set_message(t("!user's request to be your buddy has been denied.", array('!user' => theme('username', $requester_account)) + buddylist_translation())); + + return 'buddylist/'. $requestee_account->uid .'/buddies/requests'; +} + +function buddylist_confirm_form($requester_account, $requestee_account) { + $form = array(); + + $form['requester_account'] = array( + '#type' => 'value', + '#value' => $requester_account + ); + + $form['requestee_account'] = array( + '#type' => 'value', + '#value' => $requestee_account + ); + return $form; } -function buddylist_approval_form_submit($form_id, $form_values) { +function buddylist_confirm_form_submit($form_id, $form_values) { $requestee_account = user_load(array('uid' => $form_values['requestee_uid'])); // most likely global user, unless admin looking - + + // Delete pending request from {buddylist_penging_requests} db_query('DELETE FROM {buddylist_pending_requests} WHERE requestee_uid = %d AND requester_uid = %d', $form_values['requestee_uid'], $form_values['requester_uid']); @@ -902,7 +1033,9 @@ } } -function buddylist_request_cancel_form($requestee_uid, $requester_uid) { +function buddylist_approval_form($requestee_uid, $requester_uid) { + $form = array(); + $form['requestee_uid'] = array( '#type' => 'hidden', '#value' => $requestee_uid, @@ -913,9 +1046,28 @@ '#value' => $requester_uid ); - $form['cancel'] = array( + $form['approve'] = array( '#type' => 'submit', - '#value' => t('Cancel') + '#value' => t('Approve') + ); + + $form['deny'] = array( + '#type' => 'submit', + '#value' => t('Deny'), + ); + + return $form; +} + +function buddylist_request_cancel_form($requestee_uid, $requester_uid) { + $form['requestee_uid'] = array( + '#type' => 'hidden', + '#value' => $requestee_uid, + ); + + $form['requester_uid'] = array( + '#type' => 'hidden', + '#value' => $requester_uid ); return $form;