Try   HackMD

Tripal 4 Upgrade Notes

This document is indended to quickly save upgrade information. During the process of upgrading Tripal Core we're going to place useful information here until it can be more formally written up into docs.

tripal_set_message() and tripal_report_error()

These functions have been upgraded and thus can be used as is. However, the new way is use a logger service as shown below.

$logger = \Drupal::service('tripal.logger');
$logger->notice('Hello world');
$logger->info('Hello world');
$logger->warning('Hello world');
$logger->error('Hello world');
$logger->debug('Hello world');

drupal_set_message()

Changelog: https://www.drupal.org/node/2774931

use Drupal\Core\Messenger\MessengerInterface;
// if not set by constructor...
$this->messenger = \Drupal::messenger();

// Add specific type of message within classes.
$this->messenger->addMessage('Hello world', 'custom');
$this->messenger->addError('Hello world');
$this->messenger->addStatus('Hello world');
$this->messenger->addWarning('Hello world');

// In procedural code:
$messenger = \Drupal::messenger();
$messenger->addMessage('Hello world', 'custom');
$messenger->addError('Hello world');
$messenger->addStatus('Hello world');
$messenger->addWarning('Hello world');

drupal_add_js() and drupal_add_css()

Changelog: https://www.drupal.org/node/2169605

// Example, to attach your library to a form (Form controller see routing):
$form['#attached']['library'][] = 'yourmodule/create-pallets';

# Library definitions in module.libraries.yml
create-pallets:
  version: 1.x
  header: false
  js:
    js/create-pallets.js: {}

// Passing PHP data/values to your script.
$form['#attached']['library'][] = 'yourmodule/create-pallets';
$form['#attached']['drupalSettings']['yourmodule']['colour_scheme'] = $color_scheme;

// Access data/values in your script:
var colour_scheme = drupalSettings.yourmodule.colour_scheme;
console.log(colour_scheme);

variable_get(), variable_set(), variable_del()

Changelog:

How to upgrade D7 variables to D8's state system
https://www.drupal.org/docs/upgrading-and-converting-drupal-7-modules/step-5-how-to-upgrade-d7-variables-to-d8s-state

It is important to uninstall then install the module each time you add/test another variable.

module_invoke_all()

Changelog: https://www.drupal.org/node/1894902

In D7:
module_invoke_all(hook name);
where hook name is the name of the hook to invoke

In D8:
\Drupal::moduleHandler()->invokeAll(hook name, $args = array());

module.info - module.info.yml

Changelog: https://www.drupal.org/node/1935708

Let Drupal know about your module.
See this step by step guide to converting your module.info to module.info.yml.

https://www.drupal.org/docs/converting-drupal-7-modules-to-drupal-8/step-1-convert-mymoduleinfo-to-mymoduleinfoyml

hook_menu()

Changelog: https://www.drupal.org/node/1800686

Routes are responsible for associating a path to controllers. Converting Drupal 7 hook_menu() items to Drupal 8 APIs should start with defining the routes for the items.

Introductory Drupal 8 Routes:
https://www.drupal.org/node/2116767

Structures of Routes:
https://www.drupal.org/docs/drupal-apis/routing-system/structure-of-routes

D7 - D8 upgrade tutorial: Convert hook_menu to Drupal 8 APIs:
https://www.drupal.org/docs/converting-drupal-7-modules-to-drupal-8/d7-to-d8-upgrade-tutorial-convert-hook_menu-and-hook

hook_permissions()

Changelog: https://www.drupal.org/node/2311427

Permissions are now defined in $module.permissions.yml file instead of using hook_permission() and there is scarce information about what each permission
options means other than the following.

machine name of the permission required to visit the URL.
title is the human readable information appearing in the Permissions page.
When "restrict access" is set to "true" a warning about site security will be displayed on the Permissions page.
description is optional

An example:

# In your module.permissions.yml
view tripald3 json:
  title: 'View Tripal D3 JSON'
  description: 'Required for anyone wanting to view a Tripal D3 diagram'
  restricted access: TRUE

# To use, in your module.routing.yml set the _permission: to the machine
# name of the permission.
tripald3.tree:
  path: '/ajax/tripal/d3-json/relationships/{base_table}/{id}'
  defaults:
    _title: 'Tripal D3 JSON API: Stock Relationship Object'
    _controller: '\Drupal\tripald3\Controller\TripalD3RelationshipJsonController::response'
  requirements:
    _permission: 'view tripald3 json'

PHP Unit Browser Test

Drupal PHP Unit Test
https://www.drupal.org/docs/automated-testing/phpunit-in-drupal/phpunit-browser-test-tutorial

Configuration Schema

Used in your configuration YML files
https://www.drupal.org/docs/drupal-apis/configuration-api/configuration-schemametadata
An example:
https://www.drupal.org/docs/drupal-apis/configuration-api/creating-a-configuration-entity-type

AJAX Forms

https://www.drupal.org/docs/drupal-apis/javascript-api/ajax-forms