/**
* Get a single transaction.
*
- * @param $data
- * Transaction id or node object.
+ * @param $mid
+ * Transaction id.
*
* @return
* Transaction data.
- *
- * @todo
- * When a node is provided, duplicate rows might occur.
*/
-function muamba_get_transaction($data) {
+function muamba_get_transaction($mid) {
$query = db_select('muamba', 'm');
$query->fields('m', array('mid', 'nid', 'uid', 'owner', 'status', 'thread_id'));
-
- if (is_object($data)) {
- $query->condition('m.nid', $data->nid, '=');
- }
- else {
- $query->condition('m.mid', (int) $data, '=');
- }
+ $query->condition('m.mid', (int) $mid, '=');
$rows = array();
$results = $query->execute()->fetchAll();
}
}
-/**
- * Check item availability.
- *
- * @param $nid
- * Item nid.
- *
- * @param $uid
- * Requester user nid.
- *
- * @return
- * TRUE if user already requested an item, FALSE otherwise.
- *
- * @todo
- */
-function muamba_check_availability($nid, $uid = NULL) {
-}
-
/**
* Get current transaction for an item.
*
- * @param $nid
- * Item nid.
+ * @param $data
+ * Item nid or node object.
*
* @return
* Transaction nid there's an ongoing transaction.
- *
- * @todo
*/
-function muamba_current_transaction($nid) {
+function muamba_current_transaction($data) {
+ 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, '=');
- $query->condition(
- db_or()
- ->condition('m.status', MUAMBA_REQUESTED, '=')
- ->condition('m.status', MUAMBA_ACCEPTED, '=')
- ->condition('m.status', MUAMBA_RETURNED, '=')
- ->condition('m.status', MUAMBA_LOST, '=')
- );
+ $query
+ ->condition('m.nid', $nid, '=')
+ ->condition('m.status', array(muamba_ongoing()), 'IN');
$results = $query->execute()->fetchAll();
- return $results;
+ // 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];
+ }
}
/**
- * Define which status belongs to an ongoing transaction.
+ * Check item availability.
+ *
+ * @param $data
+ * Item nid or node object.
+ *
+ * @return
+ * TRUE if user already requested an item, FALSE otherwise.
*/
-function muamba_ongoing() {
- return array(
- MUAMBA_REQUESTED,
- MUAMBA_ACCEPTED,
- MUAMBA_RETURNED,
- MUAMBA_LOST,
- );
+function muamba_check_availability($data) {
+ if (is_object($data)) {
+ $nid = (int) $data->nid;
+ }
+ else {
+ $nid = (int) $data;
+ }
+
+ $current = muamba_current_transaction($nid);
+
+ if (empty($current)) {
+ return TRUE;
+ }
+
+ return FALSE;
}
define('MUAMBA_LOST', 6);
// Load requirements.
+include_once('muamba.business.inc');
include_once('muamba.misc.inc');
include_once('muamba.db.inc');
/**
* Implements hook_node_view()
- *
- * @todo
- * Use muamba_check_availability() before muamba_get_transaction()
*/
function muamba_node_view($node, $view_mode, $langcode) {
global $user;
}
if ($view_mode == 'full') {
- $transaction = muamba_get_transaction($node);
+ $transaction = muamba_current_transaction($node);
$node->content['muamba'] = array(
'#markup' => theme('muamba_widget', array('nid' => $node->nid, 'transaction' => $transaction)),
'#weight' => 100,