Skip to content
  1. Extras
  2. SendIt
  3. Events

Events

System events

SendIt events


OnGetFormParams - fired when building param list; can fully override form send params; must return array

Params:

  • $formName - form key from data-si-form.
  • $presetName - preset key from data-si-preset.
  • $SendIt - handler instance.
Plugin example
php
switch ($modx->event->name){
  case 'OnGetFormParams':
    if ($presetName === 'test'){
      $SendIt->pluginParams['myparam'] = 123;
    }
    break;
}

OnBeforeFileValidate - fired before file group validation

Params:

  • $formName - form key from data-si-form.
  • $presetName - preset key from data-si-preset.
  • $SendIt - handler instance.
  • $filesData - file info array.
  • $totalCount - already uploaded file count.
Plugin example
php
switch ($modx->event->name){
  case 'OnBeforeFileValidate':
    $SendIt->params['maxCount'] = 5;
    break;
}

OnCheckPossibilityWork - fired after standard check, before result check; can change results

Params:

  • $formName - form or preset name.
  • $result - check result.
Plugin example
php
// limit send rate per IP
switch($modx->event->name){
  case 'OnCheckPossibilityWork':
    if (!$session = $modx->getObject('siSession', [
      'session_id' => $_SERVER['REMOTE_ADDR'],
      'class_name' => $formName
    ])) {
      SendIt::setSession($modx, ['send' => 1], $_SERVER['REMOTE_ADDR'], $formName);
      $modx->event->returnedValues['result']['success'] = 1;
    } else{
      $createdon = strtotime($session->get('createdon')) + 360;
      if ($createdon > time()) {
        $modx->event->returnedValues['result'] = [
          'success' => 0,
          'message' => 'You cannot submit this form yet.',
          'data' => []
        ];
      } else{
        $modx->event->returnedValues['result']['success'] = 1;
        SendIt::setSession($modx, ['send' => 1], $_SERVER['REMOTE_ADDR'], $formName);
      }
    }
    break;
}

OnBeforePageRender - fired before hash check and snippet render

Params:

  • $formName - form key from data-si-form.
  • $presetName - preset key from data-si-preset.
  • $SendIt - handler instance.
Plugin example
php
switch ($modx->event->name){
  case 'OnBeforePageRender':
    if ($_REQUEST['query']){
      $SendIt->params['where']['pagetitle:LIKE'] = '%' . $_REQUEST['query'] . '%';
      $SendIt->params['query'] = $_REQUEST['query'];
    }
    break;
}

OnBeforeReturnResponse - fired before response to frontend, regardless of snippet

Params:

  • $formName - form key from data-si-form.
  • $presetName - preset key from data-si-preset.
  • $SendIt - handler instance.
Plugin example
php
switch ($modx->event->name){
  case 'OnBeforeReturnResponse':
    if ($_POST['email'] && in_array($presetName, ['auth', 'register'])){
      $user = $modx->getObject('modUser', ['username' => $_POST['email']]);
      if ($user && !$user->isMember('Designers')) {
        $SendIt->params['redirectUrl'] = $modx->makeUrl(54750, '', '', 'full');
      }
    }
    break;
}

senditOnGetWebConfig - fired when building frontend config

Params:

  • $webConfig - config array.
  • $object - SendIt instance.
Plugin example
php
switch ($modx->event->name){
  case 'senditOnGetWebConfig':
    $object->webConfig['myparam'] = 'test';
    break;
}

senditOnSetValue - fired before assigning value to $_POST key

Params:

  • $key - field name.
  • $value - original value.
  • $SendIt - SendIt instance.
Plugin example
php
switch ($modx->event->name){
  case 'senditOnSetValue':
    // set original value without checks
    $SendIt->newValue = $value;
    break;
}

Identification events


siOnUserUpdate - fired after user data update from frontend

Params:

  • $user - modUser object.
  • $profile - modUserProfile object.
  • $data - data array from frontend.
Plugin example
php
switch ($modx->event->name){
  case 'siOnUserUpdate':

    break;
}

OnWebLogin - fired on user login from frontend

Params:

  • $user - modUser object.
  • $attributes - rememberme param.
  • $lifetime - session lifetime.
  • $loginContext - login context.
  • $addContexts - additional auth contexts.
  • $session_id - session ID.
Plugin example
php
switch ($modx->event->name){
  case 'OnWebLogin':

    break;
}

OnUserActivate - fired on user activation from frontend

Params:

  • $user - modUser object.
  • $profile - modUserProfile object.
  • $data - data array from frontend.
Plugin example
php
switch ($modx->event->name){
  case 'OnUserActivate':

    break;
}

JavaScript events

SendIt events


si:init - component init

Fired after all modules from JS config are loaded. No params. Cannot be cancelled. Subscribe to this event to safely use all modules, as SendIt and its children are available after it fires.

Example
js
document.addEventListener('si:init', (e) => {
  console.log(SendIt);
});

Sending events


si:send:before - before send

Fired before sending data. Can be cancelled to abort.

Params
  • target - form, field, button or document.
  • action - action name (send, validate_files, removeFile).
  • fetchOptions - request params (url, method, body); can modify.
  • headers - request headers; can modify.
  • Sending - Sending class instance.
Example
js
document.addEventListener('si:send:before', (e) => {
  const {action, target, fetchOptions, headers, Sending} = e.detail;

  // skip confirmation code until phone length >= 11
  if (target.name === 'phone' && target.value.length < 11){
    e.preventDefault();
  }
})

si:send:after - after response

Fired after server response parsed as JSON. Can be cancelled to abort success() and error().

Params
  • target, action, result, headers, Sending
Example
js
document.addEventListener('si:send:after', (e) => {
    const {action, target, result, headers, Sending} = e.detail;

    SendIt.Notify.info('Server response received.');
})

si:send:success - success handler

Fired on success, before success() handler. Can be cancelled.

Params
  • target, action, result, headers, Sending
Example
js
document.addEventListener('si:send:success', (e) => {
    const {action, target, result, headers, Sending} = e.detail;

    Sending.success = (result, target) => {
        SendIt.Notify.success('Data sent. Thank you!');
    }
})

si:send:error - error handler

Fired on error, before error() handler. Can be cancelled.

Params
  • target, action, result, headers, Sending
Example
js
document.addEventListener('si:send:error', (e) => {
    const {action, target, result, headers, Sending} = e.detail;

    Sending.error = (result, target) => {
        SendIt.Notify.error('Data not sent. Fix errors!');
    }
})

si:send:finish - send complete

Fired after success() and error(). Cannot be cancelled.

Params
  • target, action, result, headers, Sending
Example
js
document.addEventListener('si:send:finish', (e) => {
    const {action, target, result, headers, Sending} = e.detail;

    console.log(result.data);
})

si:send:reset - form reset

Fired at end of success() when clearFieldsOnSuccess set, or on type="reset" click. Can be cancelled.

Params
  • target, Sending
Example
js
document.addEventListener('si:send:reset', (e) => {
    const {target, Sending} = e.detail;

    e.preventDefault();
})

Quiz events


si:quiz:change - quiz step change

Fired BEFORE step change. Can be cancelled.

Params
  • isTrusted - auto vs manual switch.
  • btnReset, btnSend, btnNext, btnPrev - button elements.
  • root - form element.
  • nextIndex - target step id (data-qf-item).
  • items - step elements.
  • current - current visible step.
  • currentQuestion - current step number display.
  • totalQuestions - total steps display.
  • prevIndex, nextItem, dir - direction (prev/next).
  • Quiz - Quiz class instance.
Example
js
document.addEventListener('si:quiz:change', (e) => {
    const {root, nextIndex, items, current, currentQuestion, totalQuestions, prevIndex, nextItem, dir, Quiz} = e.detail;

    const phoneField = current.querySelector('[name="phone"]');
    if(phoneField && phoneField.value){
        const pattern = new RegExp(/^\+7\(\d{3}\)\d{3}\-\d{2}\-\d{2}$/g);
        if(!pattern.test(phoneField.value)){
            SendIt.Notify.error('Enter phone as +7(999)999-99-99');
            e.preventDefault();
        }
    }
})

si:quiz:progress - progress percent change

Fired AFTER progress percent is set. Cannot be cancelled.

Params
  • items, progressValue, progress, itemsComplete, total, root, complete, percent, Quiz

si:quiz:reset - quiz reset

Fired on quiz reset. Cannot prevent reset.

Params
  • items, btns, progress, currentQuestion, totalQuestions, root, finishItem, pages, Quiz

Fileuploader events


fu:uploading:start - before file upload

Params
  • form, field, root, files, FileUploader

fu:uploading:end - after all files uploaded

Params
  • form, field, root, files, FileUploader

fu:uploading:remove - after preview removal

Params
  • path, root, preview, FileUploader

SaveFormData events


sf:save - before saving to localStorage

Can be cancelled.

Params
  • root, field, savedData, SaveFormData
Example
js
document.addEventListener('sf:save', (e) => {
    const {root, field, savedData, SaveFormData} = e.detail;

    if(field.name === 'phone' && field.value){
        const formatted = field.value.replace(/^\d(\d{3})(\d{3})(\d{2})(\d{2})$/, '8 ($1)$2-$3-$4');
        savedData.phone = field.value = formatted;
    }
})

sf:set:before - before restoring saved data

Can be cancelled.

Params
  • root, formFields, savedData, SaveFormData

sf:change - after setting value in field

Cannot be cancelled.

Params
  • SaveFormData

sf:set:after - after all saved data set

Cannot be cancelled.

Params
  • root, formFields, savedData, SaveFormData

sf:remove - before clearing saved data

Can be cancelled.

Params
  • root, formName, SaveFormData

Pagination events


pn:handle:before - before pagination output

Can be cancelled.

Params
  • result, PaginationHandler

pn:handle:after - after pagination output

Cannot be cancelled.

Params
  • result, PaginationHandler