All RPGs and Storygames by Tod Foley are now available at DrivethruRPG and RPGnow. Bring these games to your table!
Fetches the relationships of a term:
- A parent term prints the parent itself and its children.
- A child term prints the child term with the parent(s) and its brothers.
- The active state is set on the current term.
The module provides helper functions as a service and exposes the result as a block.
The Drupal community has been on an interesting journey since the launch of Drupal 8 in 2015. In the past three years, as the community has started to get its sea legs 'off the island' (using tools, libraries, and techniques used widely in the general PHP community), there have been growing pains.
One area where the pains have been (and sometimes still are) highly visible is in how Drupal and Composer work together. I've written posts like Composer and Drupal are still strange bedfellows in the past, and while in some ways that's still the case, we as a community are getting closer and closer to a nirvana with modern Drupal site building and project management.
For example, in preparing a hands-on portion of my and Matthew Grasmick's upcoming DrupalCon Nashville lab session on Composer and Drupal, I found that we're already to the point where you can go from literally zero to a fully functional and complete Drupal site codebase—along with a functional local development environment—in about 10 or 15 minutes:
At GDC 2018 Rare art director Ryan Stevenson reveals how the studio settled on and crafted the game's unique look, sharing behind-the-scenes insight into the game's visual development. ...
Migrate plugins provide extra migration plugins to make your content migrations more flexible.Source Plugins
It is not a secret that the configuration management in Drupal 8 core was made for only one specific use case: move configuration from one environment to another for the same site. Everything else was left for contrib to find solutions for. Config Installer is necessary to set up a site starting from existing configuration and Config Split is needed to have environment specific configuration that go beyond simple configuration overrides, like development modules enabled only locally. But the whole workflow still assumes that developers - most often in the same team - have control over the environments and deployment of the site.Distributions are not covered
Distributions are very different. When maintaining a distribution one doesn't develop a specific site but rather the template to build different sites with. Deploying configuration as we do it for a single site does not have any meaning because there is no one production site to deploy to. Each site based off a distribution is its own site with its own site uuid and its own possible customisations and possibly its own development and production environments. At the same time as a consumer of a distribution - a site owner of a site based off a distribution - one wants to update the distributions features while keeping the customisations.Update hooks?
Different distributions handle this in different ways. A first approach to solve this issue is treating it the same way you would a schema update and change the configuration on a site with an update hook. The problem with this is that update hooks are meant to fix the database to be able to run with the version of code that is in use on the site. The first thing one needs to do after updating the code base is to run the update hooks to realign the database. Configuration management has different needs and when updating the configuration in an update hooks means that one has to be careful to check that the configuration is in the expected state. And the only recourse is to log and make sure the user is informed what manual actions he needs to do to update the configuration himself. As there is no place to involve the user with a choice while update hooks are run.Config Distro
We propose a new kind of workflow, in essence it allows developers of a distribution to say how the "distributions configuration" is supposed to be updated and it allows site owners of a site based on a distribution to treat the distribution maintainers as a developer on their team. At the same time this does not interfere with the configuration management workflow for staging and deploying configuration to the production site.
The primary function of Config Distro is to allow updating a distributions configuration in a new workflow and give the site owners more control and insight on how the configuration of their site changes. It is a new way to imagine the configuration management system in a way that lets sites own their configuration but allowing distributions to provide updated configuration for existing sites.A new dimension
In a blog post one year ago I talked about different dimensions of configuration management;
- vertical: moving configuration between environments but for the same site
- horizontal: moving configuration between different sites. for example for distribution updates.
Config Distro is a UI and a drush command for that workflow. It is intended to be used by site builders who base their site on a distribution and want to import configuration updates from the updated distribution. The UI is essentially a parallel to configuration import screen for the workflow supported by core. But instead of importing the configuration from the files used to move/deploy configuration between environments you import from a special configuration storage which starts out with the sites active configuration and has the distributions updates applied to it. This means you do not have problems with mismatched site uuids or things being removed that you added and were not part of the distribution. And updates can apply (or not) to translations even if the distribution did not have languages.Where do updates come from
If you only install Config Distro, the import screen eternally shows that there is nothing to import. This is because the module only provides the framework for this to work, ie the UI and the drush command. The module is not opinionated on how or what should be updated. All the complexity can be addressed by a distribution maintainer with the help of a ConfigFilter plugin (the same way Config Split and Config Ignore work). One such module is Config Sync. All the complexity of finding out what what configuration a module has originally shipped with, what it does now and whether a user has changed the originally installed configuration is left to Config Sync and its dependencies.Choice
Just like Config Ignore allows you to opt out of some of the configuration management workflows, Config Distro has a Config Distro Ignore module that lets you retain certain configuration from being changed when you hit the "import" button. The "Retain configuration" button is available right next to the "View differences" button.
Clicking it leads to a form that lets you choose to retain the configuration permanently or only for this specific update. It also allows you to ignore a update for a specific language.
In our team we set up a site based on a distribution. We added our own login module for our single sign on and added a few webforms. Now there is a new version of the distribution with some new features and I would like upgrade the site to using the new features. I am tasked with updating the site, here is what I do:
- I update the code of the distribution by specifying the new version in composer.json and do a composer update to get the updated code*
- I run the database updates drush updb to align the database with the code*
- I go to the distro update screen provided by Config Distro
- This screen looks very familar, it looks the same way as when I import configuration changes my team mates made after I get their code with git pull.
- I see a new module is going to be installed and a few views and settings from the distribution are updated.
- Our webforms are not going to be removed and our custom modules not uninstalled.
- I click "import all"
- Now my site has the updated code and configuration so I export the configuration for deployment: drush cex and commit*
- My colleges get the update the same way they get normal changes that happen during development*:
- git pull get the code
- composer install get the external code (vendor, contrib, etc)
- drush updb align the database with the new code base.
- drush cim import the sync configuration.
* This is the same procedure as for any module update on any site.
Distributions may add a "Auto upgrade" setting and then import the Config Distro in a post_update_hook to bypass the manual step required of site administrators upgrading the distribution.
Config Distro provides a new workflow for updating distributions with a familiar feel. It recognizes that update hooks are not an adequate solution for updating a sites configuration when a site owns the configuration and site administrators may have changed the initially provided configuration.
It allows developers of distributions to alter the sites configuration through ConfigFilter plugins and it gives site administrators a choice of what to import.
Config Distro is just the framework for extending cores configuration management to allow managing configuration changes to get into the site from a third party such as the distribution maintainers. It does not interfere with the traditional workflow and importing the configuration updates from a distribution should be seen as any other configuration change such as adding a new view or changing permissions: You go to an admin page and you click some things in a form, then you export the configuration and deploy it.
While it already works, Config Distro is still in an alpha state. Config Distro is part of a larger effort to improve the configuration management in Drupal. You can find further information and participate in the discussion on drupal.orgTags: Drupal 8Code Driven DevelopmentConfiguration ManagementDrupal Planet
The small data Drupal module uses the Small Data API to provide a file field formatter that displays an inline visualization to show tables, trees, and graphs using interactive diagrams, plots, and charts.
Beta1 version of the small data module is available at
As we head into DrupalCon week I've got something big to announce. With the blessing of the Aegir core maintainers, I am taking the 4.x branch of Provision I have been working on and I am separating it from the Aegir Project.
Provision 4 will still power Aegir. We are working on a patch to Hostmaster that will allow us to run a different command other than Drush, allowing Provision4 to become the primary back-end to Aegir 4. This means it will also be able to power the current generation DevShop.
The Foldershare module adds an ability to share and manage data on Drupal 8 websites. It adds a virtual file system that manages and presents a hierarchy of virtual folders and files maintained on the web server. Access controls enable content owners to designate whether content is private, public, or only shared among a selected group of colleagues. Each folder has optional descriptive information so that users can introduce projects, explain terminology, and provide other descriptive material.
The opening pages (backed by an atmospheric double-page illustration) paint a world that's post-post-truth. Everyone knows not to leave secrets on computers where hackers can break in... so if you want those secrets you have to break in physically to steal them. Espionage is part and parcel of doing business, with corporations even more likely to indulge in it than nation-states.
Slightly oddly, the first section is addressed to Engineers, and talks about upgrading spaceships by tinkering with the systems - in flagrant breach of the warrantry if not the law. Pilots are advised not to fiddle, a case of 'no user-servicable parts inside' which to those of us who like playing starship engineers is anathema! It is considered best to go to a professional if you want to supe up your spaceship, and the first trick is to make contact with a reputable and competent one. In terms of game mechanics, use your Repair skill in the Between Adventures phase if you want to do it yourself. It's probably best to visit your tame professional engineer then as well, who wants to spend role-playing time waiting for your spaceship to come out of the shop? Either way it's going to be expensive. There are tables to roll on for various components, giving a chance of improvement... or of causing a fault (and sometimes both!).
Next comes a selection of New Spaceships. It's noted that agents tend to like ships that are speedy and agile, but which don't stand out in a crowded starport, then presents several new ships (each with variations) that may be chosen during character creation, or indeed picked up later on in the game.
The next section is Perks of the Job. This contains useful equipment that the best-dressed espionage agent wouldn't leave home without. Some are quite innovative - poisonous lipsticks or bodyspray for example (just remember to take the antidote before applying or you'll poison yourself!). There are weapons, cybernetics and othe gizmos as well.
Then we have The Perfect Agent where new backgrounds appropriate to someone wishing to enter the shadowy worlds of espionage are provided. These range from a former downtrodden worker-drone who knows in great detail how a corporation operates to security guards, and an 'insurgent' who may be a prankster, an activist or an outright terrorist. New enhancements and Karma Capabilities appropriate to these roles are also there.
After a rather creepy piece of fiction which I hope won't give any players ideas we move on to The Bad Guys, which provides a whole bunch of ready-made opponents. These come in both Spaceship and Individual scales and range from soldier/mercenary and security personnel to criminals, and of course assassins.
The final part of the book focusses on the Random Generation System (RGS) and concentrates on running solo adventures when you are without a GM. Of course busy GMs can also use it during planning or even mid-game if they need ideas in a hurry. There are infiltration challenges - complete with outcomes based on success or failure - and step-by-step paths through various types of espionage mission. Then there is a system for generating Corporate Bases through a series of die rolls.
There's plenty of useful stuff if you want to run espionage games, but the whole thing has an air of being thrown together, random nuggets added because they might be useful, rather than a coherent exposition of the espionage aspects of the game. It even manages to make espionage sound dull and mechanical... the very thing most people take up this line of work to escape! Pick out all the bits you want to use and throw them into the mix, remembering that the real excitement of an espionage-style mission comes with role-playing it, not just rolling dice!