condition('m.nid', $nid, '=') ->condition('m.uid', $uid, '=') ->condition('m.status', MUAMBA_REQUESTED, '='); $result = $query->countQuery()->execute()->fetchField(); if ($result > 0) { return TRUE; } return FALSE; } /** * Get the requests sent or received. * * @param $uid * Requester user uid. * * @param $type * Transaction perspective (sent or received). * * @param $status * Current transaction status. * * @return * Array of existing transactions. */ function muamba_get_transactions($uid, $type = 'sent', $status = NULL) { $uid = (int) $uid; $query = db_select('muamba', 'm'); $query->fields('m', array('mid', 'nid', 'uid', 'owner', 'status', 'thread_id')); if ($type == 'sent') { $query->condition('m.uid', $uid, '='); } else { $query->condition('m.owner', $uid, '='); } if ($status != NULL) { $query->condition('m.status', $status, '='); } $rows = array(); $results = $query->execute()->fetchAll(); // Sanitize the data before handing it off to the theme layer. foreach ($results as $entry) { $rows[] = array_map('check_plain', (array) $entry); } return $rows; } /** * Get a single transaction. * * @param $id * Transaction id. * * @param $index * Index (mid or thread_id). * * @return * Transaction data. */ function muamba_get_transaction($id, $index = 'mid') { if ($index != 'mid' && $index != 'thread_id') { return; } $query = db_select('muamba', 'm'); $query->fields('m', array('mid', 'nid', 'uid', 'owner', 'status', 'thread_id')); $query->condition('m.'. $index, (int) $id, '='); $rows = array(); $results = $query->execute()->fetchAll(); // Sanitize the data before handing it off to the theme layer. foreach ($results as $entry) { $rows[] = array_map('check_plain', (array) $entry); } if (isset($rows[0])) { return $rows[0]; } } /** * Get current transactions for an item. Note that there might * be more than one active transaction for a given item if they * all are in the "requested" state. * * @param $data * Item nid or node object. * * @param $uid * Optional requester user id. * * @return * Data of the ongoing transactions. If $uid is specified, * then just one transaction is returned. */ function muamba_current_transactions($data, $uid = NULL) { if (is_object($data)) { $nid = (int) $data->nid; } else { $nid = (int) $data; } $query = db_select('muamba', 'm'); $query->fields('m', array('mid', 'nid', 'uid', 'owner', 'status', 'thread_id')); $query ->condition('m.nid', $nid, '=') ->condition('m.active', '1', '='); if ($uid != NULL) { $query->condition('m.uid', (int) $uid, '='); } $results = $query->execute()->fetchAll(); // Sanitize the data before handing it off to the theme layer. foreach ($results as $entry) { $rows[] = array_map('check_plain', (array) $entry); } if ($uid != NULL && isset($rows[0])) { return $rows[0]; } if (isset($rows)) { return $rows; } } /** * Check item availability. * * @param $data * Item nid or node object. * * @param $uid * Optional uid parameter to check if item is currently * available to the user. * * @return * TRUE if item is available, FALSE otherwise. */ function muamba_check_availability($data, $uid = NULL) { global $user; if (is_object($data)) { $nid = (int) $data->nid; } else { $nid = (int) $data; } $query = db_select('muamba', 'm'); $query->fields('m', array('mid', 'nid', 'uid', 'owner', 'status', 'thread_id')); $query ->condition('m.nid', $nid, '=') ->condition('m.active', '1', '=') ->condition('m.status', MUAMBA_REQUESTED, '!='); $current = $query->execute()->fetchAll(); if (empty($current)) { return TRUE; } elseif ($uid !== NULL && $current[0]->uid == $user->uid) { return TRUE; } return FALSE; } /** * Update a transaction status. * * @param $mid * Transaction id. * * @param $status * New status. */ function muamba_update_status($mid, $status) { $update = db_update('muamba') ->fields(array( 'status' => $status, 'changed' => REQUEST_TIME, )) ->condition('mid', $mid, '=') ->execute(); // Close transaction depending on the status. if (!in_array($status, muamba_ongoing())) { muamba_finish($mid); } } /** * Finish a transaction. * * @param $mid * Transaction id. */ function muamba_finish($mid) { $update = db_update('muamba') ->fields(array( 'active' => 0, )) ->condition('mid', $mid, '=') ->execute(); } /** * Return total transactions. * * @param $nid * Muamba node id. * * @param $type * Type of transactions. * * @return * Number of transactions. */ function muamba_total($nid, $type = 'transactions') { $nid = (int) $nid; $query = db_select('muamba', 'm'); $query->condition('m.nid', $nid, '='); if ($type != 'transactions') { if ($type == 'requested') { $query->condition('m.status', MUAMBA_REQUESTED, '='); } elseif ($type == 'rejected') { $query->condition('m.status', MUAMBA_REJECTED, '='); } elseif ($type == 'borrowed') { $query->condition( db_or() ->condition('m.status', MUAMBA_ACCEPTED, '=') ->condition('m.status', MUAMBA_RETURNED, '=') ->condition('m.status', MUAMBA_RECOVERED, '=') ->condition('m.status', MUAMBA_LOST, '=') ); } } return $query->countQuery()->execute()->fetchField(); }