web-dev-qa-db-ja.com

Drupal 7のルールを使用してubercartロールの有効期限を削除する方法はありますか?

Drupal 7およびubercartロールを使用しており、ロールの有効期限として1日を指定しています。そのロールを使用して、ユーザーは1つのノードを作成できます。新しいノードが作成されたらすぐに、作成されたロールの有効期限を削除する必要があります。

ルールを使用してロールを削除できますが、有効期限が設定されているため、ユーザーが同じロールを再度購入した場合、ロールに同じロールを再度割り当てることはできません。

Ubercartのロール期限切れを削除する方法はありますか?

助けてくれてありがとう.

5
amit

drupal標準ルールを使用してロールを削除しているようです。互換性を高めるために独自のuc_ubercart関数を呼び出してみてください。

/**
 * Deletes an expiration using user id or user id and rid.
 *
 * This function deletes expirations associated with users and roles. If
 * no role ID is passed, the function deletes all role expirations associated
 * with the given user. Otherwise, the function only deletes expirations whose
 * user and role IDs match. If any roles were actually deleted, the function
 * notifies the user. The menu cache is then flushed, as privileges to view
 * menu items may have been lost in the process.
 *
 * @param $account
 *   A Drupal user object.
 * @param $rid
 *   A Drupal role ID.
 * @param $silent
 *   When set to TRUE will suppress any Drupal messages from this function.
 */
uc_roles_delete($account, $rid = NULL, $silent = FALSE) {}

カスタムモジュールの例(ルールなし):

https://api.drupal.org/api/drupal/modules!node!node.api.php/function/hook_node_insert/7

/**
 * Implements hook_node_insert().
 */
function mymodule_node_insert($node) {

  if ($node->type == 'customtype') {
    $rid = 3; //@TODO: set rol ID
    $account = user_load($node->uid);
    // Delete UC Role!
    uc_roles_delete($account, $rid, TRUE);
  }

}

ルールアクションPHPでこのコードを使用することもできますが、フックの方が好きです。

1
jorgetutor