Commit 7874470c authored by mark burdett's avatar mark burdett
Browse files

revamp raven settings so configs aren't lost when toggled

parent d4580417
Loading
Loading
Loading
Loading
+103 −96
Original line number Diff line number Diff line
@@ -35,62 +35,45 @@ function raven_settings_form(array $form, array &$form_state) {

  $form['raven_enabled'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable Raven logging'),
    '#description' => t('Enable logging to send reports to Sentry server.'),
    '#title' => t('Enable PHP handlers'),
    '#description' => t('Check to send events in server-side PHP code to Sentry.'),
    '#default_value' => variable_get('raven_enabled', FALSE),
  );

  $form['raven_settings'] = array(
  $form['php'] = array(
    '#type' => 'fieldset',
    '#title' => t('Logging settings'),
    '#title' => t('PHP handler settings'),
    '#collapsible' => TRUE,
    '#collapsed' => !variable_get('raven_enabled', FALSE),
    '#states' => array(
      'disabled' => array(
      'collapsed' => array(
        ':input[name="raven_enabled"]' => array('unchecked' => TRUE),
      ),
    ),
  );

  $form['raven_settings']['raven_dsn'] = array(
  $form['php']['raven_dsn'] = array(
    '#type' => 'textfield',
    '#title' => t('Sentry DSN'),
    '#description' => t('Sentry DSN credentials for current site.'),
    '#default_value' => variable_get('raven_dsn', ''),
  );

  $form['raven_settings']['raven_environment'] = array(
    '#type' => 'textfield',
    '#title' => t('Environment'),
    '#description' => t('The environment in which this site is running.'),
    '#default_value' => variable_get('raven_environment', ''),
  );

  $form['raven_settings']['raven_release'] = array(
    '#type' => 'textfield',
    '#title' => t('Release'),
    '#description' => t('The release this site is running (could be a version or commit hash).'),
    '#default_value' => variable_get('raven_release', ''),
  );

  $form['raven_settings']['raven_connection_settings'] = array(
  $form['php']['connection'] = array(
    '#type' => 'fieldset',
    '#title' => t('Connection settings'),
    '#collapsed' => TRUE,
    '#collapsible' => TRUE,
    '#states' => array(
      'disabled' => array(
        ':input[name="raven_enabled"]' => array('unchecked' => TRUE),
      ),
    ),
    '#collapsed' => TRUE,
  );

  $form['raven_settings']['raven_connection_settings']['raven_timeout'] = array(
  $form['php']['connection']['raven_timeout'] = array(
    '#type' => 'textfield',
    '#title' => t('Timeout'),
    '#description' => t('Connection timeout in seconds.'),
    '#default_value' => variable_get('raven_timeout', 2),
  );

  $form['raven_settings']['raven_connection_settings']['raven_ssl'] = array(
  $form['php']['connection']['raven_ssl'] = array(
    '#type' => 'radios',
    '#title' => t('SSL Verification'),
    '#default_value' => variable_get('raven_ssl', 'verify_ssl'),
@@ -100,13 +83,11 @@ function raven_settings_form(array $form, array &$form_state) {
      'no_verify_ssl' => t("Don't verify SSL (not recommended)"),
    ),
  );
  $form['raven_settings']['raven_connection_settings']['raven_ca_cert'] = array(
  $form['php']['connection']['raven_ca_cert'] = array(
    '#type' => 'textfield',
    '#title' => t('Path to CA certificate'),
    '#default_value' => variable_get('raven_ca_cert', ''),
    '#description' => t('Path to the CA certificate file of the Sentry server specified in the DSN.'),

    // Only visible when 'raven_ssl' set to ca_cert.
    '#states' => array(
      'visible' => array(
        ':input[name=raven_ssl]' => array('value' => 'ca_cert'),
@@ -114,21 +95,21 @@ function raven_settings_form(array $form, array &$form_state) {
    ),
  );

  $form['raven_settings']['raven_exception_handler'] = array(
  $form['php']['raven_exception_handler'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable exception handler'),
    '#description' => t('Check to handle uncaught exceptions.'),
    '#default_value' => variable_get('raven_exception_handler', TRUE),
  );

  $form['raven_settings']['raven_fatal_error_handler'] = array(
  $form['php']['raven_fatal_error_handler'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable fatal error handler'),
    '#description' => t('Check to handle fatal PHP errors.'),
    '#default_value' => variable_get('raven_fatal_error_handler', TRUE),
  );

  $form['raven_settings']['raven_fatal_error_handler_memory'] = array(
  $form['php']['raven_fatal_error_handler_memory'] = array(
    '#type' => 'textfield',
    '#title' => t('Reserved memory'),
    '#description' => t('Reserved memory for fatal error handler (KB).'),
@@ -136,97 +117,53 @@ function raven_settings_form(array $form, array &$form_state) {
    '#size' => 10,
  );

  $form['raven_settings']['raven_js_handler'] = array(
    '#type' => 'fieldset',
    '#title' => t('JavaScript handler'),
  );

  $version = json_decode(file_get_contents(drupal_get_path('module', 'raven') . '/package-lock.json'))->dependencies->{'raven-js'}->version;

  $form['raven_settings']['raven_js_handler']['raven_js_enabled'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable JavaScript error handler'),
    '#description' => t('Check to send JavaScript exceptions to Sentry server (if user has the <a target="_blank" href="@url"><em>send JavaScript errors to Sentry</em> permission</a>).', array('@url' => url('admin/people/permissions', array('fragment' => 'module-raven')))),
    '#default_value' => variable_get('raven_js_enabled', FALSE),
  );

  $form['raven_settings']['raven_js_handler']['raven_public_dsn'] = array(
    '#type' => 'textfield',
    '#title' => t('Sentry Public DSN'),
    '#description' => t('Sentry public DSN credentials for current site.'),
    '#default_value' => variable_get('raven_public_dsn', ''),
  );

  $form['raven_settings']['raven_js_handler']['raven_js_source'] = array(
    '#type' => 'radios',
    '#title' => t('Raven.js source'),
    '#options' => drupal_map_assoc(array('library', 'cdn')),
    '#default_value' => variable_get('raven_js_source', 'library'),
  );

  $form['raven_settings']['raven_js_handler']['raven_js_source']['library'] = array(
    '#type' => 'radio',
    '#title' => t('Use local Raven.js library'),
    '#return_value' => 'library',
    '#description' => t('Version %version installed.', array('%version' => $version)),
  );

  $form['raven_settings']['raven_js_handler']['raven_js_source']['cdn'] = array(
    '#type' => 'radio',
    '#title' => t('Use Raven.js CDN'),
    '#return_value' => 'cdn',
    '#description' => t('Define URL below.'),
  );

  $form['raven_settings']['raven_js_handler']['raven_js_cdn_url'] = array(
    '#type' => 'textfield',
    '#title' => t('Raven.js CDN URL'),
    '#description' => t('Check latest version at <a target="_blank" rel="noreferrer" href="@url">@url</a>.', array('@url' => 'https://docs.sentry.io/clients/javascript/')),
    '#default_value' => variable_get('raven_js_cdn_url', "https://cdn.ravenjs.com/$version/raven.min.js"),
  );

  $form['raven_settings']['raven_error_handler'] = array(
  $form['php']['error'] = array(
    '#type' => 'fieldset',
    '#title' => t('PHP error handler'),
  );

  $form['raven_settings']['raven_error_handler']['raven_error_handler'] = array(
  $form['php']['error']['raven_error_handler'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable error handler'),
    '#description' => t('Check to handle PHP errors.'),
    '#default_value' => variable_get('raven_error_handler', TRUE),
  );

  $form['raven_settings']['raven_error_handler']['raven_error_levels'] = array(
  $form['php']['error']['raven_error_levels'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Error levels'),
    '#description' => t('Check error levels to handle.'),
    '#default_value' => variable_get('raven_error_levels', array()),
    '#options' => raven_get_error_levels(),
    '#states' => array(
      'disabled' => array(
      'invisible' => array(
        ':input[name="raven_error_handler"]' => array('unchecked' => TRUE),
      ),
    ),
  );

  $form['raven_settings']['raven_watchdog_handler'] = array(
  $form['php']['watchdog'] = array(
    '#type' => 'fieldset',
    '#title' => t('Watchdog handler'),
  );

  $form['raven_settings']['raven_watchdog_handler']['raven_watchdog_handler'] = array(
  $form['php']['watchdog']['raven_watchdog_handler'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable watchdog handler'),
    '#description' => t('Check to handle watchdog messages (except PHP and page-not-found errors).'),
    '#default_value' => variable_get('raven_watchdog_handler', FALSE),
  );

  $form['raven_settings']['raven_watchdog_handler']['raven_watchdog_page_not_found'] = array(
  $form['php']['watchdog']['raven_watchdog_page_not_found'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable page-not-found watchdog handler'),
    '#description' => t('Check to handle page-not-found watchdog messages.'),
    '#default_value' => variable_get('raven_watchdog_page_not_found', FALSE),
    '#states' => array(
      'invisible' => array(
        ':input[name="raven_watchdog_handler"]' => array('unchecked' => TRUE),
      ),
    ),
  );

  $_watchdog_levels = watchdog_severity_levels();
@@ -234,39 +171,109 @@ function raven_settings_form(array $form, array &$form_state) {
  foreach ($_watchdog_levels as $level => $label) {
    $watchdog_levels[$level + 1] = $label;
  }
  $form['raven_settings']['raven_watchdog_handler']['raven_watchdog_levels'] = array(
  $form['php']['watchdog']['raven_watchdog_levels'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Message levels'),
    '#description' => t('Check message levels to handle.'),
    '#default_value' => variable_get('raven_watchdog_levels', array()),
    '#options' => $watchdog_levels,
    '#states' => array(
      'disabled' => array(
      'invisible' => array(
        ':input[name="raven_watchdog_handler"]' => array('unchecked' => TRUE),
      ),
    ),
  );

  $form['raven_settings']['raven_stack'] = array(
  $form['php']['raven_stack'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable stacktraces'),
    '#description' => t('Enable it to add stacktraces to reports.'),
    '#default_value' => variable_get('raven_stack', TRUE),
  );

  $form['raven_settings']['raven_trace'] = array(
  $form['php']['raven_trace'] = array(
    '#type' => 'checkbox',
    '#title' => t('Reflection tracing in stacktraces'),
    '#description' => t('Check this to enable reflection tracing (function calling arguments) in stacktraces. Warning: This setting allows sensitive data to be logged by Sentry!'),
    '#default_value' => variable_get('raven_trace', FALSE),
  );

  $form['raven_settings']['raven_trace_user'] = array(
  $form['php']['raven_trace_user'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable reflection tracing for user watchdog messages'),
    '#description' => t('Check this to enable reflection tracing of user watchdog messages. This is disabled by default to avoid logging user passwords.'),
    '#default_value' => variable_get('raven_trace_user', FALSE),
  );

  $form['raven_js_enabled'] = array(
    '#type' => 'checkbox',
    '#title' => t('Enable JavaScript handler'),
    '#description' => t('Check to send client-side JavaScript exceptions to Sentry (if user has the <a target="_blank" href="@url"><em>send JavaScript errors to Sentry</em> permission</a>).', array('@url' => url('admin/people/permissions', array('fragment' => 'module-raven')))),
    '#default_value' => variable_get('raven_js_enabled', FALSE),
  );

  $form['js'] = array(
    '#type' => 'fieldset',
    '#title' => t('JavaScript handler settings'),
    '#collapsible' => TRUE,
    '#collapsed' => !variable_get('raven_js_enabled', FALSE),
    '#states' => array(
      'collapsed' => array(
        ':input[name="raven_js_enabled"]' => array('unchecked' => TRUE),
      ),
    ),
  );

  $version = json_decode(file_get_contents(drupal_get_path('module', 'raven') . '/package-lock.json'))->dependencies->{'raven-js'}->version;

  $form['js']['raven_public_dsn'] = array(
    '#type' => 'textfield',
    '#title' => t('Sentry Public DSN'),
    '#description' => t('Sentry public DSN credentials for current site.'),
    '#default_value' => variable_get('raven_public_dsn', ''),
  );

  $form['js']['raven_js_source'] = array(
    '#type' => 'radios',
    '#title' => t('Raven.js source'),
    '#options' => drupal_map_assoc(array('library', 'cdn')),
    '#default_value' => variable_get('raven_js_source', 'library'),
  );

  $form['js']['raven_js_source']['library'] = array(
    '#type' => 'radio',
    '#title' => t('Use local Raven.js library'),
    '#return_value' => 'library',
    '#description' => t('Version %version installed.', array('%version' => $version)),
  );

  $form['js']['raven_js_source']['cdn'] = array(
    '#type' => 'radio',
    '#title' => t('Use Raven.js CDN'),
    '#return_value' => 'cdn',
    '#description' => t('Define URL below.'),
  );

  $form['js']['raven_js_cdn_url'] = array(
    '#type' => 'textfield',
    '#title' => t('Raven.js CDN URL'),
    '#description' => t('Check latest version at <a target="_blank" rel="noreferrer" href="@url">@url</a>.', array('@url' => 'https://docs.sentry.io/clients/javascript/')),
    '#default_value' => variable_get('raven_js_cdn_url', "https://cdn.ravenjs.com/$version/raven.min.js"),
  );

  $form['raven_environment'] = array(
    '#type' => 'textfield',
    '#title' => t('Environment'),
    '#description' => t('The environment in which this site is running.'),
    '#default_value' => variable_get('raven_environment', ''),
  );

  $form['raven_release'] = array(
    '#type' => 'textfield',
    '#title' => t('Release'),
    '#description' => t('The release this site is running (could be a version or commit hash).'),
    '#default_value' => variable_get('raven_release', ''),
  );

  return system_settings_form($form);
}