Commit 013d4dbd authored by Stephen Mustgrave's avatar Stephen Mustgrave
Browse files

Issue #3316329: Move UI code to separate submodule

parent cdc8f163
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -5,6 +5,8 @@ the user (using the forms) are saved in the database and can be viewed on the
page admin/reports/events-track. You could use this to track number of times the
CUD operation performed by which users.

Added Event Log Track UI to see the logs directly.

Currently, the following sub modules of Events Log Track are supported:
- Menu (custom menu's and menu items CUD operations)
- Node (CUD operations)
+13 −0
Original line number Diff line number Diff line
@@ -122,3 +122,16 @@ function event_log_track_update_8102($sandbox) {
  $schema->changeField('event_log_track', 'path', 'path', $field);
  return t('"path" field size increased.');
}

/**
 * Install event_log_track_ui submodule.
 */
function event_log_track_update_9401($sandbox) {
  $moduleHandler = \Drupal::service('module_handler');
  if (!$moduleHandler->moduleExists('event_log_track_ui')) {
    $installer = \Drupal::service('module_installer');
    $installer->install(['event_log_track_ui']);
    drupal_flush_all_caches();
  }
}
+0 −6
Original line number Diff line number Diff line
event_log_track.report_form:
  title: 'Events Log Track'
  parent: system.admin_reports
  description: 'Get report about cud operation performed by the user on the website.'
  weight: -5
  route_name: event_log_track.report_form
event_log_track.settings_form:
  title: 'Events Log Track'
  route_name: event_log_track.settings_form
+0 −93
Original line number Diff line number Diff line
@@ -5,9 +5,7 @@
 * Track the logs of form submissions or other actions that performed by user.
 */

use Drupal\Core\Render\Element;
use Drupal\Core\Url;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Routing\RouteMatchInterface;

/**
@@ -131,97 +129,6 @@ function event_log_track_insert(array &$log, bool $logOnCLI = FALSE) {
  }
}

/**
 * Returns all existing event handlers.
 *
 * @return array
 *   An array with the event log handlers.
 */
function event_log_track_get_event_handlers(): array {
  $handlers = drupal_static(__FUNCTION__);
  if ($handlers === NULL) {
    $handlers = Drupal::moduleHandler()->invokeAll('event_log_track_handlers');
    \Drupal::moduleHandler()->alter('event_log_track_handlers', $handlers);
  }
  return $handlers;
}

/**
 * Form submission callback.
 */
function event_log_track_form_submit(&$form, FormStateInterface $form_state) {
  if (!empty($form_state->__event_log_track_logged)) {
    // Some forms are submitted twice, for instance the node_form.
    // We will only call the submit callback once.
    return;
  }

  $form_state->__event_log_track_logged = TRUE;

  // Get form id.
  $form_id = $form['#form_id'];

  // Dispatch the submission to the correct event handler.
  $handlers = event_log_track_get_event_handlers();
  foreach ($handlers as $type => $handler) {
    $dispatch = FALSE;
    if (!empty($handler['form_ids']) && in_array($form_id, $handler['form_ids'])) {
      $dispatch = TRUE;
    }
    elseif (!empty($handler['form_ids_regexp'])) {
      foreach ($handler['form_ids_regexp'] as $regexp) {
        if (preg_match($regexp, $form_id)) {
          $dispatch = TRUE;
          break;
        }
      }
    }

    if ($dispatch) {
      // Dispatch!
      $function = $handler['form_submit_callback'];
      if (function_exists($function)) {
        $log = $function($form, $form_state, $form_id);
        if (!empty($log)) {
          // Log the event.
          $log['type'] = $type;
          event_log_track_insert($log);
        }
      }
    }
  }
}

/**
 * Implements hook_form_alter().
 */
function event_log_track_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  // Add submit callback to ANY form action.
  event_log_track_add_submit_handler($form, 'event_log_track_form_submit');
}

/**
 * Adds a submit handler to all submit hooks in the form tree.
 *
 * @param array &$element
 *   A form element or the form itself.
 * @param string $callback
 *   The callback to be added.
 */
function event_log_track_add_submit_handler(array &$element, string $callback) {
  if (array_key_exists("#submit", $element)) {
    if ((!empty($element['#type']) && $element['#type'] == 'form') || count($element["#submit"])) {
      $element["#submit"][] = $callback;
    }
  }
  $keys = Element::children($element);
  foreach ($keys as $key) {
    if (is_array($element[$key])) {
      event_log_track_add_submit_handler($element[$key], $callback);
    }
  }
}

/**
 * Implements hook_cron().
 */
+0 −7
Original line number Diff line number Diff line
event_log_track.report_form:
  path: '/admin/reports/events-track'
  defaults:
    _controller: '\Drupal\event_log_track\Controller\AdminController::adminPage'
    _title: 'Event log track'
  requirements:
    _permission: 'access event log track'
event_log_track.settings_form:
  path: '/admin/config/system/events-log-track'
  defaults:
Loading