Oct 15 2019
Oct 15

I began my DrupalEasy journey with the greatest of intentions. Jumping in head first, I upgraded to Windows 10 Pro, set up a new local development environment — I highly recommend DDEV for its power and flexibility, and because it allows development teams to use Docker in their workflow — and reacquainted myself to Composer and the command line. If there was a roll, I was on it.

Then week 2 happened. What I learned then is that unfortunately, having a teacher doesn’t automatically make the path to Drupal proficiency a smooth, easy ascent to greatness — at least not for me. The greatest challenge that I encountered, and totally underestimated, was the whole concept of time.

Now, if you’re anything like me, you’re learning Drupal while also working a full-time job. This was fine when I was teaching myself on my own time. But with an actual course like DrupalEasy, I totally underestimated the time commitment of scheduled class times and assignments. While the homework is optional, I have to at least attempt it to get the most out of the course.

In week 2, I had a vacation, a wedding, and a team retreat on my calendar. To say I fell behind in the class is an understatement. On top of catching up with email and work tasks, I now had to find time to watch hours of video lecture and complete the homework assignments. The class was learning without me and I felt totally frazzled.

I realized I had to get focused — to get really intentional with my time and plan, plan, plan. It was the only way to balance Drupal, work, and life. Thankfully, both Michael (my instructor) and Addi (my boss) were extremely supportive. I also knew there was a gap week scheduled that would allow me time to catch up. (Hello gap week!) Soon, I’ll be right back in line with all of my classmates as if I had been there all along.

So if your Drupal journey is anything like mine, know there’ll be bumps along the way. Mine was time. Just don’t let a bump on your path become a deterrent. It’s okay to fall behind or get a bit lost. Just don’t stop. There’s hope. Your “gap week” is approaching.

Oct 15 2019
Oct 15

Last month I begun my second decade of working with Drupal! How crazy is that? I started at ComputerMinds in 2009. Drupalcon Paris was my first week on the job - I just remember taking so many notes, as if it were a university course! I had a lot to learn then, but now I can look back with a much more experienced head, hopefully wiser, with some sort of perspective.

Conference room before the keynote at Drupalcon Paris 2009The conference room before the keynote at Drupalcon Paris 2009, when my career with Drupal began.

My first steps with Drupal were on Drupal 6. It could do a lot (at least once CCK and Views were installed), and Wordpress was much smaller so the two were still occupying a similar space in the market. Most of the sites we built were trying to be a mini social network, a blog, or a brochure site, sometimes with e-commerce thrown in. There were rounded corners everywhere, garish pinks, and some terribly brittle javascript. Supporting Internet Explorer 6 was a nightmare, but still necessary.

It's probably only over the last few years that it became clear that Drupal's strength is its ability to be turned to just about anything that a website needs to do. That has meant that whilst alternative products have picked up the simpler sites, Drupal has been brilliant for projects with complex requirements. Integrating with CRMs and all sorts of other APIs, handling enormous traffic loads, providing content for apps - this kind of stuff has always been Drupal's jam. You just have to know how to get it hooked up in all the right places!

Speaking of hooks, it's been interesting to see Drupal move from its famous magical hooks, towards event-driven architecture. For me, that single shift represented an enormous change in direction for Drupal. I believe the events/subscriber pattern, as a part of a wider effort in Drupal 8 to deliberately use existing well-defined design patterns and solutions, is a sign of a much more mature and professional platform. Most coding problems have been solved well elsewhere, we shouldn't reinvent the wheel! (Although I know I can be guilty of that!) That's just one example of how the Drupal ecosystem has become more professional over the last ten years. Formal testing is another example. Many people have felt left behind by this shift, as a need in the enterprise world that Drupal could meet was identified. 'Enterprise' gets used as a dirty word sometimes - but to be frank, there's more money and more suitable opportunity there!

That is something the Drupal community has to be honest about. It is rightly aiming to champion diversity, and be as accessible as possible for as many as possible across the world (I especially love that Drupal is now so good for multilingual projects). It's not like Drupal is suddenly inappropriate for smaller projects - in fact, I'd still suggest it's far ahead in many aspects.

But money makes things happen, and gives people their livelihood. I appreciate seeing honesty and innovation about this coming from community leaders. Thankfully those kinds of values are what drive the Drupal project, even if money is often the facilitator. As a community we must always fight to keep those things in the right relation to each other: money has an inevitable influence that we must accept, but it must be led by us and our values, not the other way around. I should add that I am very aware that I am privileged to be a developer in a leading Drupal agency, so my opinion will be shaped by that position!

To end with honesty and innovation myself, I would love to see the following carried into the Drupal project's next 10 years, which I saw the community espouse over the last decade. I know I need to grow in these things myself!

  • Maintain excellence, even as the make-up of the community changes.
  • Deliberately listen to under-represented portions of the community, as an intentional force against the skewing effect of money/power.
  • Keep watch for what competitors and other relevant products are doing, to incorporate worthwhile things wherever possible.
  • Reflect on the strengths & weaknesses of Drupal (and its community) with honesty. Let's make the most of what makes Drupal what it is and not be afraid for it to focus on that; the same goes for us as individuals.

I'm proud to work with Drupal, long may it continue!

Oct 15 2019
Oct 15

Drupal 8 is making things so much easier for content authors. One of the most important reasons being the addition of the Layout Builder module in core Drupal 8. With easy drag and drop interface, preview and customizing abilities, the layout builder is soon becoming a favorite page-building and designing tool.

In my previous article, I wrote about how you can get started with installing and using Drupal 8’s Layout builder. Here, I want to share my knowledge on customizing a layout builder for unique requirements.

If your website needs multiple sections with multiple blocks, then you can’t use the default sections that are provided by Drupal. For this, you can create your own custom layout.

Getting Started

We will first create a custom module for our custom layout builder We will name the folder as custom_layout.Next, we will create an info.yml file. We should specify the basic keys for it. Custom layout builder will have a dependency on the layout builder module. Let us specify it over here.

custom layout
Code:
name: 'Custom Layout'
type: module
description: 'Provides a way for building layout'
core: 8.x
package: 'Custom'
dependencies:
 - layout_builder:layout_builder

Next we will create layouts.yml file to specify regions for our custom layout.

  • custom_layout: key for our custom layout.
  • label: Label for our custom layout.
  • category: Category for our custom layout.
  • default_region:  Default region are the regions which are default in all type of layout.
  • icon_map: Icon which will be shown up while we choose our layout.

Eg:
 

custom-layout

To create above icon map we need to follow below steps.

1. First row is “Header Left” and “Header Right”
         We have specified - [header_left, header_left, header_right] - header_left is             
         defined 2 times so it will take 2 parts of total width of the   screen then header_right will take rest of the portion so ratio will be  “75%/25%”.
2. Second row is “Content” and “Sidebar”
        We have specified - [content, content, sidebar]   same above logic applied here.    
3.  Third row is “Footer Left” and “Footer Right”
        We have specified - [footer_left, footer_right] -  since there are only 2 regions it will take 50% each.
        

  • regions: Regions which we need for our layout. We have header_left, header_right, sidebar, content, footer_left, footer_right.
custom layout builder

Code:

custom_layout:
 label: 'Custom Layout'
 category: 'Custom Layouts'
 default_region: content
 icon_map:
   - [header_left, header_left, header_right]
   - [content, content, sidebar]
   - [content, content, sidebar]
   - [content, content, sidebar]
   - [footer_left, footer_right]

 regions:
   header_left:
     label: Header Left
   header_right:
     label: Header Right
   sidebar:
     label: Sidebar
   content:
     label: Content
   footer_left:
     label: Footer Left
   footer_right:
     label: Footer Right

Next, let us create an html structure for our layout. We will create a folder named “layouts” within our module. In the folder we will create another folder named “custom_layout”

And within that folder, we will create twig file named “custom-layout.html.twig” 

custom layout builder


We have to specify the twig file in layouts.yml 

  • path: It specifies in which folder your html structure will be written
  • template: It specifies which twig template to use for this layout under the path.
custom layout
Code:

custom_layout:
 label: 'Custom Layout'
 path: layouts/custom_layout
 category: 'Custom Layouts'
 template: custom-layout
 default_region: content
 icon_map:
   - [header_left, header_left, header_right]
   - [content, content, sidebar]
   - [content, content, sidebar]
   - [content, content, sidebar]
   - [footer_left, footer_right]

 regions:
   header_left:
     label: Header Left
   header_right:
     label: Header Right
   sidebar:
     label: Sidebar
   content:
     label: Content
   footer_left:
     label: Footer Left
   footer_right:
     label: Footer Right

Next we will write html structure for our regions in “custom-layout.html.twig” file.
We will set classes has “layout” and “layout--custom-layout”  and we will wrap the whole content inside it.
We will specify regions which where been defined in layouts.yml , we can access those regions like “{{ content.header_left }}”
 

layout builder

Code: 

{% set classes = [
 'layout',
 'layout--custom-layout',
] %}
{% if content %}
 <div{{ attributes.addClass(classes) }}>
   {% if content.header_left %}
     <div {{ region_attributes.header_left.addClass('layout__region', 'layout__region--header_left') }}>
       {{ content.header_left }}
     </div>
   {% endif %}
   {% if content.header_right %}
     <div {{ region_attributes.header_right.addClass('layout__region', 'layout__region--header_right') }}>
       {{ content.header_right }}
     </div>
   {% endif %}
   {% if content.content %}
     <div {{ region_attributes.content.addClass('layout__region', 'layout__region--content') }}>
       {{ content.content }}
     </div>
   {% endif %}
   {% if content.sidebar %}
     <div {{ region_attributes.sidebar.addClass('layout__region', 'layout__region--sidebar') }}>
       {{ content.sidebar }}
     </div>
   {% endif %}
   {% if content.footer_left %}
     <div {{ region_attributes.footer_left.addClass('layout__region', 'layout__region--footer_left') }}>
       {{ content.footer_left }}
     </div>
   {% endif %}
   {% if content.footer_right %}
     <div {{ region_attributes.footer_right.addClass('layout__region', 'layout__region--footer_right') }}>
       {{ content.footer_right }}
     </div>
   {% endif %}
 </div>
{% endif %}

After the html structure is written, we will have to write css for each region. We will now create libraries.yml in our custom module.

layout-builder

Code:

custom_layout:
version: VERSION
css:
   theme:
     css/custom_layout.css: {}

We will define that library in layouts.yml

  

layout builer

Code:

custom_layout:
 label: 'Custom Layout'
 path: layouts/custom_layout
 category: 'Custom Layouts'
 template: custom-layout
 library: custom_layout/custom_layout
 default_region: content
 icon_map:
   - [header_left, header_left, header_right]
   - [content, content, sidebar]
   - [content, content, sidebar]
   - [content, content, sidebar]
   - [footer_left, footer_right]

 regions:
   header_left:
     label: Header Left
   header_right:
     label: Header Right
   sidebar:
     label: Sidebar
   content:
     label: Content
   footer_left:
     label: Footer Left
   footer_right:
     label: Footer Right

Now let’s start with styling our regions block. We will specify structure  for each region as below-

layout-builder

Code:

.layout--custom-layout {
 display: -webkit-box;
 display: -ms-flexbox;
 display: flex;
 -ms-flex-wrap: wrap;
 flex-wrap: wrap;
}

@media screen and (min-width: 40em) {
 .layout--custom-layout .layout__region--header_left {
   -webkit-box-flex: 0;
   -ms-flex: 0 1 70%;
   flex: 0 1 70%;
 }

 .layout--custom-layout .layout__region--header_right {
   -webkit-box-flex: 0;
   -ms-flex: 0 1 30%;
   flex: 0 1 30%;
 }

 .layout--custom-layout .layout__region--content {
   -webkit-box-flex: 0;
   -ms-flex: 0 1 70%;
   flex: 0 1 70%;
 }

 .layout--custom-layout .layout__region--sidebar {
   -webkit-box-flex: 0;
   -ms-flex: 0 1 30%;
   flex: 0 1 30%;
 }

 .layout--custom-layout .layout__region--footer_left {
   -webkit-box-flex: 0;
   -ms-flex: 0 1 50%;
   flex: 0 1 50%;
 }

 .layout--custom-layout .layout__region--footer_right {
   -webkit-box-flex: 0;
   -ms-flex: 0 1 50%;
   flex: 0 1 50%;
 }
}

Next, let us enable our custom module
 

layout-builder-module

Let us go to Structure -> Content types and click on “Manage display” for any content type. For now we will use ‘article’ content type.

edit-layout-builder

After we choose our custom layout-
 

custom-layout
Oct 14 2019
Oct 14

There’s no question that literacy in the 21st Century is a multi-faceted concept that extends far beyond books on the shelves.

The American Library Association not only gets it, it’s embracing the evolving role of libraries, by driving a wide range of programs designed to spark excitement about STEM (Science, Technology, Engineering, and Math) careers among youth, and more specifically Computational Thinking. Recently, the ALA Ready to Code site, which was largely funded by a grant from Google, has raised the bar even further.

Libraries Ready to Code grew out of a conviction that helping youth to become comfortable with technology is key to the mission of libraries in the current climate. 

Resources on the Drupal 8 site are aligned with the ALA’s emphasis on inclusivity. Engaging exercises are targeted toward ages that range from preschool to early teen years, and the intention is to reach children as young as possible -- before stereotypes concerning who could or should pursue technology careers begin to take hold. 

The ALA has been developing resources designed to help librarians prepare youth to succeed in the high-tech future for many years. Ready to Code has leveraged an amazing collection of educational assets to create an inviting and visually appealing learning path.

Discovery Journey

While Computational Thinking is required for 21st Century literacy, ALA leadership is well aware of the fact that coding expertise has not traditionally been something that librarians learned while studying for a degree in library science. At the same time, there was a recognition that the interests and inclinations of librarians, tend to gravitate more toward literature and content than technology. 

As such, the objective of the site was not for librarians to actually teach coding to youth or to learn how to code themselves. Instead, the site was designed to help librarians who have varying comfort levels relative to tech to:

  • Understand what Computational Thinking is all about, 
  • Get on-board with the idea of libraries taking a lead in teaching youth about it, and
  • Facilitate programs that broaden perspectives. 

Multifaceted Mission

Having developed Drupal websites for the ALA prior to this project, Promet Source had an established relationship and was thrilled to step up to the role of designing and developing Ready to Code. Working with both Google and the ALA was a huge inspiration for us,as their intentional and well-organized programs for youth were very thought provoking. The content organization on the site was a creative challenge as we serve up relative content to users based on their experience level and interest in certain topics. In addition to the UX and UI design of the site, Promet designers also developed branding for the site, providing a new logo and style guide for the newly established ALA Ready to Code which became the initiative’s brand. 

Once the site went live, the response exceeded expectations on every front. The primary objective was for librarians to embrace the site and actively introduce youth to all that Ready to Code has to offer. That objective has been boosted by a steady stream of awards. Key among them is the American Association of School Librarians’ 2019 Best Websites for Teaching & Learning. Since this award is very much on the radar of librarians, it has added validity to the site and accelerate its adoption. 

Two additional and prestigious awards:

And then there’s the input from ALA clients, such as this review on the Clutch website:

"They (Promet Source) masterfully took our ideas and translated them into specific pieces of the website."
      -- Marijke Visser, Senior Policy Advocate, American Library Association

Among those of us at Promet Source who were engaged with ALA leadership from the very outset and took a personal stake in the success of Ready to Code, this ongoing validation that the site is achieving what it set out to accomplish has been the gift that keeps on giving. 

Interested in collaborating on big ideas that stand to make a big difference for igniting digital possibilities? Contact us today

Oct 14 2019
Oct 14

Drupal 8 brought a lot of new features along with it. Making it easier to create rich and beautiful pages. Among the new features included in Drupal 8.7, we saw the stable built-in drag-and-drop Layout Builder, updated Media Library interface, and more. These changes impact site builders, administrators, editors, module developers, themer's, and distribution developers. Drupal 8.8 will be released in December 2019 and will be the last minor release with features. 
Let’s look at what Drupal 8.8 has in store for us:

| Drupal's WYSIWYG editor will allow media embedding in Drupal 8.8!

It’s been a decade that the Drupal community has been waiting for the most wanted end-user feature - Better media handling! The addition of WYSIWYG integration completes the final milestone. Read more about it here - https://wimleers.com/blog/media-embedding-drupal-8.8. Drupal 8.8 will come along with complete media management, this enables the site builders and content authors to easily embed media in Drupal.

Check out the media embedding here - https://youtu.be/sTc2JJzs9iU

| New and modern administration theme Claro

Claro is a concise, clean, responsive theme with an improved look and enhanced web accessibility. Built on top of the Seven theme, it is now a contributed project. There is a probability that the Claro theme will be added to Drupal 8.8.0 core as an experimental theme.

| Composer in Drupal core initiative

To know more visit - https://www.drupal.org/docs/develop/using-composer/using-drupals-composer-scaffold

| JSON:API module in Drupal 8.8 is expected to be significantly faster

This has been possible due to the resolution of the following issues:

New cache layers were introduced which minimized the cost by reusing computed entities.

| Content Moderation and Workspaces core modules can be  used on the same site with Drupal 8.8.0!

Starting with Drupal 8.8.0, the Content Moderation and Workspaces modules are no longer incompatible, so they can be installed and used together.

When both modules are installed, the Latest revision local task provided by Content Moderation is no longer available because Workspaces always shows the latest workspace-specific revision on the canonical entity view page (e.g. /node/1). Additionally, when a moderation workflow is enabled for an entity type/bundle and if there are entities in draft (non-default/unpublished) moderation states in a workspace, that workspace can not be published to Live until all the draft entities reach a publishable moderation state.

| jQuery UI is being phased out from the Drupal core

jQuery UI allowed module developers to add lavish effects to their code. Added to Drupal core in 2009, jQuery UI has been unmaintained since 2017 and is listed as an Emeritus project (projects where the maintainers have reached or are nearing end-of-life). jQuery UI is being deprecated from Drupal core and will be removed by Drupal 9. With jQuery UI’s end of life, it will not work with future jQuery versions. Drupal core is in the process of switching to pure JavaScript solutions. Modules and/or themes depending on jQuery UI would require it as a dependency and manage their libraries.

| Configuration Management improvements in Drupal 8.8

  • Sync directory is defined in $settings['config_sync_directory'] and not $config_directories.

The ability to support multiple configuration directions in the $config_directories is now deprecated. If you have custom or contributed code that relies on this ability you need to move your setting either to $settings or another to storage. To know more about this visit - https://www.drupal.org/node/3018145

These events allow modules to interact with the configuration deployment workflow. This was previously only possible with the contrib Config Filter module.

A few modules help in developing a Drupal site but are not intended to be deployed to production. Until Drupal 8.8.0 developers had to rely on contrib solutions such as Config Split to separate the development configuration. But sometimes it is not necessary to share the development configuration and instead it is more important to guarantee that development modules can not be included in the configuration export. This is precisely what the lesser-known Config Exclude contrib module did and its functionality is now available for everyone.

| Path aliases have been converted to revisionable entities

With Drupal 8.8.0, custom URL aliases are now provided by a new path_alias revisionable content entity type. The path.alias_storage service has been kept in place for backward compatibility, and its hook has been deprecated. Check out this link for code changes recommended to fully utilize the new system and prepare your code for Drupal 9 - https://www.drupal.org/node/3013865 

Conclusion

With all of these features, the upcoming and previous versions of Drupal 8 are very lucrative for content editors. Kudos to all the Drupalers who have worked on Drupal 8.8 and chalking out the path to Drupal 9. 

Reference - Drupal.org

Oct 13 2019
Oct 13

The other day I was reviewing my read later items and stumbled upon the New command line tool to install & run Drupal change record I had completely forgotten about. This was timely because I was extensively testing the excellent Acquia Developer Studio for work and was trying to think about how it could help me review core changes quickly or contribute more easily. Turns out, you can’t ask for a tool to do everything and sometimes it’s important to get back to finding the right tool for the job. And in this instance, quick-start has no equivalent that I know of in terms of ease of use and required dependencies.

After playing with it a bit, I realized I could probably create a wrapper to speed up operations even more. The workflow I had in mind was this:

  • Work exclusively from the local Drupal Git clone
  • Don’t install any dependency like Drush or Drupal Console
  • Install Drupal with a one-liner
  • Clean up everything with a one-liner

And then I came up with this script. Disclaimer: I’ve only tested it on Linux. It works very simply with two commands: quick-start and quick-clean.

When I type quick-start, I can either pass a Drupal profile or use the default (standard). The script takes care of pulling Composer dependencies and installing Drupal with default parameters so I can concentrate on the task at hand, not the install process itself. At some point I even experimented with assigning a dynamic port (shuf -i8000-8999 -n1) but that was so over-engineered I gave up. This is how it looks like now:

$ quick-start umami
Drupal codebase detected. Proceeding...
> Drupal\Core\Composer\Composer::ensureComposerVersion
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 106 installs, 0 updates, 0 removals
- Installing composer/installers (v1.7.0): Loading from cache
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
(snip)
Generating autoload files
> Drupal\Core\Composer\Composer::preAutoloadDump
> Drupal\Core\Composer\Composer::ensureHtaccess
Skipped installation of bin bin/composer for package composer/composer: file not found in package
18/18 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓]
Congratulations, you installed Drupal!
Username: admin
Password: UvtRWr-Z82WKfV2Q
Drupal development server started: <http://localhost:8888>
This server is not meant for production use.
One time login url: <http://localhost:8888/en/user/reset/1/1570899448/vVyaEHQkIRKGLLtuRttsdXtCBfNP1DBMWJwQIH4_XKc/login>
Press Ctrl-C to quit the Drupal development server.

The one annoyance I have is it doesn’t scale. I understand it’s for dev only and I should keep my expectations low, but it’ll fail randomly when using devel_generate, clicking on too many pages in a short period of time or installing too many modules at once. When this happens to you, just shut down the server (C^) and run quick-start again. This is a severe limitation I’ve reported here.

Anyway, once I’m done and want to clean up my repo, there’s the quick-clean command for that. It’ll wipe everything within your Git clone (seriously, be careful) so you come back to a clean Git state, with the latest commits from upstream. It looks like this:

$ quick-clean
Drupal codebase detected. Proceeding...
[sudo] password for anavarre:
HEAD is now at 03bdf28929 Issue #2860644 by daffie, shashikant_chauhan, dww: Add support of NOT REGEXP operator to PostgreSQL + fix testRegexCondition
Already up to date.

To my knowledge, there’s no easiest nor quickest way to install, test or contribute to Drupal with the bare minimum requirements to run a PHP app.

Oct 11 2019
Oct 11

Read our Roadmap to understand how this work falls into priorities set by the Drupal Association with direction and collaboration from the Board and community.

Note from the author: "I'm back in the hot seat! As many of you know, I took on the role of interim executive director in September 2018 while the Drupal Association underwent an executive search. This summer we found a fantastic new leader in Heather Rocker, and now that she's had a few months to settle in, I'm able to return to my regular duties, like bringing you these updates. Thanks for your patience!"

- Tim Lehnen(hestenet)

September was a flurry of activity here at the Drupal Association at large. Coming off a season of travel to a number of Drupal events, we headed straight into our semi-annual staff off-site here in Portland, and followed that up by attending Google's second-ever CMS Leadership summit.

Despite the whirlwind of events taking place in September, we've also landed some major milestones on our roadmap, and are hard at work getting some exciting things together to talk about with you all at DrupalCon Amsterdam at the end of October. As an added bonus, this month's report includes a short retrospective about the impact of the GitLab migration on our maintenance work. 

Project News

Composer Initiative work committed for release in Drupal 8.8.0

 Drupal Composer Facade

A major community initiative for Drupal 8.8.0 has been the push to make Drupal's internal scaffolding and filetree consistent, whether you start using Drupal by using the .zip download, or by using Composer from the get-go. Starting with Drupal 8.8.0 - no matter how you start your journey with Drupal, you'll be ready to use Composer's advanced dependency management when you need it.

Drupal Association engineering team member Ryan Aslett(mixologic) has been the initiative lead for this effort for more than a year. We're thrilled that his work and the work of many volunteers has been committed for release in Drupal 8.8.0!

We want to thank the following contributors for participating in this initiative in collaboration with us: 

The work is not over! There are still a number of clean ups and refinements being worked on in the Drupal core queue, and the Drupal Association team is working hard in October to ensure that Drupal.org itself will be ready to deliver these Composer-ready packages of Drupal 8.8.0 on release. 

Reminder: Drupal 8.8.0 is coming soon! Drupal 8

Speaking of Drupal 8.8.0 - it enters the alpha phase during the week of October the 14th, in preparation for release in December of this year.

Drupal 8.8.0 is the last minor release of Drupal before the simultaneous release of Drupal 8.9.0 and 9.0.0 next year. You can find more information about the Drupal release cycle here.

If you want to help ensure a smooth release, we invite you to join the Drupal Minor Release beta testing program.

Drupal.org Update

Preparing our infrastructure for Automatic Updates

In September we spent a good amount of time outlining the architectural requirements that will need to be met in order to support delivering the update packages that are part of the Automatic Updates initiative.

We are only in the first phase of this initiative, which focuses on: 1) Informing site owners of upcoming critical releases, 2) Providing readiness checks that site owners can use to validate they are ready to apply an update, and 3) offering in-place automatic updates for a small subset of use-cases (critical security releases).

As this initiative progresses, and begins to cover more and more use cases, it should greatly reduce TCO for site owners, and friction for new adopters. However, to make that forward progress we are seeking sponsors for the second phase of work.

Readying our secure signing infrastructure

Yubikey HSMWith the help of a number of community contributors (see below), a new architecture for a highly secure signing infrastructure has been laid out. As we roll into Q4 we'll get ready to stand this new infrastructure up and begin securing the first automatic updates packages.

Going into early October, a number of contributors came together at BadCamp to help advance this effort further. Without the collaboration between community members and Drupal Association staff, these initiatives would not be possible.

We'd like to thank the following contributors to the Automatic Updates/Secure Signing Infrastructure initiative: 

Supporting Drupal 9 readiness testing

In conjunction with the Drupal core team, the DA engineering team has been supporting the work to ensure that contributed projects are ready for the release of Drupal 9.

Early testing has shown that over 54% of projects compatible with Drupal 8 are *already* Drupal 9 ready, and we'll be continuing to work with the core team to get out the word about how to update the modules that are not yet compatible.

Infrastructure Update

A brief retrospective on the GitLab migration

Drupal + GitLabDrupal.org's partnership with GitLab to provide the tooling for Drupal and the ~40,000 contributed projects hosted on Drupal.org has been a significant step forward for our community. We're no longer relying on our own, home-brew git infrastructure for the project, and we're gradually rolling out more powerful collaboration tools to move the project forward. 

But what has that meant in terms of maintenance work for the Drupal Association engineering team?

There was some hope as we were evaluating tooling providers that making a switch would almost entirely eliminate the maintenance and support burden. While that was a hopeful outlook, the reality is that maintaining 'off-the-shelf' software can be at least as much work as maintaining mature existing tools.

GitLab in particular is still iterating at a tremendously rapid pace, releasing updates and new features every month. However, that speed of development has also meant frequent maintenance and security releases, meaning the DA team has had to update our GitLab installation almost once a week in some months.

Does that mean we're unhappy with the change? Absolutely not! We're still thrilled to be working with the GitLab team, and are excited about the new capabilities this partnership unlocks for the Drupal community (with more coming soon!).

However, it is a good lesson to anyone running a service for a large community that there's no free lunch - and a great reminder of why the support of Drupal Association members and supporting partners is so essential to our work.

———

As always, we’d like to say thanks to all the volunteers who work with us, and to the Drupal Association Supporters, who make it possible for us to work on these projects. In particular, we want to thank:

  • Tag1 - Renewing Signature Supporting Partner
  • Gitlab - *NEW* Premium Technology Supporter
  • Four Kitchens - Renewing Premium Supporting Partner
  • Phase2 - Renewing Premium Supporting Partner
  • WebEnertia - Renewing Premium Supporting Partner
  • Thunder - Renewing Premium Supporting Partner
  • Palantir -Renewing Premium Supporting Partner
  • Specbee - Renewing Premium Supporting Partner 
  • Pantheon - Renewing Premium Hosting Supporter
  • Cyber-Duck - *NEW* Classic Supporting Partner
  • Websolutions Agency - *NEW* Classic Supporting Partner
  • Unic - *NEW* Classic Supporting Partner
  • Kalamuna - Renewing Classic Supporting Partner 
  • ThinkShout - Renewing Classic Supporting Partner 
  • Amazee - Renewing Classic Supporting Partner 
  • Access - Renewing Classic Supporting Partner 
  • Studio Present - Renewing Classic Supporting Partner 
  • undpaul- Renewing Classic Supporting Partner 
  • Mediacurrent - Renewing Classic Supporting Partner 
  • Appnovation - Renewing Classic Supporting Partner 
  • Position2 - Renewing Classic Supporting Partner 
  • Kanopi Studios - Renewing Classic Supporting Partner 
  • Deeson - Renewing Classic Supporting Partner 
  • GeekHive - Renewing Classic Supporting Partner 
  • OpenSense Labs - Renewing Classic Supporting Partner 
  • Synetic - Renewing Classic Supporting Partner 
  • Axelerant - Renewing Classic Supporting Partner 
  • Centretek - Renewing Classic Supporting Partner 
  • PreviousNext - Renewing Classic Supporting Partner 
  • UniMity Solutions - Renewing Classic Supporting Partner 
  • Code Koalas - Renewing Classic Supporting Partner 
  • Vardot - Renewing Classic Supporting Partner 
  • Berger Schmidt - Renewing Classic Supporting Partner 
  • Authorize.Net - Renewing Classic Technology Supporter
  • JetBrains - Renewing Classic Technology Supporter
  • GlowHost - Renewing Classic Hosting Supporter
  • Sevaa - Renewing Classic Hosting Supporter
  • Green Geeks - Renewing Classic Hosting Supporter

If you would like to support our work as an individual or an organization, consider becoming a member of the Drupal Association.

Follow us on Twitter for regular updates: @drupal_org, @drupal_infra

Oct 11 2019
Oct 11

We recently completed a special data integration project for the University of Minnesota, Office of the Executive Vice President and Provost, Faculty and Academic Affairs. Faculty Affairs, as they are referred to, uses a product called Activity Insight from Digital Measures (referred to internally as “Works”) to capture and organize faculty information. Works acts as both a departmental LinkedIn and their internal performance review tool. They needed help getting faculty data out of Works in order to display it in web profiles on departmental websites. Many universities use Digital Measures to manage their faculty information, so when we took on the project, we wanted to be able to open source the solution we came up with and make the code available to those universities who wanted to do similar projects. Luckily, Faculty Affairs was a willing partner in working towards that goal!The Digital Measures Migration

Once the project was kicked off, our DevOps Engineer Tess Flynn took a peek under the covers. “Digital Measures posed a significant challenge to open sourcing anything,” said Tess, “because it doesn’t really have a set data schema. It’s a REST-based application for storing structured data. It’s not as specific as a database; it’s somewhere between a document store and a database. All Digital Measures lets you do is say: this is a data object that we want to store, and these are the fields it can have. The University creates the structure, and the data can then be accessed through an API.”

For this project, we created one module specific to Digital Measures (Digitalmeasures Migrate) to access the Digital Measures API from within Drupal. This, in turn, allows data extracted from the API to be leveraged through Drupal 8 migrations. Due to the volume of data, we write it to a “staging” database table. This way, we have more flexibility in processing it, without bringing down the Digital Measures API, or encountering rate limitations. Once we get the XML out of the API and store it in the database, then we can do the transform part. That’s where the bulk of the work is done.

The other seven modules (process plugins) solve specific migration problems in the transform step of the Extract-Transform-Load (ETL) process. We wrote a series of Drupal migrations for Faculty Affairs which relied on these plugins.

The Framework

Here are the modules we created and contributed to Drupal.org:

  • Digitalmeasures Migrate
    Provides a method to access Digital Measures API through Drupal.
  • Migrate Process XML
    One of the most-used modules when writing migrations for Faculty Affairs. It reads XML and allows you to extract particular key sections using XPath.
  • Migrate Process S3
    This is the second-most useful module. It allows you to download objects from an S3 bucket as a file to your Drupal site. For Faculty Affairs, this was used to download a professor’s profile photo, resume/CV, and other attached files. Once downloaded, this is then attached to the professor’s profile so that direct linking to S3 is not required.
  • Migrate Process URL
    Allows you to manipulate URL values that are provided within the data.
  • Migrate Process Regex
    While a small module, it’s useful in a surprising number of cases! This module provides a way to use Regular Expressions in a Drupal migration. This allows for matching and text replacements where XPath alone wouldn’t be enough. “This is a tiny thing, but it’s really handy in migrations,” said Tess. “For example, when you have two quotes next to each other that should have been one quote.”
  • Migrate Process Vardump
    Often used for debugging, this module takes any data given to it and dumps it to the terminal output and then passes it on. “It doesn’t sound very useful, unless you’re writing migrations, but then it’s the best thing EVER!” joked Tess. Every time Tess has written migrations, she said she had to write a custom version of this. So having this as a standard module will help many users. This module currently has the most users on Drupal.org out of all the modules in the framework.
  • Migrate Process Skip
    When processing lists of data, the migration system has very specific ideas of what’s considered “empty” or not: zero = false, empty string, and NULL, which of these means ”empty”? Drupal has a “skip_on_empty” migration process plugin, but it may not give the desired result if you don’t know what you’re doing. This module provides a few different mechanisms to define what is “empty” and should be skipped.
  • Migrate Process Trim
    Often, we need to remove leading or trailing characters—such as spaces—after extraction. This module provides a quick and simple means to achieve this in a Drupal migration.

We Open Sourced the Tools, Not the Solution

“Originally I really wanted to open source a solution, but it didn’t end up working that way,” remarked Tess. While multiple colleges and departments within the University of Minnesota (and outside of it) are all using Digital Measures, they all have their own customized implementation of it. Because of this, there will always be custom work required to display the Digital Measures data in each department’s web profiles. So the best you can do is to release tools to get to the solution. The framework we created will give each department’s IT team a head start on the process. “The tools we created are like socket wrenches to work on a car,” said Tess. “Every car is different, but the socket wrenches make the work easier.”

If we’d open sourced the Faculty Affairs solution, it would have been specific to them, and not transferable to another school. But what we can open-source are the tools to create a solution.

“There are mechanisms to retrieve types of data, but the types of data are up to the user of the API to decide,” Tess continued. “Faculty Affairs created the schema and data formats. All we did was used their existing forms, and tweaked it here and there as we needed to, and then wrote tools to create the necessary things to import data from Digital Measures into Drupal. Digital Measures is so customizable, you can’t do anything but release tools.”

This framework has broader applications than just Digital Measures. “Each module solves a specific issue that can be used for Digital Measures.” said Tess, “But the specific problems they solve are common to migration processes in general. With the exception of Digitalmeasures Migrate, these modules are fairly generic and can also be used for a variety of other migrations.”

If you want to use the framework yourself on a Digital Measures migration, the place to start is with the Digitalmeasures Migrate module. “That gets you the data,” said Tess, “but it doesn’t necessarily put it into a form that you can immediately use in Drupal, because unfortunately there’s no way of telling how the data is structured, so it’s up to you to make that part.” Tess did include a rough process for using the framework in the README for the Digitalmeasures Migrate module.

Got a Data Migration Problem? We Can Solve It!

Are you using Digital Measures and wishing you could pull the data into your Drupal deployment? Do you have any other Drupal problem we can help you solve? Drop us a line!  

Oct 10 2019
Oct 10


Guest blog by Diana Connolly, Production Manager, Groundswell Marketing

Oct 10 2019
Oct 10

As announced in December 2018, the Drupal Association assists the Drupal project by coordinating a beta testing program for minor releases of Drupal core.

Agencies and other organizations who are supporting ambitious Drupal 8 sites are invited to be part of the beta testing program. This means that, when a beta release is about to be made, we can help core maintainers work with organizations on the Beta Testing Program to install the beta core release on real-world examples of Drupal websites, in their staging environments. The beta testers can then feedback to the core maintainers any issues they see running the beta core release in a structured way.

Being part of the Beta Testing Program is a key contribution to the Drupal project and also helps organizations to be very aware of any changes relevant to their supported websites.

Would your organization, and the Drupal project, benefit from participating in the Beta Testing Program? You can apply to join:

Apply to participate in the program

Who should apply?

Agencies and site owners who maintain large and complex Drupal 8 production sites. In particular, sites that use a wide range of contributed and custom modules or have large volumes of content.

Oct 10 2019
Oct 10

For several years, Google has leveraged Drupal as the primary tool for developer portals built for its popular Apigee Edge API platform. With the introduction of the production-ready Drupal 8 distribution in May 2019, an announcement was made that support for the D7 platform would expire in 12 months. Concurrent with that announcement we know that D7 end-of-life will occur in November of 2021. This means that many Apigee portals will need to make the move to Drupal 8 or Apigee’s integrated portals in the near future.

In this article, we will walk through the steps to migrate Apigee portals from Drupal 7 to 8. The first decision you will need to make is whether to upgrade your existing custom build or move to the new Drupal 8 kickstart distribution. To help guide this decision, let’s first take a look at what the Apigee distribution for Drupal 8 has to offer and why you would want to leverage this platform.

Apigee Developer Portal Kickstart (D8)

The Apigee documentation site has excellent instructions on how to set up a developer portal using their Drupal 8 distribution. We will take a quick look at the features that come with the newest install profile.

Apigee homepage

Apigee Kickstart Homepage screenshot

 

The Apigee distribution once again has a nice out-of-box experience. This time around the base theme leverages a Bootstrap base theme that makes it easy to brand and customize your site.

The content types you see will be familiar: Article, Basic page, FAQ, Forums, and a new Landing page content type. Video, images, and audio are now more appropriately Media types in Drupal 8. The SmartDocs content type is gone in favor of a new API Doc type that supports the OpenAPI format (see below).

API doc

API doc screenshot

Adding content is now more flexible in Drupal 8 with the implementation of Paragraph types. Paragraphs allow you to add different components onto the page in any order you like. See the homepage example below.

Apigee paragraphs

Apigee Paragraphs screenshot from Homepage

In Drupal 8, Apigee also added some new block types. Blocks are still useful for components that need to live on more than one page.

Apigee block type

Apigee block types screenshot

The great thing about Apigee’s distribution is that it also includes sample content which makes getting set up a breeze. 

For organizations setting up a portal for the first time, leveraging this distribution is the way to go. For portals being upgraded from Drupal 7, this is more of a judgment call. If your portal has been heavily customized it might be better to move forward with a traditional Drupal 8 upgrade which we will cover under Custom Migrations. If, however, your organization’s portal previously had taken advantage of out-of-box functionality, then it makes sense to migrate content to Apigee’s D8 project which we will walk through next.

Migrating to Apigee Kickstart D8

The maintainers of the Apigee kickstart distribution have supplied a module to make migrations as painless as possible. The apigee_kickstart_migrate sub-module provides the Migrate module configuration that maps Drupal 7 content to their newer Drupal 8 counterparts. Again, this is most helpful for portals that did not heavily customize content in Drupal 7. Included in this sub-module are instructions on how to run the migrations and how to extend migrations with custom fields.

The following table shows how content is mapped from the Drupal 7 portal to Drupal 8.

Drupal 7 (Devportal)

Drupal 8 (Kickstart)

Content Types

Article (article)

Article (article)

title

title

body

body

field_keywords

field_tags

field_content_tag

field_tags

Basic page (page)

Basic page (page)

title

title

body

body

FAQ (faq)

FAQ (faq)

title

title

body

field_answer

field_detailed_question

-

Forum topic (forum)

Forum topic (forum)

title

title

body

body

taxonomy_forums

taxonomy_forums

Comment Types

Comment (comment)

Comment (comment)

author

author

subject

subject

comment_body

comment_body

Taxonomy

Forums (forums)

Forum (forums)

name

name

Tags (tags)

Tags (tags)

name

name

Custom migrations

When would you go with a custom Drupal 8 upgrade over leveraging the Kickstart project? 

Where you run into trouble with distributions in Drupal is when you lean on so many customizations that the distribution gets in the way more than it saves time. In those instances, it’s better to stick with your own custom implementation.

The Mediacurrent team recently released the Migrate Pack module to make things easier for developers. This module has been tested against several sites and distributions including the Apigee Drupal 7 install profile.

Migrate pack module

The approach here would be to install Migrate Pack and the two additional Apigee modules in lieu of leveraging the distribution. The two key Apigee features you will need are the Apigee API Catalog and Apigee Edge modules. All of these projects should be installed using Composer.

If your theme was built custom in Drupal 7, then it will need to be manually ported to Drupal 8’s Twig-based theme engine. The other option is to instead borrow the Bootstrap-based theme included with Apigee’s distribution. It should be said that if the latter approach is taken, it might be better to migrate everything to the new Kickstarter rather than cherry picking the theme.

Next Steps

Apigee has very good support and documentation to get you started on moving to Drupal 8. For issues and bugs specific to the Drupal distribution, the Github project issue queue is the best place to look. The Migrate Pack module also has its own issue queue on Drupal.org should you run into problems.

Mediacurrent has logged over 100,000 hours in Drupal 8 development, many of which are Drupal 7 to 8 upgrades. We would love to work with you on your next project. 

Please visit our contact page to get in touch or hit me up on Twitter to talk more. We also have comments below to gather your feedback and questions.

Oct 10 2019
Oct 10

A note from our fabulous DrupalCon Minneapolis program committee:

With a December 4, 2019 deadline we are one-third of the way through the DrupalCon Minneapolis 2020 session submission period. The program committee is thrilled with what we’ve seen so far, with many compelling sessions to review—from accessibility to Xdebug. If you aren’t one of the early submitters, however, we still need your voice! And we are here to support you.

Oct 10 2019
Oct 10

Baddy, our CEO wrote about this in detail in this blogpost, where she did the math for us.

At the end of the calculation it turned out we spent 7.5% of our budget in 2018 on contribution and this makes us both proud and determined to continue doing more and better every year.

This year at DrupalCon Amsterdam we are sponsoring the Contribution Day on Thursday. This comes very natural to us. Most of our teammates have contributed to Drupal in one way or another, and especially because we built our business on an open source software, we feel that it’s important to give back to where it all comes from.

When preparing for DrupalCon Amsterdam we had big discussions about what to give the attendees. Last year we wanted to giveaway something useful, so we gave everyone a bamboo toothbrush that have hopefully biodegraded by now. But this year we got inspired by our friends at Dropsolid who are contributing 15 minutes to Drupal for every sign up to their newsletter at their booth during the Con.

We thought this was an awesome approach and sparked an idea for us to do something similar.

It’s often shyness and the fear of lack of enough knowledge that keep people away from starting to contribute, and almost everyone who has ever attended such an event had that feeling in the beginning.

Therefore we wanted  to make this first step a bit easier. How could we help people to start?

So 1xINTERNET is offering five types of free trainings that everyone can sign up for during the Con on our website:

  • How to become a code contributor to Drupal
  • How to become a non-code contributor to Drupal
  • Migration training
  • React basics training
  • Patternlab + component based integration

The training will take place online after the DrupalCon, but everyone who registers will be notified in advance.

But we are not going to stop here, because for every registration 1x will contribute 15 minutes to Drupal, and by signing up for a free training you are also encouraging us to do more contribution.

So we invite you to join us on this journey of contribution on Thursday 31st of October in Amsterdam - every bit matters.

See you in a couple of weeks!

contribute today

Oct 10 2019
Oct 10

Project management is a specialized job. It involves planning, coordinating, identifying deliverables, and eventually implementing the job according to client or company specifications. 

The IT manager’s job may involve managing the day-to-day IT needs of an organization, which could include managing computer networks, servers, and ensure the daily efficiency of information technology systems.  

However, an information technology project manager’s job is project-based. Each project is different, and the IT project manager must adapt based on the specific project. Each project has specific goals, and to achieve these goals, the IT project manager must bring together a team of system analysts, software developers and technology experts, and ensure the entire project team is focused towards achieving the project goals.

The manager may need to work with vendors of IT equipment to make sure they keep the project under budget. 

The IT project manager may also play a significant role in the development of training materials to assist employees in making the best use of technology in executing their duties. These materials will offer guidelines on the use of essential applications and how to log into systems.

Educational requirements for IT project managers

Technical experience in the field is helpful but not always required. There are several managers with excellent project management skills who have done well as IT project managers.

However, most IT project managers are former techies who were thrust into the job of IT project manager. Some companies expect candidates to have a minimum of a bachelor’s degree in Information Technology, with a major in either management of information systems, computer science, or information technology.

A combination of extensive technical experience in the field and a relevant bachelor’s degree are expectations of most hiring managers, but some employers will prefer an individual with a graduate degree, mainly a Master of Business Administration (MBA) specializing in technology. 

An ideal curriculum should include courses in IT strategy, leadership, professional development, managerial finance, corporate decision-making, research and analysis methodology, verbal and non-verbal communication, database management, and network management. Recent advancements in technology have made studying IT through distance learning more accessible.

The day-to-day activities of an IT project manager

The daily activities of an IT project manager vary from one project to another. The IT project manager must work with other senior staff in the organization to recruit new employees in his department. They must also coordinate with other teams to strategize, plan, and implement ICT projects in the organization.

The role of an IT project manager will be similar to those of other managers in an organization, but their scope will focus more on meeting the IT needs of the company. For example, they’ll be handling stuff like database management and programming. They will make sure those tasked with actualizing ICT projects in the organization do their work to perfection.

The IT project manager must have an in-depth understanding of the IT needs of the company and take a leadership role in assembling the team that will develop and implement the desired solutions. 

The primary responsibility of an IT project manager is to maintain the computer network in an organization. Every organization has IT needs. Though the structure and size of an organization will determine its IT requirement, each organization requires the following needs to be met:

  • Installation of network elements which may include laptops and desktop computers, smartphones, PDAs, GPS-based vehicle units, and other electronic devices used in accessing the network. They will grant access to users to access the organization's software and programs besides creating user accounts.
  • Communication with other departments to establish the needs of the organization. This role will include departments to choose hardware and assist coworkers in knowing how to use technology in their daily activities in the organization. For example, the IT project manager must work closely with the finance manager to determine the hardware and software to purchase for the organization.
  • Maintaining the network. The IT project manager will have the responsibility of upgrading and updating software besides troubleshooting. These actions are critical to protecting the integrity of the system and preventing slowdowns and failures that can be financially costly to the organization.
  • Securing the network. Network security is an expansive role that goes beyond installing antivirus software. Security measures that the IT project manager will implement will include determining the employees who’ll have access to confidential information on the organization, monitoring how employees use company internet and equipment, and protecting company information from outside threats such as hackers and other intruders.

The following are the typical duties and responsibilities of IT project managers:

  • Preserving the company assets through data back-ups, information controls, and procedure and data recovery. Using a timesheet app and other similar software to manage ICT projects in the organization.
  • Using IT to define, support, and deliver the company’s strategic plan.
  • Researching emerging technologies and relating them to the organization’s needs. They will use new technology to solve these needs.
  • Analyzing the needs of the company and providing a technical solution and timelines for implementation of the solutions.
  • Effective implementation and detailed timelines for project controls for the company’s software releases.
  • Measuring the effectiveness of the implemented IT solution via systems audits.
  • Participating in hardware and software assessment and maintaining contracts with suppliers.
  • Recommending IT strategies, procedures, and policies by looking at the company’s needs and evaluating the outcomes.
  • Loading the correct software such as the operating systems.
  • Troubleshooting and resolving user problems regarding the organization’s software in time.
  • Administering antivirus and email systems.
  • Participating in forecasting and the preparation of the project budget, analyzing variances, scheduling expenditures and implementing corrective actions to save the company from loses.
  • Enhancing quality service by enforcing the organization's standards.

Conclusion

Technology is an important part of our lives today. An IT project manager is expected to have skills in both IT and project management. 

Author Bio

Maria Espie Vidal writes for Timedoctor.com, a productivity app that helps talents manage their time and work efficiently any time, anywhere.

Oct 10 2019
Oct 10

Nuvole offers a training at DrupalCon Amsterdam: "Drupal 8 Migration as a process" - register until October 27.

There are a few significant changes that landed in Drupal 8.8 with respect to configuration management:

The first one concerns everybody using Drupal 8 and especially going forward Drupal 9. So far the config directory was set up with in settings.php with the variable $config_directories. This variable was an array for historical reasons when both the active configuration and the sync configuration were stored in files. But since Drupal 8.0.0 that was not the case any more, yet the array remained. Drupal only ever used one key, but developers saw an array and naturally assumed that there should be more than one key.

In the effort to avoid confusion and to streamline the configuration management we have now corrected this and added the config directory to the settings variable as $settings['config_sync_directory']. If for some reason someone still wants to have a workflow with multiple sync directories then that can still be achieved with a small amount of code since setting.php is a php file and the settings can be set conditionally. In my opinion though one sync directory is sufficient for the vast majority of workflows and this change will help to not confuse developers.

For me this is the biggest achievement for CMI 2. This allows contrib and custom modules to interact with the configuration synchronization in a very straight forward way. It is Config Filter in core but better, it is what I have been talking about at many Drupal events and finally it is in Drupal core, stable and available to everyone. There is already a patch for Config Filter 2.x to be the bridge between modules depending on Config Filter and the new core API. Config Filter 2.x will be api compatible with Config Filter 1.x but instead of decorating the sync storage it will apply the filter plugins to the new core API. In addition there is an issue for Config Distro on the way to model its API after the new event driven core API.

The latest major achievement which will be celebrated by many will be that it is finally possible to have devel installed on the development environment and not having to worry about it being deployed. This feature is already available in contrib since December 2017 with the contrib module Config Exclude. It uses Config Filter and is a relatively simple module with just one configuration option. This is why it was a good candidate to add to core as a proof that the new API works. The contrib module and the new core feature (yes you don't need to install a module it just works) both use the same setting: $settings['config_exclude_modules'] = ['devel', 'stage_file_proxy']; They work both alongside together so if you want to use this feature you don't have to wait for 8.8, you can use it on 8.6 and then when you upgrade to 8.8 you can simply uninstall Config Exclude and it just continues to work.

There has been some confusion about this feature and how it can be dangerous. The excluded modules, (ie the modules listed in the settings array) are removed from core.extension.yml and all the config depending on them is not exported. When importing the configuration and the module is installed already the configuration from the site is added to the configuration to import just before validating the configuration for the import. That means that devel will not be uninstalled when you import the configuation that doesn't have devel in it. But it also means that the configuration that you exported is no longer the configuration you had when you devloped your site and if you exclude modules that are central to the site such as required modules such as system or user or modules that change a lot of configuration such as language or field then the configuration can not be imported on the target site any more. Your site will not break, but you can not deploy the new configuration.

The CMI 2.0 Session at DrupalCon Amsterdam will contain more about all of the above and what else is planned to come.

Oct 09 2019
Oct 09

There has been a lot of thoughtful debate about the Drupal project's contribution credit algorithm in recent weeks, and some great ideas have been proposed. In the meantime, however, we've also been monitoring concerns about gaming of the current algorithm. Making changes to the contribution credit algorithm must be done with care, because it has a significant impact on how we recognize contributions and also on the ecosystem of Drupal service providers. Today the Drupal Association engineering team deployed a quick tune-up to the contribution credit algorithm.

This change strengthens the existing multiplier which weighs issue credits based on the usage of the project. Issues on more highly used projects will now be weighted even higher, and those on lower usage projects will be weighted lower.

We're calling this a tune-up with good reason. This is not a fundamental update of the credit system; this is a small change to help resolve some recent issues with the current version of the algorithm.

Developing a true 'Contribution Credit 2.0' system is a much larger project, but one we're hoping to undertake soon.

In the meantime:

  • If you have feedback on the small change we made today, you can find the issue here.
  • If you'd like to propose new ideas about the next generation of the system, please do so in this issue.

As the community thinks about the contribution credit system, we encourage you to remember that there will always be a human element to recognizing contribution - and our goal should be a system that enables better interaction between project contributors.

Oct 09 2019
Oct 09

Your browser does not support the audio element. TEN7-Podcast-Ep-072-Joe-Shindelar-a-Passion-for-Open-Source.mp3

Summary

Podcast guest Joe Shindelar of Osio Labs chats with Ivan about making interactive sculptures, snowboarding and his long history with open source software.

Guest

Joe Shindelar, Osio Labs  

Highlights

  • First tech memories
  • Kids today! They don’t know how hard we had it with technology
  • How debugging software is akin to interactive sculpture
  • Working at Lullabot
  • Drupalize.Me
  • Lullabot Education becomes Osio Labs
  • Snowboarding instructor at Blizzard
  • Snowboarding vs. skiing
  • How not to pick an online handle

Links

Transcript

IVAN STEGIC: Hey Everyone! You’re listening to the TEN7 podcast, where we get together every fortnight, and sometimes more often to talk about technology, business and the humans in it. I am your host Ivan Stegic. My guest today is Joe Shindelar, a lead trainer and lead developer at Osio Labs, whose mission is to empower anyone to build websites using open source tools. Joe is passionate about open source technology and has a rich and interesting past, having started out at a small agency here in town called Triangle Park Creative, moved on to Lullabot, Drupalize.Me and now Osio. He’s also a snowboard instructor, teaching kids how to snowboard. I have lots of questions about pronunciations as well. So, good morning Joe. Welcome. It’s so nice to have you on the podcast. 

JOE SHINDELAR: Good morning. So, pronunciation. My last name is Shindelar, so close, but not quite. Then Osio, we say Osio (pronouncing "OH-SEE-OH") Labs. It’s technically a made-up word, so I don’t know that there’s necessarily a correct pronunciation, but we all say Osio Labs. It stands for Open Source Inside and Out.

IVAN: So, it’s actually an acronym. I love that that’s the name. I think the reason I said Osio (pronouncing "AH-SEE-OH") is because the I kind of looked like an l to me and I must’ve thought Oslo.

JOE: Sure.

IVAN: Osio. Okay. Open Source Inside and Out. I love it. And, I actually was going to say "Shind-e-lar," but I thought I heard someone say your name "Shindler," without the e, and I thought, Oh, that must be the way you say it.

JOE: There’s a very good chance that you have heard someone say it that way. It’s a common thing. For the most part, unless I need to, I don’t even bother correcting people, because I know that they are talking to me, and it’s fine.

IVAN: I feel the same way. What’s the etymology of the last name?

JOE: It’s Czech.

IVAN: Wow, cool. So, let’s see—you’re lead trainer, lead developer at Osio Labs, but I want to go back a little further to you being at Osio, and I kind of want to figure out where life started for you, and how you arrived where you are today. So, where did you grow up?

JOE: I grew up in Stillwater, Minnesota. So, not too far from where I live now in Minneapolis. Maybe you’re familiar with the area. I grew up just north of downtown Stillwater in a house, kind of right on the riverbanks, with a vacant lot across the street. Spent a lot of time running around by the St. Croix River and playing in the woods outside in Stillwater.

IVAN: Wow. That must’ve been absolutely beautiful there.

JOE: It was awesome. I loved growing up there. I also loved that when I was 14 or 15, we moved to the cities and there were things to do. So, I was like, I want to go to the movies or an arcade, or any of those things, and there just wasn’t a lot of that to do in Stillwater.

IVAN: Did you end up at Stillwater High School?

JOE: I went to Stillwater High School for half a year, and halfway through my first year there, we moved to Minneapolis.

IVAN: Was that in the nineties or a little sooner than that?

JOE: Yeah, in the nineties. We moved in 1998 or so.

IVAN: So, you’re kind of a kid of the nineties?

JOE: Yeah.

IVAN: What’s your first memory of technology and the internet?

JOE: I kind of vaguely remember the first computer that we had at my house. My Dad worked at the Science Museum in Minnesota at the time, and they had gotten a bunch of Mac computers for the exhibits department to experiment with. They didn’t really know what they were going to do with them, whatever, my Dad got to bring one home.

So, he would bring it to our house on the weekend and we’d set it up in the living room. And kind of like today, you might set up a TV or something in the living room, and the whole family gathers around to watch a movie. My Dad would set this Mac up and me and my sisters would all gather around and watch my Dad play games. Mostly he would play this game called Crystal Quest, which every once in a while I try to find a copy of so I can play it now. But, it’s basically like little blobs floating around on the screen, collecting crystals.

So, I remember that part of it, and then I remember my Mom really got into playing Tetris. I remember this rivalry between my Mom and our babysitter at the time. Greta would play Tetris and get the high score. Then my Mom would come home from work, and she’d sit down at the computer and immediately start playing Tetris in order to beat Greta’s high score. Then the next day Greta would show up to take care of us, and she’d be like, “All right, you guys can go outside and play.” And she’d sit down and start playing Tetris to try and beat the high score. This went on forever. And that kind of stuck with me in some ways. I played a lot of Tetris as a kid, and I still do occasionally now.

IVAN: Did you ever try to beat your Mom’s score?

JOE: I’m sure I tried to. I don’t really recall how that all played out. I imagine today I would probably win, because I don’t think she plays Tetris much anymore.

IVAN: [laughing] You could beat your Mom now. Okay. Nice, Joe. Mom, if you’re listening, I think that’s a challenge. That’s great. And so, that was the family computer. I guess that wasn’t connected to the internet in any way right?

JOE: No, it wasn’t. My first memories of being connected to the internet are later. We had another Mac at the house, and I remember getting connected to AOL Instant Messenger. Specifically my cousins had come to visit, and they had AOL, and I think we were able to dial into their account while they were at my house. And I was like, This is awesome. So then when they left, we had one of those free month trial discs, and we signed up.

I remember spending a lot of time going into the AOL chatrooms and chatting with my cousins. That’s my earliest memory of doing things on the internet, and eventually that led to looking at websites and such. But mostly I just remember going into random chatrooms and saying hi and trying to figure out who else was in the chatroom with you. In retrospect I’m like, That is awkward and terrifying. Like, I wouldn’t do that now.

IVAN: I feel the same way. Did you have one of those external US Robotics modems?

JOE: Yeah, we totally did.

IVAN: And you could tell when it was connecting. I would always have trouble getting it to connect. Boy, memories, huh? Geez. That was awesome. But you learn so much about how the internet works having those issues, because you’d really have to try and figure out what the heck’s going on.

JOE: Totally. In comparison to now, where it’s like, you connect to Wi-Fi and maybe it goes down every once in a while, but rarely. It’s just sort of like every device you have is connected all of the time and there’s none of this, I have to turn on the internet and then wait for it to connect and hope that my sister doesn’t try and make a phone call at the same time. It’s amazing how much this stuff has changed.

IVAN: It is. It’s really amazing. I remember my parents getting really mad at how much time I was spending on the internet, but mostly because local calls in South Africa were not free. So, internet service you’d have to pay for, but to dial in you’d have to pay for the time that you were on the landline as well. And, the first month’s bill, like anyone with the original iPhone knows, right? You use all that data that you don’t know that you’re using. [laughing]

JOE: [laughing] Right.

IVAN: Yeah. That was bad.

JOE: How could I possibly use more than 1 gigabyte of data? Then you’re like, Oh, apparently I can do that in a day.

IVAN: [laughing] That’s awesome. So, Stillwater High and then what happened after that? What did you do for education after that?

JOE: When we moved to Minneapolis, I went to South High School for about half a year. A kind of a funny story there, where, we moved from Stillwater to Minneapolis in the middle of the school year, and Stillwater High School operates their school year on quarters, and South High School operates on trimesters. So, we moved at the end of the quarter from Stillwater, but I couldn’t get into South High until the beginning of the second trimester. So, there was this almost one-month period of time where, as like a 16-year-old boy, I didn’t have to go to school in the middle of my school year.

Which was amazing, except for in order to make this all work, my Mom had orchestrated this deal with South High School that was like, “All right, we’ll give him credit for the full year even though he’s missing a month. But in order to do that, he needs to spend a bunch of time doing some research and writing a report while he’s on this break.” So, I opted to write a report about U-boats, and so I did all this research on German U-boats and wrote a report, made paintings of U-boats and collected all of this and put it together. Gave it to my Mom so she could hand it into the school, started school, went on from there.

Like 10 years later, I learned that my Mom made this whole thing up. There was no requirement to write the report. [laughing] My Mom was like, “Well I can’t have Joe and his sister just sitting around doing nothing for three weeks, so I guess I’ll make them write reports.” And, she dug it out of some box in the basement and was totally like, “Oh, yeah. That’s right. This thing.” I’m like, “Are you kidding me?” [laughing]

IVAN: [laughing] That’s amazing. So, you ended up studying art in high school?

JOE: I did. There’s a school here in Minnesota that’s called the Perpich Center for Arts Education.

IVAN: Oh, I know that school. That’s a good school.

JOE: Yeah. So, I went to Perpich for two years. I was in the media program there, studying media arts. It ended up being really fascinating for me, because about the time that I was there, like 1999/2000, the program was transitioning from a lot of analog media stuff. So, photos in a dark room, creating video using VHS and two editing decks, and transitioning to do a lot more. The school had just gotten its first digital cameras, and first digital video recorders, and there was an iMac that had the very first version of Final Cut Pro on it. So, it was like, my first year there I did a ton of stuff in the dark room, and the second year there, all of a sudden, we were using Photoshop and computers, and I was like, This is cool. This is what I want to do.

IVAN: And so, you knew you wanted to be involved in computers right away in high school. So, what was the next step? I know that you went and spent some time in Rhode Island.

JOE: When I graduated high school, my initial plan was to move to New York City and become an ActionScript developer and make millions of dollars writing Flash applications.

IVAN: Of course. I mean, yeah, Flash, absolutely. [laughing]

JOE: [laughing] But, that didn’t pan out. I never actually left for New York, and I decided I should go to college instead. Then I bounced around a bunch. I went to a handful of different schools because I wasn’t entirely sure what I wanted to do. I started out as a computer science major at University of Wisconsin Stout. So, I did that for a semester, and then decided This is way too hard and I’m not good at it, so then I switched to math and I was going to major in math, then I decided I didn’t like that either.

So after a semester I dropped out, and didn’t go to school at all for about a year. I followed a girl out to Rhode Island, and I ended up going to the community college out there and taking a bunch of art classes, and, kind of falling in love with art again after having not done it for a few years. Then I moved back to Minneapolis and finally about eight years later, graduated from the University of Minnesota with a degree in Bachelor of Fine Art with a focus in sculpture.

IVAN: Wow. A BFA with a focus in sculpture.

JOE: Yep. [laughing]

IVAN: That’s insane. And it’s so interesting, all the people we’ve had on the podcast, all of the different paths that lead to Drupal.

JOE: Yeah, totally.

IVAN: And, it seems like a lot of them go through the fine arts degree of some sort. You know, journalism. So, sculpture eventually turns into Drupal, or was Drupal happening at the same time you were at the University? Because I know there’s all these overlaps as well.

JOE: I was starting to do Drupal at the same time I was going to school. I had a job working for a company here in town, Triangle Park Creative. I was working there pretty much full time while also going to school. And so, I was learning to build websites on the job at Triangle Park, and at school I was studying sculpture and in a lot of ways, trying to figure out ways to incorporate technology into the sculptures that I was creating. So, microprocessors and sensors and that kind of stuff.

IVAN: That was hard so long ago, right? Things weren’t small.

JOE: Oh my gosh. I was talking to somebody about this the other day, where, not that it’s by any means easy to do this stuff today, but, there is a plethora of different microchip boards you can buy, like Arduino and Raspberry Pi and all of these kits that you can get with sensors, and assemble them together, relatively easy in comparison to even like 10 years ago. You could do all that stuff back then, but you had to do a lot more of the behind-the-scenes work to flash your program onto the memory of the board and get it to run and solder things together.

All of these things that, as an art student, I was like, I have no idea how to do this, but what I really want is for this light to turn on when somebody walks past my sculpture. And, so, I spent a lot of time tinkering with hardware stuff like that in order to incorporate it into the art that I was making. I had this idea that I wanted to make sculptures that would evolve by virtue of the fact that someone was viewing or interacting with the piece. So, you go and see the sculpture and instead of it just being a piece of concrete, or something that never changed…

IVAN: Like a sculpture that’s static of David, right?

JOE: That the fact that you had been there to visit that sculpture would reflect in the art for the next person that saw it. That was the dream. I would say 80% of the projects that I worked on were like duct tape and bubble gum and the fact that it held together long enough for a critique was always the highlight of the sculpture. I was like, Wow, it didn’t fall apart. [laughing]

But, I had a lot of fun doing that. I learned a ton about computers and programming and problem solving and debugging. Just things I think about a lot today, even working on writing PHP for a Drupal module, and you’re trying to figure out why a particular aspect of it isn’t working. That the process that you go through to debug it isn’t all that different than trying to figure out why your mechanical switch doesn’t actuate when somebody walks by. And, initially you’re like, Those are two totally different concepts, Joe. It’s like, Yeah, but the debugging part of it is roughly the same, trying to isolate what the problem is, and figure out what’s causing it, and see if you could replicate the problem, and so on.

IVAN: Are you still making art these days?

JOE: Not really. Not in any kind of professional capacity. I have two little kids. I do a lot of coloring and painting with them, but I wouldn’t call it art, per se.

IVAN: Yeah, well I kind of miss doing that as well. It’s definitely something that rejuvenates and, kind of, re-energizes oneself when you do it.

JOE: So, then I was also working at Triangle Park, building websites. And initially the goal there was I needed a way to pay for school. I had a job and more and more people kept asking us to build them websites, and I kept getting paid to do it. So, I thought, Well, I’ll keep doing this until I grow up and get a real job. [laughing] And here I am, 15 plus years later, and I still make websites.

IVAN: Still waiting to grow up. [laughing]

JOE: Right. I found Drupal through all that initially. I think what a lot of us have done, and have been doing this for a long time, you went through the process of trying to craft your own website, and maybe your own content management system, and in my case, learning PHP along the way. I would go and look at the code and things like WordPress and Drupal. Mostly I would copy and paste wholesale things from Drupal into my code, and then eventually I was like, This is kind of dumb. I should probably just pick one of these and use it. And I did. For various reasons it meshed well with me. It solved the problems that I had at the time and it continued to evolve, and here I am.

IVAN: It continues to pay the bills.

JOE: Like, 15 years later, instead of being a starving artist, I build websites with Drupal and teach other people how to do it.

IVAN: It’s a good story. So, eventually you left Triangle Park and started with Lullabot, a completely distributed company.

JOE: Yeah.

IVAN: What was that like? Why the change?

JOE: I was looking for an opportunity to work with other people who were doing Drupal. At Triangle Park at the time, there was just a couple of us, and we were doing Drupal, but mostly we were doing it in kind of isolation within Triangle Park, and I was interested in figuring out ways to participate more in the larger community. I was also looking to have an opportunity to work with people who were better at this than I was.

At Triangle Park, I think we all kind of grew up and evolved together. It was an awesome opportunity to learn, but you were never working with someone who had been doing this for a few years longer than you had. I was looking for some of that. Then the opportunity at Lullabot—I wasn’t specifically leaving Triangle Park to go to Lullabot—it was more one of those scenarios where I was in a fortunate position to be able to say If I don’t quit here, I’m never going to put the work into finding what’s next.

So, I left Triangle Park and sort of had some ideas of what I wanted to do next, but nothing concrete lined up. And the opportunity to do some contract work as a trainer for Lullabot came up, so, I jumped on that. I applied for the position and didn’t hear anything back for three months, and I was like, Well, I guess that didn’t go anywhere. My recollection is that I didn’t even get an email in response to the fact that I had applied. Like, “Hey, thanks for your application.” It was just like radio silence. Then one Thursday afternoon I got an email and they were like, “Hey are you still interested in helping do some training? Can you be in New York tomorrow?” [laughing] I was like, “Yes, I can. Sure.”

IVAN: Wow.

JOE: Again, I was in a fortunate position to be able to make that work, and it did. I started doing a bunch of contract work for them, then more and more over the course of about half a year, and eventually that got to the point where I just said, “Look, I’m working for you two and a half, three weeks out of the month, and it’s making it hard for me to find any other work. I need to either come on full time or I need to go do something else.” So, they brought me on full time. Then, I was working from home full time which, I know you know this is, it’s quite an adventure and a transition to make.

IVAN: It is. It’s been the best adventure and transition for us over the last two years, when we started doing it two years ago. So many good things about doing it. For me it's just the ability to see my kids and my family as much as I can. It gets a little long toothed sometimes in the summer when the teenagers are all around, but otherwise it’s just amazing. So, yeah, it’s really great. I didn’t realize that you jumped into work with Lullabot directly as a trainer. I just thought that that kind of evolved out of your being a developer at Lullabot, but actually not.

JOE: It’s the other way around.

IVAN: The other way around. Wow.

JOE: I started out doing training. So, back in the day, Lullabot used to do a lot of in-person training workshops. We would do trainings at DrupalCon and Camps, but we had also organized and hosted events in various different cities. We would say, “Hey, we’re going to be in Portland this week, for these two days, and we’re going to teach theming. Then we’re going to be in Boston for these couple of days and we’re going to teach advanced module development, and if you want to attend, here’s the cost. Come to the workshop.”

In addition to that, we were also doing those same workshops, privately for clients. At the time that I came on that was really taking off as a business opportunity for Lullabot, and they needed to have additional help to do the training, because they just had so much of it going on at the time. I started doing that with them, and for me, that evolved into—I said earlier that eventually I kind of had to play my card and say, “Look, I need a full-time gig, or I need to move on,” and they brought me on full time. And then it was like, “Well, now what do you do?” The answer was I kept doing a lot of training, and then when I wasn’t working on the training stuff, I mostly worked on internal projects. One of those was what eventually evolved to become the Druaplize.Me website. In addition to doing the in-person training, Lullabot produced a bunch of DVDs for training.

IVAN: I heard about this.

JOE: Yeah.

IVAN: Yes, I’ve heard this story from someone, who shall remain nameless at this time. [laughing]

JOE: [laughing] We made a bunch of DVDs, and they were awesome and then everyone was like, “Why would we want DVDs when you could just have your training on the internet?”

IVAN: Right.

JOE: I think they did fairly well for a year, and then I was like YouTube came around and people were like, “You could put video on the internet. Why would I buy a DVD?” So, Drupalize.Me kind of started out as a, “Well, let’s take the content of the DVDs and put it online, and charge people that way.” Which is pretty much what we did. Very early iterations of Drupalize.Me, when you would go to watch a video of our training, you would sit down and it would be like, “Here’s a four-and-a-half-hour video that you could watch on how to build a module.” [laughing] We literally ripped the DVDs and put them on the internet.

IVAN: Were there any FBI warnings on those DVDs? [laughing]

JOE: [laughing] I don’t recall. There are still a bunch of them in existence. We could probably find out. When you make DVDs to sell, you have to get a certain quantity of them printed in order for it to be economic, and so we printed out thousands of these DVDs and then sold hundreds, and there are now still hundreds of them in boxes.

IVAN: Like in Jeff’s basement, or in Matt’s basement somewhere.

JOE: I don’t actually know if this is true anymore, but for a while, they were in storage. We had worked with this drop ship-type company where they store the DVDs for you, and you send them a message saying "Ship these three to Ivan." The contract that we had with them sort of stipulated that if we wanted to cancel our contract and get our remaining inventory back from them, it was going to be way more expensive than it was to just leave the DVDs there, and keep paying the monthly fee. So, for a long period of time those DVDs just remained in storage, and I guess you could call them, and they would ship one, but I’m not sure if they’re still there or not.

IVAN: I will ask Jeff the next time I talk to him. [laughing] What’s going on with that? So, Drupalize.Me then became quite successful, and then at some point it split off and it was no longer a part of Lullabot. And it was kind of run by, I think I remember, was it called Lullabot Education?

JOE: Yeah, that’s correct. So, within Lullabot we had kind of the education department, and we were responsible for Drupalize.Me and for all of the client training and in-person workshops and stuff that Lullabot was doing. Over time that business changed a bit. We were doing less and less in-person training and more and more working on Druaplize.me.

For the most part, other than myself, who was kind of full-time in that department, people at Lullabot would work on Drupalize.Me in between client projects. Which, of course, is like also synonymous with never. [laughing] But the idea was when you’re not working on client projects, you’ll have time to help work on Drupalize.Me. It meant that Drupalize.Me, while it was showing signs of being able to be really successful, was struggling a bit because it just couldn’t get the attention that it needed to get over that next hurdle.

IVAN: When it’s a services company running a product within your services business. Right?

JOE: Exactly. There’s this idea that your service is kind of ebb and flow and in between you’ll be able to work on a product, but a product needs constant attention. You can’t just work on it now and then. Especially something like Drupalize.Me where ultimately what you’re paying for is ongoing content. Like, yes, there’s a technical aspect of like, we have a website and you can watch the videos online, and maybe that part doesn’t change a lot, but we do have to continue to produce new content.

IVAN: Drupal 8 comes out, Drupal 9 comes out.

JOE: I’ve made videos about how to create a view in Drupal for Drupal 6 and Drupal 7 and Drupal 8. Oh my God, I've got this down. So, ultimately the decision was in order for Drupalize.Me to really be successful you need to push it out of the nest and teach it how to fly. Let it learn on its own. So, we did. The company was split off from Lullabot into—what was at the time, Lullabot Education—and it was split off on paper, so technically for legal reasons, we were separate companies, but we still had the same ownership.

We were still all in the same Slack channel. We still all went on the same company retreat. It was just from an accounting perspective and taxes and that kinds of stuff, we were a separate company. That was years ago, now. And it has continued to evolve since. The ownership has changed a little bit, there’s overlap between the two, but it’s not identical anymore. Lullabot Education, which is now Osio Labs, has grown. We still attend the same retreat—sometimes, but not always. In some ways there’s some logistic stuff about it that makes that really easy for us to do.

And we just recently started our own Slack team, so we’re no longer sharing the same Slack room with Lullabot. We now have our own. I guess over time what’s happened is, as Osio Labs has grown and we’ve hired new people, there are now a number of people who don’t have that shared history, and trying to figure out how to balance that has been an ongoing thing. Those of us who were part of Lullabot at one time, it’s often difficult to be like, “Ah, I miss that,” or “I still am part of that. These are still my friends.” But then the people that never there don’t have that history, and it just makes no sense. It’s like, Lullabot who? Who are we talking about? What’s going on here? It’s like trying to figure that all out. 

IVAN: And, it’s also may be influenced by the evolution of the things you’re teaching as well, because you’ve gone from teaching purely Drupal, and spinning that off as another company, and Osio Labs, now, you guys are teaching Gatsby and Node as well as Drupal, and this is kind of more of a generalized company that isn’t just going to take on Drupal.

JOE: Yeah, I think that’s right. I think it’s like part of the change of name, and really, it’s that going from Lullabot Education to Osio Labs is like, we’ve done a bunch of paperwork and we’ve changed our name. Everything else is still the same. It’s an indication of our evolution and growing up as a company. And, wanting to branch out into things other than Drupal and establish a name for the company.

We’re looking at things in other communities like Gatsby or Node or other open source areas that we might want to get into. We don’t necessarily need that association with the Lullabot name, where Drupalize.Me has been, and continues to be, super beneficial. Then we wanted a name that was a bit more reflective of the fact that we’re doing more than just Drupal at this point. Barely. But we’re just starting to do more than Drupal, but the long-term plan is to take all of the lessons that we’ve learned, teaching people how to do things with Drupal and the success that we’ve had with Drupalize.Me, and being members of the Drupal community and finding other open source communities that, as a business, we can participate in, and provide training, provide support for the community, help the community grow. All of those things.

IVAN: I love that you’re expanding and applying the things that you’ve learned in Drupal to the rest of the world and the rest of the community. I think that’s admirable, and I think you have a ton of value that you can bring to the open source community. I just wish you the very best of luck in doing that, and I’m excited to see that grow.

JOE: Yeah. It’s going to be a lot of fun. I think.

IVAN: I think so. And I love that it’s in the name, as well.

JOE: Yes.

IVAN: Just awesome. So, you’ve been teaching for a long time. I think you alluded to the fact that it’s been probably about 15 years or so, and it’s not just technology is it? You’re kind of a beast on the ski slopes, aren’t you?

JOE: [laughing] Yeah, so I teach snowboarding as well, and I’ve actually been doing that for quite a bit longer than I’ve been teaching people Drupal. And I continue to do that today, but not nearly as much. Teaching snowboarding does not pay the bills for me, [laughing] but I still enjoy doing it.

IVAN: When did you start that? Was that around the same time as you got to the city, moving away from Stillwater?

JOE: I was in college.

IVAN: Oh, so you didn’t do one of those Saturday camps where you get up at 7:00 a.m. and spend the day out on the ski slopes and Mom and Dad pick you up later?

JOE: I did not participate in one, but I teach for one now. But I was never a part of it. I teach for a ski school here in Minnesota called Blizzard. One of my friends had been in Blizzard when she was younger and we were both in college. She and her family had remained connected with the people that owned Blizzard at the time. Snowboarding, as a thing that students were interested in, was really taking off and they were basically desperate for snowboarding instructors and they were like, “Joe, Katie, you know how to snowboard right?” We’re like, “Yeah.” They were like, “You want to be teachers?” We were like, “No, I have no idea how to be a teacher.” They were like, “That’s fine. Mostly we just need warm bodies on the hills.”

IVAN: Usually the case. [laughing]

JOE: [laughing] It’s really more like we need someone to make sure this group of kids returns safely at the end of the day. And if they happen to learn something along the way, I guess that’s a nice side effect.

So, I was like, “Sure, I can do that.” And I got into teaching through that, and that kind of evolved over time too. After a couple of years as a pseudo-instructor, I found some training that I could take to help learn be a better snowboarding instructor, and then got certified through a program called The American Association of Snowboard Instructors

Over time I continued to learn how to be a better instructor through that. I think part of what happened there is I had spent a number of years teaching snowboarding, getting certified, getting to a point where I was doing training for other people to become certified as snowboard instructors, and this opportunity—I mentioned earlier Lullabot was looking to hire trainers and I applied for the job—and one of the questions is, “Do you have any previous teaching experience?” I was like, “Yeah, I do actually. Not formal in a school sense, but I had all of this background from Blizzard teaching and helping with certification programs, and that kind of stuff.”

In retrospect, I think that was a big part of why they eventually called me back. Like we just said, everyone in the Drupal community at the time, it was like, “Do you know how to teach people?” I was like, “No.” They’re like, “Oh, that’s fine. We just need warm bodies to stand up here and flip through the slide deck.” [laughing]

IVAN: [laughing] Right.

JOE: I was like, “I could do that.” It’s awesome.

IVAN: My son loves Blizzard. He’s been skiing for about eight years. He’s been skiing since he was three or four years old, and this last winter was the first time he did the Blizzard program. He’ll be thirteen pretty soon. He loved it. He complains about getting up early on a Saturday morning. You know, “Oh, I have to get up at 6:30 and be there at 7:00.” But he comes back with the best experience and people, new people he’s met. And, you know, they have a rating system on which ski slopes have the best refreshments and fries.

JOE: So, how it works is Blizzard is a traveling ski school. So, we go to different ski areas around the Twin Cities Metro area instead of just going to the same one every time. And you show up at one of these places, like you show up at Trollhaugen and as a snowboarder I’m like, This is awesome. We’re at a new place. I can’t wait to get out and go snowboarding. And then, as a teenage kid, they’re all like, “Hmm, what videogames do they have at Trollhaugen?” [laughing]

IVAN: [laughing] Yeah, the perspective is a little different.

JOE: One of the things I enjoy most about being a snowboard instructor is the opportunity to take my passion for snowboarding and display that in a way that someone else gets to see it and sort of be like, “Wow, he’s really excited about this and he’s having a lot of fun. I want to do that too.” And, especially working with kids, you have this opportunity to like, yes you can teach them the mechanics of how to make a toeside turn, but also you can have a lot of fun. So, then the next week, when they’re getting ready to come back, they’re excited to come back, and they’re excited to go snowboarding again. And hopefully they grow up to be adults that are excited to go snowboarding.

IVAN: I appreciate that work that you do as well. I know Cooper evolved from not wanting to get up and try and go to Blizzard to like, “Yeah, don’t mess with my Saturdays in the winter because I have Blizzard to go to.” Yeah, it’s just been great to see him do that. Now, I’m going to ask you maybe a little bit of a controversial question. So, this is a heads up.

JOE: Okay.

IVAN: Have you biased your kids one way or another, ski versus snowboard?

JOE: Yes, I’m sure I have. [laughing] I have not intentionally told my children, “You will snowboard, and you will never ski.” But at the same time there are no skis in my house. My kids are really young. I have a three-year-old and a one-year-old. So, neither of them are skiing or snowboarding yet. We did get Wesley a snowboard last winter, no bindings, just a plastic thing with a rope on the front, and I’ll pull him up and down the alley, and he thinks that’s pretty fun.

We’ve been talking about maybe starting them on skis, in part because, generally kids can start skiing a lot younger than they can snowboarding. Snowboarding just requires a different amount of muscle. You need more physical strength to control a snowboard, initially, than you do with skis, and to be able to do things like stop. Whereas for younger kids, it is relatively easier to put on a pair of skis and make a wedge, pizza, French fries, pizza, French fries.

IVAN: I started skiing in my late thirties. I’m very familiar with pizza. [laughing]

JOE: [laughing] Right. That’s about the extent of my skiing skills too. So, if I was to teach my kids how to ski, it would mostly be, “Here’s some skis, here’s a hill, I’ll see you at the bottom.” [laughing]

IVAN: [laughing] I think that’s awesome.

JOE: I will absolutely teach them skiing or snowboarding. As far as I’m concerned, they should choose one that’s exciting to them. I would rather them be really excited about a winter sport, than me dictating what it is. Ultimately, I just want us to have things that we can do that get us outside in a Minnesota winter, and enjoy being outside instead of cooped up inside all of the time.

IVAN: Totally agree. My kids were in the Buck Hill program when they were three and four. My wife would take them out, and here’s this South African immigrant [Ivan] who has never skied ever, sitting in the chalet watching them. I thought to myself, What am I doing? I got to get out there as well. It’s never too late to learn anything. They’re going to be much better than I am, and still are, but so what, we’re out there. That’s what counts. That’s awesome. Okay. One final question. I want to talk about your handle. I’ve always thought it was the greatest handle that someone has on Twitter. So, it’s eojthebrave. What’s the etymology of that?

JOE: Eojthebrave, eoj is "Joe" spelled backwards, and then "the brave," with all the spaces removed. And it’s a funny thing, because I now have this online moniker that everyone knows me as that was never intended to be something that people could pronounce. It was supposed to be just a bunch of characters that you saw on the screen. I never thought about would someone be able to say my name. But now I attend all of these Drupal events and open source community events, and people are like, “You’re eojthebrave,” and I’m like “I guess you could say it that way.” It’s kind of like, is it OH-sio or AH-sio? I don’t know.

IVAN: It doesn’t matter. It’s important that we’re talking.

JOE: So, years ago I was really into playing Warcraft 2, and you could play online, and I needed to have a nickname that would inspire fear in the hearts of my enemies, [laughing] especially in a medieval war game. What better than something like "Joe the Brave." And I was like, online you’re supposed to be anonymous. People shouldn’t know that my name is Joe. So, if I just spell it backwards, no one will ever know.

IVAN: Clever.

JOE: And then it evolved over time. Initially I think it was like eoj <space> the <space> brave, and then I probably signed up for something where you couldn’t have spaces in your name so I used underscores. And then I probably signed up for something where you couldn’t have underscores in your name. So, it just kind of all merged together. And now, here I am, twenty years later being like, “I should’ve just picked Joe.” [laughing] But, this works fine.

IVAN: [laughing] And, do you have all of the domain names as well. Eojthebrave.com and all that?

JOE: No, I don’t.

IVAN: Oooh Alright. I’m buying it right now. It’s going to be a little more valuable in a little bit here.

JOE: Yeah, totally. [laughing]

IVAN: [laughing] That’s awesome. Well, thank you very much for giving that explanation and talking with me. It was just really wonderful to find out more about you and what you’re doing. Yeah, come back on the show, and maybe we’ll talk about some big ideas in the next episode.

JOE: That’d be fun. I appreciate the opportunity to chat with you and just catch up.

IVAN: Yeah. That was awesome. Joe Shindelar is passionate about open source technology and is a lead trainer and lead developer at Osio Labs. You can find him on Twitter and on Drupal.org where his handle is @eojthebrave. You can also check out his personal chunk of the internet at dreamformula.com. You’ve been listening to the TEN7 Podcast. Find us online at ten7.com/podcast. And if you have a second, do send us a message. We love hearing from you. Our email address is [email protected]. Until next time, this is Ivan Stegic. Thank you for listening.

Oct 09 2019
Oct 09

Adam Juran joins the 1x team as Senior Frontend Developer. He has over twenty years experience in web development, his experience spanning design to frontend and backend development. At his most recent position with Forum One, he became a Pattern Lab/Drupal integration specialist, giving sessions and trainings on the subject at DrupalCons and other events. Adam currently lives in Brussels, Belgium, with his wife and three children. He is also an opera singer and has a black belt in Kung Fu.

Zsófi Major comes from Hungary and is joining our project management team. She gained extensive experience in project- and account management at Cheppers and after a short break from Drupal and project management she is back to the scene and we are very grateful to have her on board. 
Zsófi has been in the Drupal community for years, being core organizer of and volunteer at various Drupal events, including Drupal Dev Days Szeged 2014, the Drupalaton series and Drupal Iron Camp in 2016. She was also a track chair for the Being Human track at DC Vienna 2017 and DC Nashville 2018.
She loves good tv and enjoys both theater and concerts. She also collects teaspoons! 
 

Oct 09 2019
Oct 09

Autumn is here! One of the things we’re looking forward to this month is DrupalCon Amsterdam from the 28th - 31st Oct 2019. Autumn is the most magical time to visit Amsterdam! An opportunity to mingle with the Drupal community in Amsterdam, what else could a Drupaler wish for? 

QED42’s support for the Drupal Community around the world is unwavering. Would it be sponsoring DrupalCamps, DrupalCons, organizing Drupal meetups, or contributing to Drupal.org. 

And we hope you will join us at DrupalCon Amsterdam, this month! 

| Meet us!

QED42 is proud to be a Silver sponsor this year. If you are a Drupaler you wouldn’t miss visiting QED42’s booth. We are known for our exuberant booth vibes, designs, activities, and goodies. It is our tradition of unveiling a new Drupal t-shirt design at every DrupalCon. Check out the story behind our Hindi Drupal t-shirt series here - https://www.qed42.com/blog/story-behind-our-hindi-drupal-t-shirt. Our Drupal t-shirt design for #DCA is inspired by the vibrant and spirited culture of Amsterdam. Accompanied by a couple more goodies that you will absolutely adore! 

This year, QED42 will be showcasing a wide range of our capabilities including:

  • Decoupled Drupal
  • Gatsby e-commerce demos
  • Use cases around Drupal, JavaScript, and Design!

Come say Hi to our team at DrupalCon Amsterdam Booth No - 16, we would love to discuss ideas around how Drupal meets the ever-changing needs of the digital world.

| Sessions

Our Drupal experts are presenting at DrupalCon Amsterdam 2019. You can find us at these sessions:

Houdini - New Era of CSS 

  • Date: 28th Oct 2019
  • Time: 15:00 - 15:40
  • Location: G 103
  • Track: Drupal + Frontend
  • Level: Intermediate 
  • Speakers: Vidit Anjaria and Saket Kumar

Here’s a sneak peek of our session - https://www.qed42.com/blog/building-powerful-custom-properties-CSS-houdini

Designing the future of the Drupal Admin UI

| Keynotes

There are some exciting keynotes lined up for you at DrupalCon Amsterdam! 

- Tuesday, October 29 at 9:00 AM | Talk: Driesnote

Speaker: Dries Buytaert - Founder

- Wednesday, October 30 at 1:30 PM | Talk: If I can do it, so can you

Speaker: Sue Black - Professor of Computer Science and Technology Evangelist, UK Government Strategic Advisor, Women’s Equality Party candidate for London Mayor 2020, Professional Speaker, Author

- Tuesday, October 29 at 1:30 PM | Talk: Humanity in tech 

Speaker:  Boris Veldhuijzen Van Zanten - CEO and Co-founder of thenextweb.com

- Monday, October 28 at 1:30 PM | Talk: Drupal core initiative leads keynote

| Conclusion

Attending DrupalCon Amsterdam? Don’t forget to1  flash your badge and spread the word - https://events.drupal.org/amsterdam2019/spread-word. Follow @DrupalConEur for recent updates around the event.

Drop by our Booth 16 and meet the QED42 team! We would love to share our exciting projects and learn more about your experiences and challenges with Drupal.

Oct 09 2019
Oct 09

Drupal is a wonderful Content Management System with tons of features that solve many problems for editors and content managers. A developer can take different approaches to achieve the same result, and the Drupal update process is no exception.

It is possible to update Drupal either with Composer, Drush, or manually within the CPanel interface. The first two methods imply that you have at least mid-level experience with the command line and secure shell access to your public host. The third method is more visual and is suitable for developers beginning with Drupal.

Keep reading, if you want to learn how to update your Drupal site with this method.

Step #1. The Local Installation

This tutorial assumes, you already have managed to create a local installation, as described in steps #6 and #7 of this tutorial. This tutorial will build upon that example.

  • Enter the SSH mode of the virtual machine (Scotch box) 

vagrant up

vagrant ssh

190930 drupal basic workflow

  • Access the public directory of your virtual machine

cd /var/www/public   

  • Enter 192.168.33.10 on the address bar of your browser to access the site
  • Click Configuration > Maintenance mode
  • Check Put site into maintenance mode
  • Click Save configuration

190930 drupal basic workflow 001

The local site is now in maintenance mode. You need to create a backup of the database and of the codebase. 

  • In the terminal of your PC, type:  tar -zcvf drupal-backup.tar.gz .

To create a compressed file called drupal-backup.tar.gz of the public directory. This process will take about one minute. 

190930 drupal basic workflow 002

To create a copy of the database type: 

mysqldump -u root -p my_drupal_8 > /var/www/public/my_drupal_8.sql

  • Enter root as password (you won’t see any characters rendered on the screen)

190930 drupal basic workflow 003

Notice that these two files are now stored inside the public directory within the virtual machine and also in the public directory located at mydrupalbox in your projects folder. 

190930 drupal basic workflow 004

 Step #2. - Installing on a Production Server

On a regular hosting provider, you normally install your application (e.g. Drupal) with a one-click-install procedure. 

190930 drupal basic workflow 005

The hosting provider will assign a Username and Password for the newly created account. We need these, to edit the settings.php file of the installation we are going to import. 

  • Click the link to CPanel
  • Click File manager within the Files section

190930 drupal basic workflow 006

  • Click on the public_html folder on the left 

190930 drupal basic workflow 007

On the right is the Drupal codebase installed by the system of your hosting provider.

  • Select all files and folders
  • Press Delete
  • On the menu bar Click Upload, a new tab will open

190930 drupal basic workflow 008

  • Click Select file
  • Upload the compressed file you created in the last step

190930 drupal basic workflow 009

  • Select the file
  • Click Extract
  • Click Extract file(s)
  • Click Close
  • Select the tar.gz file and press Delete
  • Press Confirm
  • Open the sites/default folder
  • Select the settings.php file
  • Click the pencil on the menu bar, to edit the file
  • Scroll down to the end of the file
  • Change the database, username, and password with the ones you got from your hosting provider (hint: a better approach is to edit the file before compression on your local installation)


To find out the database name, head over to CPanel. In the Databases section, click  phpmyadmin 

190930 drupal basic workflow 011

The database name is on the left. 

190930 drupal basic workflow 012

  • Edit the settings.php file accordingly 
  • Click Save changes
  • Click Close

190930 drupal basic workflow 013.0

 Step #3. - The Database

  • In phpmyadmin scroll down and click Select all, to select all tables

190930 drupal basic workflow 013

  • On the dropdown select DROP
  •  Click Yes/ok

190930 drupal basic workflow 014

The database is now empty.

  • Click Import
  • Select the database backup you created in the last step

190930 drupal basic workflow 015

  • Click Continue

The system will prompt you, once the import process has finished.

190930 drupal basic workflow 016

  • In the address bar of your browser type:  mysitedomain.com/user 
  • Enter your Username and password - make sure that you change these in your user profile, in case you had a less secure password in your local installation
  • On the address bar type: mysitedomain.com/update.php

You will be redirected to the Update screen

  • Click Continue

190930 drupal basic workflow 018

If everything goes well, the system will prompt you to continue to the Front page or the Administration pages. 

  • Click Administration pages
  • Click Configuration > Maintenance mode
  • Uncheck Put site into maintenance mode
  • Click Save configuration

190930 drupal basic workflow 019

How to Update Drupal Core

The first thing you have to check on your local installation is the status of core and contrib modules. 

After putting your local installation on maintenance mode, and making backups of the codebase and the database, position your cursor at the root folder of your local installation (the composer.json file is there)

  • Type: composer outdated "drupal/*"   

To check for outdated modules.

  • To update modules type: composer require drupal/modulename     

Just like re-installing the module.

190930 drupal basic workflow 020

You can update all modules, but as you can see, the drupal/core package is not listed. 

190930 drupal basic workflow 021

Honestly, I don’t know what this is about, however, this is simple to solve. 

  • Edit the composer.json file

Omit the “replace” section and place the “drupal/core”: ”^8.x” statement inside the “require” section.

190930 drupal basic workflow 022

190930 drupal basic workflow 023

rm composer.lock     -To delete the file.

sudo rm -R vendor    -To delete the folder

 composer update drupal/core --with-dependencies     -To update Drupal core. This will also generate the vendor folder and the composer.json file.

190930 drupal basic workflow 024

  190930 drupal basic workflow 025

Now you need to start over with step #2. You will not need to upload the database this time.  

I hope you liked this tutorial.

Thanks for reading!


About the author

Jorge lived in Ecuador and Germany. Now he is back to his homeland Colombia. He spends his time translating from English and German to Spanish. He enjoys playing with Drupal and other Open Source Content Management Systems and technologies.
Oct 08 2019
Oct 08

This week, the U.S. Supreme Court declined to review California’s Ninth Circuit Court’s decision in Robles v. Domino’s Pizza, LLC,* signaling a long-anticipated answer to an essential question: Does the Title III of the Americans with Disabilities Act, which was written in 1990 before the current digital landscape was ever envisioned, apply to websites and apps?
The answer: Yes.
 
Until now, the legal mandate surrounding the accessibility of websites and apps has been shrouded in ambiguity. This decision needs to be viewed as a loud wake-up call for businesses who want to avoid legal action and unwanted attention to what their websites might be lacking.
More so than ever before, businesses that delay in having their sites thoroughly evaluated for accessibility and remediated as necessary are at risk. This ruling also opens up the flood gates for accessibility lawsuits

The US Courts Have Spoken on Web Accessibility  

In deciding not to hear Robles v. Domino’s Pizza, LLC, the Supreme Court has upheld that:
    •    Title III of the ADA covers websites and apps that have a connection to a physical place of public accommodation, and 

    •    Holding businesses that do not have an accessible website liable, does not violate their 14th Amendment right to due process.

In rejecting the appeal from Domino’s Pizza, the Supreme Court cleared the way for Guillermo  Robles, a blind man, to proceed with his lawsuit against the chain. His lawsuit alleges that Domino’s website and mobile app were not accessible to him, and that under Title III of the Americans with Disabilities Act, he had a right to require that the site be outfitted with accessibility aids. 

The issue that brought Dominos to the Supreme court was a missing Alt Text!

Robles v. Domino’s was filed in the Central District of California in September 2016, and centered on the inability of Robles to order a pizza on his iPhone: The app didn't accommodate his screen-reader software, which works only when a website's graphics have an "alt-text," feature that gives a description of the image when a cursor floats over it.

The Ninth Circuit held that websites and mobile apps should be considered among the “places of public accommodation” covered by Title III of the Americans with Disabilities Act. While Domino’s argued that Title III of the ADA was intended to apply to accommodations in its physical restaurants the Ninth Circuit held that websites and apps now constitute places of public accommodation.

What does this mean for private website owners?

Let there be no doubt, the floodgates have now been opened for disabled plaintiffs to take legal action against companies whose websites and mobile apps are not accessible. 
While some claim that there is still a lack of clarity concerning web accessibility requirements, WCAG 2.1 currently stands as the definitive guidelines for remediating existing sites or building new ones.
The impact of the Supreme Court’s decision to not hear is decision cannot be underestimated. The disabled rights community has been closely watching this case and this week’s development needs to be viewed as a loud call to action for all businesses that have a website or app that’s designed to serve as a point of public accommodation.

At Promet Source, walking clients through the process of evaluating their websites and mobile apps for accessibility and moving forward with the confidence that compliance has been achieved, is what we do. And time and time again, clients discover that remediating their site for accessibility is a value-added process that results in a wide range of benefits.

Never has it been more critical to partner with an expert and get it right. We’re here to help. Contact us today.

*Supreme Court Declines to Review Ninth Circuit Decision in Robles v. Domino’s, Exposing Businesses to More Website Accessibility Lawsuits, by Seyforth Shaw, LLP, Oct. 7, 2019
 

Oct 08 2019
Oct 08

Drupal Association of Colombia logo

The Drupal project is global. There are people using, implementing, and contributing to the Drupal project in nearly every country of the world.

Being able to encourage and support our global community to promote and grow the project must also be a global operation, and we are delighted to read that the Drupal Association of Colombia (ADC) has now been officially formed.

This local association will help to promote and stimulate the use of Drupal in Colombia and act as a focus to propel the Colombia community’s efforts and initiatives in accordance with the Drupal values and principles.

The founding members of the local association are partners and executives of two experienced Drupal Agencies in Colombia: Jairo Pinzón, Aldibier Morales, and William Vera from Seed EM and Jorge Alexander Salcedo and Carolina Poveda from Bits Americas; a senior Drupal developer and very active community member, Iván Chaquea; a marketer and very active Drupal adopter Jonathan Osorio from Grupo Éxito; and from the academic side, Socrates Rojas, dean of the faculty of computer science from the Instituto Técnico Central of Bogota, a prestigious public technical school.

Membership is now open to organizations and individuals who wish to join the Drupal Association of Colombia and who share the same interest. By joining, members will have access to all the local activities, training, official Drupal events, and the opportunity to contribute in a more cohesive way. More information will soon be available at www.asociaciondrupal.org​.

The ADC is now preparing for its first official event — Drupal Camp Medellin on June 5-6, 2020.

Please join us in congratulating all involved and wishing them a successful future!

Oct 08 2019
Oct 08

9 minute read Published: 8 Oct, 2019 Author: Derek Laventure
Drupal Planet , Drupal 8 , OpenSocial

In Drupal 7, hook_update()/hook_install() were well-established mechanisms for manipulating the database when installing a new site or updating an existing one. Most of these routines ended up directly running SQL against the database, where all kinds of state, configuration, and content data lived. This worked reasonably well if you were careful and had a good knowledge of how the database schema fit together, but things tended to get complicated.

With the maturing of Features module, we were able to move some of this into configuration settings via the ctools-style export files, making the drush feature-revert command part of standard workflow for deploying new features and updates to an existing site.

In Drupal 8, we’ve made huge strides in the direction of Object Orientation, and started to separate Configuration/State, Content Structure, and Content itself. The config/install directory is often all that’s needed in terms of setting up a contributed or custom module to work out of the box, and with the D8 version of Features, the same is often true of updates that involve straightforward updates to configuration .yml files.

It turns out that both hook_update() and hook_install() are still valuable tools in our box, however, so I decided to compile some of the more complicated D8 scenarios I’ve run across recently.

Drupal 8 Update basics

The hook_update_N API docs reveal that this function operates more or less as before, with some excellent guidelines for how to approach the body of the function’s implementation. The Introduction to update API handbook page provides some more detail and offers some more guidance around the kinds of updates to handle, naming conventions, and adding unit tests to the your update routines.

The sub-pages of that Handbook section have some excellent examples covering the basics:

All of these provided a valuable basis on which to write my own real-life update hooks, but I found I still had to combine various pieces and search through code to properly write these myself.

Context

We recently launched our first complex platform based on Drupal 8 and the excellent OpenSocial, albeit heavily modified to suit the particular requirements of the project. The sub-profile required more extensive customization than simply extending the parent profile’s functionality (as discussed here). Instead, we needed to integrate new functionality into that provided by the upstream distribution, and this often resulted in tricky interactions between the two.

Particularly with a complex site with many moving parts, we take the approach of treating the site as a system or platform, installing and reinstalling regularly via a custom installation profile and set of feature modules. This allows us to integrate:

  • a CI system to build the system repeatedly, proving that everything works
  • a Behat test suite to validate the behaviour of the platform matches the requirements

In the context of a sub-profile of OpenSocial, this became complicated when the configuration we wanted to customize actually lived in feature modules from the upstream profile, and there was no easy way to just override them in our own modules’ config/install directories.

We developed a technique of overriding entire feature modules within our own codebase, effectively forking the upstream versions, so that we could then modify the installed configuration and other functionality (in Block Plugins, for example). The trouble with this approach is that you have to manage the divergence upstream, incorporating new improvements and fixes manually (and with care).

Thus, in cases where there were only a handful of configuration items to correct, we began using hook_install() routines to adjust the upstream-installed config later in the install process, to end up with the setup we were after.

Adjust order of user/register form elements

We make use of entity_legal for Terms of Service, Privacy Policy, and User Guidelines documents. Our installation profile’s feature modules create the 3 entity legal types, but we needed to be able to tweak the order of the form elements on the user/register page, which is a core entity_form_display created for the user entity.

To achieve this using YAML files in the config/install directory per usual seemed tricky or impossible, so I wrote some code to run near the end of the installation process, after the new legal_entity types were created and the core user.register form display was set. This code simply loads up the configuration in question, makes some alterations to it, and then re-saves:

/**
 * Implements hook_install().
 */
function example_install() {
  _example_install_adjust_legal_doc_weights();
}

/**
 * Adjust weights of legal docs in user/register form.
 */
function example_update_8001() {
  _example_install_adjust_legal_doc_weights();
}

/**
 * Ensure the field weights on the user register form put legal docs at the bottom
 */
function _example_install_adjust_legal_doc_weights() {
       $config = \Drupal::getContainer()->get('config.factory')->getEditable('core.entity_form_display.user.user.register');
       $content = $config->get('content');

       $content['private_messages']['weight'] = 0;
       $content['account']['weight'] = 1;
       $content['google_analytics']['weight'] = 2;
       $content['path']['weight'] = 3;
       $content['legal_terms_of_service']['weight'] = 4;
       $content['legal_privacy_policy']['weight'] = 5;
       $content['legal_user_guidelines']['weight'] = 6;
       $config->set('content', $content)->save();
}

Modify views configuration managed by upstream (or core)

A slightly more complicated situation is to alter a views configuration that is managed by an upstream feature module during the installation process. This is not an ideal solution, but currently it’s quite challenging to properly “override” configuration that’s managed by a “parent” installation profile within your own custom sub-profile (although Config Actions appears to be a promising solution to this).

As such, this was the best solution I could come up with: essentially, run some code very nearly at the end of the installation process (an installation profile task after all the contrib and feature modules and related configuration are installed), that again loads up the views configuration, changes the key items needed, and then re-saves it.

In this case, we wanted to add a custom text header to a number of views, as well as switch the pager type from the default “mini” type to “full”. This required some thorough digging into the Views API and related code, to determine how to adjust the “handlers” programmatically.

This helper function lives in the example.profile code itself, and is called via a new installation task wrapper function, which passes in the view IDs that need to be altered. Here again, we can write trivial hook_update() implementations that call this same wrapper function to update existing site instances.

/**
 * Helper to update views config to add header and set pager.
 */
function _settlement_install_activity_view_header($view_id) {
  # First grab the view and handler types
  $view = Views::getView($view_id);
  $types = $view->getHandlerTypes();

  # Get the header handlers, and add our new one
  $headers = $view->getHandlers('header', 'default');

  $custom_header = array(
    'id' => 'area_text_custom',
    'table' => 'views',
    'field' => 'area_text_custom',
    'relationship' => 'none',
    'group_type' => 'group',
    'admin_label' => '',
    'empty' => '1',
    'content' => '<h4>Latest Activity</h4>',
    'plugin_id' => 'text_custom',
    'weight' => -1,
  );
  array_unshift($headers, $custom_header);

  # Add the list of headers back in the right order.
  $view->displayHandlers->get('default')->setOption($types['header']['plural'], $headers);

  # Set the pager type to 'full'
  $pager = $view->getDisplay()->getOption('pager');
  $pager['type'] = 'full';
  $view->display_handler->setOption('pager', $pager);

  $view->save();
}

Of particular note here is the ordering of the Header components on the views. There was an existing Header on most of the views, and the new “Latest Activity” one needed to appear above the existing one. Initially I had tried creating the new custom element and calling ViewExecutable::setHandler method instead of the more complicated $view->displayHandlers->get('default')->setOption() construction, which would work, but consistently added the components in the wrong order. I finally found that I had to pull out a full array of handlers using getHandlers(), then array_unshift() the new component onto the front of the array, then put the whole array back in the configuration, to set the order correctly.

Re-customize custom block from upstream profile.

In most cases we’ve been able to use Simple Block module to provide “custom” blocks as configuration, rather than the core “custom” block types, which are treated as content. However, in one case we inherited a custom block type that had relevant fields like an image and call-to-action links and text.

Here again, the upstream OpenSocial modules create and install the block configs, and we didn’t want to fork/override the entire module just to make a small adjustment to the images and text/links. I came up with the following code block to effectively alter the block later in the installation process:

First, the helper function (called from the hook_install() of a late-stage feature module in our sub-profile), sets up the basic data elements needed, in order to make it easy to adjust the details later (and re-call this helper in a hook_update(), for example):

function _example_update_an_homepage_block() {

  ## CUSTOM ANON HOMEPAGE HERO BLOCK ##
  ## Edit $data array elements to update in future ##

  $data = array();
  $data['filename'] = 'bkgd-banner--front.png'; # Lives in the images/ folder of example module
  $data['textblock'] = '<h2>Example.org is a community of practice site.</h2>'

<p>Sign up now to <b>learn, share, connect </b>and<b> collaborate</b> with leaders and those in related fields.</p>
';
  $data['cta1'] = array(
    'url' => '/user/register',
    'text' => 'Get Started',
  );
  $data['cta2'] = array(
    'url' => '/about',
    'text' => 'More about the Community',
  );

  ## DO NOT EDIT BELOW THIS LINE! ##
  ##################################

The rest of the function does the heavy lifting:

  # This code cobbled together from `social_core.install` and # `social_demo/src/DemoSystem.php`
  // This uuid can be used like this since it's defined
  // in the code as well (@see social_core.install).
  $block = \Drupal::entityTypeManager()->getStorage('block_content')->loadByProperties(['uuid' => '8bb9d4bb-f182-4afc-b138-8a4b802824e4']);
  $block = current($block);

  if ($block instanceof \Drupal\block_content\Entity\BlockContent) {
    # Setup the image file
    $fid = _example_setup_an_homepage_image($data['filename']);

    $block->field_text_block = [
      'value' => $data['textblock'],
      'format' => 'full_html',
    ];

    // Insert image file in the hero image field.
    $block_image = [
      'target_id' => $fid,
      'alt' => "Anonymous front page image homepage'",
    ];
    $block->field_hero_image = $block_image;

    // Set the links.
    $action_links = [
      [
        'uri' => 'internal:' . $data['cta1']['url'],
        'title' => $data['cta1']['text'],
      ],
      [
        'uri' => 'internal:' . $data['cta2']['url'],
        'title' => $data['cta2']['text'],
      ],
    ];

    $itemList = new \Drupal\Core\Field\FieldItemList($block->field_call_to_action_link->getFieldDefinition());
    $itemList->setValue($action_links);
    $block->field_call_to_action_link = $itemList;

    $block->save();
  }
}

The image helper function prepares the image field:

function _example_setup_an_homepage_image($filename) {

  // TODO: use a better image from the theme.
  // Block image.
  $path = drupal_get_path('module', 'example');
  $image_path = $path . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . $filename;
  $uri = file_unmanaged_copy($image_path, 'public://'.$filename, FILE_EXISTS_REPLACE);

  $media = \Drupal\file\Entity\File::create([
    'langcode' => 'en',
    'uid' => 1,
    'status' => 1,
    'uri' => $uri,
  ]);
  $media->save();

  $fid = $media->id();

  // Apply image cropping.
  $data = [
    'x' => 600,
    'y' => 245,
    'width' => 1200,
    'height' => 490,
  ];
  $crop_type = \Drupal::entityTypeManager()
    ->getStorage('crop_type')
    ->load('hero_an');
  if (!empty($crop_type) && $crop_type instanceof CropType) {
    $image_widget_crop_manager = \Drupal::service('image_widget_crop.manager');
    $image_widget_crop_manager->applyCrop($data, [
      'file-uri' => $uri,
      'file-id' => $fid,
    ], $crop_type);
  }

  return $fid;
}

Conclusion

As with most things I’ve encountered with Drupal 8 so far, the Update system is both familiar and new in certain respects. Hopefully these concrete examples are instructive to understand how to adapt older techniques to the new way of managing install and update tasks.

The article Drupal 8 hook_update() Tricks first appeared on the Consensus Enterprises blog.

We've disabled blog comments to prevent spam, but if you have questions or comments about this post, get in touch!

Oct 08 2019
Oct 08

We keep pushing the Drupal adoption in our city at GTD. This event was under the “Star Wars” topic.  All participants have learned how to create a website on the Drupal platform and have created a module that calculates the winner in the battle.

This time we added a little bit of gamification to make a process of site-building more interesting. There was a competition between the teams and three of the quickest got presents from our company!

We thank all guests for participation. See you soon! 

 

 

Oct 08 2019
Oct 08

Skpr - pronounced Skipper - is a cloud hosting platform specifically designed to maximise the productivity of development teams by giving them full control right from the command line.

During our consulting engagements with large organisations, we recognised a clear trend; they were moving away from narrow, single-site hosting services and building bespoke platforms on top of Kubernetes to support their multi-site, multi-technology initiatives.

Back in 2016 we had this exact need for hosting our entire portfolio of sites. Throughout this journey we found that providing developers with a simple Command Line Interface (CLI), has led to huge improvements in our team's efficiency and the overall quality of our products.

So, today we’re announcing the public launch of our hosting platform, Skpr. The platform for teams who want a simple command line tool, backed by a range of industry-leading services and supported by our own team of experts.

Why Skpr is different

Many hosting platforms provide a web interface where deployments can be dragged-and-dropped between environments.

While these solutions are more effective for non-developers, they fall short in integration and extendability within the workflow of the developers actually doing the job. Having a Command Line Interface (CLI) means that not only do we provide the same level of control, we provide the flexibility to extend those workflows. 

  • Scripts - Having a CLI means that Skpr can integrate into existing automation, along with CI tools such as CircleCI.
  • Documentation - Complex tasks carried out via a GUI are very difficult to document. CLIs mean you spend less time describing a user interface and more time documenting the actual process.

Control on Command

With a few commands, developers have the control to package, deploy, configure and monitor their services right from the command line.

And while we want to provide a platform that's powerful, reliable and secure, we're passionate about making it easy-to-use as well.

To find out more, visit skpr.io.

Add new comment

Oct 07 2019
Oct 07
Screenshot of LSS Home Page

Becoming Their Go-To Drupal Experts

Lutheran Social Service of Minnesota (LSS) is one of the state’s largest private nonprofit social service organizations, providing a vast array of services in all 87 Minnesota counties for children and families, older adults and people with disabilities.

Our Assignment: Audit LSS Sites and Take Them On as a TEN7Care Support Client

LSS hired us to support and maintain their flagship website (lssmn.org) and seven smaller websites. Minnesotans find and interact with LSS services through their websites (over 1,200 pages), including performing time-sensitive tasks like submitting timesheets and payments, so it’s crucial the websites perform optimally with very little downtime. The sites were already well-organized, designed and written to meet the organization’s needs—a testament to hard work done previously. LSS just needed help maintaining the technology and continuing to enhance the site.

TEN7Audit & TEN7Improve

Before TEN7 takes on any support client, we take them through our comprehensive onboarding process to get an overall lay of the land and identify any lurking security or performance issues. As a result of the TEN7Audit, we implemented best practices to update the LSS sites and keep them backed up and as secure as we could possibly make them:

  • Updates: Updated Drupal core, Drupal modules and PHP to current official versions (including disabling non-essential and performance-intensive Drupal modules).
  • Security: Ensured there were no security vulnerabilities.
  • Site backups: We recommend (and LSS wanted) offsite backups, something their current host didn’t provide. We set up redundant offsite backups using Tractorbeam at Amazon’s AWS and in Google Cloud. 
  • Update Code: Replaced custom code with Drupal core functionality or Drupal modules.
  • Caching: Implemented HTTP caching, database query caching, and Drupal caching to provide a faster site experience for site visitors.

TEN7Care

In the TEN7Care phase, we focus on adding new features and optimizing the site and the processes that surround it.

  • Issue backlog: In the support and maintenance phase, new clients usually bring us a small task backlog. But the super-prepared client of the year award goes to Tom Lany, Online Marketing Manager at LSS, who started the TEN7Care process with a list of 60 backlogged tasks compiled from stakeholder feedback, prioritized and categorized in a spreadsheet we could feed directly into our issue tracking program. Thanks to Tom’s great organization, we assigned and blew through many of those tasks in short order!
  • Deployment process: We discovered the website deployment process was a pain point. Various features (like menus) would frequently break during deploys. We fixed the root cause of the menu issue and implemented some of our software development best practices around deploys: greater reliance on issue tracking and version control, and a deploy schedule that mirrored the sprint schedule. At end-of-sprint meetings, we review candidates for release, and then do a release after that meeting. LSS now has confidence in and connection to a predictable and testable deployment process.

We’re Now Caring for Lutheran Social Service’s Sites

Lutheran Social Service of Minnesota is now an official TEN7Care support client. We’ll continue to update, optimize, and secure their sites, and add new features as needed. We look forward to a long and fruitful relationship.

“TEN7 helps us solve technical challenges that we can’t solve ourselves within Drupal, and they keep our systems updated and secure. TEN7’s extensive expertise with Drupal means we get answers quickly, and that we don’t have to worry about missing security and stability updates, because their team carefully tracks all of this.“ —Tom Lany, Online Marketing Manager, Lutheran Social Service of Minnesota

Oct 07 2019
Oct 07

Recently, I nudged governments to get more involved in fixing accessibility issues in Open Source projects. Getting governments to do anything can feel like a monumental challenge. Maybe we need to build better alliances and then collectively lobby the governments to change how they approach Open Source.

Dries Buytaert, the founder of Drupal, recently published a blog post titled, "Balancing Makers and Takers to sustain and scale Open Source," and while reading it I wondered, “Are we approaching the problem of sustainability too much as developers? Should we step back and look at the challenge of sustainability from a business and political perspective?”

Is changing an Open Source project's license going to change how other organizations contribute to Open Source? Changing the licensing is a different approach. The recent "Open-source licensing war" felt like a few individual companies are trying to make a significant shift in Open Source, however lacking a unified front. If Open Source companies are going to take on Amazon, they are going to have to do it together by building alliances.

The definition of alliance sounds very much like what happens in Open Source communities.

An alliance is a relationship among people, groups, or states that have joined together for mutual benefit or to achieve some common purpose, whether or not explicit agreement has been worked out among them.

-- https://en.wikipedia.org/wiki/Alliance

Political alliances (a.k.a. parties) are what powers most governments. The scale of some open source projects has required better governance. In Dries' blog post, he spends time exploring how organizations use Open Source (a.k.a. Takers) without helping to build the software or community (a.k.a. Makers). His post ends with three valuable suggestions that are focused on appealing to organizations and rethinking how the Open Source software is shared. Maybe we need to rethink how Open Source communities and organizations work together.

"Working better together" is a mantra in Open Source. In the Drupal community, we work together to build the 'software' and the Drupal Association is supporting the infrastructure.

Are there other opportunities to work together?

Deciding and maintaining a local development environment is a challenge for every developer. In the Drupal community, each hosting company is developing its own Docker-based local develop environment. Wouldn't everyone benefit from one collaborative Drupal-specific local develop environment? Competitors can work together for the common good, primarily when everyone benefits from the collaboration.

The Drupal community does work well together - we know this. A few years ago, Drupal got off its island and started leveraging other Open Source projects including Symfony. There is even an implementation for WordPress' Gutenberg page builder available for Drupal.

Besides sharing code across Open Source communities, we need to start collaborating to improve sustainability.

Collaboration

Open Source is about collaboration. The problem of Open Source sustainability is going to be best solved by improving and rethinking how we collaborate.

We need to collaborate to get the organizations that rely on Open Source to contribute more.

Onboarding new contributors to Open Source is a critical process of building sustainable Open Source communities. Aside from emphasizing the importance of onboarding individual contributors, we need to also look at how we onboard new organizations and encourage their collective effort to help sustain the software they need.

Drupal's Getting Involved Guide targets individual contributors. For example, nowhere on the Events page does it say, "Organizations can get involved by sponsoring an event." If the Drupal community wants bigger contributions and a more sustainable ecosystem, we need to target organizations. If one fortune 500 company decides that content moderation and workflows are essential for the future of their organization's business and contributes this code back to the Drupal community; this makes a huge difference.

For the past twenty years, Open Source advocates had to be evangelists preaching the value of Open Source. Open Source is here to stay, and most evangelists are now preaching to the choir. Even this type of blog post is preaching to the choir of people who care about Open Source and sustainability. I am not ready to state that Open Source needs to go on a crusade to solve the challenge of sustainability. Dries' blog post explores how Open Source has become a public and common good with different types of governance for Open Source. Maybe we need to embrace the inevitability that governments gradually have to get involved in some aspects of Open Source.

The scale at which Open Source software is impacting our society leads to governments needing to get more involved in coordinating and supporting. As I stated in my blog post governments should take responsibility for the accessibility for the Open Source projects that their constituents rely on. Similarly, the usage and success of self-driving automobiles is not going to take-off until a centralized shared open network of information and software is created to coordinate millions of self-driving cars, trucks, boats, and planes. The misconception in my blog post's statement that "governments should do this or that" misses the reality that governments need to be pushed and lobbied to take action and make changes.

Lobbying is not a word commonly found in Open Source. 

Lobbying, persuasion, or interest representation is the act of attempting to influence the actions, policies, or decisions of officials, most often legislators or members of regulatory agencies

-- https://en.wikipedia.org/wiki/Lobbying

Lobbying is not an entirely new concept for Open Source. Julia Reda and the Free and Open Source Software Audit (FOSSA) project successfully persuaded the EU to offer bug bounties. These bug bounties helped address security issues in many Open Source projects, including Drupal.

Security and accessibility in Open Source are two big digital concerns for governments that they should help support and address. Governments want to build secure and accessible digital experiences; they need guidance on how to properly do it. For example, the U.S. government's Healthcare.gov website faced numerous issues during its launch and it needed a lot of help getting it right. The same administration also passed a policy demanding 20 percent of federal code be open source. Maybe the next administration should pass a policy or create a department to address accessibility and security in Open Source software. Most governments understand the value of Open Source, and they need help becoming better members of the Open Communities.

Who should persuade and help the government to contribute more to Open Source?

Businesses

I chose not to title this post, "Drupal, WordPress, and GitHub should lobby the government" because it’s not realistic to expect an Open Source community to lobby governments. Open Source communities are still working through the challenges of self-governess. I chose to call-out three companies, Acquia, Automattic, and Microsoft, because they are all major contributors and drivers to Open Source projects in different ways. Acquia supports Drupal, a Content Management System (CMS) used to build enterprise digital experiences. Automattic supports Wordpress; the most popular CMS and blogging platform used by 33.5% of all the websites. Finally, Microsoft is the largest contributor to GitHub and now they own GitHub. It is also important to note that Microsoft knows how to lobby the government. Microsoft could pave the way in convincing the government of the importance of contribution.

All three companies are paying teams of developers to help contribute, build, and maintain Open Source projects. I see in the Drupal community an assumption that Acquia is or should be doing most of the heavy work within the Drupal community. An Open Source project is not going to be sustainable, assuming one company can keep hiring full-time developers. At the same time, of course, these companies need to continue to invest in their respective Open Source software and community.

As I have written about Open Source sustainability, I keep returning to the proverb.

"Give a man a fish and you feed him for a day; teach a man to fish and you feed him for a lifetime."

Companies like Acquia, Automattic, and Microsoft, which are valuing and contributing to Open Source should step-back and teach (or nudge) other organizations to start contributing to or to contribute more back to Open Source. Secondarily, businesses and Open Source leaders need to collaborate to make all off Open Source more sustainable.

Open Source began with evangelists converting developers building proprietary software to share and collaborate their ideas and passion.

Open Source evangelists may need to become lobbyist who persuades the 'Takers' of Open Source to contribute something back help sustainable Open source software.

Call-to-action

Generally, I don't directly want to ask someone to take action in the Open Source community. However, I am invested in its continued growth and I know from experience we have amazing resources within our existing (and growing) community. Frankly, everyone in Open Source, including the leadership, has contributed more than their fair share. I am nudging the leaders of Open Source projects to look at the challenges they are facing in their community, to approach the problem differently, and take a different action. Maybe working together to lobby governments to fix accessibility issues in Open Source would be an excellent place to start to improve Open Source sustainability.

When I watch the below video, it is clear that the project leads for Drupal and WordPress are passionate and committed to Open Source. They share a common ground and would be able to work together - I am confident of this.

Microsoft may seem like the odd-man out. Years ago, Microsoft even lobbied against Open Source. Microsoft decided to change their approach and invest in Open Source. Now, Open Source communities and their leaders need to change their approach and collaborate to make Open Source sustainable.

Everyone understands why organizations should contribute to Open Source. The question is how can we persuade (a.k.a. lobby) organizations to contribute. Together, I know we’ll find the answers.

Almost done…

We just sent you an email. Please click the link in the email to confirm your subscription!

OK

Oct 07 2019
Oct 07

Missed some of our blog posts last month? Don’t worry - here’s a recap of all our posts from September. Check it out and make sure you’re all caught up!

Interview with Suzanne Dergacheva of Evolving Web: The sky's the limit with Drupal

Our first post from last month is another one of our Drupal Community interviews. In it, Suzanne Dergacheva, co-founder of Evolving Web and member of the Drupal Association Board of Directors, talks about how she first discovered and started using Drupal, her most memorable Drupal moments, the projects and initiatives that she finds the most exciting, and her brand new hobby. 

One of Suzanne’s favorite things about Drupal is helping others to get over its steep learning curve and empowering them to benefit from all of its powerful features. She has conducted several studies on Drupal’s content editing user experience and is one of the initiative leads of Promote Drupal

She believes Drupal will continue evolving and finding new use cases. The main drives for this will be the evolution and standardization of “decoupled” Drupal, and the progress of the community and its events towards more and more diverse and inclusive. 

Read more

Let's talk about localization

It is kind of a general misconception that translating your site’s content is all that’s needed to launch the platform in another language and/or market. This next post, written by our developer Jernej, shows that there’s more to the story by explaining localization, how it differs from translation, and showing some best practices for localization. 

In order to successfully implement localization, you need to be mindful of the target audience’s culture - specifically, their habits when browsing the web, but also more general things such as the meanings of specific colors etc. This may require you to significantly change both the layout and content of your localized site.

Thankfully, there is one website aspect that needs no localizing. Good website performance is something that’s desired across all cultures, so, you need to make sure your website loads fast and doesn’t frustrate the user. One of the smoothest ways to speed up your loading times is image optimization. 

Read more

Must-see Business, Marketing & Industry sessions at DrupalCon Amsterdam 2019

The European edition of the biggest annual Drupal event is just around the corner and, with the diverse selection of tracks featuring an abundance of available sessions, it makes sense to do some planning prior to the event and reserve the time slots for your must-see ones.

We wanted to make these decisions at least a little bit easier and to this end made a list of our favorite sessions to attend from the Business + Marketing and the Industry tracks. We tried to cover as many different aspects as possible: mentoring, accessibility, ecommerce, contribution to open source, etc.

There were too many intriguing sessions from other tracks to cover all of these, and this is why we decided to focus exclusively on these two tracks. Hopefully, this blog post will arm you with the right information to get the most out of your time in Amsterdam. 

Read more

Interview with Lullabot’s Cristina Chumillas, co-organizer of the Drupal Admin UI and JavaScript Modernization initiative

We finish September’s list with another interview - this one with Cristina Chumillas, designer and front-end developer, and co-organizer of the Admin UI and JavaScript Modernization initiative in Drupal. 

In our interview, Cristina recalls how she started getting actively involved in the community and highlights the people who helped her along this journey. She points out that this early contact with community members helped her significantly in her professional career. She has just started her new job at Lullabot and loves the super welcoming attitude of her new colleagues. 

She enjoys enabling people to get involved in the Admin UI initiative. She is especially pleased with seeing so many non-developers help out - content creators, for example - and points out that the initiative needs any help they can get from diverse perspectives. She invites everyone who wants to help out to join the #admin-ui Slack channel and get involved.

Read more

This was it for our overview of the posts we wrote last month. We hope you enjoyed the read, and we wish everyone a smooth transition into the colder half of the year!
 

Oct 07 2019
Oct 07

Mark your calendars: The deadline for Proposals and applying for Grants & Scholarships is now Wednesday, December 4.

Oct 04 2019
Oct 04

The Drupal community is one of the largest open source communities in the world. Each year, we meet at Drupal Camps, meet-ups, and other events organized around the world. 

But the biggest event, DrupalCon, happens twice every year. It is a platform where developers, designers, and marketers come together to explore the most ambitious and cutting edge case studies. It offers prospective users, a glimpse into “the art of the possible” when you choose Drupal. It is a collaborative event where anyone can learn to use Drupal to make the Internet a better place. 

This year, OpenSense Labs is a silver sponsor of DrupalCon Europe 2019 to be held in Amsterdam, Netherlands.
 

Join us for the Sessions
Session 1 details on content marketing


What you will learn?

  • How to divide the right content strategy for your agency 
  • Which form of content works best?
  • How do you measure the success of your content strategy
  • Creating the right lean team for helping you achieve the content goals?
  • Which channel should you use, to market your content?

Session 2 on Drupal 8 theming

Theming Drupal 8 is a challenging job and not many are aware of how to smartly theme the e-commerce sites. Here are some major components which we will focus on in this session:

  • Product pages
  • Product-level field variables 
  • product variation level variables 
  • Checkout flows 
  • Creating flow as per requirement 
  • Customizing checkout progress 

Be in touch!

We can’t wait to talk to you about the amazing offers our team has for you. Ask us about our Agency++ programs to scale higher and discover more about higher-ed and e-learning systems. We have loads to unveil at DrupalCon Amsterdam!
So, swing by our booth and our team would love to meet and connect with you.

You can register now to be a part of the event.

Oct 04 2019
Oct 04

For DrupalCon Amsterdam, we’ve curated keynote speakers who are engaging presenters — and add value to the gathering as a whole. Enhance your professional life by hearing more about differing experiences in tech and open source. These keynotes are only for conference attendees, so we invite you to join us by registering.  

Oct 04 2019
Oct 04

Content authors and content editors always look out for a seamless, easy-to-use experience when it comes to page building. Drag-and-drop and WYSIWYG tools are something they expect when they want to create and design pages. Drupal Layout Builder offers this exact experience with its easy-to-use page building capability, in Drupal core. 

Drupal Layout Builder is unique and provides a powerful visual design tool to let content authors change the way content is presented. Introduced in Drupal core in its latest version, Layout Builder in Drupal 8 allows you to add/remove sections to display the content using different layouts, and customizing your pages based on the requirements. The Layout Builder Module in Drupal 8 also allows you to combine these sections and create a truly customized page. 

Layout Builder in Drupal 8 can be used in two different ways. It can be used to create a layout for each content type on the website, and also to create a layout for an individual piece of content.

Introducing Layout Builder in Drupal 8

The Layout Builder module allows you to customize the design of the entities such as content types, taxonomy, users etc. It provides an easy-to-use drag and drop option for site builders to place blocks, fields etc.

The layout builder module in Drupal 8 makes it easier to build your layouts by offering a preview of the changes made while building your layouts. Instead of having to save every small change made in the layout and then looking it up on the front-end, layout builder in Drupal allows previews of the changes made for a seamless layout building experience. 

Installing and setting up the Layout Builder module in Drupal 

In order to install/setup the layout builder module in Drupal 8, navigate to Extend and enable both Layout Builder and Layout Discovery module.

Installinf and setting up the layout builder


Note: Layout Builder was introduced as a stable module in Drupal 8.7. So, make sure you’re using the latest version. In older versions of Drupal, it was an experimental module.

1. Use Drupal Layout Builder to Customize Content-Type and Taxonomy

1. Once you have installed the module, navigate to Structure, Content types and click on “Manage display” for any content type , For now we will use the “article” content type.

layout builder module

2. Scroll to the bottom and click on Layout options and select “Use Layout Builder”, then click on Save.

Layout builder module in drupal 8

3. Once you’ve enabled Layout Builder on the view mode, you can see a “Manage layout” option instead of field formatters. You can use Layout Builder for any of the view modes present.
 

Manage Display

4. When you click on “Manage layout”, you’ll be redirected to article content type layout.

edit layout builder

2. Add Sections to Layout

1. First, remove the default section. Click on the close icon (as depicted in the below screenshot). Further, you will be provided with an option to the right side of your screen to remove the default section. Click on “Remove”.

add sections to layout builder

2. Let us add a few sections to our layout by clicking on the “Add Section” option. Further, you will be provided with options to choose a layout of your choice for your section, on the right side of the screen. For now, let us select the “Two Column Section”.

edit layout

3. You will have an option to choose the width for your “Two Column Layout”. Let us select a “50%/50%” for now. Then click on “Add section”.

Two column layout

Once added, you should be able to see an “Add Block” link for each section region.

ad-block-layout-builder

3. Add Blocks to Section Regions

After choosing your section for the layout, you can add blocks into your section. To add a block just click on “Add Block” and the “Choose a block” option will slide out from the right.

add blocks to section regions

1.Choosing a Block
 
Blocks can be chosen from the right by just clicking on them. You can even find blocks by filtering them out by their name using the “Filter by block name” text field. 
We will select “Authored on” content field  for now.

choosing a block

When you click on the block you want to add, you’ll be able to adjust the field formatter. Once you’ve configured the formatter, click on “Add Block”.

configured-add-blocks

The “Authored On” content field will be placed on the left side of the block.

Authored-on-layout-buildr

After placing the “Authored On” field , you need to save your changes. Save all the changes you have made to your section by clicking on “Save Layout” option at the top of the layout page

layout builder

Let us try adding some more fields into our layout

layout-builder

So, after saving this layout, if you visit an article content type page, you will be able to see a preview of the layout which you just built..

Layout-module

4.Override Default Layout

The layout which we just built will be applicable for all the articles. If you want to build a customized layout for a particular article, we have to enable some options provided by Drupal for the same. You can do it by selecting “Allow each content item to have its layout customized.”

Override-layout

After enabling this option, if you go to an article, you should see a Layout tab button.

Layout builder

You can now modify the layout using the same interface. However, this will only change the layout on this specific piece of content.

Layout builder
Oct 04 2019
Oct 04

Over the years I have benefited greatly from the generosity of the Drupal Community. In 2011 people sponsored me to write lines of code to get me to DrupalCon Chicago.

Today Dave Hall Consulting is a very successful small business. We have contributed code, time and content to Drupal. It is time for us to give back in more concrete terms.

We want to help someone from an under represented group take their career to the next level. This year we will provide a Diversity Scholarship for one person to attend DrupalSouth, our 2 day Gettin’ Git training course and 5 nights at the conference hotel. This will allow this person to attend the premier Drupal event in the region while also learning everything there is to know about git.

To apply for the scholarship, fill out the form by 23:59 AEST 19 October 2019 to be considered. (Extended from 12 October)

Share this post

Oct 03 2019
Oct 03

The Drupal Association collaborated on Automatic Updates, one of the Drupal Core Strategic Initiatives that was funded by the European Commission. We are excited to partner with MTech, Tag1 Consulting, and the European Commission FOSSA program on this new initiative and share information with you about its features.

Automatic Updates has three components.

Public safety messaging

This feature pulls a feed of alerts from Drupal.org directly into Drupal's administrative interface. This helps ensure that critical Public service announcements (PSA) or Security Advisories (SA) from the Drupal security team will be seen directly by site owners. 

  • This provides yet another communication mechanism before an update so site owners can verify they are ready for an upcoming update, before it lands.

  • The feed of alerts comes directly from the feed of PSAs and SAs that the security team and release managers are already producing. 

  • This will vastly increase the ability of the Drupal project to get the word out about critical and highly critical updates - ensuring the community can respond fast. 

Readiness checks, or “Pre-flight” checks

These automated and extensible readiness checks are built into the Automatic Updates system to verify that a site doesn't have any blockers that would prevent it from being updated.

  • These checks are slated to run at least every 6 hours on a site via Drupal Cron and will inform site owners if they are ready to auto update their site.

  • Examples of the readiness checks include:

    • Is the site is running on a read-only file system?

    • Have any files included in the update been modified from what they should be? 

    • Does the site still need to run database updates, etc.? 

There’s about 8 or 9 of these readiness checks and some are warnings (Cron isn’t running frequently enough to automatically update the site in a timely manner) and some are errors (the file system is read-only). Warnings won’t stop automatic updates, but errors will.

In place updates

Finally, the key pillar of the automatic updates feature is the update itself. Drupal.org generates a signed and secure package of files which can be overlaid atop the existing site files in order to apply the update. 

  • This update package is downloaded as a signed zip file from Drupal.org. The automatic updates module on the site then compares the signature of the zip file using drupal/php-signify, which is based on BSD’s Signify and libsodium to verify the package.

  • It then proceeds to backup the files about to be updated and updates the site.

  • If all goes well, the site is upgraded. If something fails, the backup is restored.

  • Many workflows are supported and you can customize how the updates are performed. Updates can flow through your CI/CD system, be staged for review and approval, and or automatically go live.

In the past few weeks, the Drupal Association has been invited to participate in TagTeamTalks, a new recorded talk series about various tech projects supporting the Drupal project. This bi-weekly format provides real-time shared collaboration and informative discussions. 

TagTeamTalk launched its webinar focused on Automatic Updates this week. The group dives deep into the nuts and bolts of Drupal's groundbreaking Automatic Updates feature, and the strategic initiative sponsored by the Drupal Association, MTech, Tag1 Consulting, and the European Commission. Guests include Preston So (prestonso), Contributing Editor at Tag1 and Moderator of the TagTeamTalks; Michael Meyers (michalemeyers), Managing Director of Tag1; Lucas Hedding (heddn), Senior Architect and Data and Application Migration Expert at Tag1; Fabian Franz (Fabianx), Senior Technical Architect and Performance Lead at Tag1; and Tim Lehnen (hestenet) CTO at the Drupal Association. Read the TagTeamTalks blog.

“Content marketing is one of the most effective ways to promote your brand and capabilities - it has been a really powerful approach for the organizations that I’ve worked for,” said Michael. “The goal is to give our team an opportunity to talk about the cool things they’re working on and excited about and to share it with people. It helps get the word out about the latest developments in the open source communities we contribute to, and it promotes Tag1’s expertise - it helps us recruit new hires, and drives new business.” 

Meyers is the Managing Director of Tag1, and has been involved with the Drupal community for over 15 years. He was Founder and CTO of the first venture backed drupal based startup, CTO of the first Top 100 website on Drupal, and VP of Developer Relations at Acquia before joining Tag1.  “The great thing about TagTeamTalks is that it doesn’t take a tremendous amount of effort or energy. Our engineers are subject matter experts. We decide on a topic for the week, spend 15 minutes brainstorming a rough outline as a guide, and then record the talk. We don’t want to be rehearsed. The conversation is what makes it dynamic and enjoyable for us to do, and for people to listen to. And, the team loves it because they want to talk about what they are working on, and this format doesn’t take a lot of time away from what they enjoy doing most - writing code.” 

Hedding is one of the top 20 most active contributors to Drupal 8, and is also the Drupal Core Migrate Sub-system Maintainer, a core contribution mentor, and a D.O. project application reviewer. “Auto Updates has long been one of the most requested Drupal features, it is a capability the platform really needs that will help everyone using Drupal. Now that the alpha is available, we need to early adopters to start using it, we need feedback so we can continue to improve it. We also need to get more people involved in development, and we need to raise more money from organizations to support the project - it might sound like a simple feature, but it is actually really complex and requires a lot of effort. TagTeamTalks are a great way to get the word out and to enlist support from the Drupal community.”

Lucas added, “The European Commission provided generous funding for this initiative. The focus has been exclusively or largely around the European Commission’s features and functionality. The funding is running out very soon. There is a need for other people to help continue to build Automatic Updates by adding the features they need with their developers or by providing funding.”  

“It is critical for us to spread the message and make that call to action; that this is a community-driven effort and that without continued community support, it is not going to be as successful or as robust in the timeframe that we would like,” said Meyers.

The first year of funding from the European Commission provided for readiness checking, delivery of update 'quasi-patches,’ and a robust package signing system. The focus of this first phase of the Automatic Updates initiative has been on support for security updates in particular. 

In the second phase, as yet unfunded, we hope to extend this foundational work in the following ways:

  • Provide more robust composer support. The first phase of the automatic updates project should be compatible with composer-ready sites, but as the site’s composer.json file and vendor directory of a site change from the default, then more controls and though need to be implemented. 

  • Create an A/B front-end controller for the site being updated to further increase our confidence in the success of the update, allow for additional post-update testing and provide an easy mechanism to roll-back the update. This is also when updates will be able to move into Drupal core from the contrib project.

  • Expand to more types of updates (particularly further support for contrib updates), and also handle multiple updates in a row, for sites that are several versions behind. 

To accomplish all of this, we will continue to seek more funding and more partners. 

“I’m looking forward to seeing where this goes now that we have the first release out, ” said Hedding. “ There’s a larger community needed to get this initiative completed.”

The initial alpha version of the Automatic Updates module can be tested by the community right now. The plan is to: demonstrate Automatic Updates at DrupalCon Amsterdam this month, complete the scope of the funded work by the European Commission by the end of this year, and stabilize Automatic Updates by DrupalCon Minneapolis in May 2020. 

“The Automatic Updates initiative is designed to reduce the friction in keeping a Drupal site secure and up-to-date. The team behind the initiative is architecting a robust system, secure by design, and building components that can be shared with the broader PHP community,” said Tim Lehnen.

Many thanks to MTech, Tag1 Consulting, and the European Commission FOSSA program for funding this initiative. The Drupal Association is proud to be a part of this initiative.

Oct 03 2019
Oct 03

The Drupal Association collaborated on Automatic Updates, one of the Drupal Core Strategic Initiatives that was funded by the European Commission. We are excited to partner with MTech, Tag1 Consulting, and the European Commission FOSSA program on this new initiative and share information with you about its features.

Automatic Updates has three components.

Public safety messaging

This feature pulls a feed of alerts from Drupal.org directly into Drupal's administrative interface. This helps ensure that critical Public service announcements (PSA) or Security Advisories (SA) from the Drupal security team will be seen directly by site owners. 

  • This provides yet another communication mechanism before an update so site owners can verify they are ready for an upcoming update, before it lands.

  • The feed of alerts comes directly from the feed of PSAs and SAs that the security team and release managers are already producing. 

  • This will vastly increase the ability of the Drupal project to get the word out about critical and highly critical updates - ensuring the community can respond fast. 

Readiness checks, or “Pre-flight” checks

These automated and extensible readiness checks are built into the Automatic Updates system to verify that a site doesn't have any blockers that would prevent it from being updated.

  • These checks are slated to run at least every 6 hours on a site via Drupal Cron and will inform site owners if they are ready to auto update their site.

  • Examples of the readiness checks include:

    • Is the site is running on a read-only file system?

    • Have any files included in the update been modified from what they should be? 

    • Does the site still need to run database updates, etc.? 

There’s about 8 or 9 of these readiness checks and some are warnings (Cron isn’t running frequently enough to automatically update the site in a timely manner) and some are errors (the file system is read-only). Warnings won’t stop automatic updates, but errors will.

In place updates

Finally, the key pillar of the automatic updates feature is the update itself. Drupal.org generates a signed and secure package of files which can be overlaid atop the existing site files in order to apply the update. 

  • This update package is downloaded as a signed zip file from Drupal.org. The automatic updates module on the site then compares the signature of the zip file using drupal/php-signify, which is based on BSD’s Signify and libsodium to verify the package.

  • It then proceeds to backup the files about to be updated and updates the site.

  • If all goes well, the site is upgraded. If something fails, the backup is restored.

  • Many workflows are supported and you can customize how the updates are performed. Updates can flow through your CI/CD system, be staged for review and approval, and or automatically go live.

In the past few weeks, the Drupal Association has been invited to participate in TagTeamTalks, a new recorded talk series about various tech projects supporting the Drupal project. This bi-weekly format provides real-time shared collaboration and informative discussions. 

TagTeamTalk launched its webinar focused on Automatic Updates this week. The group dives deep into the nuts and bolts of Drupal's groundbreaking Automatic Updates feature, and the strategic initiative sponsored by the Drupal Association, MTech, Tag1 Consulting, and the European Commission. Guests include Preston So (prestonso), Contributing Editor at Tag1 and Moderator of the TagTeamTalks; Michael Meyers (michalemeyers), Managing Director of Tag1; Lucas Hedding (heddn), Senior Architect and Data and Application Migration Expert at Tag1; Fabian Franz (Fabianx), Senior Technical Architect and Performance Lead at Tag1; and Tim Lehnen (hestenet) CTO at the Drupal Association. Read the TagTeamTalks blog.

“Content marketing is one of the most effective ways to promote your brand and capabilities - it has been a really powerful approach for the organizations that I’ve worked for,” said Michael. “The goal is to give our team an opportunity to talk about the cool things they’re working on and excited about and to share it with people. It helps get the word out about the latest developments in the open source communities we contribute to, and it promotes Tag1’s expertise - it helps us recruit new hires, and drives new business.” 

Meyers is the Managing Director of Tag1, and has been involved with the Drupal community for over 15 years. He was Founder and CTO of the first venture backed drupal based startup, CTO of the first Top 100 website on Drupal, and VP of Developer Relations at Acquia before joining Tag1.  “The great thing about TagTeamTalks is that it doesn’t take a tremendous amount of effort or energy. Our engineers are subject matter experts. We decide on a topic for the week, spend 15 minutes brainstorming a rough outline as a guide, and then record the talk. We don’t want to be rehearsed. The conversation is what makes it dynamic and enjoyable for us to do, and for people to listen to. And, the team loves it because they want to talk about what they are working on, and this format doesn’t take a lot of time away from what they enjoy doing most - writing code.” 

Hedding is one of the top 20 most active contributors to Drupal 8, and is also the Drupal Core Migrate Sub-system Maintainer, a core contribution mentor, and a D.O. project application reviewer. “Auto Updates has long been one of the most requested Drupal features, it is a capability the platform really needs that will help everyone using Drupal. Now that the alpha is available, we need to early adopters to start using it, we need feedback so we can continue to improve it. We also need to get more people involved in development, and we need to raise more money from organizations to support the project - it might sound like a simple feature, but it is actually really complex and requires a lot of effort. TagTeamTalks are a great way to get the word out and to enlist support from the Drupal community.”

Lucas added, “The European Commission provided generous funding for this initiative. The focus has been exclusively or largely around the European Commission’s features and functionality. The funding is running out very soon. There is a need for other people to help continue to build Automatic Updates by adding the features they need with their developers or by providing funding.”  

“It is critical for us to spread the message and make that call to action; that this is a community-driven effort and that without continued community support, it is not going to be as successful or as robust in the timeframe that we would like,” said Meyers.

The first year of funding from the European Commission provided for readiness checking, delivery of update 'quasi-patches,’ and a robust package signing system. The focus of this first phase of the Automatic Updates initiative has been on support for security updates in particular. 

In the second phase, as yet unfunded, we hope to extend this foundational work in the following ways:

  • Provide more robust composer support. The first phase of the automatic updates project should be compatible with composer-ready sites, but as the site’s composer.json file and vendor directory of a site change from the default, then more controls and though need to be implemented. 

  • Create an A/B front-end controller for the site being updated to further increase our confidence in the success of the update, allow for additional post-update testing and provide an easy mechanism to roll-back the update. This is also when updates will be able to move into Drupal core from the contrib project.

  • Expand to more types of updates (particularly further support for contrib updates), and also handle multiple updates in a row, for sites that are several versions behind. 

To accomplish all of this, we will continue to seek more funding and more partners. 

“I’m looking forward to seeing where this goes now that we have the first release out, ” said Hedding. “ There’s a larger community needed to get this initiative completed.”

The initial alpha version of the Automatic Updates module can be tested by the community right now. The plan is to: demonstrate Automatic Updates at DrupalCon Amsterdam this month, complete the scope of the funded work by the European Commission by the end of this year, and stabilize Automatic Updates by DrupalCon Minneapolis in May 2020. 

“The Automatic Updates initiative is designed to reduce the friction in keeping a Drupal site secure and up-to-date. The team behind the initiative is architecting a robust system, secure by design, and building components that can be shared with the broader PHP community,” said Tim Lehnen.

Many thanks to MTech, Tag1 Consulting, and the European Commission FOSSA program for funding this initiative. The Drupal Association is proud to be a part of this initiative.

Oct 03 2019
Oct 03

Your website’s pages live in the World Wide Web. However, not all of them and not always should be displayed to users just as they are. There are plenty of reasons to control how they are accessed and displayed. 

In this post, we explain why, as well as describe how your website can benefit from one of the most interesting Drupal 8 modules for user access and page display control — the Rabbit Hole.

Why is page access control important?

There are slight nuances of page access control, some of which may not be obvious at first glance. Let’s look at a few.

  • Website page access control enhances your website’s security by prohibiting the views of restricted pages. They may contain sensitive or personal information that should not be seen.
  • Being able to control page access allows you to create interesting access-based functionality (like subscription content).
Paid subscription page in Drupal 8
  • This takes care of your website’s attractive look. Sometimes there are “building blocks” of a page layout that should not be seen by users because, for example, they are not properly themed.
  • For similar reasons, some pages should be hidden from from indexing by the search engines, so page access control also helps your SEO. 

All these and many other tasks can be entrusted to the Rabbit Hole module in Drupal 8. You can always rely on our Drupal team for installing and configuring it on your website and taking care of all page access nuances. In the meantime, let’s take a tour at how the module works. 

The essence of the Rabbit Hole module in Drupal

The Rabbit Hole module in Drupal really stands out from other modules by offering interesting options of what happens when someone is viewing a particular Drupal page (or entity). 

Instead of displaying the Drupal entity, the module can:

  • redirect the user to another page (with the possible use of tokens)
  • show “Page not found”
  • show “Access denied”

This Drupal module’s name might remind you of Alice in Wonderland's story or the concept of parallel universes. The expression “go down the rabbit hole” often means getting into a surreal situation. All this makes sense — with the Rabbit Hole module, your Drupal entities exist but their display is different. 

A few common scenarios (now exactly from the Drupal point of view):

  • You want to grant or deny user access to entity types or specific Drupal entities based on user roles — for example, to display paid content to users with a subscription. Special user roles can be allowed to bypass the Rabbit Hole action.
  • You want to hide the full display of nodes that only serve as building blocks for a Views slideshow or other Drupal page. They also should not be indexed by Google.

So let’s take a closer look at its work and go down the rabbit hole a little bit.

How the Rabbit Hole module in Drupal 8 works

Rabbit Hole module installation

The Rabbit Hole is a complex Drupal module that works with different types of entities — nodes, taxonomy terms, users, etc. 

So, when installed, it offers a bunch of submodules to be enabled alongside the main module. For most common situations, i.e. for working with content, we need the “Rabbit Hole nodes” submodule enabled. However, it depends on the task.

Being able to control page access allows you to create interesting access-based functionality (like subscription content).

Intalling the Rabbit Hole module in Drupal 8

Rabbit Hole module configuration

Rabbit hole settings for an entity type

The module’s page display and user access control settings are found in the entity type’s “Edit” page. You can set the behavior as:

  • Page redirect
  • Display the page
  • Page not found
  • Access denied

After selecting the behavior and clicking “Save,” you can check the result by opening the node page in an incognito window. You cannot see the result as admin, because the admin has the default permission to bypass the Rabbit Hole action. 
 

Rabbit Hole module options in Drupal 8

The special “Page redirect” option

If the “Page redirect” option is selected, we can enter the redirect path or use available tokens. For the latter case, the Token Drupal module also needs to be installed. 

Using page redirect, we can, for example:

  • redirect the users to the specially created subscription page asking them to subscribe to view the content
  • use one of the tokens like [site:login-url] that will take the user to the login page showing them they need to register to view the content
  • redirect the users from the individual nodes that are part of the slideshow to the slideshow page itself or the homepage.
     
Rabbit Hole module page redirects in Drupal 8

Rabbit hole settings for an individual entity

On the same dashboard, you can also check or uncheck “Allow these settings to be overridden for individual entities.” 

With this enabled, Drupal Rabbit Hole settings are also found on the particular entity’s “Edit” page.

Drupal 8 Rabbit Hole settings for an individual entity

Rabbit Hole permissions

To give permissions for particular roles to bypass Rabbit Hole action or to administer its settings, go to People — Permissions.

For example, you can create the VIP user role who will be able to view the specific content type, while others will see “Access denied,” be redirected to a subscription page, or login page.

Rabbit Hole module permissions in Drupal 8

Use the best options for access control in Drupal 8 

There are no limits to how deep this rabbit hole goes. The most fine-grained scenarios of page display and user access control in Drupal 8 are possible with the Rabbit Hole module. 

Just ask our Drupal team to create them for you, configure the module, or develop custom modules for your specific ideas!

Oct 03 2019
Oct 03

Someone asked in Slack today how to print the URL of the node that a paragraph is on. I was up to the challenge.

First off, you can do this with php in your .theme file quite easily, but I like to keep my template items in my templates.

Here's the code I used to first get the node id, then the node title, and then create a link from these two pieces of information.


  1. <ul>

  2. Node Id: {{ parent.nid.value }}
  3. </ul>

What this does is:

  1. Set a variable called parent - note is uses parent twice and then entity

    You won't see parent or entity in your kint/dpm/dd output, which is a pity because entity is great - load the entity you want to get information from.

  2. Use parent to then get the node id value and title value parent.nid.value and parent.title.value.
  3. Create a link using this variables.

It's quite simple really. You can now use this approach to get other fields/data from your host node.

Oct 03 2019
Oct 03

The proper use of internal linking can turn any website into a powerful marketing tool. It is a vital part of effective content writing strategies. In this post, we explore why it is so, as well as review a helpful module for smart content linking in Drupal 8 — D8 Editor Advanced Link. Let’s go.

What is internal linking on websites?

Internal linking is known as the practice of placing hyperlinks inside content leading to the other relevant pages within the same domain. Internal links to content often use the keyword-rich anchor phrases. 

Why is internal linking important?

  • It boosts SEO rankings by helping the search engines understand what your pages are about, offering them multiple entry points to crawl your websites, as well as increasing page authority.
  • Session duration grows — users visit more pages per session, which, among other things, is an important search ranking factor.
  • Internal linking enhances user engagement by offering them more and more relevant content. They simply cannot leave!
  • The conversion rate potentially grows because users are kept interested. They get closer and closer to making the desired conversion.

Internal linking in Drupal 8

Content links should be handy both for content editors to create and for website readers to navigate through. Of course, it’s possible with Drupal 8! 

First, creating links in Drupal 8 is handy for anyone by default — thanks to the built-in CKEditor with a link icon on its dashboard.

Standard link creation in Drupal 8's CKEditor

Second, there are also tools for creating links in Drupal 8 CKEditor that further extend the standard functionality. They are meant for more advanced internal and, of course, external linking as well. Let’s look at how this job is performed by one of them — the D8 Editor Advanced Link module.

The D8 Editor Advanced Link module

The Drupal module D8 Editor Advanced Link increases the website’s usability both for the content creators and readers in the following ways:

  • Content editors and SEO managers can control more precisely from the CKEditor panel how the content links are displayed. 
  • Content readers can enjoy rich links and more convenient navigation.

These content linking capabilities include:

  • linking directly to exact phrases or even words on the page
  • adding CSS classes
  • making links open in a new or the same window
  • displaying the link’s title on mouseover
  • adding relationships between the linked and the source page

“This is a super simple module that serves a very cool little purpose,” said Thomas Shean, a famous Drupal contributor, in the video tutorial about the D8 Editor Advanced Link.

The principle of the D8 Editor Advanced Link module’s work

The module provides advanced link creation by offering more attributes to be added to them. Let’s compare. The classic Drupal CKEditor has just one field for the URL during content linking:

Standard link adding form in Drupal 8's CKEditor

Everything is different with the D8 Editor Advanced Link module installed. It enriches the Drupal 
CKEditor’s content linking menu with advanced attributes such as: 

  • title
  • class
  • id 
  • target 
  • rel
     
D8 Editor Advanced Link module's capabilities

The difference is amazing. More details will be discussed in the “Installation and configuration” part.

Installation and configuration of the D8 Editor Advanced Link

Installing and enabling the module

First, we need to install and enable the D8 Editor Advanced Link module on the Drupal 8 website. 

Enabling D8 Editor Advanced Link module in Drupal 8

Preparing the text formats

Next, we go to Administration — Configuration — Content authoring — Text formats and editors and open the “Full HTML” format.

Text formats in Drupal 8

We make sure we have the “link” buttons on the active toolbar. If not, we need to drag them there. We will need them, as well as the “source” button.

Configuring Drupal 8's CKEditor dashboard for adding links

We should also look at the "Limit allowed HTML tags and correct faulty HTML" filter. 

  • If it is unchecked, there is nothing else to do, since there are no restrictions in tags. 
  • If it is checked, you can add more allowed HTML tags manually (such as "title", "class", "id", "target", and "rel").
Configuring allowed html tags in Drupal 8

Using the content linking attributes

When we have prepared everything, we can go ahead with our Drupal content linking. When selecting the part of the text that needs to be linked and clicking on the “link” button, we will see a form with advanced attributes that just need to be unfolded. 
 

Advanced link attributes in CKEditor Advanced Link module for Drupal 8
  • URL. This is the URL of the destination page.
  • Title: This is the text that is shown as a tooltip when the mouse hovers over the link.

Advanced section:

  • CSS classes. This is the place to add CSS classes. Multiple ones are supported, which should be separated by spaces.
  • ID. This allows you to use URL fragments and lead users to a specific portion of the page. For example, you list “ID2” at the end of the URL tag after the “#” symbol. Then you should mark where the “ID2” fragment begins inside in the source code of the destination page. Like this: <p id="ID2">.
Using URL fragments in Drupal 8
  • Target. This is a simple check/uncheck option as to whether the links should or not open in a new window.
  • Relation (rel). This is for adding relationships between the source and the destination document (e.g. “nofollow,” “noreferrer,” etc.).

Make your internal linking in Drupal 8 more advanced!

With Drupal, there are always more opportunities than you could imagine. Make your content workflows much smarter by installing the D8 Editor Advanced Link module or other modules for internal linking in Drupal. 

Our Drupal team is always there for module selection, installation, configuration, or creation from scratch!

Oct 03 2019
Oct 03

Drupal 8.8.0-alpha1 will be released the week of October 14th

In preparation for the minor release, Drupal 8.8.x will enter the alpha phase the week of October 14th, 2019. Core developers should plan to complete changes that are only allowed in minor releases prior to the alpha release. The 8.8.0-alpha1 deadline for most core patches is October 11. (More information on alpha and beta releases.)

  • Developers and site owners can begin testing the alpha after its release.
  • The 8.9.x and 9.0.x branches of core will be created, and future feature and API additions will be targeted against that branch instead of 8.8.x. All outstanding issues filed against 8.8.x will be automatically migrated to 8.9.x.
  • Once 8.9.x is branched, new alpha experimental modules will be removed from the 8.8.x codebase (so their development will continue in 8.9.x only). The Help Topics and Config Environment modules are new alpha stability modules in 8.8.x.
  • All issues filed against 8.7.x will then be migrated to 8.8.x, and subsequent bug reports should be targeted against the 8.8.x branch.
  • During the alpha phase, core issues will be committed according to the following policy:
    1. Most issues that are allowed for patch releases will be committed to 8.8.x, 8.9.x, and 9.0.x.
    2. Most issues that are only allowed in minor releases will be committed to 8.9.x and 9.0.x only. A few strategic issues may be backported to 8.8.x, but only at committer discretion after the issue is fixed in 8.9.x (so leave them set to 8.9.x unless you are a committer), and only up until the beta deadline.





Drupal 8.8.0-beta1 will be released the week of November 4th

Roughly two weeks after the alpha release, the first beta release will be created. All the restrictions of the alpha release apply to beta releases as well. The release of the first beta is a firm deadline for all feature and API additions. Even if an issue is pending in the Reviewed & Tested by the Community (RTBC) queue when the commit freeze for the beta begins, it will be committed to the next minor release only.

The release candidate phase will begin the week of November 18th, and we will post further details at that time. See the summarized key dates in the release cycle, allowed changes during the Drupal 8 release cycle, and Drupal 8 backwards compatibility and internal API policy for more information.

Bugfixes and security support of Drupal 8.6.x and 8.7.x

Drupal 8 core provides security coverage for the previous minor release as well as the newest minor release. Accordingly, security releases for Drupal 8.7.x will be made available until June 4th when Drupal 8.9.0 is released. Bugfixes that are not security-related will only be committed until Drupal 8.7.x's final bugfix window on November 6th.
Normal bugfix support for Drupal 8.6.x ended in May 2019. However security support is provided for 8.6.x until the release of Drupal 8.8.0 on December 4th, 2019.







Note: June 4, 2020 is both the scheduled release date of 8.9.0 and also the target release date for Drupal 9.0.0. If 9.0.0 misses the June window, its fallback release date is December 2, 2020. Support and security coverage for 8.7.x, 8.8.x, and 8.9.x will remain the same in either scenario.

Oct 03 2019
Oct 03

You will need to download and install the Drupal 8 Build Hooks module just like you would with any other Drupal module.

composer require drupal/build_hooks

Enable the Build Hooks and Build Hooks for Netlify modules.

Build Hooks Modules

There are some permissions that can be set for Build Hooks to determine who can manage the frontend environments and who can trigger deployments. For now we will just keep it for administrators.

Build Hooks Permissions

Go to Admin > Configuration > Build Hooks > Build Hooks Settings. On this page you can configure what entities should be logged. This is important as these “loggable” entities are the entity types that can trigger a rebuild on your Gatsby site. Leaving it at the default will work for our site, but this could vary depending on your needs and if you have other entity types that your Gatsby site uses for content.

Build Hooks Settings

Go to Admin > Configuration > Build Hooks > Frontend Environments and click the Add frontend environment button. In the Netlify section, click the Add new environment button. You now need information from your Netlify site.

Go to the Netlify website and log into your Netlify account. Select your Gatsby site and take note of your Gatsby URL (you will need that for the Drupal form). Click on Settings and under the Build & Deploy section find Build Hooks.

Click the Add Build Hook button.

Add Build Hook

You can give the build hook any name you want, in this example I just called in Content Rebuild. Set it to rebuild your Master branch. Click the Save button.

Build Hooks Configuration

Now take this Build hook URL and the URL for your Netlify site and drop it into the Drupal form. You can set the Label to whatever you want. Copy the API ID from your Netlify site (in the General Settings > Site details) section and drop that in the Drupal form as well. For the Branch name, enter master. For now you can leave the Deployment strategy as Manually only, however, this option is what would allow you to trigger rebuilds on cron run or when content is updated on the site.

Build Hooks Frontend Environment

Now go to an Article and change something. I will just change the title and image of the most recent article, but you could create additional articles or make any changes you want. Once your changes are ready, notice the Frontend environment is listed in your admin menu.

Build Hooks Admin Menu

If you click on the deploy environment you can click the Start a new deployment button.

Build Hooks start Deployment

If you go back to your Netlify site, you will see that a new deploy has been added and the site is rebuilding.

Netlify Build Status

Once it’s finished you can check out your updated Gatsby site!

Note: You don’t have to configure the oauth settings for the Netlify Build Hooks module in order to get this to work. If you want to make your Netlify logs private, then you will need to set up and configure the access token. This is available in the oauth settings on your Netlify account under the Access Token section.

Pages

About Drupal Sun

Drupal Sun is an Evolving Web project. It allows you to:

  • Do full-text search on all the articles in Drupal Planet (thanks to Apache Solr)
  • Facet based on tags, author, or feed
  • Flip through articles quickly (with j/k or arrow keys) to find what you're interested in
  • View the entire article text inline, or in the context of the site where it was created

See the blog post at Evolving Web

Evolving Web