webprofiler.install in Devel 8.3
Same filename and directory in other branches
Install, update and uninstall functions for the webprofiler module.
File
webprofiler/webprofiler.installView source
<?php
/**
* @file
* Install, update and uninstall functions for the webprofiler module.
*/
/**
* 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 = [
'description' => 'Profile status code.',
'type' => 'int',
'size' => 'small',
'unsigned' => TRUE,
'not null' => TRUE,
];
$schema
->addField('webprofiler', 'status_code', $spec);
}
Functions
Name | Description |
---|---|
webprofiler_requirements | Implements hook_requirements(). |
webprofiler_schema | Implements hook_schema(). |
webprofiler_update_8001 | Add a status_code column to the webprofiler table. |
_webprofiler_verify_library | Verify that the library files exist. |