1

容量が制限に達したときにメールを送信する Drupal のカスタム ルールを作成しています。はい、私は Drupal Stackexchange でこれを尋ねましたが、彼らはそれが php の問題だと言っています。そして、私は開発者ではなく、これを理解しなければならないので、助けを求める必要があります. うまくいけば、私はそれを正しく説明します。

私の問題は、イベントの総容量の値をイベント$registrationから変数にプルする方法がわからないことです。

そのコードを示すために私のルールを添付します。変数を初期化していますが、何らかの方法でその値をルールの変数またはルール用のスクリプト/ファイルに取り込む必要があることはわかっています。そこに値を取得したら、True または False を判断できるはずです。

function registration_capacity_rules_condition_info() {
  $conditions = array(
  'registration_capacity_event_is_at_capacity' => array(
       'label' => t('Event has reached maximum registrations'),
       'group' => t('MY MODULE'),
       'parameters' => array(
         'registration' => array(
            'type' => 'registration',
            'label' => t('The registration event capacity'),
           ),         
         ),
       ),
     );

  return $conditions;
}

function registration_capacity_event_is_at_capacity($registration) {
  if ($registration == registration_event_count()) {    
      return TRUE;
  }
}

その値を取得する方法を知っているので、イベントに接続する必要があると本当に思います。ただし、これを取得するために何を調べればよいか完全にはわかりません。変数の設定について読んだことがありますが、作成しているスクリプト/ファイルの外部の別の場所から変数を取得するのに役立つものは見つかりませんでした。

うまくいけば、私はいくつかの役立つ方向性のために十分に明確でした. ありがとうございました!

EDIT*********** registration_event_count() 関数の追加

function registration_event_count($entity_type, $entity_id, $registration_id = NULL, $reset = FALSE) {
  $count = &drupal_static(__FUNCTION__ . '_' . $entity_type . '_' . $entity_id . '_' . $registration_id, FALSE);
  if (!$count || $reset) {
    $query = db_select('registration', 'r');
    $query->addExpression('sum(count)', 'count');
    $query->condition('entity_id', $entity_id);
    $query->condition('entity_type', $entity_type);
    if ($registration_id != NULL) {
      $query->condition('registration_id', $registration_id, '<>');
    }
    $query->condition('state', registration_get_active_states(), 'IN');
    $result = $query->execute();
    $count = $result->fetchField();
    $count = ($count == '') ? 0 : $count;
  }

  // Allow other mods to override count.
  $settings = registration_entity_settings($entity_type, $entity_id);
  $context = array(
    'entity_type' => $entity_type,
    'entity_id' => $entity_id,
    'registration_id' => $registration_id,
    'settings' => $settings,
  );

  drupal_alter('registration_event_count', $count, $context);

  return $count;
}

誰かがこれを見たことがあれば、値を「1」または true として返すことができます。ここで必要なのは、ルール アクションをトリガーする if ステートメントを取得することだけです。分かり次第投稿します。

4

0 に答える 0