Спочатку я спробував відповісти на ваше запитання, використовуючи модуль правил та точок користувача , але побачив, що при додаванні Grant вказує користувачеві як дію, немає такого селектора даних для вибору користувача, який створив продукт. Я знайшов селектор даних для вибору користувача, який є власником замовлення, але це не ваша вимога. (Саме тому я уточнив це в коментарях).
Я знайшов модульне рішення вашого питання. Модуль використовує прив’язку_коммерції_чек-повної () . На сторінці гачка:
Дозволяє модулям виконувати бізнес-логіку, коли замовлення завершує замовлення.
Цей гачок збігається з подією "Клієнт завершує замовлення". Під час цього виклику слід виконувати лише ділову логіку, наприклад оновлення статусу замовлення, присвоєння замовлення обліковому запису користувача або надсилання електронних листів із повідомленнями. Натомість взаємодія з користувачем має відбуватися через оглядові панелі на сторінці завершення оформлення каси.
Це кодування модуля, який я розробив:
Файл YOURMODULE.info :
name = YOURMODULE
description = Module description
dependencies[] = commerce
dependencies[] = commerce_cart
dependencies[] = commerce_checkout
dependencies[] = userpoints
core = 7.x
ОНОВЛЕННЯ
Як запропонував Clive , я змінив файл модуля, щоб цей спеціальний модуль також працював з багатомовними сайтами.
Файл YOURMODULE.module :
/**
* Implements hook_commerce_checkout_complete().
*/
function YOURMODULE_commerce_checkout_complete($order) {
// Iterate through every commerce line item added in product.
foreach (field_get_items('commerce_order', $order, 'commerce_line_items') as $line_item_id) {
// Load commerce line item by line item id.
$line_item = commerce_line_item_load($line_item_id['line_item_id']);
// We do not want to include shipping cost in userpoints.
if ($line_item->type != 'shipping') {
// Load commerce product by product id.
$product = commerce_product_load(field_get_items('commerce_line_item', $line_item, 'commerce_product')[0]['product_id']);
// Create parameters.
$params = array(
'uid' => $product->uid,
'points' => commerce_currency_amount_to_decimal(field_get_items('commerce_line_item', $line_item, 'commerce_total')[0]['amount'], field_get_items('commerce_line_item', $line_item, 'commerce_total')[0]['currency_code']),
);
// Grant userpoints programmatically.
userpoints_userpointsapi($params);
}
}
}
Довідкові посилання:
userpoints_userpointsapi ($ парами)
commerce_checkout API
commerce_line_item_load ($ line_item_id)
commerce_product_load ($ product_id)
Користувацькі точки: відраховуйте бали програмно
commerce_currency_amount_to_decimal ()