View source
<?php
define('USERPOINTS_TRANS_UCPOINTS', 'userpoints_trans_ucpoints');
define('USERPOINTS_TRANS_LCPOINTS', 'userpoints_trans_lcpoints');
define('USERPOINTS_TRANS_UCPOINT', 'userpoints_trans_ucpoint');
define('USERPOINTS_TRANS_LCPOINT', 'userpoints_trans_lcpoint');
define('USERPOINTS_TRANS_UNCAT', 'userpoints_trans_uncat');
define('USERPOINTS_STATUS', 'userpoints_status');
define('USERPOINTS_POINTS_MODERATION', 'userpoints_points_moderation');
define('USERPOINTS_TXN_STATUS_APPROVED', 0);
define('USERPOINTS_TXN_STATUS_PENDING', 1);
define('USERPOINTS_TXN_STATUS_DECLINED', 2);
define('USERPOINTS_EXPIRY_DESCRIPTION', 'userpoints_expiry_description');
define('USERPOINTS_EXPIREON_DATE', 'userpoints_expireon_date');
define('USERPOINTS_EXPIREAFTER_DATE', 'userpoints_expireafter_date');
define('USERPOINTS_DISPLAY_MESSAGE', 'userpoints_display_message');
define('USERPOINTS_REPORT_USERCOUNT', 'userpoints_report_usercount');
define('USERPOINTS_REPORT_LIMIT', 'userpoints_report_limit');
define('USERPOINTS_REPORT_DISPLAYZERO', 'userpoints_report_displayzero');
define('USERPOINTS_CATEGORY_NAME', 'Userpoints');
define('USERPOINTS_CATEGORY_DEFAULT_VID', 'userpoints_category_default_vid');
define('USERPOINTS_CATEGORY_DEFAULT_TID', 'userpoints_category_default_tid');
define('USERPOINTS_CATEGORY_PROFILE_DISPLAY_TID', 'userpoints_category_profile_display_tid');
define('USERPOINTS_TRANSACTION_TIMESTAMP', 'userpoints_transaction_timestamp');
function userpoints_translation() {
static $trans;
if (!isset($trans)) {
$trans = array(
'!Points' => check_plain(variable_get(USERPOINTS_TRANS_UCPOINTS, 'Points')),
'!points' => check_plain(variable_get(USERPOINTS_TRANS_LCPOINTS, 'points')),
'!Point' => check_plain(variable_get(USERPOINTS_TRANS_UCPOINT, 'Point')),
'!point' => check_plain(variable_get(USERPOINTS_TRANS_LCPOINT, 'point')),
'!Uncategorized' => check_plain(variable_get(USERPOINTS_TRANS_UNCAT, 'General')),
);
}
return $trans;
}
function userpoints_txn_status() {
static $stati;
if (empty($stati)) {
$stati = array(
USERPOINTS_TXN_STATUS_APPROVED => t('Approved'),
USERPOINTS_TXN_STATUS_PENDING => t('Pending'),
USERPOINTS_TXN_STATUS_DECLINED => t('Declined'),
);
}
return $stati;
}
function userpoints_help($path, $arg) {
switch ($path) {
case 'admin/settings/userpoints':
return t('Configure userpoints moderation and branding translation');
case 'admin/help#userpoints':
return t('Users earn !points as they post nodes, comments, and vote on nodes', userpoints_translation());
}
}
function userpoints_admin_access($type = 'list') {
if (user_access('administer userpoints')) {
return TRUE;
}
switch ($type) {
case 'list':
return user_access('add userpoints') || user_access('edit userpoints') || user_access('moderate userpoints');
break;
case 'add':
return user_access('add userpoints');
break;
case 'edit':
return user_access('edit userpoints');
break;
case 'moderate':
return user_access('moderate userpoints');
break;
case 'administer':
break;
}
return FALSE;
}
function userpoints_menu() {
$items = array();
$items['admin/config/people/userpoints'] = array(
'title' => '!Points',
'title arguments' => userpoints_translation(),
'description' => strtr('Manage !points', userpoints_translation()),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'userpoints_admin_points',
),
'access callback' => 'userpoints_admin_access',
'access arguments' => array(
'list',
),
'file' => 'userpoints.admin.inc',
);
$items['admin/config/people/userpoints/list'] = array(
'title' => 'Totals',
'file' => 'userpoints.admin.inc',
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -2,
);
$items['admin/config/people/userpoints/transaction'] = array(
'title' => 'Transactions',
'title arguments' => userpoints_translation(),
'description' => 'List transactions',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'userpoints_admin_transactions',
FALSE,
),
'access callback' => 'userpoints_admin_access',
'access arguments' => array(
'edit',
),
'file' => 'userpoints.admin.inc',
'type' => MENU_LOCAL_TASK,
'weight' => 0,
);
$items['admin/config/people/userpoints/moderate'] = array(
'title' => 'Moderation',
'title arguments' => userpoints_translation(),
'description' => strtr('Review !points in moderation', userpoints_translation()),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'userpoints_admin_transactions',
TRUE,
),
'access callback' => 'userpoints_admin_access',
'access arguments' => array(
'moderate',
),
'file' => 'userpoints.admin.inc',
'type' => MENU_LOCAL_TASK,
'weight' => 2,
);
$items['admin/config/people/userpoints/add'] = array(
'title' => 'Add !points transaction',
'title arguments' => userpoints_translation(),
'description' => 'Admin add/delete userpoints',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'userpoints_admin_txn',
4,
),
'access callback' => 'userpoints_admin_access',
'access arguments' => array(
'add',
),
'file' => 'userpoints.admin.inc',
'type' => MENU_LOCAL_ACTION,
'weight' => 0,
);
$items['admin/config/people/userpoints/settings'] = array(
'title' => '!Points settings',
'description' => strtr('Settings for !points', userpoints_translation()),
'title arguments' => userpoints_translation(),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'userpoints_admin_settings',
),
'access callback' => 'userpoints_admin_access',
'access arguments' => array(
'administer',
),
'file' => 'userpoints.admin.inc',
'type' => MENU_LOCAL_TASK,
'weight' => 10,
);
$items['userpoints'] = array(
'title' => 'Users by !points',
'title arguments' => userpoints_translation(),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'userpoints_list_users',
),
'access arguments' => array(
'view userpoints',
),
'file' => 'userpoints.pages.inc',
'type' => MENU_NORMAL_ITEM,
);
$items['userpoints/operation-autocomplete'] = array(
'title' => 'Operation autocomplete',
'page callback' => 'userpoints_operation_autocomplete',
'access callback' => 'userpoints_admin_access',
'access arguments' => array(
'add',
),
'file' => 'userpoints.admin.inc',
'type' => MENU_CALLBACK,
);
$items['myuserpoints'] = array(
'title' => 'My !points',
'title arguments' => userpoints_translation(),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'userpoints_list_transactions',
),
'access callback' => 'userpoints_access_my_points',
'file' => 'userpoints.pages.inc',
'type' => MENU_NORMAL_ITEM,
'menu_name' => 'user-menu',
);
$items['myuserpoints/%'] = array(
'title' => 'My !points',
'title arguments' => userpoints_translation(),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'userpoints_list_transactions',
NULL,
1,
),
'access callback' => 'userpoints_access_my_points',
'file' => 'userpoints.pages.inc',
'type' => MENU_NORMAL_ITEM,
'menu_name' => 'user-menu',
);
$items['user/%user/points'] = array(
'title' => '!Points',
'title arguments' => userpoints_translation(),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'userpoints_list_transactions',
1,
),
'access callback' => 'userpoints_access_my_points',
'access arguments' => array(
1,
),
'file' => 'userpoints.pages.inc',
'type' => MENU_LOCAL_TASK,
'weight' => 1,
);
$local_task_prefixes = array(
'admin/config/people/userpoints/transaction',
'myuserpoints/transaction',
'user/%user/points',
);
foreach ($local_task_prefixes as $local_task_prefix) {
$pos = count(explode('/', $local_task_prefix));
$items[$local_task_prefix . '/list'] = array(
'title' => 'List',
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -15,
);
$items[$local_task_prefix . '/%userpoints_transaction/view'] = array(
'title' => 'View',
'page callback' => 'userpoints_view_transaction',
'page arguments' => array(
$pos,
),
'access callback' => 'userpoints_access_view_transaction',
'access arguments' => array(
$pos,
),
'file' => 'userpoints.pages.inc',
'type' => MENU_LOCAL_TASK,
'weight' => -10,
);
$items[$local_task_prefix . '/%userpoints_transaction/edit'] = array(
'title' => 'Edit',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'userpoints_admin_txn',
$pos + 1,
$pos,
),
'access callback' => 'userpoints_admin_access',
'access arguments' => array(
'edit',
),
'file' => 'userpoints.admin.inc',
'type' => MENU_LOCAL_TASK,
'weight' => -5,
);
$items[$local_task_prefix . '/%userpoints_transaction/approve'] = array(
'title' => 'Approve',
'title arguments' => userpoints_translation(),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'userpoints_confirm_approve',
$pos + 1,
$pos,
),
'access callback' => 'userpoints_admin_access_transaction_pending',
'access arguments' => array(
$pos,
),
'file' => 'userpoints.admin.inc',
'type' => MENU_LOCAL_TASK,
);
$items['user/%user/points/%userpoints_transaction/decline'] = array(
'title' => 'Decline',
'title arguments' => userpoints_translation(),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'userpoints_confirm_approve',
$pos + 1,
$pos,
),
'access callback' => 'userpoints_admin_access_transaction_pending',
'access arguments' => array(
$pos,
),
'file' => 'userpoints.admin.inc',
'type' => MENU_LOCAL_TASK,
);
}
return $items;
}
function userpoints_menu_local_tasks_alter(&$data, $router_item, $root_path) {
if (strpos($root_path, 'admin/config/people/userpoints/') !== FALSE) {
$blacklist = array(
'settings',
'approve',
'decline',
);
foreach ($blacklist as $blacklisted_path) {
if (strpos($root_path, $blacklisted_path) !== FALSE) {
return;
}
}
$item = menu_get_item('admin/config/people/userpoints/add');
if (arg(4) == 'transaction' && (arg(6) == 'view' || arg(6) == 'edit')) {
$transaction = userpoints_transaction_load(arg(5));
$item['href'] .= '/' . $transaction->uid;
}
if ($item['access']) {
$data['actions']['output'][] = array(
'#theme' => 'menu_local_action',
'#link' => $item,
);
}
}
}
function userpoints_admin_access_transaction_pending($transaction) {
return $transaction->status == USERPOINTS_TXN_STATUS_PENDING && userpoints_admin_access('moderate');
}
function userpoints_access_my_points($account = NULL) {
global $user;
if ($account && $user->uid != $account->uid) {
return userpoints_admin_access('edit');
}
return user_access('view userpoints') && user_is_logged_in() || user_access('view own userpoints');
}
function userpoints_access_view_transaction($transaction) {
if (empty($transaction->user)) {
$account = user_load($transaction->uid);
}
else {
$account = $transaction->user;
}
return userpoints_access_my_points($account);
}
function userpoints_permission() {
return array(
'view own userpoints' => array(
'title' => t('View own !points', userpoints_translation()),
'description' => t('Allows to view own !points, including own !point transactions.', userpoints_translation()),
),
'view userpoints' => array(
'title' => t('View all !points', userpoints_translation()),
'description' => t('Allows to view the !points of other users, but not the transactions.', userpoints_translation()),
),
'add userpoints' => array(
'title' => t('Add new !point transactions', userpoints_translation()),
'description' => t('Allows to create new !point transactions.', userpoints_translation()),
),
'edit userpoints' => array(
'title' => t('Edit !point transactions', userpoints_translation()),
'description' => t('Allows to modify existing !point transactions, including the ability to view transaction history for all users.', userpoints_translation()),
),
'moderate userpoints' => array(
'title' => t('Moderate !point transactions', userpoints_translation()),
'description' => t('Allows to approve or disapprove !point transactions.', userpoints_translation()),
),
'administer userpoints' => array(
'title' => t('Administer Userpoints'),
'description' => t('Allows to configure the settings and includes full read and write access of all !point transactions.', userpoints_translation()),
),
);
}
function userpoints_theme() {
return array(
'userpoints_view_category' => array(
'render element' => 'element',
'file' => 'userpoints.theme.inc',
),
'userpoints_view_item' => array(
'render element' => 'element',
'file' => 'userpoints.theme.inc',
),
);
}
function userpoints_tokens($type, $tokens, array $data = array(), array $options = array()) {
$url_options = array(
'absolute' => TRUE,
);
if (isset($options['language'])) {
$url_options['language'] = $options['language'];
$language_code = $options['language']->language;
}
else {
$language_code = NULL;
}
$sanitize = !empty($options['sanitize']);
$replacements = array();
if ($type == 'user' && !empty($data['user'])) {
$user = $data['user'];
foreach ($tokens as $name => $original) {
switch ($name) {
case 'points':
$replacements[$original] = userpoints_get_current_points($user->uid);
break;
case 'maxpoints':
$replacements[$original] = userpoints_get_max_points($user->uid);
default:
break;
}
}
if ($points_tokens = token_find_with_prefix($tokens, 'points')) {
$replacements += token_generate('userpoints', $points_tokens, $data, $options);
}
if ($points_tokens = token_find_with_prefix($tokens, 'maxpoints')) {
$replacements += token_generate('maxuserpoints', $points_tokens, $data, $options);
}
}
if ($type == 'userpoints' && !empty($data['user'])) {
foreach ($tokens as $name => $original) {
$tid = NULL;
if ($name == 'all') {
$tid = 'all';
}
elseif (strpos($name, 'category-') === 0) {
list(, $tid) = explode('-', $name);
}
if ($tid) {
$replacements[$original] = userpoints_get_current_points($data['user']->uid, $tid);
}
}
}
if ($type == 'maxuserpoints' && !empty($data['user'])) {
$uid = is_object($data['user']->uid) ? $data['user']
->getIdentifier() : $data['user']->uid;
foreach ($tokens as $name => $original) {
$tid = NULL;
if ($name == 'all') {
$tid = 'all';
}
elseif (strpos($name, 'category-') === 0) {
list(, $tid) = explode('-', $name);
}
if ($tid) {
$replacements[$original] = userpoints_get_max_points($uid, $tid);
}
}
}
if ($type == 'userpoints_transaction' && !empty($data['userpoints_transaction'])) {
$txn = (object) $data['userpoints_transaction'];
foreach ($tokens as $name => $original) {
switch ($name) {
case 'points':
$replacements[$original] = $txn->{$name};
break;
case 'points-abs':
$replacements[$original] = abs($txn->points);
break;
case 'display':
$replacements[$original] = !empty($txn->{$name}) ? t('Yes') : t('No');
break;
case 'status':
$stati = userpoints_txn_status();
$replacements[$original] = $stati[$txn->{$name}];
break;
case 'description':
case 'reference':
case 'operation':
$replacements[$original] = $sanitize ? filter_xss($txn->{$name}) : $txn->{$name};
break;
case 'reason':
$replacements[$original] = userpoints_create_description($txn);
break;
case 'entity':
$entity = !empty($txn->entity_type) && !empty($txn->entity_id) ? entity_load($txn->entity_type, array(
$txn->entity_id,
)) : array();
$entity = reset($entity);
$label = $entity ? entity_label($txn->entity_type, $entity) : '';
$replacements[$original] = $sanitize ? filter_xss($label) : $label;
break;
case 'user':
$user = user_load($txn->uid);
$replacements[$original] = $sanitize ? filter_xss(format_username($user)) : format_username($user);
break;
case 'time-stamp':
$replacements[$original] = format_date($txn->time_stamp, 'medium', '', NULL, $language_code);
break;
case 'expirydate':
if ($txn->{$name} > 0) {
$replacements[$original] = format_date($txn->{$name}, 'medium', '', NULL, $language_code);
}
else {
$replacements[$original] = t('Never');
}
break;
case 'tid':
if (module_exists('taxonomy') && $txn->tid > 0) {
$term = taxonomy_term_load($txn->tid);
$term_name = $term ? $term->name : '';
}
else {
$term_name = t('!Uncategorized', userpoints_translation());
}
$replacements[$original] = $sanitize ? filter_xss($term_name) : $term_name;
break;
}
}
if ($user_tokens = token_find_with_prefix($tokens, 'user')) {
$replacements += token_generate('user', $user_tokens, array(
'user' => user_load($txn->uid),
), $options);
}
if (module_exists('taxonomy') && ($term_tokens = token_find_with_prefix($tokens, 'tid'))) {
if ($txn->tid > 0) {
$replacements += token_generate('term', $term_tokens, array(
'term' => taxonomy_term_load($txn->tid),
), $options);
}
else {
foreach ($term_tokens as $name => $original) {
switch ($name) {
case 'tid':
$replacements[$original] = '0';
break;
case 'name':
$term_name = t('!Uncategorized', userpoints_translation());
$replacements[$original] = $sanitize ? filter_xss($term_name) : $term_name;
break;
}
}
}
}
if ($timestamp_tokens = token_find_with_prefix($tokens, 'time-stamp')) {
$replacements += token_generate('date', $timestamp_tokens, array(
'date' => $txn->time_stamp,
), $options);
}
if ($expiry_tokens = token_find_with_prefix($tokens, 'expirydate')) {
if ($txn->expirydate > 0) {
$replacements += token_generate('date', $expiry_tokens, array(
'date' => $txn->expirydate,
), $options);
}
else {
$replacements += array_fill_keys($expiry_tokens, t('Never'));
}
}
}
return $replacements;
}
function userpoints_token_info() {
$types = array(
'userpoints_transaction' => array(
'name' => t('!Points transaction', userpoints_translation()),
'description' => t('A single transaction that grants or removes a certain amount of points from a user.'),
'needs-data' => 'userpoints_transaction',
),
'userpoints' => array(
'name' => t('!Points', userpoints_translation()),
'description' => t('Amount of !points a user has.', userpoints_translation()),
'needs-data' => 'user',
),
'maxuserpoints' => array(
'name' => t('Maximal !points', userpoints_translation()),
'description' => t('Maximal amount of !points a user had at any time.', userpoints_translation()),
'needs-data' => 'user',
),
);
$tokens = array();
$tokens['user']['points'] = array(
'name' => t('!Points', userpoints_translation()),
'description' => t('The amount of !points this user has. If there are multiple categories, only the default category is taken into account.', userpoints_translation()),
'type' => 'userpoints',
);
$tokens['user']['maxpoints'] = array(
'name' => t('Maximal !points', userpoints_translation()),
'description' => t('The highest amount of !points a user had at any given point. If there are multiple categories, only the default category is taken into account.', userpoints_translation()),
'type' => 'userpoints',
);
$categories = userpoints_get_categories();
if (count($categories) > 1) {
foreach ($categories as $tid => $category) {
$tokens['userpoints']['category-' . $tid] = array(
'name' => t('!Points in category %category', array_merge(array(
'%category' => $category,
), userpoints_translation())),
'description' => t('The amount of !points this user has in that category.', userpoints_translation()),
);
$tokens['maxuserpoints']['category-' . $tid] = array(
'name' => t('Maximal !points in category %category', array_merge(array(
'%category' => $category,
), userpoints_translation())),
'description' => t('The highest amount of !points a user had at any given point in that category.', userpoints_translation()),
);
}
}
$tokens['userpoints']['all'] = array(
'name' => t('Total !points', userpoints_translation()),
'description' => t('Total amount of !points over all categories.', userpoints_translation()),
);
$tokens['maxuserpoints']['all'] = array(
'name' => t('Total maximum !points', userpoints_translation()),
'description' => t('Total amount of maximal !points over all categories.', userpoints_translation()),
);
foreach (_userpoints_userpoints_transaction_properties() as $property => $info) {
$tokens['userpoints_transaction'][$property] = array(
'name' => $info['label'],
'description' => $info['description'],
);
if (in_array($info['type'], array(
'date',
'user',
))) {
$tokens['userpoints_transaction'][$property]['type'] = $info['type'];
}
if ($property == 'tid') {
$tokens['userpoints_transaction'][$property]['type'] = 'term';
}
}
$tokens['userpoints_transaction']['points-abs'] = array(
'name' => t('!Points absolute', userpoints_translation()),
'description' => t('The absolute (positive) amount of !points of this transaction.', userpoints_translation()),
);
return array(
'types' => $types,
'tokens' => $tokens,
);
}
function userpoints_get_current_points($uid = NULL, $tid = NULL) {
$points = drupal_static(__FUNCTION__, array());
if (!$uid) {
global $user;
$uid = $user->uid;
}
if (!isset($tid)) {
$tid = userpoints_get_default_tid();
}
if (!isset($points[$uid][$tid])) {
if ($tid === 'all') {
$points[$uid][$tid] = (int) db_query('SELECT points FROM {userpoints_total} WHERE uid = :uid', array(
':uid' => $uid,
))
->fetchField();
}
else {
$points[$uid][$tid] = (int) db_query('SELECT points FROM {userpoints} WHERE uid = :uid AND tid = :tid', array(
':uid' => $uid,
':tid' => $tid,
))
->fetchField();
}
}
return $points[$uid][$tid];
}
function userpoints_get_max_points($uid = NULL, $tid = NULL) {
$max = drupal_static(__FUNCTION__, array());
if (!$uid) {
global $user;
$uid = $user->uid;
}
if (!isset($tid)) {
$tid = userpoints_get_default_tid();
}
if (!isset($max[$uid][$tid])) {
if ($tid === 'all') {
$max[$uid][$tid] = db_query('SELECT max_points FROM {userpoints_total} WHERE uid = :uid', array(
':uid' => $uid,
))
->fetchField();
}
else {
$max[$uid][$tid] = db_query('SELECT max_points FROM {userpoints} WHERE uid = :uid AND tid = :tid', array(
':uid' => $uid,
':tid' => $tid,
))
->fetchField();
}
}
return $max[$uid][$tid];
}
function userpoints_userpointsapi($params) {
global $user;
if (!isset($params['txn_id'])) {
if (is_int($params)) {
$params = array(
'points' => $params,
);
}
if (!is_array($params)) {
return array(
'status' => FALSE,
'reason' => 'Parameters did not properly form as an array,
this is an internal module error.
',
);
}
if (!isset($params['uid'])) {
$params['uid'] = $user->uid;
}
$params_null_check = array(
'operation',
'description',
'reference',
'display',
'entity_id',
'entity_type',
);
foreach ($params_null_check as $param_null_check) {
if (!isset($params[$param_null_check])) {
$params[$param_null_check] = NULL;
}
}
if (!isset($params['moderate'])) {
$params['status'] = variable_get(USERPOINTS_POINTS_MODERATION, USERPOINTS_TXN_STATUS_APPROVED);
}
else {
$params['status'] = $params['moderate'] ? USERPOINTS_TXN_STATUS_PENDING : USERPOINTS_TXN_STATUS_APPROVED;
}
if (!isset($params['tid']) || !is_numeric($params['tid'])) {
$params['tid'] = userpoints_get_default_tid();
}
if (empty($params['uid']) || empty($params['points'])) {
return array(
'status' => FALSE,
'reason' => 'uid or points not given. Anonymous users do not get points and there must be points to process.',
);
}
}
else {
$params['uid'] = db_query('SELECT uid from {userpoints_txn} WHERE txn_id = :txn_id', array(
':txn_id' => $params['txn_id'],
))
->fetchField();
}
$account = user_load($params['uid']);
if (!$account) {
return array(
'status' => FALSE,
'reason' => 'invalid uid or user account could not be loaded',
);
}
$rc = userpoints_invoke_all('points before', $params);
foreach ($rc as $key => $value) {
if ($value == FALSE) {
return array(
'status' => FALSE,
'reason' => t('@key returned FALSE from the hook_userpoints points before call', array(
'@key' => $key,
)),
);
}
}
$ret = _userpoints_transaction($params);
drupal_static_reset('userpoints_get_current_points');
if ($ret == FALSE) {
return array(
'status' => FALSE,
'reason' => 'transaction failed in _userpoints_transaction, this is an internal module error',
);
}
if (!empty($params['message'])) {
$message = $params['message'];
}
elseif (!empty($params['display']) || !isset($params['display']) && variable_get(USERPOINTS_DISPLAY_MESSAGE, 1)) {
$categories = userpoints_get_categories();
$arguments = array_merge(userpoints_translation(), array(
'!username' => theme('username', array(
'account' => $account,
)),
'%total' => userpoints_get_current_points($params['uid'], $params['tid']),
'%category' => isset($categories[$params['tid']]) ? $categories[$params['tid']] : $categories[0],
));
$view_own_points = user_access('view own userpoints') || user_access('view userpoints') || user_access('administer userpoints');
$view_all_points = user_access('view userpoints') || user_access('administer userpoints');
if ($params['status'] == USERPOINTS_TXN_STATUS_DECLINED) {
if ($account->uid == $user->uid && $view_own_points) {
$message = format_plural($params['points'], 'You did not receive approval for @count !point in the %category category.', 'You did not receive approval for @count !points in the %category category.', $arguments);
}
elseif ($view_all_points) {
$message = format_plural($params['points'], '!username did not receive approval for @count !point in the %category category.', '!username did not receive approval for @count !points in the %category category.', $arguments);
}
}
elseif (isset($params['points']) && $params['points'] < 0) {
if ($params['status'] == USERPOINTS_TXN_STATUS_PENDING) {
if ($account->uid == $user->uid && $view_own_points) {
$message = format_plural(abs($params['points']), 'You just had a !point deducted, pending administrator approval.', 'You just had @count !points deducted, pending administrator approval.', $arguments);
}
elseif ($view_all_points) {
$message = format_plural(abs($params['points']), '!username just had a !point deducted, pending administrator approval.', '!username just had @count !points deducted, pending administrator approval.', $arguments);
}
}
else {
if ($account->uid == $user->uid && $view_own_points) {
$message = format_plural(abs($params['points']), 'You just had a !point deducted and now have %total !points in the %category category.', 'You just had @count !points deducted and now have %total !points in the %category category.', $arguments);
}
elseif ($view_all_points) {
$message = format_plural(abs($params['points']), '!username just had a !point deducted and now has %total !points in the %category category.', '!username just had @count !points deducted and now has %total !points in the %category category.', $arguments);
}
}
}
elseif (!empty($params['points'])) {
if ($params['status'] == USERPOINTS_TXN_STATUS_PENDING) {
if ($account->uid == $user->uid && $view_own_points) {
$message = format_plural(abs($params['points']), 'You just earned a !point, pending administrator approval.', 'You just earned @count !points, pending administrator approval.', $arguments);
}
elseif ($view_all_points) {
$message = format_plural(abs($params['points']), '!username just earned a !point, pending administrator approval.', '!username just earned @count !points, pending administrator approval.', $arguments);
}
}
else {
if ($account->uid == $user->uid && $view_own_points) {
$message = format_plural(abs($params['points']), 'You just earned a !point and now have %total !points in the %category category.', 'You just earned @count !points and now have %total !points in the %category category.', $arguments);
}
elseif ($view_all_points) {
$message = format_plural(abs($params['points']), '!username just earned a !point and now has %total !points in the %category category.', '!username just earned @count !points and now has %total !points in the %category category.', $arguments);
}
}
}
if (isset($message)) {
drupal_set_message($message);
}
}
userpoints_invoke_all('points after', $params);
return array(
'status' => TRUE,
'transaction' => $params,
);
}
function _userpoints_transaction(&$params) {
if (!is_array($params)) {
return FALSE;
}
if (!isset($params['txn_id'])) {
if (!is_numeric($params['points'])) {
return FALSE;
}
if (!isset($params['uid'])) {
global $user;
$params['uid'] = $user->uid;
if (!$params['uid'] > 0) {
return FALSE;
}
}
if (isset($params['expirydate']) && !is_numeric($params['expirydate'])) {
return FALSE;
}
$params_null_check = array(
'operation',
'description',
'reference',
'expired',
'parent_txn_id',
'entity_id',
'entity_type',
);
foreach ($params_null_check as $param_null_check) {
if (!isset($params[$param_null_check])) {
$params[$param_null_check] = NULL;
}
}
if (!isset($params['tid']) || !is_numeric($params['tid'])) {
$params['tid'] = userpoints_get_default_tid();
}
elseif ($params['tid'] == 0) {
$params['tid'] = NULL;
}
if (!isset($params['expirydate'])) {
$params['expirydate'] = userpoints_get_default_expiry_date();
}
if (variable_get(USERPOINTS_TRANSACTION_TIMESTAMP, 1) || !isset($params['time_stamp']) || $params['time_stamp'] <= 0 || $params['time_stamp'] > REQUEST_TIME) {
$params['time_stamp'] = REQUEST_TIME;
}
}
$params['changed'] = REQUEST_TIME;
if (!empty($params['txn_id']) && $params['txn_id'] > 0) {
$txn = (array) userpoints_transaction_load($params['txn_id']);
if (!$txn) {
return FALSE;
}
$params += $txn;
$ret = drupal_write_record('userpoints_txn', $params, array(
'txn_id',
));
if ($ret != FALSE) {
_userpoints_update_cache($params, $txn);
}
}
else {
$ret = drupal_write_record('userpoints_txn', $params);
if ($ret != FALSE) {
_userpoints_update_cache($params);
}
}
return TRUE;
}
function _userpoints_update_cache($txn, $old_txn = NULL) {
$updates = array();
$totals = array();
if (!$old_txn) {
if ($txn['status'] == USERPOINTS_TXN_STATUS_APPROVED && $txn['expired'] != 1) {
$updates['points'] = $txn['points'] + userpoints_get_current_points($txn['uid'], $txn['tid']);
$totals['points'] = $txn['points'] + userpoints_get_current_points($txn['uid'], 'all');
}
}
else {
if ($txn['expired'] == 1 && $old_txn['expired'] == 1) {
return;
}
if ($old_txn['tid'] != $txn['tid']) {
$remove_points = userpoints_get_current_points($txn['uid'], $old_txn['tid']) - $old_txn['points'];
db_merge('userpoints')
->key(array(
'uid' => $txn['uid'],
'tid' => (int) $old_txn['tid'],
))
->fields(array(
'points' => $remove_points,
))
->execute();
$totals['points'] = userpoints_get_current_points($txn['uid'], 'all') - $old_txn['points'];
if ($txn['status'] == USERPOINTS_TXN_STATUS_APPROVED) {
$updates['points'] = userpoints_get_current_points($txn['uid'], $txn['tid']) + $txn['points'];
$totals['points'] += $txn['points'];
}
}
else {
if ($old_txn['status'] == USERPOINTS_TXN_STATUS_APPROVED && $txn['status'] != USERPOINTS_TXN_STATUS_APPROVED) {
$updates['points'] = userpoints_get_current_points($txn['uid'], $txn['tid']) - $old_txn['points'];
$totals['points'] = userpoints_get_current_points($txn['uid'], 'all') - $old_txn['points'];
}
else {
if ($txn['points'] != $old_txn['points'] && $old_txn['status'] == USERPOINTS_TXN_STATUS_APPROVED && $txn['status'] == USERPOINTS_TXN_STATUS_APPROVED) {
$updates['points'] = userpoints_get_current_points($txn['uid'], $txn['tid']) + ($txn['points'] - $old_txn['points']);
$totals['points'] = userpoints_get_current_points($txn['uid'], 'all') + ($txn['points'] - $old_txn['points']);
}
elseif ($old_txn['status'] != USERPOINTS_TXN_STATUS_APPROVED && $txn['status'] == USERPOINTS_TXN_STATUS_APPROVED) {
$updates['points'] = userpoints_get_current_points($txn['uid'], $txn['tid']) + $txn['points'];
$totals['points'] = userpoints_get_current_points($txn['uid'], 'all') + $txn['points'];
}
}
}
}
if (!empty($updates)) {
$max_points = userpoints_get_max_points($txn['uid'], $txn['tid']);
if ($updates['points'] > $max_points) {
$updates['max_points'] = $updates['points'];
}
$updates['last_update'] = REQUEST_TIME;
db_merge('userpoints')
->key(array(
'uid' => $txn['uid'],
'tid' => (int) $txn['tid'],
))
->fields($updates)
->execute();
}
if (!empty($totals)) {
$max_points_total = userpoints_get_max_points($txn['uid'], 'all');
if ($totals['points'] > $max_points_total) {
$totals['max_points'] = $totals['points'];
}
$totals['last_update'] = REQUEST_TIME;
db_merge('userpoints_total')
->key(array(
'uid' => $txn['uid'],
))
->fields($totals)
->execute();
}
}
function userpoints_get_default_expiry_date() {
$expirydate = userpoints_date_to_timestamp(variable_get(USERPOINTS_EXPIREON_DATE, 0));
if ($expirydate < REQUEST_TIME) {
$expirydate = variable_get(USERPOINTS_EXPIREAFTER_DATE, 0);
if ($expirydate) {
$expirydate = REQUEST_TIME + $expirydate;
}
}
return (int) $expirydate;
}
function _userpoints_user_exists($uid, $tid = NULL) {
if (is_numeric($tid)) {
return (int) db_query('SELECT COUNT(uid)
FROM {userpoints}
WHERE uid = :uid AND tid = :tid', array(
':uid' => $uid,
':tid' => $tid,
))
->fetchField();
}
else {
return (int) db_query('SELECT COUNT(uid)
FROM {userpoints}
WHERE uid = :uid', array(
':uid' => $uid,
))
->fetchField();
}
}
function userpoints_user_delete($account) {
db_delete('userpoints')
->condition('uid', $account->uid)
->execute();
db_delete('userpoints_txn')
->condition('uid', $account->uid)
->execute();
}
function userpoints_user_view($account, $view_mode) {
global $user;
if (user_access('view userpoints') || user_access('view own userpoints') && $user->uid == $account->uid) {
$points_list = userpoints_get_points_list($account);
if (!empty($details) || $points_list) {
$account->content['userpoints'] = array(
'title' => array(
'#markup' => '<h3>' . t('!Points', userpoints_translation()) . '</h3>',
),
'#weight' => 0,
);
if ($points_list) {
$account->content['userpoints'] += $points_list;
}
}
}
}
function userpoints_field_extra_fields() {
$extra['user']['user'] = array(
'display' => array(
'userpoints' => array(
'label' => t('!Points', userpoints_translation()),
'description' => t('!Points related information and actions.', userpoints_translation()),
'weight' => 0,
),
),
);
return $extra;
}
function userpoints_get_points_list($account = NULL) {
global $user;
if (empty($account)) {
$account = $user;
}
$output = array();
$categories = userpoints_get_categories();
$categories = array(
'uncategorized' => $categories[0],
) + $categories + array(
'all' => t('Total !points in all categories', userpoints_translation()),
);
unset($categories[0]);
$tids = array_filter(variable_get(USERPOINTS_CATEGORY_PROFILE_DISPLAY_TID, array_keys($categories)));
if (!empty($tids)) {
$points_list = array();
$total = NULL;
foreach ($tids as $tid) {
$points = userpoints_get_current_points($account->uid, $tid == 'uncategorized' ? 0 : $tid);
if ($tid == 'all') {
$total = t('Total (all categories): @points', userpoints_translation() + array(
'@points' => $points,
));
}
else {
$points_list[] = t('%category: @points', userpoints_translation() + array(
'@points' => $points,
'%category' => $categories[$tid],
));
}
}
$output['list'] = array(
'#theme' => 'item_list',
'#items' => $points_list,
'#attributes' => array(
'class' => array(
'userpoints-points',
),
),
);
if ($total) {
$output['total'] = array(
'#markup' => '<div class="userpoints-total">' . $total . '</div>',
);
}
}
$links = array();
if (userpoints_access_my_points($account)) {
$links['userpoints-view'] = array(
'title' => t('View !points transactions', userpoints_translation()),
'href' => $user->uid == $account->uid ? 'myuserpoints' : 'user/' . $account->uid . '/points',
);
}
if (userpoints_admin_access('add')) {
$links['userpoints-adjust'] = array(
'title' => t('Add or deduct !points', userpoints_translation()),
'href' => 'admin/config/people/userpoints/add/' . $account->uid,
);
}
$output['actions'] = array(
'#theme' => 'links__userpoints_actions',
'#links' => $links,
'#attributes' => array(
'class' => array(
'links',
'userpoints-links',
),
),
'#attached' => array(
'css' => array(
drupal_get_path('module', 'userpoints') . '/userpoints.css',
),
),
);
return $output;
}
function userpoints_filter_form($account = NULL, $values = array()) {
$categories = userpoints_get_categories($account);
$form = array();
if (count($categories) > 1) {
$categories = array(
'all' => t('Display all'),
) + $categories;
$form['tid'] = array(
'#type' => 'select',
'#title' => t('Filter by category'),
'#options' => $categories,
'#default_value' => isset($values['tid']) ? $values['tid'] : 'all',
'#ajax' => array(
'callback' => 'userpoints_filter_form_ajax_callback',
'wrapper' => 'userpoints_list_wrapper',
),
);
}
return $form;
}
function userpoints_filter_form_ajax_callback($form, $form_state) {
$commands = array();
$commands[] = ajax_command_replace('#userpoints_list_wrapper', drupal_render($form['list']));
$commands[] = ajax_command_html('h1#page-title, h1.page-title', drupal_get_title());
return array(
'#type' => 'ajax',
'#commands' => $commands,
);
}
function userpoints_filter_parse_input($form_state, $tid = NULL) {
$values = isset($form_state['values']) ? $form_state['values'] : array(
'tid' => NULL,
);
if (!isset($values['tid'])) {
if (isset($_GET['tid'])) {
$values['tid'] = $_GET['tid'];
}
elseif ($tid) {
$values['tid'] = $tid;
}
}
if (isset($values['tid'])) {
$_GET['tid'] = $values['tid'];
}
return $values;
}
function userpoints_filter_query(SelectQueryInterface $query, $values) {
if (isset($values['tid']) && $values['tid'] != 'all') {
$query
->condition('p.tid', (int) $values['tid']);
$categories = userpoints_get_categories();
return $categories[$values['tid']];
}
}
function userpoints_block_info() {
$blocks[-1]['info'] = t('User\'s !points', userpoints_translation());
$terms = userpoints_get_categories();
foreach ($terms as $key => $value) {
$blocks[$key]['info'] = t("Highest @term !points", userpoints_translation() + array(
'@term' => $value,
));
}
return $blocks;
}
function userpoints_block_view($delta) {
global $user;
if ($delta == -1 && (user_access('view userpoints') || user_access('view own userpoints'))) {
$title = t('My !points balance', userpoints_translation());
if ($user->uid) {
$content = userpoints_get_points_list();
}
else {
$content = t('!Points are visible to logged in users only', userpoints_translation());
}
}
elseif (user_access('view userpoints')) {
$title = t('Highest Users');
$query = db_select('userpoints', 'p')
->fields('p', array(
'uid',
'points',
))
->orderBy('p.points', 'DESC')
->range(0, variable_get('userpoints_block_up_records_' . $delta, 5));
if ($delta == 0) {
$query
->condition(db_or()
->condition('p.tid', 0)
->isNull('p.tid'));
}
else {
$query
->condition('p.tid', $delta);
}
$query
->join('users', 'u', 'u.uid = p.uid AND u.status = 1');
$rows = array();
foreach ($query
->execute() as $data) {
$rows[] = array(
array(
'data' => theme('username', array(
'account' => user_load($data->uid),
)),
),
array(
'data' => $data->points,
'align' => 'right',
),
);
}
$header = array(
t('User'),
t('!Points', userpoints_translation()),
);
$content = theme('table', array(
'header' => $header,
'rows' => $rows,
));
$content .= '<div class="more-link">' . l(t('more'), 'userpoints/' . $delta, array(
'attributes' => array(
'title' => t('All users by !points', userpoints_translation()),
),
)) . '</div>';
}
if (!empty($title) && !empty($content)) {
$block['subject'] = $title;
$block['content'] = $content;
return $block;
}
}
function userpoints_block_configure($delta) {
if ($delta > 1) {
$form['up_records'] = array(
'#type' => 'select',
'#title' => t('Number of users to display'),
'#default_value' => variable_get('userpoints_block_up_records_' . $delta, 10),
'#options' => array(
1 => 1,
5 => 5,
10 => 10,
15 => 15,
20 => 20,
30 => 30,
40 => 40,
50 => 50,
60 => 60,
70 => 70,
80 => 80,
90 => 90,
100 => 100,
200 => 200,
),
'#description' => t('Limit the number of users displayed to this value'),
);
return $form;
}
}
function userpoints_block_save($delta, $edit) {
variable_set('userpoints_block_up_records_' . $delta, isset($edit['up_records']) ? $edit['up_records'] : 10);
}
function userpoints_expiry_dates() {
return array(
NULL => 'Never',
3600 => 'One hour',
86400 => 'One Day',
604800 => 'One Week',
1209600 => 'Two Weeks',
2419200 => 'Four Weeks',
31536000 => '365 Days',
);
}
function userpoints_date_to_timestamp($date) {
if ($date) {
return mktime(0, 0, 0, $date['month'], $date['day'], $date['year']);
}
}
function userpoints_expire_transactions() {
$sql = "SELECT txn_id, uid, points, time_stamp, operation, description, tid\n FROM {userpoints_txn}\n WHERE status = 0 AND expired = 0\n AND (expirydate < :expiry_date AND expirydate != 0)";
$result = db_query($sql, array(
':expiry_date' => REQUEST_TIME,
));
foreach ($result as $line) {
$time_stamp_formatted = format_date($line->time_stamp, 'custom', 'Y-m-d H:i');
$arguments = array_merge(userpoints_translation(), array(
'!operation' => $line->operation,
'!description' => $line->description,
'!txn_id' => $line->txn_id,
'!date' => $time_stamp_formatted,
));
$description = strtr(variable_get(USERPOINTS_EXPIRY_DESCRIPTION, NULL), $arguments);
$params = array(
'points' => -$line->points,
'uid' => $line->uid,
'operation' => 'expiry',
'description' => $description,
'parent_txn_id' => $line->txn_id,
'moderate' => FALSE,
'tid' => $line->tid,
'time_stamp' => $line->time_stamp,
'expirydate' => 0,
);
userpoints_userpointsapi($params);
$params = array(
'txn_id' => $line->txn_id,
'expired' => 1,
);
userpoints_userpointsapi($params);
}
}
function userpoints_cron() {
userpoints_expire_transactions();
}
function userpoints_get_vid() {
if (!module_exists('taxonomy')) {
return FALSE;
}
$vid = variable_get(USERPOINTS_CATEGORY_DEFAULT_VID, '');
if (empty($vid) || !taxonomy_vocabulary_load($vid)) {
$sql = "SELECT vid FROM {taxonomy_vocabulary} WHERE module='userpoints'";
$vid = db_query($sql)
->fetchField();
if (!$vid) {
drupal_set_message(t("Created Userpoints vocabulary"));
$vocab = (object) array(
'name' => USERPOINTS_CATEGORY_NAME,
'description' => t('Automatically created by the userpoints module'),
'machine_name' => 'userpoints',
'multiple' => '0',
'required' => '0',
'hierarchy' => '1',
'relations' => '0',
'module' => 'userpoints',
);
taxonomy_vocabulary_save($vocab);
$vid = $vocab->vid;
}
variable_set(USERPOINTS_CATEGORY_DEFAULT_VID, $vid);
}
if (!is_numeric($vid)) {
watchdog('userpoints', 'userpoints module was unable to select or create a vocabulary. !Points will be uncategorized', array(), WATCHDOG_ERROR);
}
return $vid;
}
function userpoints_get_categories($account = NULL) {
$cache = drupal_static(__FUNCTION__, array());
$key = $account ? $account->uid : 0;
if (!isset($cache[$key])) {
$options = array();
$options[0] = t('!Uncategorized', userpoints_translation());
if (module_exists('taxonomy')) {
$vid = userpoints_get_vid();
if ($vid) {
if ($account) {
$query = db_select('taxonomy_term_data', 't')
->fields('t', array(
'tid',
'name',
))
->condition('t.vid', userpoints_get_vid())
->groupBy('t.tid')
->groupBy('t.name')
->groupBy('t.weight')
->orderBy('t.weight');
$query
->join('userpoints_txn', 'p', 't.tid = p.tid AND p.uid = :uid', array(
':uid' => $account->uid,
));
$terms = $query
->execute();
}
else {
$terms = taxonomy_get_tree($vid);
}
foreach ($terms as $term) {
$options[$term->tid] = $term->name;
}
}
}
$cache[$key] = $options;
}
return $cache[$key];
}
function userpoints_get_default_tid() {
return (int) variable_get(USERPOINTS_CATEGORY_DEFAULT_TID, 0);
}
function userpoints_views_api() {
return array(
'api' => 2.0,
);
}
function userpoints_migrate_api() {
$api = array(
'api' => 2,
);
return $api;
}
function userpoints_invoke_all($op, &$params = array()) {
$return = array();
foreach (module_implements('userpoints') as $module) {
$function = $module . '_userpoints';
$result = $function($op, $params);
if (isset($result) && is_array($result)) {
$return = array_merge_recursive($return, $result);
}
else {
if (isset($result)) {
$return[] = $result;
}
}
}
return $return;
}
function userpoints_get_info($operation = NULL) {
static $info = NULL;
if (!isset($info)) {
$info = module_invoke_all('userpoints_info');
drupal_alter('userpoints_info', $info);
}
if ($operation) {
if (isset($info[$operation])) {
return $info[$operation];
}
return NULL;
}
return $info;
}
function userpoints_create_description($transaction, array $options = array()) {
$options += array(
'link' => TRUE,
'truncate' => TRUE,
);
$entity = NULL;
if ($transaction->entity_type && entity_get_info($transaction->entity_type)) {
$entity = entity_load($transaction->entity_type, array(
$transaction->entity_id,
));
$entity = reset($entity);
}
$safe = FALSE;
if (!empty($transaction->description) && empty($options['skip_description'])) {
$description = $transaction->description;
}
else {
$info = userpoints_get_info($transaction->operation);
if (!empty($info['description callback']) && function_exists($info['description callback'])) {
$description = $info['description callback']($transaction, $entity);
$safe = TRUE;
}
elseif (!empty($info['description'])) {
$description = $info['description'];
$safe = TRUE;
}
}
if (empty($description)) {
$description = $transaction->operation;
}
$attributes = array();
$stripped_description = strip_tags($description);
if ($options['truncate'] && drupal_strlen($stripped_description) > variable_get('userpoints_truncate', 30) + 3) {
$attributes['title'] = html_entity_decode($stripped_description, ENT_QUOTES);
$description = truncate_utf8($stripped_description, variable_get('userpoints_truncate', 30), FALSE, TRUE);
}
if ($entity && $options['link']) {
$uri = entity_uri($transaction->entity_type, $entity);
if (isset($uri['path'])) {
$description = l($description, $uri['path'], $uri['options'] + array(
'html' => $safe,
'attributes' => $attributes,
));
}
}
if ((empty($entity) || empty($uri)) && !$safe) {
$description = check_plain($description);
}
return $description;
}
function userpoints_userpoints_info() {
return array(
'expiry' => array(
'description' => t('!Points have expired.', userpoints_translation()),
'admin description' => t('Expire an existing transaction'),
),
);
}
function userpoints_transaction_load($txn_id) {
if (!empty($txn_id)) {
$transaction = db_query('SELECT * from {userpoints_txn} WHERE txn_id = :txn', array(
':txn' => $txn_id,
))
->fetchObject();
}
if (empty($transaction)) {
return FALSE;
}
$transaction->user = user_load($transaction->uid);
$categories = userpoints_get_categories();
$transaction->category = isset($categories[$transaction->tid]) ? $categories[$transaction->tid] : $categories[userpoints_get_default_tid()];
return $transaction;
}
function userpoints_get_transaction_actions($transaction, $show_view = TRUE) {
global $user;
$actions = array();
$url_options = array(
'query' => drupal_get_destination(),
);
$url_prefix = 'myuserpoints/transaction/' . $transaction->txn_id;
if (strpos($_GET['q'], 'admin/config/people/userpoints') !== FALSE) {
$url_prefix = "admin/config/people/userpoints/transaction/{$transaction->txn_id}";
}
elseif ($transaction->uid != $user->uid) {
$url_prefix = "user/{$transaction->uid}/points/{$transaction->txn_id}";
}
if ($show_view && userpoints_access_view_transaction($transaction)) {
$actions[] = l(t('view'), $url_prefix . '/view');
}
if (userpoints_admin_access('edit')) {
$actions[] = l(t('edit'), $url_prefix . '/edit', $url_options);
}
if (userpoints_admin_access('moderate') && $transaction->status == USERPOINTS_TXN_STATUS_PENDING) {
$actions[] = l(t('approve'), $url_prefix . '/approve', $url_options);
$actions[] = l(t('decline'), $url_prefix . '/decline', $url_options);
}
return implode(' ', $actions);
}
function userpoints_get_transaction_header($settings) {
$settings += array(
'show_category' => count(userpoints_get_categories()) > 1,
'show_user' => TRUE,
'show_status' => TRUE,
);
$header = array();
if ($settings['show_user']) {
$header[] = array(
'data' => t('User'),
'field' => 'uid',
'class' => array(
'userpoints-transactions-header-status',
),
);
}
$header[] = array(
'data' => t('!Points', userpoints_translation()),
'field' => 'points',
'class' => array(
'userpoints-transactions-header-points',
),
);
if ($settings['show_category']) {
$header[] = array(
'data' => t('Category'),
'field' => 't.name',
'class' => array(
'userpoints-transactions-header-category',
),
);
}
$header[] = array(
'data' => t('Date'),
'field' => 'time_stamp',
'sort' => 'desc',
'class' => array(
'userpoints-transactions-header-timestamp',
),
);
$header[] = array(
'data' => t('Reason'),
'class' => array(
'userpoints-transactions-header-reason',
),
);
if ($settings['show_status']) {
$header[] = array(
'data' => t('Status'),
'field' => 'status',
'class' => array(
'userpoints-transactions-header-status',
),
);
}
$header[] = array(
'data' => t('Actions'),
'class' => array(
'userpoints-transactions-header-actions',
),
);
return $header;
}
function userpoints_get_list_header() {
$header = array(
array(
'data' => t('User'),
'field' => 'u.name',
),
);
if (count(userpoints_get_categories()) > 1) {
$header[] = array(
'data' => t('Category'),
'field' => 't.name',
);
}
$header[] = array(
'data' => t('!Points', userpoints_translation()),
'field' => 'p.points',
'sort' => 'desc',
);
return $header;
}
function userpoints_get_list_row($data) {
global $user;
$categories = userpoints_get_categories();
$details = '';
if ($user->uid == $data->uid) {
$details = " " . l(t("details"), 'myuserpoints');
}
elseif (userpoints_admin_access('edit')) {
$details = " " . l(t("details"), 'user/' . $data->uid . '/points');
}
$name = theme('username', array(
'account' => $data,
));
$row = array(
array(
'data' => $details ? t('!name (!details)', array(
'!name' => $name,
'!details' => $details,
)) : $name,
),
);
if (count($categories) > 1) {
$row[] = array(
'data' => isset($categories[$data->tid]) ? $categories[$data->tid] : $categories[0],
'align' => 'right',
);
}
$row[] = array(
'data' => $data->points,
'align' => 'right',
);
return $row;
}
function userpoints_get_transaction_row($transaction, $settings = array()) {
$settings += array(
'show_user' => TRUE,
'show_status' => TRUE,
);
$stati = userpoints_txn_status();
$css_stati = array(
USERPOINTS_TXN_STATUS_APPROVED => 'approved',
USERPOINTS_TXN_STATUS_DECLINED => 'declined',
USERPOINTS_TXN_STATUS_PENDING => 'pending',
);
$row = array(
'class' => array(
'userpoints-transaction-row-status-' . $css_stati[$transaction->status],
'userpoints-transaction-row-category-' . $transaction->tid,
),
);
if ($settings['show_user']) {
$row['data'][] = array(
'data' => theme('username', array(
'account' => user_load($transaction->uid),
)),
'class' => array(
'userpoints-transactions-field-user',
),
);
}
$row['data'][] = array(
'data' => $transaction->points,
'class' => array(
'userpoints-transactions-field-points',
'userpoints-transaction-points-' . ($transaction->points > 0 ? 'positive' : 'negative'),
),
);
$categories = userpoints_get_categories();
if (count($categories) > 1) {
$row['data'][] = array(
'data' => isset($categories[$transaction->tid]) ? $categories[$transaction->tid] : $categories[0],
'class' => array(
'userpoints-transactions-field-category',
),
);
}
$row['data'][] = array(
'data' => format_date($transaction->time_stamp, 'small'),
'class' => array(
'userpoints-transactions-field-timestamp',
),
);
$row['data'][] = array(
'data' => userpoints_create_description($transaction),
'class' => array(
'userpoints-transactions-field-reason',
),
);
if ($settings['show_status']) {
$row['data'][] = array(
'data' => $stati[$transaction->status],
'class' => array(
'userpoints-transactions-field-status',
),
);
}
$row['data'][] = array(
'data' => userpoints_get_transaction_actions($transaction),
'class' => array(
'userpoints-transactions-field-actions',
),
);
return $row;
}
function _userpoints_userpoints_transaction_properties() {
return array(
'user' => array(
'type' => 'user',
'label' => t('User'),
'description' => t('The user that will receive the !points', userpoints_translation()),
'setter callback' => 'entity_metadata_verbatim_set',
),
'points' => array(
'type' => 'integer',
'label' => t('!Points', userpoints_translation()),
'description' => t('Amount of !points to give or take.', userpoints_translation()),
'restriction' => 'input',
'setter callback' => 'entity_metadata_verbatim_set',
),
'tid' => array(
'label' => t('!Points category', userpoints_translation()),
'description' => t('The category to which these transaction belongs.'),
'type' => 'integer',
'options list' => 'userpoints_rules_get_categories',
'restriction' => 'input',
'setter callback' => 'entity_metadata_verbatim_set',
),
'entity' => array(
'label' => t('Entity'),
'type' => 'entity',
'description' => t('The entity to which this transaction refers.'),
'restriction' => 'input',
'optional' => TRUE,
'getter callback' => 'entity_metadata_verbatim_get',
),
'description' => array(
'label' => t('Description'),
'type' => 'text',
'description' => t('Can contain the reason why the points have been given.'),
'restriction' => 'input',
'optional' => TRUE,
'setter callback' => 'entity_metadata_verbatim_set',
),
'reference' => array(
'label' => t('Reference'),
'type' => 'text',
'description' => t('Can contain a reference for this transaction.'),
'optional' => TRUE,
'setter callback' => 'entity_metadata_verbatim_set',
),
'operation' => array(
'label' => t('Operation'),
'type' => 'text',
'description' => t('Describes the operation (Insert/Remove/...).'),
'restriction' => 'input',
'setter callback' => 'entity_metadata_verbatim_set',
),
'reason' => array(
'label' => t('Reason'),
'type' => 'text',
'description' => t('The reason why the points were granted.'),
'restriction' => 'input',
),
'time-stamp' => array(
'label' => t('Timestamp'),
'type' => 'date',
'description' => t('Time when the points were given.'),
'setter callback' => 'entity_metadata_verbatim_set',
'getter callback' => 'entity_metadata_verbatim_get',
),
'expirydate' => array(
'label' => t('Expiry date'),
'type' => 'date',
'description' => t('Time when the points will expire.'),
'setter callback' => 'entity_metadata_verbatim_set',
'getter callback' => 'entity_metadata_verbatim_get',
),
'display' => array(
'label' => t('Display'),
'type' => 'boolean',
'description' => t('Whether to show a message to the user for this transaction or not.'),
'setter callback' => 'entity_metadata_verbatim_set',
),
'status' => array(
'label' => t('Status'),
'type' => 'integer',
'description' => t('Status of this transaction.'),
'options list' => 'userpoints_txn_status',
'setter callback' => 'entity_metadata_verbatim_set',
'getter callback' => 'entity_metadata_verbatim_get',
),
);
}