Date:
20 September 2019
Author:
Sonny Kieu

What is Single Digital Presence?

Single Digital Presence (SDP) is a whole-of-government digital platform designed and built by Salsa Digital and Victoria’s Department of Premier and Cabinet (DPC). It’s been set up to make it easier for citizens to find, understand and use Victorian Government information, while also making building websites easier and cheaper for all Victorian Government agencies who choose to leverage the platform. Single Digital Presence is built using a headless Drupal distribution. More about SDP

What are SDP modules?

Websites built on Single Digital Presence are made up of a variety of Single Digital Presence (Drupal) modules. These modules form the building blocks of each website and allow developers to re-use existing code to create websites faster and more easily. As the Single Digital Presence community grows, the number of available modules will also increase.

Current modules

There are currently 72 contributed modules and 15 custom modules in SDP. These can be broken down into the following categories:

Performance modules

Performance modules help to keep a site running smoothly and help with overall site performance. Performance modules include:

  • Elasticsearch Connector: Elasticsearch Connector is a set of modules designed to build a full Elasticsearch ecosystem in Drupal. It uses the official Elasticsearch PHP library. The goal of this module is to help Drupal handle big data of any kind and make it scalable. Go to Elasticsearch Connector moduleExternal Link

  • Fast 404: Drupal has expensive 404 errors. This module combines a very common method of handling missing image/file 404 errors with a method created by dpardo (a co-maintainer of this project) to deliver super fast 404 error pages for both missing images and bad paths. Depending on which method of implementation you choose (aggressive or super aggressive) you can deliver 404 errors using less than 1MB of memory on your server as opposed to the 60-100MB it would otherwise take. Go to Fast 404 moduleExternal Link

  • Purge: The Purge module facilitates cleaning external caching systems, reverse proxies and CDNs as content actually changes. This allows external caching layers to keep unchanged content cached indefinitely, making content delivery more efficient, resilient and better guarded against traffic spikes. Go to Purge moduleExternal Link

  • Redis: Integration of Drupal with the Redis key-value store. It provides cache, lock and path optional backends as well as a placeholder module for contribution modules for easier usage. Go to Redis moduleExternal Link

  • Search API: This module provides a framework for easily creating searches on any entity known to Drupal using any kind of search engine. For site administrators, it’s a great alternative to other search solutions since it already incorporates the ability to use the Views module for displaying search results, filters, etc. Also, with the Apache Solr integration, a high-performance search engine is available for this module. Go to Search API moduleExternal Link

  • URLs queuer: This module queues URLs or paths to your Purge queue. Drupal 8 introduces tag-based cache invalidation, which is much more efficient than legacy URL or path-based invalidation and leads to less processing and smaller queues. Go to URLs queuer moduleExternal Link

Security and privacy modules

Security and privacy are key concerns for web developers and are especially important for government websites. Below are several modules Single Digital Presence uses to improve site security and privacy:

  • Allowed Formats: This limits the text formats that can be entered into each field. This can be toggled using checkboxes to customise the field instance. Go to Allowed Formats moduleExternal Link

  • ClamAV: Drupal integration with ClamAV virus scanner. This module will verify that files uploaded to a site are not infected with a virus, and prevents infected files from being saved. Go to ClamAV moduleExternal Link

  • Events Log Track: This module tracks logs of specific events that you’d like to review. The events performed by the users (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 the number of times the CUD (Create, Update and Delete) operations are performed by specific users. Currently, the following sub modules of Events Log Track are supported:

    • Menu (menus and menu items CUD operations)
    • Node (CUD operations)
    • Taxonomy (vocabulary and term CUD operations)
    • User (CUD operations)
    • User authentication (login/logout/request password)

    Go to Events Log Track moduleExternal Link

  • Password Policy: This module provides a way to enforce restrictions on user passwords by defining password policies. Go to Password Policy moduleExternal Link

  • Password Strength: The Password Strength module provides realistic password strength measurement and server-side enforcement for Drupal sites using pattern-matching and entropy calculation. Almost any type of password can be allowed as long as the password proves to be of high enough entropy. Go to Password Strength moduleExternal Link

  • Password Reset Landing Page (PRLP): The Password Reset Landing Page (PRLP) module enhances the original password reset landing page by letting a user set their new password at the same time they log in using the one-time-login link. It can also show a username and email address field. The password entry field can be configured to be mandatory. Other entry fields can be hidden through configuration and the page the user is taken to after login can be configured. Go to PRLP moduleExternal Link

  • Security Kit: SecKit provides Drupal with various security-hardening options. This lets you mitigate the risks of exploitation of different web application vulnerabilities. Go to Security Kit moduleExternal Link

  • Shield: The PHP authentication shield creates a simple shield for the site with Apache authentication. It hides the sites if the user doesn’t know a simple username/password. It handles Drupal as a “walled garden”. This module helps you to protect your (dev) site with HTTP authentication. Go to Shield moduleExternal Link

  • 403 to 404: 403 to 404 is a simple module that emits a 404 error when a user tries to access a page that they don’t have permission to view. Go to 403 to 404 moduleExternal Link

Configuration and development modules

Included in the 72 contributed modules are a number of configuration and development modules. Configuration modules make it easier for developers to customise websites and systems to ensure they’re functioning properly and provide an easy-to-use experience for the viewer. These modules include:

  • Address: Provides functionality for storing, validating and displaying international postal addresses. Go to Address moduleExternal Link

  • Better Exposed Filters: These are designed to help the user with the view and allows them to create an easier customised, advanced search. Better Exposed Filters allow you to have greater control over the rendering of exposed filters. Go to Better Exposed Filters moduleExternal Link

  • Chaos Tool Suite (ctools): This suite is primarily a set of APIs and tools to improve the developer experience. Go to Chaos Tool Suite (ctools) moduleExternal Link

  • Coffee: The Coffee module helps you to navigate through the Drupal admin faster, inspired by Mac apps Alfred and Spotlight. Just type alt+d to start Coffee and type ahead for the page you want to visit. Go to Coffee moduleExternal Link

  • Config Devel: This module helps with developing configuration. It should not be used in production environments and developers should exercise caution and always use version control. Configuration Development does three things:

    • Automated import of configuration files into the active storage. At the beginning of every request the changed files are saved the same way as if it was dumped in the core config module provided "Single import" form.

    • Automated export of configuration objects into files. Only a list of filenames is required, the configuration object names are automatically derived. One configuration object can be auto exported into multiple files. This is the equivalent of copying the export from the ‘Single export’ screen.

    • Helps create modules that behave somewhat similarly to features export in Drupal 7. Under config_devel the module info yml should contain a list of config objects this module deals with, then drush config-devel-export MODULE_NAME will write those config objects into the config/install directory of the module.

    Typically file names will be something like modulename/config/install/foo.bar.yml. Go to Config Devel moduleExternal Link

  • Config Filter: Modules such as Config Split want to modify the configuration when it’s synchronised between the database and the exported yaml files. This module provides the API to do so but does not influence a site’s operation. Go to Config Filter moduleExternal Link

  • Config Ignore: This module allows any site or system configuration to remain untouched, ignoring any potential overrides. Go to Config Ignore moduleExternal Link

  • Config Split: This module allows developers to define sets of configuration that will get exported to separate directories when exporting, and get merged together when importing. It’s possible to define which of these sets should be active and considered for the export and import in settings.php. Go to Config Split moduleExternal Link

  • Configuration Update Manager: The Configuration Update Manager project contains a base module and a reporting module. The base module is used if another project has it as a dependency (example: Features). The report module’s main use case is: You update a module and it has either changed the default config that it provides, or has added new config items. You want to be able to import the new items, view the differences between the site config and the changed config, and possibly “revert” (or it may be an update) to the newly provided default config. Go to configuration Update Manager moduleExternal Link

  • D8 Editor Advanced link: Enhances the link Dialog in D8 CKEditor and allows the following attributes to be defined:

    • Title
    • Class
    • Id
    • Target
    • Rel

    Go to Drupal 8 Editor Advanced link moduleExternal Link

  • Devel: A suite of modules containing fun for module developers and themers:

    • Helper functions for Drupal developers and inquisitive admins.

    • Enable the included Kint submodule as for pretty print of variables. kint($array) function is provided, which pretty prints arrays. Useful during development. Similarly, a ddebug_backtrace() is offered.

    Go to Devel moduleExternal Link

  • Environment Indicator: This module helps while you’re working on your different environments by adding a configurable colour bar to each one of your environments. The Environment Indicator adds a coloured bar on the site informing you which environment you’re currently in (Development, Staging, Production, etc.). This is incredibly useful if you have multiple environments for each of your sites or are prone to making configuration changes to your live server by mistake. Go to Environmental Indicator moduleExternal Link

  • Maxlength: Maxlength allows you to set the maximum length of any field on any form making use of the form API. This includes fields created using the UI. In D6, Maxlength allows you to set maximum lengths to the body, title and CCK text fields of any content type (node). When the maximum length is enforced for a field, while editing content of that type some Javascript will countdown how many characters are left. If Javascript is turned off, it falls back to form API validation. Go to Maxlength moduleExternal Link

  • Metatag: The Metatag module allows you to automatically provide structured metadata, aka “meta tags”, about a website. In the context of search engine optimisation, when people refer to meta tags they’re usually referring to the meta description tag and the meta keywords tag that may help improve the rankings and display of a site in search engine results. In addition, the module provides support for meta tags (Open Graph Protocol from Facebook, Twitter Cardsfrom Twitter) that allows control of how content appears when shared on social networks. Go to Metatag moduleExternal Link

  • Redirect: Redirect is a module that allows developers to redirect data on the webpage. Current features of this module include:

    • Common API for loading, saving and deleting redirects.

    • Case-insensitive redirect matching with a hook to allow other modules to narrow-down the candidate redirects.

    • Redirect counter and last used timestamp, with automatic cleanup of inactive redirects.

    • Integration with Drupal's page cache to optimise redirects and performance.

    • Complete individual redirect access API.

    • Views API integration.

    Go to Redirect moduleExternal Link

  • Stage File Proxy: Stage File Proxy is a general solution for getting production files on a development server on demand. It saves you time and disk space by sending requests to your development environment’s files directory to the production environment and making a copy of the production file in your development site. You shouldn’t need to enable this module in production. Go to Stage File Proxy moduleExternal Link

  • Twig Field Value: Twig Field Value allows Drupal 8 themers to get partial data from field render arrays. It gives them more control over the output without drilling deep into the render array or using preprocess functions. Go to Twig Field Value moduleExternal Link

Site building and management modules

These modules help build and manage a Single Digital Presence website. Site building and management modules are:

  • Admin Toolbar: This is designed to transform the Drupal toolbar into a dropdown menu to make it faster and easier to access administration pages. Go to Admin Toolbar moduleExternal Link

  • Entity Browser: The goal of this module is to provide a generic entity browser/picker/selector. It can be used in any context when you need to select a few entities and do something with them. Possible use cases for this module include powerful entity reference widget or embedding entities into WYSIWYG. Go to Entity Browser moduleExternal Link

  • Entity Embed: Entity Embed allows any entity to be embedded within a text area using a WYSIWYG editor. Go to Entity Embed moduleExternal Link

  • Entity Reference Revisions: Adds an Entity Reference field type with revision support. It’s based on the core Entity Reference module but allows you to reference a specific entity. This is useful for modules like Paragraphs and maybe in the future for modules like Inline Entity Form and Field Collection. Go to Entity Reference Revisions moduleExternal Link

  • Google Analytics: Adds the Google Analytics web statistics tracking system to your website. The module allows you to add the following statistics features to your site:

    • Single/multi/cross domain tracking

    • Selectively track/exclude certain users, roles and pages

    • Monitor what type of links are tracked (downloads, outgoing and mailto)

    • Monitor what files are downloaded from your pages

    • Custom dimensions and metrics support with tokens

    • Custom code snippets

    • Site search support

    • AdSense support

    • Demographics and interests support (formerly known as DoubleClick remarketing support)

    • Anonymise visitors’ IP addresses

    • DoNotTrack support (non-cached content only)

    • Drupal messages tracking

    • Modal dialog tracking (Colorbox)

    • Access denied (403) and Page not found (404) tracking

    • Cache the Google Analytics code on your local server for improved page loading times

    • Enhanced link attribution support

    • User ID tracking across devices

    • Changing URL fragments can be tracked as pageviews

    • Debug mode with analytics_debug.js

    Go to Google Analytics moduleExternal Link

  • Hotjar: Adds the Hotjar tracking system to your website. Go to Hotjar moduleExternal Link

  • Inline Entity Form: Provides a widget for inline management (creation, modification, removal) of referenced entities. The primary use case is the parent -> children one (product display -> products, order -> line items, etc.), where the child entities are never managed outside the parent form. Existing entities can also be referenced. Go to Inline Entity Form moduleExternal Link

  • Lagoon Logs: Lagoon Logs aims to be as close to a zero configuration logging system for Drupal 7 and 8 sites running on amazee.io’s Lagoon. Go to Lagoon Logs moduleExternal Link

  • Override Node Options: The Override Node Options module allows permissions to be set to each field within the authoring information and publishing options field sets on the node form. It also allows selected field sets to be set as collapsed and/or collapsible. Go to Override Node Options moduleExternal Link

  • Role Delegation: This module allows site administrators to grant specific roles the authority to assign selected roles to users, without them needing the administer permissions permission. For each role, Role Delegation provides a new ‘assign (role)’ role permission to allow the assignment of that role. The module also adds an ‘assign all roles’ permission. Enabling this permission for a role is a convenient way to allow the assignment of any other role without having to check all the assign (role) role permissions on the permissions page. Go to Role Delegation moduleExternal Link

  • Views Menu Children Filter: This module adds a contextual filter to Views that will retrieve a node’s child nodes according to a menu’s structure. Go to Views Menu Children Filter moduleExternal Link

  • Views Reference Field: This field, in conjunction with the Paragraphs module, makes for a very powerful content management system, allowing the addition of just about any kind of content into an entity page. In Drupal 8, Views are now identified as entities and the core Entity Reference Module is able to reference Views, however not Views displays. This module leverages core entity reference module functionality to add the display ID so that a View can be rendered in a field formatter. Go to Views Reference Field moduleExternal Link

  • Webform: Webform is the module for making forms and surveys in Drupal. After a submission, customisable emails can be sent to administrators and/or submitters. Results can be exported into Excel or other spreadsheet applications. Webform also provides some basic statistical review and has an extensive API for expanding its features. Go to Webform moduleExternal Link

  • WYSIWYG Template: In TinyMCE, CK Editor and FCK Editor, there is a template function that allows a user to select an HTML template from a dropdown and insert it into the WYSIWYG text area. This module supports those features for use with the WYSIWYG API. Go to WYSIWIG Template moduleExternal Link

Multimedia modules

Creating a dynamic and interesting website maximises user engagement. One way to do this is to incorporate media such as images, videos and audio. Single Digital Presence incorporates many multimedia modules, including:

  • CKEditor Iframe: This module integrates the CKEditor iFrame Dialog for CKEditor. After installing, you’ll be able to add a button to the CKEditor toolbar that will allow a user to embed iframe content from YouTube or applications like Google Calendar. Go to CKEditor IFrame moduleExternal Link

  • CKEditor FakeObjects: This plugin helps to create a “representative” (image with styles) for certain elements that have problems with living in an editable state. It provides the API the ability to transform a real DOM element into the “fake” one, and to restore the real element from the fake one on the output. Go to CKEditor FakeObjects moduleExternal Link

  • Embed: A framework module to embed things using the Drupal 8 WYSIWYG editor. Go to Embed moduleExternal Link

  • Media Entity Audio: Local audio file integration for the Media entity module. Go to Media Entity Audio moduleExternal Link

  • SVG Image: This module changes the default image field widget and formatter to allow use of SVG Image with the standard image field. Go to SVG Image moduleExternal Link

  • Video Embed Field: Video Embed Field creates a simple field type that allows you to embed videos from YouTube and Vimeo and show their thumbnail previews simply by entering the video’s URL. Go to Video Embed Field moduleExternal Link

Miscellaneous modules

  • Default Content for D8: Default content gives your module and install profile a way to ship default content as well as configuration. It’s powered by core’s serialisation, rest and hal modules. Go to Default Content for Drupal 8 moduleExternal Link

  • Diff: This module adds a tab for sufficiently permissioned users. The tab shows all revisions like standard Drupal, but it also allows viewing of all added/changed/deleted words between revisions. Go to Diff moduleExternal Link

  • Field Group: Field Group will, as the name implies, group fields together. All fieldable entities will have the possibility to add groups to wrap their fields together. Field Group comes with default HTML wrappers like vertical tabs, horizontal tabs, accordions, fieldsets or div wrappers. Go to Field Group moduleExternal Link

  • JSON:API: Generate an API server that implements the JSON:API specification. Go to JSON:API moduleExternal Link

  • JSON:API Extras: The JSON:API module provides zero configuration out-of-the-box. Use JSON:API Extras to customise your API. JSON:API Extras provides a means to override and provide limited configurations to the default zero-configuration implementation provided by the JSON:API module. The current features of the JSON:API Extras module include the ability to:

    • Enable and disable resources.
    • Overwrite the name and/or path of a resource.
    • Disable fields.
    • Use field aliases.
    • Enhance field output.

    Go to JSON:API Extras moduleExternal Link

  • Linkit: Linkit provides an easy interface for internal and external linking with WYSIWYG editors by using an autocomplete field. Linkit has default support for nodes, users, taxonomy terms, files, comments and basic support for all types of entities that defines a canonical link template. Go to Linkit moduleExternal Link

  • Paragraphs: Paragraphs is a module that gives end users the ability to choose on-the-fly between predefined paragraph types independent from one another. Paragraph types can be anything you want from a simple text block or image to a complex and configurable slideshow. Paragraphs module comes with a new “paragraphs” field type that works like Entity References. Simply add a new paragraphs field on any content type you want and choose which paragraph types should be available to end users. They can then add as many paragraph items as you allowed them to and reorder them at will. Go to Paragraphs moduleExternal Link

  • Range: This module is inspired by the core Number module and inherits some of its features. It provides numeric range field. Range field allows the user to save two numeric values that represent some kind of range (for example: age range). Go to Range moduleExternal Link

  • Schemata: Facilitate generation of schema definitions of Drupal 8 data models as produced by Serialization for Drupal 8 REST. Currently supported: JSON Schema for JSON, HAL JSON, and JSON API serialised Drupal Content Entities. Go to Schemata moduleExternal Link

  • Simple Sitemap: Every webpage needs an automatic XML sitemap generator for SEO reasons.This module aims to be a replacement for the xmlsitemap module for Drupal 8. Sitemaps generated by this module adhere to the new Google standard regarding multilingual content by creating hreflang sitemaps and image sitemaps. Go to Simple Sitemap moduleExternal Link

  • Smart Trim: Smart Trim implements a new field formatter for text fields that improves upon the “Summary or Trimmed” formatter built into Drupal 7. Go to Smart Trim moduleExternal Link

  • Token: Provides additional tokens not supported by core (most notably fields), as well as a UI for browsing tokens. Go to Token moduleExternal Link

  • Token Conditions: Creates a simple Token matching condition plugin for Drupal. Currently the only places this is used in Drupal Core is the Block Visibility Settings. Go to Token Conditions moduleExternal Link

  • Token Filter: Token Filter is a very simple module to make token values available as an input filter. This doesn’t mean that all tokens will work in every location. For example, if you use a token in the text of a block, the token system will not know which node you’re referring to and will not replace the token. It’s up to you when you’re implementing this module to be aware of the context for token usage and use them appropriately. Go to Token Filter moduleExternal Link

Custom modules:

Below is a list of the 15 custom modules currently in Single Digital Presence:

Get the latest digital insights and Salsa news

For a roundup of the latest news and insights across digital government, web development, open data and open source please subscribe to Salsa's monthly newsletter. 

Subscribe to our newsletter