| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 | <?php/** * @file * Install, update and uninstall functions for the webprofiler module. */use Drupal\Core\Url;/** * Implements hook_schema(). */function webprofiler_schema() {  $schema['webprofiler'] = [    'description' => 'Webprofiler profiles storage.',    'fields' => [      'token' => [        'description' => 'Profile token.',        'type' => 'varchar',        'length' => 6,        'not null' => TRUE,      ],      'data' => [        'description' => 'Profile data.',        'type' => 'text',        'size' => 'big',        'not null' => TRUE,      ],      'ip' => [        'description' => 'Request IP.',        'type' => 'varchar',        'length' => 64,        'not null' => TRUE,      ],      'method' => [        'description' => 'Request method.',        'type' => 'varchar',        'length' => 6,        'not null' => TRUE,      ],      'url' => [        'description' => 'Requested URL.',        'type' => 'varchar',        'length' => 2048,        'not null' => TRUE,      ],      'time' => [        'description' => 'Request time.',        'type' => 'int',        'unsigned' => TRUE,        'not null' => TRUE,      ],      'parent' => [        'description' => 'Profile parent.',        'type' => 'varchar',        'length' => 6,        'not null' => FALSE,      ],      'created_at' => [        'description' => 'Profile created time.',        'type' => 'int',        'unsigned' => TRUE,        'not null' => TRUE,      ],      'status_code' => [        'description' => 'Profile status code.',        'type' => 'int',        'size' => 'small',        'unsigned' => TRUE,        'not null' => TRUE,      ],    ],    'indexes' => [      'created_at' => ['created_at'],      'ip' => ['ip'],      'method' => ['method'],      'parent' => ['parent'],    ],    'primary key' => ['token'],  ];  return $schema;}/** * Implements hook_requirements(). */function webprofiler_requirements($phase) {  $requirements = [];  if ('runtime' == $phase) {    $has_d3 = _webprofiler_verify_library('webprofiler', 'd3');    $requirements['d3js'] = [      'title' => t('D3.js library'),      'value' => $has_d3 ? t('Enabled') : t('Not found'),    ];    if (!$has_d3) {      $requirements['d3js']['severity'] = REQUIREMENT_WARNING;      $requirements['d3js']['description'] = [        '#prefix' => ' ',        '#markup' => t('Webprofiler module requires D3.js library to properly render data. Composer based install recommended, see README.md file for instructions.'),      ];    }    $has_highlight = _webprofiler_verify_library('webprofiler', 'highlightjs');    $requirements['highlightjs'] = [      'title' => t('highlight.js library'),      'value' => $has_highlight ? t('Enabled') : t('Not found'),    ];    if (!$has_highlight) {      $requirements['highlightjs']['severity'] = REQUIREMENT_WARNING;      $requirements['highlightjs']['description'] = [        '#prefix' => ' ',        '#markup' => t('Webprofiler module requires highlight.js library to syntax highlight collected queries. Composer based install recommended, see README.md file for instructions.'),      ];    }  }  return $requirements;}/** * Verify that the library files exist. * * @param string $extension *   The name of the extension that registered a library. * @param string $name *   The name of a registered library to retrieve. * * @return bool *   TRUE if all files of this library exists, FALSE otherwise * * @see https://drupal.org/node/2231385 */function _webprofiler_verify_library($extension, $name) {  /** @var Drupal\Core\Asset\LibraryDiscovery $library_discovery */  $library_discovery = \Drupal::service('library.discovery');  $library = $library_discovery->getLibraryByName($extension, $name);  $exist = TRUE;  if ($library['js']) {    foreach ($library['js'] as $js) {      if ($js['type'] == 'file') {        if (!file_exists(DRUPAL_ROOT . '/' . $js['data'])) {          $exist = FALSE;        }      }    }  }  if ($library['css']) {    foreach ($library['css'] as $css) {      if ($css['type'] == 'file') {        if (!file_exists(DRUPAL_ROOT . '/' . $css['data'])) {          $exist = FALSE;        }      }    }  }  if ($library['dependencies']) {    foreach ($library['dependencies'] as $dependency) {      $parts = explode('/', $dependency);      $exist = _webprofiler_verify_library($parts[0], $parts[1]);    }  }  return $exist;}/** * Add a status_code column to the webprofiler table. */function webprofiler_update_8001() {  $database = \Drupal::database();  $schema = $database->schema();  $spec = array(    'description' => 'Profile status code.',    'type' => 'int',    'size' => 'small',    'unsigned' => TRUE,    'not null' => TRUE,  );  $schema->addField('webprofiler', 'status_code', $spec);}
 |