uid)); $received = muamba_transactions_summary(muamba_get_transactions($user->uid, 'received')); $output = theme('muamba_transactions', array('transactions' => $sent, 'type' => 'sent')); $output .= theme('muamba_transactions', array('transactions' => $received, 'type' => 'received')); return $output; } /** * Request an item. * * @param $nid * Requested item. */ function muamba_request($nid) { global $user; $nid = (int) $nid; $node = node_load($nid); $allow_unavailable = variable_get('muamba_allow_request_unavailable', FALSE); // Access check if (!muamba_has_request_access($node)) { return MENU_NOT_FOUND; } // Check if user is blocked by the item owner if (muamba_user_has_blocked($node, $user)) { return t('The item owner has blocked you from asking this item.'); } // Check if the item is available if (!muamba_check_availability($nid) && $allow_unavailable == FALSE) { return t('Item not available'); } // Check if user already requested the item if (muamba_check_user_request($nid, $user->uid)) { return t('You already requested this item.'); } // Create transaction $transaction = array( 'nid' => $nid, 'owner' => $node->uid, 'uid' => $user->uid, 'status' => MUAMBA_REQUESTED, 'created' => REQUEST_TIME, 'changed' => REQUEST_TIME, ); // Issue item request $transaction['mid'] = db_insert('muamba') ->fields($transaction) ->execute(); // Notify item owner $subject = t('Item request: @title', array('@title' => check_plain($node->title))); $message = theme('muamba_request_message', array('transaction' => $transaction)); $thread = privatemsg_new_thread(array(user_load($node->uid)), $subject , $message); $thread_id = $thread['message']->thread_id; // Update request with thread id $update = db_update('muamba') ->fields(array( 'thread_id' => $thread_id, )) ->condition('mid', $transaction['mid'], '=') ->execute(); // User output return t('You have requested an item'); } /** * Accept a transaction request. * * @param $mid * Transaction id. */ function muamba_accept($mid) { global $user; $mid = (int) $mid; $transaction = muamba_get_transaction($mid); $node = node_load($transaction['nid']); // Access check if (!muamba_has_management_access($node)) { return MENU_NOT_FOUND; } // Status check if ($transaction['status'] != MUAMBA_REQUESTED) { return MENU_NOT_FOUND; } // Update database muamba_update_status($mid, MUAMBA_ACCEPTED); // Notify item owner $message = theme('muamba_accept_message', array('transaction' => $transaction)); $reply = privatemsg_reply($transaction['thread_id'], $message); // Optionally reject all other pending requests if (variable_get('muamba_reject_all_on_accept', FALSE) == TRUE) { muamba_reject_all($node); } return t('Accepted item request.'); } /** * Reject all item requests. */ function muamba_reject_all($node) { global $user; $transactions = muamba_current_transactions($node); foreach ($transactions as $transaction) { if ($transaction['status'] == MUAMBA_REQUESTED && $transaction['owner'] == $user->uid) { muamba_reject($transaction['mid']); } } } /** * Reject a transaction request. * * @param $mid * Transaction id. */ function muamba_reject($mid) { global $user; $mid = (int) $mid; $transaction = muamba_get_transaction($mid); $node = node_load($transaction['nid']); // Access check if (!muamba_has_management_access($node)) { return MENU_NOT_FOUND; } // Status check if ($transaction['status'] != MUAMBA_REQUESTED) { return MENU_NOT_FOUND; } // Update database muamba_update_status($mid, MUAMBA_REJECTED); // Notify item owner $message = theme('muamba_reject_message', array('transaction' => $transaction)); $reply = privatemsg_reply($transaction['thread_id'], $message); return t('Rejected item request.'); } /** * Cancel a request. * * @param $mid * Transaction id. */ function muamba_cancel($mid) { global $user; $mid = (int) $mid; $transaction = muamba_get_transaction($mid); $node = node_load($transaction['nid']); // Access check if ($transaction['uid'] != $user->uid) { return MENU_NOT_FOUND; } // Status check if ($transaction['status'] != MUAMBA_REQUESTED) { return MENU_NOT_FOUND; } // Update database muamba_update_status($mid, MUAMBA_CANCELLED); // Notify item owner $message = theme('muamba_cancel_message', array('transaction' => $transaction)); $reply = privatemsg_reply($transaction['thread_id'], $message); return t('Cancelled item request.'); } /** * Return an item. * * @param $mid * Transaction id. */ function muamba_return($mid) { global $user; $mid = (int) $mid; $transaction = muamba_get_transaction($mid); $node = node_load($transaction['nid']); // Access check if ($transaction['uid'] != $user->uid) { return MENU_NOT_FOUND; } // Status check if ($transaction['status'] != MUAMBA_ACCEPTED && $transaction['status'] != MUAMBA_LOST) { return MENU_NOT_FOUND; } // Update database muamba_update_status($mid, MUAMBA_RETURNED); // Notify item owner $message = theme('muamba_return_message', array('transaction' => $transaction)); $reply = privatemsg_reply($transaction['thread_id'], $message); return t('Returned item request.'); } /** * Recover an item. * * @param $mid * Transaction id. */ function muamba_recover($mid) { global $user; $mid = (int) $mid; $transaction = muamba_get_transaction($mid); $node = node_load($transaction['nid']); // Access check if (!muamba_has_management_access($node)) { return MENU_NOT_FOUND; } // Status check if ($transaction['status'] != MUAMBA_ACCEPTED && $transaction['status'] != MUAMBA_RETURNED && $transaction['status'] != MUAMBA_LOST) { return MENU_NOT_FOUND; } // Update database muamba_update_status($mid, MUAMBA_RECOVERED); // Notify item owner $message = theme('muamba_recover_message', array('transaction' => $transaction)); $reply = privatemsg_reply($transaction['thread_id'], $message); return t('Item recovered.'); } /** * Report a lost item. * * @param $mid * Transaction id. */ function muamba_lost($mid) { global $user; $mid = (int) $mid; $transaction = muamba_get_transaction($mid); $node = node_load($transaction['nid']); // Access check if (!muamba_has_management_access($node)) { return MENU_NOT_FOUND; } // Status check if ($transaction['status'] != MUAMBA_ACCEPTED && $transaction['status'] != MUAMBA_RETURNED) { return MENU_NOT_FOUND; } // Update database muamba_update_status($mid, MUAMBA_LOST); // Notify item owner $message = theme('muamba_lost_message', array('transaction' => $transaction)); $reply = privatemsg_reply($transaction['thread_id'], $message); return t('Item lost.'); } /** * Display a muamba widget. * * @param $node * Muamba node id. * * @return * HTML formatted muamba widget. */ function muamba_widget($node, $size = 'small', $messages = FALSE) { global $user; // Check if widget can be shown if ($node->type != MUAMBA_NODE_TYPE || !muamba_has_request_access($node)) { return; } $available = muamba_check_availability($node->nid); if ($node->uid != $user->uid) { $transactions = muamba_current_transactions($node, $user->uid); } else { $transactions = muamba_current_transactions($node); } return theme('muamba_widget', array( 'node' => $node, 'transactions' => $transactions, 'available' => $available, 'size' => $size, 'messages' => $messages, )); } /** * Return availability information. * * @param $nid * Muamba node id. * * @return * Human-readable availability information. */ function muamba_availability_info($nid) { global $user; $node = node_load($nid); if ($node->uid == $user->uid) { $transactions = muamba_current_transactions($nid); $transaction = $transactions[0]; if (!empty($transaction)) { // Find the right requester foreach ($transactions as $transaction) { if ($transaction['status'] != MUAMBA_REQUESTED) { $requester = user_load($transaction['uid']); return t('No, @status to @user', array( '@status' => t(muamba_statuses($transaction['status'])), '@user' => $requester->name, )); } } } return t('Yes'); } else { $transaction = muamba_current_transactions($nid, $user->uid); $available = muamba_check_availability($nid, $user->uid); if (!$available) { if (isset($transaction['uid']) && $transaction['uid'] == $user->uid) { return t('You requested, but it is not available'); } else { return t('No'); } } else { if (isset($transaction['uid']) && $transaction['uid'] == $user->uid) { return t('Yes, you requested, status is @status', array( '@status' => t(muamba_statuses($transaction['status'])), )); } else { return t('Yes'); } } } }