<?php
// $Id: userpoints_service.module,v 1.1.4.1 2009/10/30 02:37:49 kbahey Exp $

/**
 * Implementation of hook_help().
 */

function userpoints_service_help($section) {
  switch ($section) {
    case 'admin/help#services_userpoints':
    case 'admin/modules#description':
      return t('<p>Provides Userpoints XML-RPC service. Requires services.module.</p>');
  }
}

/**
 * Implementation of hook_service().
 */
 
function userpoints_service_service() {
  return array(

    array(
      '#method'   => 'userpoints.get',
      '#callback' => 'userpoints_service_get',
      '#args'     => array(
        array(
          '#name' => 'uid',
          '#type' => 'int',
          '#description' => t('A valid Drupal User ID.'),
        ), 
        array(
          '#name'        => 'tid',
          '#type'        => 'int',
          '#optional'    => TRUE,
          '#description' => t('An optional Term ID for the category.'),
        ), 
      ),
      '#return'   => 'struct',
      '#help'     => t('Retrieves the number of points the user has.')),
    
    array(
      '#method'   => 'userpoints.points',
      '#callback' => 'userpoints_service_points',
      '#args'     => array(
        array(
          '#name'        => 'uid',
          '#type'        => 'int',
          '#description' => t('A valid Drupal User ID.'),
        ), 
        array(
          '#name'        => 'points',
          '#type'        => 'int',
          '#description' => t('Number of points to add/subtract.'),
        ), 
        array(
          '#name'        => 'tid',
          '#type'        => 'int',
          '#optional'    => TRUE,
          '#description' => t('An optional Term ID for the category.'),
        ), 
        array(
          '#name'        => 'event',
          '#type'        => 'string',
          '#optional'    => TRUE,
          '#description' => t('An optional event ID for this transaction.'),
        ), 
        array(
          '#name'        => 'description',
          '#type'        => 'string',
          '#optional'    => TRUE,
          '#description' => t('An optional description of this transaction.'),
        ), 
      ),
      '#return'   => 'struct',
      '#help'     => t('Adds/subtracts points to a user.')),
  );
}

/**
 * Get the number of points
 */
function userpoints_service_get($uid, $tid = NULL) {
  if (!$uid) {
    return services_error(t('User ID parameter is required.'));
  }

  $points = userpoints_get_current_points($uid, $tid);

  $return = new stdClass();
  $return->points = $points;

  return $return;
}

/**
 * Logout user
 */
function userpoints_service_points($uid, $points, $tid = NULL, $event = 'userpoints service', $description = NULL) {
  if (!$uid) {
    return services_error(t('User ID parameter is required.'));
  }

  if (!$points) {
    return services_error(t('Points parameter must be a negative or positive number.'));
  }

  $params = array (
    'uid'         => $uid,
    'points'      => $points,
    'tid'         => $tid,
    'event'       => $event,
    'description' => $description,
    'display'     => FALSE,
    'moderate'    => FALSE,
  );

  $result = userpoints_userpointsapi($params);

  $return = new stdClass();

  if (!$result['status']) {
    $return->reason = $result['reason'];
    $return->status = FALSE;
  }
  else {
    $return->status = TRUE;
  }

  return $return;
}
