You are here

class UserpointsTransactionController in User Points 7.2

Userpoints transaction controller.

Hierarchy

Expanded class hierarchy of UserpointsTransactionController

1 string reference to 'UserpointsTransactionController'
userpoints_entity_info in ./userpoints.module
Implements hook_entity_info().

File

./userpoints.transaction.inc, line 1197
Contains the UserpointsTransaction and related classes.

View source
class UserpointsTransactionController extends EntityAPIController {

  /**
   * Overrides EntityAPIController::save().
   *
   * It is not permitted to update a approved or denied transaction except
   * marking it as expird. Any attemt to change a property of such a transaction
   * will result in an immediate exception.
   */
  public function save($entity, DatabaseTransaction $transaction = NULL) {

    // Prevent saving when any of the required properties are missing.
    if (!$entity
      ->getPoints() || !$entity
      ->getUid() || !$entity
      ->getOperation()) {
      $entity
        ->abort();
      throw new UserpointsTransactionIncompleteException();
    }

    // Call the before hook to allow modules to change and deny this.
    // @todo: Rename this hook?
    module_invoke_all('userpoints_transaction_before', $entity);

    // Abort if the transaction has been denied.
    if ($entity
      ->isDenied()) {
      $entity
        ->abort();
      return FALSE;
    }
    $return = parent::save($entity, $transaction);

    // Update totals if the transaction is approved and not expired.
    if ($entity
      ->isApproved() && !$entity
      ->isExpired()) {
      $this
        ->updateTotals($entity->tid, $entity->uid, $entity->points);
    }

    // Display a message unless disabled or no message exists.
    if ($entity
      ->getDisplay() && ($message = $entity
      ->getMessage())) {
      drupal_set_message($message);
    }

    // Reset original status to current one
    $entity
      ->resetOriginalStatus();
    return $return;
  }

  /**
   * Update the total aggregations of the corresponding user.
   */
  protected function updateTotals($tid, $uid, $points) {

    // Update this category.
    $this
      ->updateTotalsCategory($tid, $uid, $points);

    // Update the total over all categories.
    $this
      ->updateTotalsCategory('all', $uid, $points);
  }

  /**
   * Update the totals of a specific category.
   *
   * Updating the total of all categories is supported by using 'all' for the
   * $tid.
   */
  protected function updateTotalsCategory($tid, $uid, $points) {
    $table = 'userpoints';
    if ($tid === 'all') {

      // Use a different table for the overall total.
      $table = 'userpoints_total';
    }

    // Always update the time stamp and the total points.
    $total = array(
      'last_update' => REQUEST_TIME,
      'points' => $points + userpoints_get_current_points($uid, $tid),
    );

    // Update the total max points if necessary.
    $max_points_total = userpoints_get_max_points($uid, $tid);
    if ($total['points'] > $max_points_total) {
      $total['max_points'] = $total['points'];
    }

    // The keys for the merge query. The tid is only added when not 'all'.
    $keys = array(
      'uid' => $uid,
    );
    if ($tid !== 'all') {
      $keys['tid'] = $tid;
    }

    // Save the updates.
    db_merge($table)
      ->key($keys)
      ->fields($total)
      ->execute();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DrupalDefaultEntityController::$cache protected property Whether this entity type should use the static cache.
DrupalDefaultEntityController::$entityCache protected property Static cache of entities, keyed by entity ID.
DrupalDefaultEntityController::$entityInfo protected property Array of information about the entity.
DrupalDefaultEntityController::$entityType protected property Entity type for this controller instance.
DrupalDefaultEntityController::$hookLoadArguments protected property Additional arguments to pass to hook_TYPE_load().
DrupalDefaultEntityController::$idKey protected property Name of the entity's ID field in the entity database table.
DrupalDefaultEntityController::$revisionKey protected property Name of entity's revision database table field, if it supports revisions.
DrupalDefaultEntityController::$revisionTable protected property The table that stores revisions, if the entity supports revisions.
DrupalDefaultEntityController::attachLoad protected function Attaches data to entities upon loading. 4
DrupalDefaultEntityController::cacheGet protected function Gets entities from the static cache. 1
DrupalDefaultEntityController::cacheSet protected function Stores entities in the static entity cache.
DrupalDefaultEntityController::cleanIds protected function Ensures integer entity IDs are valid.
DrupalDefaultEntityController::filterId protected function Callback for array_filter that removes non-integer IDs.
EntityAPIController::$bundleKey protected property
EntityAPIController::$cacheComplete protected property
EntityAPIController::$defaultRevisionKey protected property
EntityAPIController::buildContent public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::buildContent
EntityAPIController::buildQuery protected function Overrides DrupalDefaultEntityController::buildQuery(). Overrides DrupalDefaultEntityController::buildQuery 1
EntityAPIController::create public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::create
EntityAPIController::delete public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::delete 1
EntityAPIController::deleteRevision public function Implements EntityAPIControllerRevisionableInterface::deleteRevision(). Overrides EntityAPIControllerRevisionableInterface::deleteRevision
EntityAPIController::export public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::export 1
EntityAPIController::import public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::import
EntityAPIController::invoke public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::invoke 1
EntityAPIController::load public function Overridden. Overrides DrupalDefaultEntityController::load 1
EntityAPIController::query public function Builds and executes the query for loading.
EntityAPIController::renderEntityProperty protected function Renders a single entity property.
EntityAPIController::resetCache public function Overrides DrupalDefaultEntityController::resetCache(). Overrides DrupalDefaultEntityController::resetCache 1
EntityAPIController::saveRevision protected function Saves an entity revision.
EntityAPIController::view public function Implements EntityAPIControllerInterface. Overrides EntityAPIControllerInterface::view 1
EntityAPIController::__construct public function Overridden. Overrides DrupalDefaultEntityController::__construct 1
UserpointsTransactionController::save public function Overrides EntityAPIController::save(). Overrides EntityAPIController::save
UserpointsTransactionController::updateTotals protected function Update the total aggregations of the corresponding user.
UserpointsTransactionController::updateTotalsCategory protected function Update the totals of a specific category.