web-dev-qa-db-ja.com

Webform送信の更新時にメール/ハンドラーをトリガーする

Webフォームの送信が更新されたときにEmails/Handlersをトリガーする方法はありますか?ハンドラーとしてwebform_mailchimpを使用しています。新しいレコードを送信すると、ハンドラーは正常に動作し、Mailchimpアカウントにデータを受信できます。コードを介して送信を更新する機能があります。しかし、同じレコードを更新してもトリガーされません。以下は、Webフォーム送信を更新するためのコードです。

$webform = Webform::load('my_form');
$is_open = WebformSubmissionForm::isOpen($webform);
$sid = 2;

if ($is_open === TRUE) {
    // Load submission
    $webform_submission = WebformSubmission::load($sid);

    // Modify submission values
    $webform_submission->setElementData('preferred_date', $form_state->getValue('preferredDate'));
    $webform_submission->setElementData('preferred_time', $form_state->getValue('preferredTime'));

    // Validate submission.
    $errors = WebformSubmissionForm::validateWebformSubmission($webform_submission);

    // Check there are no validation errors.
    if (!empty($errors)) {
        drupal_set_message(t('Failed! Please contact the administrator.'), 'error');
    }
    else {
        // Submit values and get submission ID.
        $webform_submission = WebformSubmissionForm::submitWebformSubmission($webform_submission);
        drupal_set_message(t("Success! ".$webform_submission->id()), 'status');
    }
}
  1. (プログラムで)コードを介してハンドラーをトリガーする方法はありますか?
  2. CMSにデフォルト設定はありますか?

みんなありがとう、

2
batMask

以下のコードはテストされていませんが、正しい方向を示しているはずです。

// Get a handler.
$webform_submission = WebformSubmission::load(WEBFORM_ID)
$handlers = $webform_submission->getWebform()->getHandlers();
$handler = $handlers[HANDLER_ID];

// Invoke submit form.
@see \Drupal\webform\Plugin\WebformHandlerInterface::submitForm
$form = []; // Might need to get the $form.
$form_state = new FormState(); // Might need to be build the form state.
$handler->submitForm($form, $form_state, $webform_submission);

@see\Drupal\webform\Entity\Webform :: invokeHandlers

@see\Drupal\webform\Entity\WebformSubmission :: invokeWebformHandlers

2
jrockowitz