userpoints.pages.inc in User Points 7.2
Same filename and directory in other branches
Menu callbacks for userpoints.module.
File
userpoints.pages.incView source
<?php
/**
* @file
* Menu callbacks for userpoints.module.
*/
/**
* Displays a detailed transaction report for an individual user.
*
* @param $account
* For which account to display. Defaults to the current user.
*/
function userpoints_list_transactions($form, &$form_state, $account = NULL, $tid = NULL) {
// If this is an AJAX request, update $_GET['q'] so that table sorting and
// similar links are using the correct base path.
if ($_GET['q'] == 'system/ajax') {
$q = 'myuserpoints';
if (!empty($account)) {
$q = 'user/' . $account->uid . '/points';
}
$_GET['q'] = $q;
}
if (empty($account)) {
global $user;
$account = $user;
}
$settings = array(
'show_user' => FALSE,
);
$header = userpoints_get_transaction_header($settings);
$query = db_select('userpoints_txn', 'p')
->extend('PagerDefault')
->extend('TableSort')
->fields('p', array(
'txn_id',
))
->condition('p.uid', $account->uid)
->orderByHeader($header)
->orderBy('p.txn_id', 'DESC')
->limit(variable_get(USERPOINTS_REPORT_LIMIT, 10));
if (module_exists('taxonomy')) {
$query
->leftJoin('taxonomy_term_data', 't', 'p.tid = t.tid');
}
$unapproved_query = db_select('userpoints_txn', 'p')
->condition('uid', $account->uid)
->condition('status', UserpointsTransaction::STATUS_PENDING);
$unapproved_query
->addExpression('SUM(points)');
$values = userpoints_filter_parse_input($form_state, $tid);
$active_category = userpoints_filter_query($query, $values);
userpoints_filter_query($unapproved_query, $values);
if (isset($active_category)) {
drupal_set_title(t('!Points for @username (%category category)', userpoints_translation() + array(
'%category' => $active_category,
'@username' => format_username($account),
)), PASS_THROUGH);
$total_title = t('Total !points (%category category)', userpoints_translation() + array(
'%category' => $active_category,
));
}
else {
drupal_set_title(t('!Points for @username', userpoints_translation() + array(
'@username' => format_username($account),
)));
$total_title = t('Total !points', userpoints_translation());
}
$rows = array();
$result = $query
->execute();
$transactions = userpoints_transaction_load_multiple($result
->fetchCol());
foreach ($transactions as $transaction) {
$rows[] = $transaction
->getTableRow($settings);
}
// Store context in the output array so that modules have access to it.
$output = array(
'#account' => $account,
'#attached' => array(
'css' => array(
drupal_get_path('module', 'userpoints') . '/userpoints.css',
),
),
);
$output['form'] = userpoints_filter_form($account, $values);
$output['list'] = array(
'#type' => 'container',
'#id' => 'userpoints_list_wrapper',
);
$output['list']['table'] = array(
'#theme' => 'table',
'#header' => $header,
'#rows' => $rows,
'#empty' => t('No !Points earned', userpoints_translation()),
'#weight' => -5,
'#attributes' => array(
'class' => array(
'userpoints-myuserpoints-list',
),
),
);
$output['list']['pager'] = array(
'#markup' => theme('pager'),
'#weight' => 0,
);
// Fetch pending (not yet approved) points according to the category filter.
$pending = (int) $unapproved_query
->execute()
->fetchField();
$approved = userpoints_get_current_points($account->uid, isset($values['tid']) ? $values['tid'] : 'all');
// Display both pending and approved points in a simple table.
$output['list']['summary_table'] = array(
'#theme' => 'table',
'#header' => array(
array(
'data' => $total_title,
'colspan' => 2,
),
),
'#rows' => array(
array(
'data' => array(
t('Approved !points', userpoints_translation()),
theme('userpoints_points', array(
'points' => $approved,
)),
),
'class' => array(
'userpoints-myuserpoints-total-approved',
),
),
array(
'data' => array(
t('Pending !points', userpoints_translation()),
theme('userpoints_points', array(
'points' => $pending,
)),
),
'class' => array(
'userpoints-myuserpoints-total-pending',
),
),
),
'#weight' => 10,
'#attributes' => array(
'class' => array(
'userpoints-myuserpoints-total',
),
),
);
// For simplicity, the generated output is passed to a custom alter function.
// This would also be possible through hook_page_alter(), but that hook is
// hard to use.
drupal_alter('userpoints_list_transactions', $output);
return $output;
}
/**
* Lists the users and their point totals by all or by category.
*/
function userpoints_list_users($form, &$form_state, $tid = NULL) {
// If this is an AJAX request, update $_GET['q'] so that table sorting and
// similar links are using the correct base path.
if ($_GET['q'] == 'system/ajax') {
$_GET['q'] = 'userpoints';
}
$header = userpoints_get_list_header();
$query = db_select('userpoints', 'p')
->extend('PagerDefault')
->extend('TableSort')
->fields('p', array(
'uid',
'points',
'tid',
))
->fields('u', array(
'name',
))
->groupBy('p.uid')
->groupBy('u.name')
->groupBy('p.points')
->groupBy('p.tid')
->orderByHeader($header)
->limit(variable_get(USERPOINTS_REPORT_USERCOUNT, 30));
$query
->join('users', 'u', 'p.uid = u.uid');
if (module_exists('taxonomy')) {
$query
->groupBy('t.name');
$query
->leftJoin('taxonomy_term_data', 't', 'p.tid = t.tid');
}
$values = userpoints_filter_parse_input($form_state, $tid);
$active_category = userpoints_filter_query($query, $values);
if (isset($active_category)) {
drupal_set_title(t('All points (%category category)', userpoints_translation() + array(
'%category' => $active_category,
)), PASS_THROUGH);
}
else {
drupal_set_title(t('All points'));
}
if (variable_get(USERPOINTS_REPORT_DISPLAYZERO, 1) == 0) {
// The user would NOT like to see users with zero points.
$query
->condition('p.points', 0, '<>');
}
$rows = array();
foreach ($query
->execute() as $data) {
$rows[] = userpoints_get_list_row($data);
}
$output = array();
$output['form'] = userpoints_filter_form(NULL, $values);
$output['list'] = array(
'#type' => 'container',
'#id' => 'userpoints_list_wrapper',
);
$output['list']['table'] = array(
'#theme' => 'table',
'#header' => $header,
'#rows' => $rows,
);
$output['list']['pager'] = array(
'#theme' => 'pager',
);
// Allow other modules and themes to customize the result.
drupal_alter('userpoints_list', $output);
return $output;
}
/**
* Menu callback; display details about a specific transaction.
*
* @param $transaction
* Transaction object.
* @return
* Render-able array with all the information about this transaction.
*/
function userpoints_view_transaction($transaction) {
drupal_add_css(drupal_get_path('module', 'userpoints') . '/userpoints.css');
field_attach_prepare_view('userpoints_transaction', array(
$transaction
->getTxnId() => $transaction,
), 'full');
drupal_set_title(t('View transaction #@txn_id', array(
'@txn_id' => $transaction->txn_id,
)));
$css_stati = array(
UserpointsTransaction::STATUS_APPROVED => 'approved',
UserpointsTransaction::STATUS_DECLINED => 'declined',
UserpointsTransaction::STATUS_PENDING => 'pending',
);
$classes = 'userpoints-view-' . $css_stati[$transaction->status] . ' userpoints-view-category-' . $transaction->tid . ' userpoints-view-' . ($transaction->points > 0 ? 'positive' : 'negative');
if (!empty($transaction->expirydate)) {
$classes .= $transaction->expired ? ' userpoints-view-expired' : ' userpoints-view-not-expired';
}
$content = array(
'#prefix' => '<div class="userpoints-view-transaction ' . $classes . '">',
'#suffix' => '</div>',
);
$content['details'] = array(
'#theme' => 'userpoints_view_category',
'#title' => t('Details'),
'#weight' => 0,
'#attributes' => array(
'class' => array(
'userpoints-group-details',
),
),
);
$content['details']['user'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('User'),
'#value' => theme('username', array(
'account' => $transaction
->getUser(),
)),
'#weight' => 0,
'#attributes' => array(
'class' => array(
'userpoints-item-user',
),
),
);
$content['details']['points'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('!Points', userpoints_translation()),
'#value' => $transaction->points,
'#weight' => 10,
'#attributes' => array(
'class' => array(
'userpoints-item-points',
),
),
);
$content['details']['category'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Category'),
'#value' => $transaction->tid,
'#weight' => 20,
'#attributes' => array(
'class' => array(
'userpoints-item-category',
),
),
);
$content['details']['reason'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Reason'),
'#value' => $transaction
->getReason(array(
'truncate' => FALSE,
)),
'#weight' => 30,
'#attributes' => array(
'class' => array(
'userpoints-item-reason',
),
),
);
$content['details']['transaction'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Transaction ID'),
'#value' => $transaction->txn_id,
'#weight' => 40,
'#attributes' => array(
'class' => array(
'userpoints-item-transaction',
),
),
);
$content['status'] = array(
'#theme' => 'userpoints_view_category',
'#title' => t('Status'),
'#weight' => 10,
'#attributes' => array(
'class' => array(
'userpoints-group-status',
),
),
);
$stati = userpoints_txn_status();
$content['status']['status'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Approval status'),
'#value' => $stati[$transaction->status],
'#weight' => 0,
'#attributes' => array(
'class' => array(
'userpoints-item-status',
),
),
);
$content['status']['date'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Creation date'),
'#value' => format_date($transaction->time_stamp),
'#weight' => 10,
'#attributes' => array(
'class' => array(
'userpoints-item-date',
),
),
);
$content['status']['changed'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Last modified'),
'#value' => format_date($transaction->changed),
'#weight' => 20,
'#attributes' => array(
'class' => array(
'userpoints-item-changed',
),
),
);
if (!empty($transaction->expirydate)) {
$content['status']['expiration_status'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Expiration status'),
'#value' => $transaction->expired ? t('Expired') : t('Not expired'),
'#weight' => 20,
'#attributes' => array(
'class' => array(
'userpoints-item-expiration-status',
),
),
);
$content['status']['expiration_date'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Expiration date'),
'#value' => format_date($transaction->expirydate),
'#weight' => 30,
'#attributes' => array(
'class' => array(
'userpoints-item-points-expiration-date',
),
),
);
}
if (!empty($transaction->parent_txn_id)) {
$parent_transaction = userpoints_transaction_load($transaction->parent_txn_id);
$uri = entity_uri('userpoints_transaction', $parent_transaction);
$parent = l($parent_transaction
->getReason(array(
'link' => FALSE,
)), $uri['path'], array(
'html' => TRUE,
));
}
$child_txn_ids = db_query('SELECT txn_id FROM {userpoints_txn} WHERE parent_txn_id = :txn_id', array(
':txn_id' => $transaction->txn_id,
))
->fetchCol();
$children = array();
foreach ($child_txn_ids as $child_txn_id) {
$child_transaction = userpoints_transaction_load($child_txn_id);
$uri = entity_uri('userpoints_transaction', $child_transaction);
$children[] = l($child_transaction
->getReason(array(
'link' => FALSE,
)), $uri['path'], array(
'html' => TRUE,
));
}
$children = !empty($children) ? theme('item_list', array(
'items' => $children,
)) : '';
if (!empty($parent) || !empty($children)) {
$content['related'] = array(
'#theme' => 'userpoints_view_category',
'#title' => t('Related !points transactions', userpoints_translation()),
'#weight' => 20,
'#attributes' => array(
'class' => array(
'userpoints-group-related',
),
),
);
if (!empty($parent)) {
$content['related']['parent'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Prior transaction'),
'#value' => $parent,
'#weight' => 0,
'#attributes' => array(
'class' => array(
'userpoints-item-parent',
),
),
);
}
if (!empty($children)) {
$content['related']['children'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Follow-up transactions'),
'#value' => $children,
'#weight' => 10,
'#attributes' => array(
'class' => array(
'userpoints-item-children',
),
),
);
}
}
if (userpoints_admin_access('edit')) {
$content['admin'] = array(
'#theme' => 'userpoints_view_category',
'#title' => t('Admin'),
'#weight' => 30,
'#attributes' => array(
'class' => array(
'userpoints-group-admin',
),
),
);
if (!empty($transaction->approver_uid)) {
$content['admin']['moderator'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Moderator'),
'#value' => theme('username', array(
'account' => $transaction
->getApprover(),
)),
'#weight' => 0,
'#attributes' => array(
'class' => array(
'userpoints-item-moderator',
),
),
);
}
if (!empty($transaction->description)) {
$content['admin']['description_manual'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Description (manually entered)'),
'#value' => $transaction->description,
'#weight' => 10,
'#attributes' => array(
'class' => array(
'userpoints-item-description-manual',
),
),
);
$content['admin']['description_generated'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Description (auto generated)'),
'#value' => $transaction
->getReason(array(
'skip_description' => TRUE,
'truncate' => FALSE,
)),
'#weight' => 20,
'#attributes' => array(
'class' => array(
'userpoints-item-description-generated',
),
),
);
}
$content['admin']['operation'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Operation'),
'#value' => $transaction->operation,
'#weight' => 30,
'#attributes' => array(
'class' => array(
'userpoints-item-operation',
),
),
);
if (!empty($transaction->reference)) {
$content['admin']['reference'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Internal reference'),
'#value' => $transaction->reference,
'#weight' => 40,
'#attributes' => array(
'class' => array(
'userpoints-item-reference',
),
),
);
}
$content['admin']['actions'] = array(
'#theme' => 'userpoints_view_item',
'#title' => t('Actions'),
'#value' => $transaction
->getActions(FALSE),
'#weight' => 50,
'#attributes' => array(
'class' => array(
'userpoints-item-actions',
),
),
);
}
$content += field_attach_view('userpoints_transaction', $transaction, 'full');
return $content;
}
Functions
Name | Description |
---|---|
userpoints_list_transactions | Displays a detailed transaction report for an individual user. |
userpoints_list_users | Lists the users and their point totals by all or by category. |
userpoints_view_transaction | Menu callback; display details about a specific transaction. |