diff core/modules/dblog/dblog.install @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children a9cd425dd02b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/modules/dblog/dblog.install	Thu Jul 05 14:24:15 2018 +0000
@@ -0,0 +1,158 @@
+<?php
+
+/**
+ * @file
+ * Install, update and uninstall functions for the dblog module.
+ */
+
+/**
+ * Implements hook_schema().
+ */
+function dblog_schema() {
+  $schema['watchdog'] = [
+    'description' => 'Table that contains logs of all system events.',
+    'fields' => [
+      'wid' => [
+        'type' => 'serial',
+        'not null' => TRUE,
+        'description' => 'Primary Key: Unique watchdog event ID.',
+      ],
+      'uid' => [
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'The {users}.uid of the user who triggered the event.',
+      ],
+      'type' => [
+        'type' => 'varchar_ascii',
+        'length' => 64,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => 'Type of log message, for example "user" or "page not found."',
+      ],
+      'message' => [
+        'type' => 'text',
+        'not null' => TRUE,
+        'size' => 'big',
+        'description' => 'Text of log message to be passed into the t() function.',
+      ],
+      'variables' => [
+        'type' => 'blob',
+        'not null' => TRUE,
+        'size' => 'big',
+        'description' => 'Serialized array of variables that match the message string and that is passed into the t() function.',
+      ],
+      'severity' => [
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+        'size' => 'tiny',
+        'description' => 'The severity level of the event; ranges from 0 (Emergency) to 7 (Debug)',
+      ],
+      'link' => [
+        'type' => 'text',
+        'not null' => FALSE,
+        'description' => 'Link to view the result of the event.',
+      ],
+      'location'  => [
+        'type' => 'text',
+        'not null' => TRUE,
+        'description' => 'URL of the origin of the event.',
+      ],
+      'referer' => [
+        'type' => 'text',
+        'not null' => FALSE,
+        'description' => 'URL of referring page.',
+      ],
+      'hostname' => [
+        'type' => 'varchar_ascii',
+        'length' => 128,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => 'Hostname of the user who triggered the event.',
+      ],
+      'timestamp' => [
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'Unix timestamp of when event occurred.',
+      ],
+    ],
+    'primary key' => ['wid'],
+    'indexes' => [
+      'type' => ['type'],
+      'uid' => ['uid'],
+      'severity' => ['severity'],
+    ],
+  ];
+
+  return $schema;
+}
+
+/**
+ * Use standard plugin for wid and uid fields. Use dblog_types for type filter.
+ */
+function dblog_update_8400() {
+  $config_factory = \Drupal::configFactory();
+
+  foreach ($config_factory->listAll('views.view.') as $view_config_name) {
+    $view = $config_factory->getEditable($view_config_name);
+    if ($view->get('base_table') != 'watchdog') {
+      continue;
+    }
+
+    $save = FALSE;
+    foreach ($view->get('display') as $display_name => $display) {
+      // Iterate through all the fields of watchdog views based tables.
+      if (isset($display['display_options']['fields'])) {
+        foreach ($display['display_options']['fields'] as $field_name => $field) {
+          // We are only interested in wid and uid fields from the watchdog
+          // table that still use the numeric id.
+          if (isset($field['table']) &&
+              $field['table'] === 'watchdog' &&
+              $field['plugin_id'] == 'numeric' &&
+              in_array($field['field'], ['wid', 'uid'])) {
+
+            $save = TRUE;
+            $new_value = $field;
+            $new_value['plugin_id'] = 'standard';
+
+            // Delete all the attributes related to numeric fields.
+            unset(
+              $new_value['set_precision'],
+              $new_value['precision'],
+              $new_value['decimal'],
+              $new_value['separator'],
+              $new_value['format_plural'],
+              $new_value['format_plural_string'],
+              $new_value['prefix'],
+              $new_value['suffix']
+            );
+            $view->set("display.$display_name.display_options.fields.$field_name", $new_value);
+          }
+        }
+      }
+
+      // Iterate all filters looking for type filters to update.
+      if (isset($display['display_options']['filters'])) {
+        foreach ($display['display_options']['filters'] as $filter_name => $filter) {
+          if (isset($filter['table']) &&
+              $filter['table'] === 'watchdog' &&
+              $filter['plugin_id'] == 'in_operator' &&
+              $filter['field'] == 'type') {
+
+            $save = TRUE;
+            $filter['plugin_id'] = 'dblog_types';
+            $view->set("display.$display_name.display_options.filters.$filter_name", $filter);
+          }
+        }
+      }
+    }
+
+    if ($save) {
+      $view->save();
+    }
+  }
+}