<?php
// $Id: user_badges_products.module,v 1.1.2.4 2009/08/07 16:44:39 likeless Exp $

/**
 * @file
 * @brief User Badges Product module file
 * 
 * This file contains all the functions used by the module.
 *
 * @author Jeff Robbins (jjeff), http://drupal.org/user/17190
 * @author Chad Phillips (hunmonk), http://drupal.org/user/22079
 * @author Heine Deelstra (Heine), http://drupal.org/user/17943
 * @author Nuno Veloso (nunoveloso18), http://drupal.org/user/80656
 * @author Richard Skinner (Likeless), http://drupal.org/user/310635
 *
 * @warning For more information on licensing, read the LICENCE.txt file.
 *
 */


/**
 * Implementation of hook_help().
 */
function user_badges_products_help($path, $arg) {
  switch ($path) {
    case 'admin/user/user_badges/products':
      return t("For each ecommerce product listed below, select the badge that will be assigned to users upon payment completion.");
  }
}


/**
 * Implementation of hook_menu().
 */
function user_badges_products_menu() {
  $items['admin/user/user_badges/products'] = array(
    'title' => 'Products',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('user_badges_products_form'),
    'access arguments' => array('manage badges'),
    'weight' => 8,
    'type' => MENU_LOCAL_TASK,
  );
  return $items;
}

function user_badges_products_form($form_state) {
  $products = user_badges_products_get_product_list();
  $badges = user_badges_products_get_products();
  $selects = array('' => 'inactive') + user_badges_get_badges('select');
  $form['products'] = array('#tree' => TRUE);
  foreach ($products as $key => $val) {
      $form['products'][$key] = array(
        '#type' => 'select',
        '#title' => $val->title,
        '#default_value' => $badges[$key],
        '#options' => $selects,
        '#description' => check_plain($val->sku),
      );
  }
  $form[] = array(
    '#type' => 'submit',
    '#value' => 'Save',
  );

  return $form;
}

function user_badges_products_form_submit($form, &$form_state) {
  $form_values = $form_state['values'];
  user_badges_products_save_products($form_values['products']);
}

function user_badges_products_save_products($edit) {
  if (is_array($edit)) {
    $success = TRUE;
    db_query('DELETE FROM {user_badges_product}');
    foreach ($edit as $nid => $bid) {
      if ($bid) {
        $success = $success && db_query('INSERT INTO {user_badges_product} (nid, bid) VALUES (%d, %d)', $nid, $bid);
      }
    }
    if ($success) {
      drupal_set_message(t('Products saved.'));
    }
    else {
      drupal_set_message(t('There was a problem saving product information to the database'));
    }
  }
}

function user_badges_products_ecommerceapi($t, $op) {
  switch ($op) {
    case 'on payment completion':
      $productbadges = user_badges_products_get_products();
      foreach ($t['items'] as $item) {
        if (array_key_exists($item->nid, $productbadges)) {
          // no duplicates please...
          db_query("DELETE FROM {user_badges_user} WHERE uid=%d AND bid=%d", $t['uid'], $productbadges[$item->nid]);
          db_query("INSERT INTO {user_badges_user} (uid, bid, type) VALUES (%d, %d, 'product')", $t['uid'], $productbadges[$item->nid]);
        }
      }
  }
}

function user_badges_products_get_sku($nid) {
  return db_result(db_query('SELECT sku FROM {ec_product} WHERE nid = %d', $nid));
}

/**
  * Get list of all ecommerce products
  */

function user_badges_products_get_product_list() {
  $products = array();
  $sql = db_query('SELECT p.*, n.title FROM {ec_product} p INNER JOIN {node} n ON p.nid = n.nid ORDER BY sku');
  while ($row = db_fetch_object($sql)) {
    $products[$row->nid] = $row;
  }
  return $products;
}

/**
  * Get list of products that have badges
  * keys are node ids (nid)
  * values are badge ids (bid)
  */
function user_badges_products_get_products() {
  $products = array();
  $sql = db_query('SELECT * FROM {user_badges_product}');
  while ($row = db_fetch_object($sql)) {
    $products[$row->nid] = $row->bid;
  }
  return $products;
}
