You are here

function uc_file_action_order_renew in Ubercart 6.2

Same name and namespace in other branches
  1. 8.4 uc_file/uc_file.rules.inc \uc_file_action_order_renew()
  2. 7.3 uc_file/uc_file.rules.inc \uc_file_action_order_renew()

Renews an orders product files.

This function updates access limits on all files found on all products on a given order. First, the order user is loaded, then the order's products are scanned for file product features. An order comment is saved, and the user is notified in Drupal, as well as through the email address associated with the order.

Parameters

$order: An Ubercart order object.

1 string reference to 'uc_file_action_order_renew'
uc_file_ca_action in uc_file/uc_file.ca.inc
Implements hook_ca_action().

File

uc_file/uc_file.ca.inc, line 215
This file contains the Conditional Actions hooks and functions necessary to make the file-related entity, conditions, events, and actions work.

Code

function uc_file_action_order_renew($order) {
  $user_downloads = array();

  // Load user.
  if (!$order->uid || !($order_user = user_load($order->uid))) {
    return;
  }

  // Scan products for models matching downloads.
  foreach ($order->products as $product) {
    $files = db_query("SELECT * FROM {uc_file_products} AS fp " . "INNER JOIN {uc_product_features} AS pf ON pf.pfid = fp.pfid " . "INNER JOIN {uc_files} as f ON f.fid = fp.fid " . "WHERE nid = %d", $product->nid);
    while ($file = db_fetch_object($files)) {

      // Either they match, or the file was set to any SKU.
      if (!empty($file->model) && $file->model != $product->model) {
        continue;
      }

      // Grab any existing privilege so we can calculate the new expiration time
      // as an offset of the previous.
      $file_user = _uc_file_user_get($order_user, $file->fid);

      // Get the limit info from the product feature
      $file_modification = array(
        'download_limit' => uc_file_get_download_limit($file),
        'address_limit' => uc_file_get_address_limit($file),
        'expiration' => _uc_file_expiration_date(uc_file_get_time_limit($file), max($file_user->expiration, time())),
      );

      // Add file_user(s) for this file/directory. (No overwrite)
      $new_files = uc_file_user_renew($file->fid, $order_user, $file->pfid, $file_modification, FALSE);

      // Save for notification.
      $user_downloads = array_merge($user_downloads, $new_files);

      // Note on the order where the user has gained download permission.
      if (is_dir(uc_file_qualify_file($file->filename))) {
        $comment = t('User can now download files in the directory %dir.', array(
          '%dir' => $file->filename,
        ));
      }
      else {
        $comment = t('User can now download the file %file.', array(
          '%file' => basename($file->filename),
        ));
      }
      uc_order_comment_save($order->order_id, $order_user->uid, $comment);
    }
  }

  // Notify the user of their download(s).
  if ($user_downloads) {
    ca_pull_trigger('uc_file_notify_grant', $order, $user_downloads);
  }
}