Jul 01 2019
Jul 01

Our lead community developer, Alona Oneill, breaks down highlights from Drupal Core Initiative Meetings this past June. You'll find that the meetings, while also providing updates of completed tasks, are also conversations looking for community member involvement. There are many moving pieces as things are getting ramped up for Drupal 9, so if you see something you think you can provide insights on, we encourage you to get involved.

CMI 2 Initiative Updates

Status of CMI 2

Major patches are being reviewed and hopefully will land after it gets a change record.

Next steps for CMI 2

  • A final review from Lee to be completed.
  • The config environment module, different configuration in different environment, is in production.
  • At a stage where nothing is needed from Core Cm or FM’s.

Composer Updates

Status of Composer

A patch went in to use composer as a dev requirement and we're on the road to making core test builds and upgrades. The scaffolding patch was reviewed and moved to RTBC.

Next steps for Composer

  • Need core maintainers to review the testing framework from miles 23.
  • Need core team to help with the scaffolding issue.

Workflow Updates

Status

There are two major patches being worked on at the moment:

Would also like to see the issue to allow 'syncing' content to be updated in content moderation without forcing the creation of a new revision be updated. Content moderation is working with this as it allows people to moderate any content within the workspace via the user interface.

Stable release

Upgrade path is on hold until this approach is validated or approved. Workspace merging is currently in need of an issue.

Next Steps for Workflow

Get release managers and fm review is needed on issue #3062434. Get FM review on issue #2803717 because it currently needs additional input. An issue for workspace merging also needs to be created. We're trying to get the first 2 issues into 8.8 (and 8.7).

Drupal 9 Updates

Status

  • Drupal check got a release last week by mglamman with all deprecation error messages.
  • Upgrade Status has new features in dev that categorizes error messages on actionability. The action items are, supported, deal with it now, not supported, deal with it later, or deprecated for Drupal 9.
  • Explaining in the UI of the module to help them engage with contribution maintainers.
  • There is low-level planning in the works to:
    • Identifying work to manage dependencies and defining the process to do this work.
    • Issues related for info:
    • We are asking for investment from Acquia to complete some of the work.
    • Core jQuery UI discussions are continuing.
    • Symfony 5 branch is now open! The branch requires a min php 7.2. For Symfony 4 the php requirement is 7.1.

Drupal 9 Blockers

Cannot complete deprecation list for 8.8 because November is when we’ll get the list from Symfony for the SF5 release.

Next steps for Drupal 9

  • Continue to keep tabs on what is happening with Symfony 4 and 5 changes.
  • Review the list of items being deprecated for 8.8 with RM/FM.
  • Make a decision on if the team goes with Sf4 or Sf5.
  • Confirmation on the resourcing ask for Drupal 9 work.
  • Confirming the front end deprecation process.
  • Identifying critical path items and sequencing for Drupal 9 work.

Claro Updates

Status

We have one group working on admin ui theme, Claro. There is a lot of contribution progress from both front-end developers and designers. The Alpha 3 release of Claro was released in the middle June.

Another team is working on react-based decoupled admin ui, however there is not much momentum at the moment. So far, a component library has moved forward with limited resources.

Next steps

The team is on track for getting in 8.8, likely as a beta. This will address open issues with designers,  address changes that developers need to make which have already been found, and work on get approval from RM/FM on moving the theme toolbar CSS to the Seven theme.

Status

  • At Devdays++ accessibility improvements and fixes were worked on and signed off by RM/Media team consensus.
  • Drag and drop zone for file uploads was discussed at the UX meeting as the current design was causing accessibility issues.
  • The plans for WYSIWYG are complete and ready to be worked on moving forward. 
  • Media metadata issues are now unblocked.

Next steps

  • Continue prototyping on the accessibility solutions to be compatible with drag/drop zone for file uploads.
  • Keep working with contributors and community members to find solutions that could incubate there.
  • Keep working on WYSIWYG.
  • Resource and allocate people to work on metadata.

Migrate Updates

Problem

The current migration is not as user-friendly as we’d like. We need a better user experience.

Solution

There is a large list of things generated from Angie Byron on the experience:

  • Running a pre-flight check will reveal if your data has an issue. We need a better way to check that issues you’d run into are uncovered and fixed before they migrate.
  • Solution needs to not mess with the command line and be more intuitive.
  • Working with UX to find an appropriate solution.
  • Currently have 4 migration maintainers with limited additional resources. We need more people writing code!

Next steps

We will continue with the multilingual upgrade path and keep working on preflight check to improve the migration experience. 

It Takes A Village

Thank you for being involved in the community, we're happy to be helping spread the word about the progression of a great platform. Please check back for frequent meeting recaps to gather insights on the latest Drupal Core developments and find ways to get involved. Our community thrives when we all come together!

Jul 01 2019
Jul 01

I'm very pleased to announce that we (hopefully) have a new help system in Core that will actually serve the needs of module, theme, and distribution developers! It is called "Help Topics", and is currently in "Experimental Module" status in Drupal core 8.8.x.

The way it works:

  • Modules, themes, and distributions can have a help_topics subdirectory in their projects, where they can write help topics in the form of Twig template files. Each project can have as many topics as they want/need to document their project.
  • The Twig files have meta-data (in HTML meta tags) at the top to define the title of the topic, whether the topic is "top-level" or not, and a list of other topics to mark as "related".
  • When a user visits the admin/help page (assuming the Help and Help Topics modules are enabled), they will see a list of the top-level topics, and can click through to read them. When reading a topic, at the end they'll see a list of all the topics that are "related" (and "related" is automatically a bi-directional relationship).

So... The module is currently in "Experimental" status, and we need your help to get it to "Beta" and then "Stable" status in Drupal Core:

This effort is being led by andypost, Amber Himes Matz, and jhodgdon... if you have questions, we can all often be found on Slack or on drupal.org.

Jun 30 2019
Jun 30

Version 1.9.0 of DDEV-local introduced the ability to share your local project online via a temporary, public URL using ngrok.

This allows you the ability to quickly and securely provide access to your local site to other developers and stakeholders as well as an easy way to test your local site on other devices.

ngrok is a service that exposes local servers behind NATs and firewalls via public URLs over secure tunnels. Once the small ngrok client is installed on your local machine, the ddev share command will enable the sharing and provide you with a public URL for your local site.

While there are paid tiers for the ngrok service, a free tier is provided with reasonable limits on usage. See the ngrok web site for details. In the first example, we'll utilize the free, anonymous tier.

The free, anonymous tier does not encrypt your data between your local and the ngrok servers, even though an https connection is provided from the ngrok servers to connected clients. Therefore, it is strongly suggested that once you get the free, anonymous tier working, create a free account and authenticate your local ngrok client to ensure your data is encrypted the entire trip.

Note that this is a one-time setup for your machine, and does not have to be repeated for each of your DDEV-Local projects.


Step 1: Install the ngrok client

Download and install the client specific to your OS from https://ngrok.com/download. While there are instructions to download and install ngrok on various operating systems, I found that using Homebrew (Mac OS X and Linux) was easiest:

brew cask install ngrok

If you're using Windows 10 and Chocolately, then I recommend installing with:

choco install ngrok

Step 2: Sharing your local site

Run the following:

ddev share

If successful, this command will return some information about the share, including public URLs with which you can access the site.

As requests are made to the site, the screen will update detailing each request.

ngrok status

Note that in the screenshot above, that the "https://94d5c548.ngrok.io" public URL is forwarding the insecure "http://127.0.0.1:32786". If we were to set up a ngrok account and authenticate our local ngrok client, it would be forwarding "https://127.0.0.1:32786" instead.

Use Crtl-C to stop the sharing.

Additional ngrok features and functionality

Secure your data by signing up for a free ngrok account and then authenticating your local ngrok client with your account credentials using the command provided by the ngrok web site:

./ngrok authtoken <a-long-string-of-characters-that-is-your-token>

ngrok authtoken

Once your local ngrok client is authenticated, the next time you do a ddev share, you'll be able to see that your connection uses https from end-to-end.

While the free ngrok plan is normally sufficient for smaller projects, paid ngrok plans include multiple users, custom domains and subdomains, additional connections, static IP addresses, and other features.

This tutorial is an excerpt from version 3 of Michael Anello's Local Development with DDEV Explained book - coming soon! Version 3 will include everything new to DDEV-Local through version 1.9.1. Pick up an electronic copy of Version 2 for less than $10 and you'll automatically get free access to Version 3.

Jun 30 2019
Jun 30

On Thursday, June 27, 2019, Acquia held a webinar on the topic of content as a service, titled “Shifting from Single Channel to Multichannel Content”. 

Speakers Dries Buytaert and Jake Wilund presented the challenges of multichannel content and what a content-as-a-service (CaaS) platform looks like, topped with a sneak peek into an upcoming new feature of Acquia - Content Cloud. 

While the slides and video will be available publicly in the coming days, we wanted to provide a way for everyone who missed the webinar to get some insight into what it was all about without having to wait for said slides and video, or without having to watch the entire video if they don't have the time.

For this reason, we decided to write up a recap of the most salient and relevant points from the presentation and the subsequent discussion. So, if you were unable to attend the webinar or just want a refresher, this blog post is for you.

We’ll make sure to update it as soon as the slides and videos are available so that you’ll have all the information easily accessible from one place (which is very much in line with the topic of the webinar). 

Challenges users face with relation to content

A user experiences a brand and its content through different channels along their digital journey. This means that every touchpoint you have with your customers is a chance to strengthen the relationship they have with your brand - or to weaken it.

Basically, we’ve moved beyond simply the web; we’re now in a multichannel world. Because of this, organizations must deliver great customer experiences across different channels: experiences that are relevant, personalized, easy to navigate and work across different devices. 

Content is the fundamental building block of a good digital experience, so you need to make sure that the content you produce is of a high quality and experientially relevant. 

Multichannel content challenge

A multichannel approach, naturally, demands that more content is created for more channels, and the creation of this content needs to happen at a faster pace. 

Additionally, each new channel means a new system for both authors and developers, which translates into more time and resources needed for onboarding. Because of this, having a single source of truth for the latest content is critical, as is the use and reuse of this content. 

Reducing complexity is a cross-organization problem. With a lot of authors working across numerous sites, it’s hard to keep track of and reuse content, as well as manage all of these content creators across different platforms. 

Working in silos creates disjointed digital experiences. Each time you add a channel, you need a new technology system which supports that channel (e.g. e-commerce -> Magento). These solutions are independent platforms, disjointed already when there’s just a few of them - but what if there are hundreds of these technology systems?

Best practices for multichannel experiences

There are three key steps to starting the shift from single to multichannel experiences from a content perspective. They are:

  1. Standardize content structures across all systems and channels. Experience builders and authors need to have consistency, so make content structures uniform across channels.
  2. Audit your existing content repositories. It’s already been pointed out that content reuse is imperative, but if you don’t know where the content is located, it’s easy to miss it.
  3. Define the critical roles and responsibilities involved in content creation. You need standardization and governance of your content structures, so that you always know who’s responsible for creating and/or publishing content.

Content-as-a-service platform (CaaS platform)

A CaaS platform provides simplified, headless content creation that is independent of delivery channel, which enables organizations to support multichannel digital experiences with the “COPE” model (create once, publish everywhere). 

Structured content is the content that can be used to power digital experiences. A CaaS platform should enable a great authoring experience. 

Sneak peak into Acquia Content Cloud

Attendees of the webinar even got a sneak peek into Acquia Content Cloud, an upcoming new tool for content creators to easily create headless experiences and integrate APIs. 

If you’re eager to give Content Cloud a try, you can apply for a private beta. In the meantime, here are the features that stood out to us from the presentation and the demo video:

  • Marketers can write, edit and approve content, independent of where it will be used.
  • Content can be maintained through multiple disconnected systems.
  • It allows for easy inclusion of rich media: images, videos, animations, etc.
  • API-first means that it supports decoupled/headless experiences on any channel. 
  • It integrates with new and existing Drupal sites, allowing for easy content syndication. 
  • It’s built for teams and enterprises to streamline content creation. Enterprises need a lot of control over who gets access to what content, so governance capabilities are a priority. 

In a nutshell, Content Cloud provides a SaaS-based content authoring experience. It caters to the different desired capabilities of managers, who want governance and insights into authors, and developers, who need to build content-driven applications and need fast headless capabilities. 

Q&A session

Q: Is Content Cloud built on Drupal?
A: Yes, Acquia started investing heavily in headless Drupal, and this investment can be carried forward into this project. But, not to worry - you won’t need to install and set up Drupal when using Content Cloud, you’ll have everything already enabled.

Q: How does Content Cloud support integrations with other channels?
A: Any piece of content authored in Content Cloud can seamlessly flow into any other existing Drupal 8 application - it will provide a central authoring experience. Out-of-the-box JSON:API functionality will be included. The long-term goal is to build more native integrations, but the team must first determine which of these will have the most impact, as maintaining them can be very costly.

Q: Which version of Drupal is Content Cloud built in?
A: It’s built with the newest versions of Drupal - the beta is in 8.7, for example. But, since it’s CaaS software, customers won’t need to worry about the version.

Q: Does Content Cloud replace the need for a CMS for each of your websites?
A: No, Content Cloud is a content repository, but it still needs to be displayed out in the web. It doesn’t replace websites per se, but it does simplify them and makes it easier to maintain them - all the authoring happens in one place, the website then functions only as the presentation and interaction layer. It can also help accelerate new site builds, since configuration is also retained. A channel is essentially a destination for content, and CMS will remain just that.

Q: How will Content Cloud integrate with the personalization solution Acquia Lift?
A: Any piece of content authored in Content Cloud will be stored in the Acquia Content Hub, which is the source of personalization; this means that any piece of content authored in Content Cloud will be immediately available in Acquia Lift. The view mode will also be stored in Content Hub.

Q: What’s the difference between decoupled and headless CMS?
A: Dries uses these two terms interchangeably, though, technically, they aren’t the same thing. Headless means no head, it is an API-only platform to which you need to add the head. Decoupled, on the other hand, means that there is both an API and a head. You can use APIs to build a new head or additional heads. Content Cloud is headless as it has no presentation layer for the content. The newly emerging terms “CaaS” and “Agile CMS” also overlap with these two definitions. 

Q: Will there be a data analytics component to Content Cloud?
A: Analytics is a key piece of Acquia’s vision, they want to give content creators insights into the performance of their content. The long-term vision is to build tools for content creators to create better, more effective content. This doesn’t just include analytics, but also guidance to authors while they’re creating content (real-time suggestions, e.g. if something won’t work well for SEO, or if something is off-brand). The goal is to create an authoring experience that outputs really good structured content, something that is perfect for authors and marketers. 

Q: Can Content Cloud post directly to a Drupal 8 site?
A: Generally speaking, publication will be orchestrated across channels via releases, but technically it can also post directly if the workflow is such. 

Q: Is there a predefined set of content types? Or can you create your own?
A: It will be shipped with some default content structures (primarily a predefined set of media types), but all the other content types are going to be completely customizable.

Q: When will Content Cloud be available to the general audience?
A: The plan is to ship it at the end of the year, but the insights they learn from the beta phase might push back the release date. 

Conclusion

Well, this is it for our recap of Acquia’s webinar. We hope you were able to get a better grasp of the topic and the capabilities of Content Cloud, or rediscovered something that you missed or that has slipped your mind since the webinar. 

The shift to multichannel content is likely to become an important topic as the technologies and devices via which we consume content become more and more diverse, so it makes sense to start planning for it now rather than wait until the last possible moment.

We can probably expect a lot more content on the subject matter. Preston So's idea of a "distributed CMS" is also very much in line with multichannel content and the Caas platform; check out his blog post if you want to find out more about it.

As promised, we'll update this post when the slides and video are available. Hopefully this recap has given you enough food for thought until then.

Jun 28 2019
Jun 28

We recently had the opportunity to dive into developing a site using the layout builder as the primary method of layout and block placement. Although we were apprehensive to rely on a currently experimental module to handle all the layout and content organization once we dug in, we were pleasantly surprised with how it handled what we threw at it. That being said there was a fair amount of setup needed to really get it working how we wanted it to. In this post I’m going to go over the basic setup we used and in a future post I will examine some of the more advanced tools we developed to get the most out of it.


In addition to Layout Builder and Layout Discovery, we used two other modules Layout Builder Restrictions and Block Blacklist. These enabled us to have a little more control over what the client has access to placing and helped make the list of items available to place feel a little less daunting. 


Setting up your defaults with Block Blacklist


Once you’ve enabled all the modules the first thing I’d recommend doing is a little bit of housekeeping with your blocks. We can go over to /admin/config/block_blacklist/settings and start globally removing all of the blocks that come in core that are rarely used. This is done by entering the corresponding block id’s into the global blacklist.

Block Blacklist


You can also choose to disable them for the layout builder only if it’s something you might be placing elsewhere and just want to restrict the client from accessing.


Customizing your content types with Layout Builder Restrictions


The second bit of setup to cover is enabling the layout builder for all the content types you wish to let the client modify. To do this we’ll head over to the manage display page of your content type and tick off the “Use Layout Builder” box under the “Layout Options” section and hit save.

Layout Builder Restrictions

You should now see some extra sections under “Layout Options”, “Blocks available for placement” and “Layouts available for sections” These are added by Layout Builder Restrictions. Here we can set what blocks can be placed on a particular content type and define what layouts are available for them to use in sections. This allows us to maintain control over the look and feel of sections while still giving the client the freedom to customize pages as they see fit. We can choose to allow or deny access to all blocks supplied by a specific module or pick and choose what we allow/deny.


Layout Builder Restrictions


Once you have your blocks and layouts set you can click “Manage Layout” and set the default blocks and sections you want to be placed whenever a new node of this type is created. Setting a default layout will also allow the client to play around with layout ideas and always be able to revert back to the default at any time if they are unhappy with the results.


Creating your own layout templates


The templates that come with the module are a good start to get you going but once you really dig in you’ll probably want to start creating your own custom layouts. This is really easy to do. With the Layout Discovery module you can set them up in your theme or in a custom module. We decided to place them in the utility module we include in every site we build. 


First, we’ll create the templates we’d like to use and place them in a folder called layouts within the templates folder of your theme or module. This is an example of a two column layout, with the exception of our layout classes it's pretty standard. You'll want to make sure you have the region_attributes printing out on your regions so the layout builder can include the classes it needs to function correctly. Without them, you will not get the correct styling within the edit mode, or the JS to drag and drop blocks between sections.

{#
/**
 * @file
 * A two-column layout.
 *
 * Available variables:
 * - content: The content for this layout.
 * - attributes: HTML attributes for the layout <div>.
 *
 * @ingroup themeable
 */
#}
{%
  set classes = [
    'layout',
    'layout--two-column',
  ]
%}
{% if content %}
  <div{{ attributes.addClass(classes) }}>

      <div class="l-grid--gutter l-grid l-grid-md--two l-grid-lg--two l-grid-xl--two">

        <div {{ region_attributes.first.addClass('layout__region', 'layout__region--first', 'l-grid__item') }}>
          {{ content.first }}
        </div>

        <div {{ region_attributes.second.addClass('layout__region', 'layout__region--second', 'l-grid__item') }}>
          {{ content.second }}
        </div>

      </div>

  </div>
{% endif %}


Once you’ve got all of the templates created you simply have to declare them in your layouts.yml file for Layout Discovery to pick them up. You can call this file my_module.layouts.yml or my_theme.layouts.yml. The snippet below illustrates the correct format for them to be picked up by Layout Discovery. Including the icon_map section will give you a nice visual representation of the layout, you can learn more about that here.

ignite_two_column:
  label: 'Two Column'
  path: templates/layouts
  template: two-column
  category: 'Ignite Layouts'
  icon_map:
    - [first, second]
  regions:
    first:
      label: First Column
    second:
      label: Second Column


In a future post I’d like to discuss some of the work we’ve done to allow custom styling to blocks and sections within the layout builder using config options and utility classes. Between controlling what blocks and layouts you’re providing clients, and creating some custom layouts, this should give you a pretty good starting point to provide a powerful tool for your clients. We’ve only scratched the surface of what can be done with the tool but we’re already pretty happy with the results.

Photo by José Alejandro Cuffia on Unsplash

Jun 28 2019
Jun 28

Next step in our journey after Part 1 Caching and Part 2: Aggregation of our ultimate guide to Drupal performance is all about Drupal theming and this will be our part 3

The next part will be some general tips and tricks about CSS/JS and then we will release a full blown article containing all parts. so lets cut the intro and get right into it.

 

Faster Drupal - Part 3: Drupal Theming

  • Automate optimizing of CSS, JS & Images. The thing is, it really depends on the node packages that you use on your theme level and how you can take advantage of it, for instance, there are many (I MEAN MANY WITH ALL CAPS) packages that can help you achieve that using a build system such as gulp, grunt or the new favorite webpack.

  • Avoid using unnecessary bootstrap packages as much as possible. Usually, Starterkit themes load bootstrap packages one by one, why not remove the ones you don’t need? WHY? JUST TELL ME WHY?

  • Is your theme using fontAwesome or any other kind of font out of box? But you are using SVG icons from your design file! Well… why not just remove the built-in icon font from your theme then?

  • Fonts are nice, And it seems our designers usually like to use 12 billions of them in a single page, but you should never listen to your designer (Or should you?) Always remember to load fewer fonts and fewer font weights as much as possible.

  • While we are on the fonts topic:
    Control font performance with font-display - Resource

  • Are you the type that invents the wheel each time yourself? Then don’t use a base theme that comes with a lot of good stuff! we usually don't use half of those goodies. Create a new base theme off of Drupal core's "stable" theme and go with the bare minimum. Or use a proper Starterkit, strip off the unnecessary parts, get your own Starterkit and get rid of all the Drupal themes excessive wrappers and classes.
    On this note, it’s a good practice to get your DOM size less than 1500 nodes (recommended from Google Page Speed)
    For Drupal 7 also maybe just consider Fences module if nothing else works for you

  • Reduce the scope and complexity of style calculations

  • Prioritizing Your Resources with link rel='preload' and yes you can use <link> for scripts as well - Resource

  • When we were kids (Back in Windows XP era) you’d read everywhere that do not use inline styles for your HTML files, but now you should use inline-styling to avoid render blocking CSS files. All the CSS Styles loaded from external files is considered render blocking. Why You asked?
    In order for the browser to display your web page and use the styles you specified in the external CSS files, it has to load them first. This means that your web page won't be displayed until these files are loaded. In order to speed up the loading of your website, you can inline the parts from the external CSS files which are needed to render the above the fold content. After loading the page you can instruct the browser to load the rest of the CSS files via JS - There are many tools that you can use to achieve this but this one explains good enough and works: https://www.sitelocity.com/critical-path-css-generator
    Also, check penthouse as well, Can be set up easily as a task runner task!
    https://www.npmjs.com/package/penthouse - includes CSS for critical path above the fold in the HTML head.
    By the way, there’s a Drupal module for that (but we didn’t test it,  do so at your own risk)
    Our very own Sven played around with both penthouse and critical and let me just quote him in our slack chat here:
     

    critical is a wrapper for penthouse with the main advantage that it delivers critical css for several breakpoints in one file. 
    Note: To generate critical css, `link_css` module must be enabled, and you can not be using deter css loading in AdvAgg, otherwise you get an empty file. (Needs testing)


    Critical_css module on Drupal
  • Now that you have the critical CSS, the proper tool to load the rest of your CSS: https://github.com/filamentgroup/loadCSS

  • Remove unused CSS, there are tools inside the IDEs that can help you with that, you should search this part yourself since it depends on your weapon of choice for coding, also there are node packages that you can set up but I’d still go with the IDE approach and do it manually, just to be safe.

  • Use video tag instead of gif images (Yup, it loads faster)

  • Avoid using document.write, specifically for scripts injection - Resource

  • Images must not be delivered larger than they are actually displayed to avoid loading unnecessary data. Resizing images on the browser side to reduce their rendering size is not recommended.

 

Written by Sohail LajevardiSohail Lajevardi 
Developer at Ramsalt Lab 

 

Jun 28 2019
Jun 28
Go to the profile of Deirdre Habershaw

Oct 19, 2018

Today, more than 80% of people’s interactions with government take place online. Whether it’s starting a business or filing for unemployment, too many of these experiences are slow, confusing, or frustrating. That’s why, one year ago, the Commonwealth of Massachusetts created Digital Services in the Executive Office of Technology and Security Services. Digital Services is at the forefront of the state’s digital transformation. Its mission is to leverage the best technology and information available to make people’s interactions with state government fast, easy, and wicked awesome. There’s a lot of work to do, but we’re making quick progress.

In 2017, Digital Services launched the new Mass.gov. In 2018, the team rolled out the first-ever statewide web analytics platform to use data and verbatim user feedback to guide ongoing product development. Now our researchers and designers are hard at work creating a modern design system that can be reused across the state’s websites and conducting the end-to-end research projects to create user journey maps to improve service design.

If you want to work in a fast-paced agile environment, with a good work life balance, solving hard problems, working with cutting-edge technology, and making a difference in people’s lives, you should join Massachusetts Digital Services.

Check out some of our current postings here:

Creative Director (posting coming soon, submit your resume here)

Director of Technology (posting coming soon, submit your resume here)

Senior Drupal Developer (posting coming soon, submit your resume here)

Didn’t see a good fit for you? Check out more about hiring at the Executive Office of Technology and Security Services and submit your resume in order to be informed on roles as they become available.

Jun 28 2019
Jun 28

Valuable, easy to navigate, useful and (most of all) usable content. This is the criterion that we use for selecting our favorite Drupal blog posts in a month.

And this is precisely what all the pieces of content that we're about to highlight in this post here have in common.

From:
 

  • inspiring lessons learned while working on a specific Drupal project
  • to actionable insights and valuable advice on how to keep up with Drupal's own advancement
  • to highlighted modules, that make the perfect fit for particular types of projects and challenges
     

… each one of these blog posts provided us with content with... an impact.

But let's just get started: here are the 5 Drupal-related blog posts that won the “popularity contest” in our team this month:
 

Kemane Wright, from Texas Creative, challenges us imagine (or to recall) a scenario where we'd need to remove/style a field in a Drupal form.

Say you:
 

  • find one of your forms to be uneccesarily “cluttered” and you just want to reduce the number of fields for the end-user to fill in
  • just want to update that particular fied's functionality (say turn it from an input field into a select field)
  • realize that there's no module available that you could use
     

Next, he reveals and details upon his 2 solutions to this dead-end, both of them applicable to your code directly.

Now, don't expect me to devulge them to you here. Do head to this team's website and delve deep into the enlightening information there.

Another both useful and usable piece of content that we've added to our list of ressources to tap into. And that because we're on a constant “quest” for new ways of integrating artificial intelligence into our Drupal projects. 

In this respect, we're more than grateful to the InternetDevels team for sharing their selection of Drupal modules that are using AI, all while outlining each one's functionalities.

If the topic of using Drupal for AI applications is of a particular interest to you, we kindly recommend you this post, one of the best Drupal blog posts in June.
 

Justin Toupin, Aten's CEO, is altruistic enough to share with us mortals here, his team's discoveries while working on one of their previous Drupal projects.

More precisely, their set of 6 tools to keep at hand when dealing with data-intensive challenges and data visualization issues.
 

With this post, those at ADCI Solutions launched their “Drupal best practices series”.

For us — and particualrly for the front-end developers here, at OPTASY — it turned out to be a true gem, “stuffed” with valuable best practices on how to optimize one's front-end code:
 

  • segmenting code into smaller chunks
  • integrating dynamic imports
  • ...
     

With everyone asking “How do I prepare for Drupal 9?” these days, Drudesk's piece of content stands out as one of the most useful Drupal blog posts of the month.

It lists all the critical preparations and To-Do's to consider for planning properly for Drupal 9:
 

  • from removing all deprecated code
  • to migrating your website from Drupal 7 to Drupal 8 instead of waiting to take the leap straight to Drupal 9, once released
     

The END!

These have been the 5 Drupal blog posts in June that had an impact here, at OPTASY:
 

  • on how we'll be using Drupal from now on
  • on how we'll be approaching our future Drupal projects
  • on how we'll improve our workflow to incorporate the best practices and the useful Drupal tools highltihed in these posts

Photo by Tony Hand on Unsplash

Jun 28 2019
Jun 28

Go back in time and you’ll realize that every Drupal version upgrade has been drastically different from their predecessors. This caused compatibility issues and upgrade between major versions has always been a complicated task. Contributed modules and themes needed to be upgraded for compatibility, content migration was a hassle, and the list goes on. Gradually Drupal has adopted semantic versioning which allows for continuous improvements without waiting for major version launches and allows for a more continuous upgrade.

Be rest assured that upgrading to Drupal 9 in June 2020 will be a cake walk!

Drupal 9 roadmaphttps://dri.es/drupal-7-8-and-9

Drupal 8 minor version upgrades 

With Drupal 8, we welcomed the concept of continuous innovation and new features/libraries are introduced in Minor version upgrades e.g. The recent version of Drupal 8.7 came with the new and improved layout builder, media library, workflow, etc. Read more about Drupal 8.7 here. 

Drupal 9 is going to be similar to a minor version upgrade where the community will work on removing deprecated code and upgrading underlying libraries like Symfony.

Drupal 8 to Drupal 9 https://www.drupal.org/docs/9

Drupal 6 website & Drupal 7 end of life 

8,24,301 websites are currently on Drupal 6 or 7 versions. With  D7 end of life in November 2020, and extended support till 2021. Now is the time to decide the course of action for your website to thrive with optimum performance and security. In case you are still on D6, we are here to help! 

At a recent Drupal Meetup hosted by QED42, a sense of indecisiveness clouded majority of the members. Yes, everybody was excited for the new version release and what came with it. But we ended up discussing more about ‘When’ and ‘Why’ should we upgrade to Drupal 9! 

Upgrade or Wait? 

Drupal 9 will be released one year prior to Drupal 7’s end of life. Even with the extended support for D7, eventually, the community will no longer provide updates, security fixes, and enhancements. (may be available on a limited basis from select commercial vendors at a cost)

If your current website isn’t facing any issues at the moment, it tends to induce a laid back outlook. Sure your website might perform perfectly right now, but without the necessary upgrades, eventually, she will get rusty and creaky. Know more about the implications of stalling an upgrade.

Why upgrade to Drupal 8https://www.drupal.org/psa-2019-02-25

So is there any scenario in which I should wait? 

The only scenario that we can think of in which it makes sense to wait is if your organization plans to club design refresh of your website with the upgrade and if for some reason redesign is delayed (Budget, Resourcing) as re-design often comes with layout & content strategy changes. Order of execution if Redesign and upgrade don't overlap will be:

Drupal 6/7 -> Drupal 8 -> Redesign -> Re-do the layouts / content strategy in Drupal 8 or Drupal 9 --- (Rework / Inefficient)

If there are no budget or other constraints then Design Refresh is the best milestone to think about Upgrade as you can get face and tech lift in one go and also turns out to be much cheaper. 

Upgrade to Drupal 8 at Next Chance Available!

As discussed before, Drupal 9 is being continuously built on top of Drupal 8 making it backward compatible with Drupal 8. This allows for a smooth upgrade from Drupal 8 to 9 and once you are on Drupal 8, as long as you are upgrading to minor versions of Drupal 8 regularly there won’t be any major surprises from Drupal 9! Considering that, We recommend that you upgrade your Drupal 6/7 site to Drupal 8 at the next chance available because why would you want to lose out on all the benefits of Drupal 8 today if Drupal 9 upgrade is gonna be smooth and cheap?

Once you are on Drupal 8, the next question that arises is:

What do I need to prepare for Drupal 9? 

The best approach is to just keep your Drupal 8 website upgraded with the minor version as Drupal 8 minor upgrades are gradually transitioning and preparing your website for Drupal 9. Contributed modules should be regularly updated, this ensures deprecated code removal. There are a few ways to check if your site is using the deprecated code.

Drupal Deprecated Code Removal Guide

Drupal Deprecated Code Removal Guide

Still confused?

All this information may seem overwhelming and difficult to make a decision. We’ve got you covered! Reach out to us at [email protected] for a free consultation about your Migration Dilemma.

Jun 28 2019
Jun 28

Just imagine: you update content on one of your Drupal websites and content across your whole network gets automatically synchronized! That's Drupal on Blockchain in just a few words...

Say you manage a national library's infrastructure of Drupal websites. One for each one of its local branches.

Now, here's how moving all the user data stored in there from your centralized database onto a decentralized blockchain system would benefit you:
 

  • readers get to validate their own user data since there's no central entity having full (and exclusive) control over it
  • once they've updated their user data on one of the library's websites, it'll get synchronized across the entire network
  • the well-known vulnerability to errors of centralized multi-site structures gets eliminated; there's no longer a centralized database acting as a single point of failure
  • the decentralized architecture speeds up any operation that gets performed across the network
  • you'd avoid scenarios where the same reader enters his login credentials on one of the library's websites and gets asked to enter them, once again, when accessing the website of another library branch
     

And I would also add: increased transparency, lower transaction costs...

But I'd better dive into more details on how Blockchain and Drupal can work together and how you can benefit from the decentralized architecture that they'd put together:
 

1. Blockchain: What You Need to Know About Its Potential

But first, here's Blockchain in plain words:

A decentralized shared system where multiple participants store their data, interact directly with each other, manage and keeping a record of their transactions.

How is it different from the “old” way of managing transactions across a network?
 

  • there's no more a centralized database for storing data and transactions; participants (nodes) store it among themselves
  • … this grants them total control over their own data/created content
  • users involved in a blockchain network get to interact with one another freely, with no need of a third-party as an intermediary
  • it establishes a system of rule-based transactions
  • each transaction — editing, deleting content, etc. — gets documented
  • it enhances communication between nodes/participants
  • transactions get carried out at higher speed and, implicitly, with fewer costs
  • with no central entity as a unique storage source, there's no single source of failure anymore
  • enhanced transparency
     

In short: blockchain enables you to set up a secure and immutable architecture for your network.
 

2. Blockchain and a New Content Distribution Model

“Transparency” is the keyword here. Decentralizing a content distribution platform would benefit both content creators and content consumers:
 

  • digital publishers become the only ones allowed to update or delete their own content
  • consumers pay producers directly for the content they consume (written content, songs, videos etc.)
     

This way: content creators get full control over their own content — there's no platform owner who could remove it to his/her liking — and get paid fairly and in real-time, for each piece of content that gets “consumed”.
 

3. Drupal on Blockchain: Why, How, and With What Costs?

Why would you want to decentralize your CMS — in this case, Drupal — and store your data on Blockchain? 

To answer your question, let me highlight just a few of the inconveniences of managing your content on a centralized Drupal database:
 

  • each transaction is explicit and irreversible
  • it poses a higher vulnerability to errors
  • multiple-user functionality can turn out to be a serious dread
  • the centralized database acts as a single point of failure: if something crashes in there, the whole system is at risk
  • updating content in your database doesn't automatically update it across your entire network of Drupal websites...
     

And how would the 2 technologies work together? Considering the fundamental differences between them:
 

  • Drupal uses a centralized architecture to manage content
  • Blockchain uses a decentralized, middleman-free workflow based on a verification element
     

Before I try to answer your legitimate question, let me ask you this:

Do you seize any similarity between Drupal's “open data” phylosophy and Blockchain's “decentralized data” principle?

Now, here's how your hypothetical “Drupal on Blockchain” architecture would look like:
 

  • it'd be a much more secure, decentralized structure (you'd remove the single point of failure, remember?)
  • since a blockchain workflow would use an immutable validation of data, it'll act as a guarantee that no content can get modified by other than its creator/distributor
  • user data/content would be easily accessible across the entire infrastructure (take the example of an enterprise-level business, running a multi-site Drupal network)
  • … and it'd synchronize in real-time across all your Drupal instances, as well...
  • transactions performed within this architecture would be rule-based: every single content update or removal will get documented
     

“But at what costs?” you might ask. What compromises would you need to make to run Drupal on Blockchain? 

What challenges should you get prepared for?

Here are 2 potential “dares” to ponder upon:
 

  • first of all, integrating your current Drupal data into a blockchain system won't be quite a “piece of cake”
  • secondly, getting the consensus of all the participants (say users whose data would be easily accessible network-wide) is also a serious issue to consider
     

4. Drupal Development Efforts in this Direction: The Blockchain Module

This duo — Drupal and Blockchain — has generated quite a lot of talk these years. And quite a handful of promising initiatives and even prototypes have been presented (integrations with Etherium and bitcoin...)

From all these initiatives of the Drupal community, I've decided to put the spotlight onto the Blockchain module (not yet covered by Drupal's privacy policy).

Take it as a “scaffolding” to support your future “Drupal on Blockchain” architectures. It provides the functionality you need to:
 

  • set up your Drupal installations as blockchain nodes; ”nodes” that are independent, meaning they can get configured independently
  • ensure that your newly set up nodes are compatible with each other
     

The END!

This is the “why, how and at what costs” of this topic. One which has been on the lips (and on the Drupalcon slides) of members of the Drupal community for quite a while now.

What do you think?

Would such a decentralized Drupal on Blockchain architecture suit your own project's needs and constraints? Would you trade your central point of storage for the convenience of automated content synchronization?


Photo by Clint Adair on Unsplash

Jun 28 2019
Jun 28

Agiledrop is highlighting active Drupal community members through a series of interviews. Now you get a chance to learn more about the people behind Drupal projects.

For this week's interview, we spoke with Cindy McCourt, consultant at IDCM Innovations, Drupal trainer, and author and co-author of several books ranging from Drupal to fantasy fiction. Give it a read to see what drew her to Drupal and why she thinks it'll continue to be a great solution to site builders' and developers' needs.

1. Please tell us a little about yourself. How do you participate in the Drupal community and what do you do professionally?

Professionally, my passion is empowering future site owners to understand their options for creating a Drupal site. Then, if I can’t be in on the front end, I help site owners learn how to use their new site. The books I have authored and co-authored on Drupal reflect my desire to help as well. 

As for the community, I do what others do. I give back using my skill sets. Coders give code. I am a builder, so I teach people how to build sites with Drupal as part of the Drupal Global Training Days

2. When did you first come across Drupal? What convinced you to stay, the software or the community, and why?

I discovered Drupal 4.5 when performing an open source content management system review for a client. Of the 20+ systems that I reviewed fourteen years ago, I chose Drupal for my own use. I felt that Drupal offered what I like to call a data management system, versus a page management system. I liked where Drupal was going with this idea and haven't been disappointed. 

3. What impact has Drupal made on you? Is there a particular moment you remember?

When I found Drupal, I walked away from HTML pages and Dreamweaver. I’ve never been one that looks for the opportunity to code. It’s just not my thing. I like tools that help me get a job done. 

For example, if you've ever managed hundreds or thousands of HTML pages, like I have, you know that code and content reuse is required if you want to be efficient. Drupal offers that.

Also, if you have ever built an online data management system, you know the power of databases and what's required to integrate web pages and said database (even if coding is fun). So, to have that done for you, for free? To me, selecting Drupal is a no-brainer. 

As for a moment in time that I remember, the day I installed Drupal on my server to test it for my client. That was a game changer for me, as you can guess from my comments. Today's version of Drupal might be light years from D4.5, but even back then Drupal's concepts were where websites needed to be.

4. How do you explain what Drupal is to other, non-Drupal people?

"Drupal is an open source content management system used to build websites and online applications." I assume I heard this somewhere from someone, or something similar. Anyway, I usually get nods of understanding with that statement. 

If someone is interested in knowing more, I let them guide the discussion based on their needs. Given I can fill many pages of a book, I can also go on and on about several aspects of Drupal if you let me.

5. How did you see Drupal evolving over the years? What do you think the future will bring?

Like I mentioned before, I saw Drupal as a data management system and over the years, it has exceeded my expectations. Nothing has happened to make me believe that Drupal will not continue to provide site builders with the micro tools needed to create what they need.

6. What are some of the contributions to open source code or to the community that you are most proud of?

Compared to the actual coders in the community who enabled Drupal’s success, I have nothing to brag about. I do my best to submit observations when I see something wrong. I try to be respectful when asking for help. And, when I teach Drupal classes, I speak firmly on the fact that there is no room for curt and disrespectful behavior when communicating with the community. Drupal is free because a lot of really smart people have contributed their time and know-how to make it so. They didn't have to.

7. Is there anything else that excites you beyond Drupal? Either a new technology or a personal endeavor. 

I am talking with a developer colleague and friend about writing a Drupal 9 how-to book. 

If we can come up with something fresh, it will be a combination of a planning and click instruction book with insights based on the 20+ cumulative years of experience between the two of us. The development approach being used as Drupal moves towards D9 offers us a chance to plan now for next year.
 

Jun 28 2019
Jun 28

Acquia is growing its presence in the Asia-Pacific region with a new Pune, India office.

This week, Acquia announced the opening of its new office in Pune, India, which extends our presence in the Asia Pacific region. In addition to Pune, we already have offices in Australia and Japan.

I've made several trips to India in recent years, and have experienced not only Drupal's fast growth, but also the contagious excitement and passion for Drupal from the people I've met there.

While I wasn't able to personally attend the opening of our new office, I'm looking forward to visiting the Pune office soon.

For now, here are a few pictures from our grand opening celebration:

Acquians at the opening of the Pune, India officeAcquians at the opening of the Pune, India officeAcquians at the opening of the Pune, India office

June 28, 2019

27 sec read time

db db
Jun 27 2019
Jun 27

Drupal Association appoints Executive Director

We announced on April 30, 2019 that Heather Rocker has been selected as the next Drupal Association Executive Director.

Heather Rocker joins the Drupal Association with a strong history of leadership in technology and the nonprofit world. She was the first executive director of the Women in Technology Foundation, as well as the CEO of Girls Incorporated of Greater Atlanta. Most recently she acted as the Managing Principal of Systems Evolution, Inc. in Atlanta, Georgia. She also serves as Immediate Past-President of the Board of Directors of Georgia FIRST Robotics.

GitLab phase 1 Completed!

For the past 18 months, interoperability between the current Git infrastructure and migration to GitLab was a much larger effort than expected.  With several challenges: optimization of project syncing, disaster recovery, replication, high availability, and phasing out our old Git servers, to name a few. Each member of the Engineering Team has put a lot of time and effort in testing and addressing these challenges. We thank GitLab, The Drupal Association Engineering Team, and Partners for helping us achieve this launch date.

I hope you are excited as we are in achieving this milestone. 

The goals of phase 1 were to:

●      Transparently replace Drupal’s current underlying Git infrastructure (as part of this migration git.drupal.org’s SSH host key will change) for: repository hosting, maintainer permissions, code viewing with GitLab repositories, GitLab roles and permissions for maintainers, and the GitLab code viewing UI.

●      Enable inline code editing for project maintainers.

●      To unblock allowing pull requests, inline code editing for all contributors, and more in phase 2.

Read more about the Drupal Association partnership with GitLab at:  https://www.drupal.org/drupalorg/blog/developer-tools-initiative-part-5-gitlab-partnership

Please feel free to review our FAQs about GitLab at:  https://www.drupal.org/drupalorg/docs/gitlab-integration/gitlab-frequently-asked-questions

If you have questions, please join us in Drupal Slack on channel #gitlab.

Beginning of Gitlab Phase 2

This phase is focused on:  enabling merge requests, inline code editing, and web-based code review.  Phase 2 will enable benefits to developer velocity and collaboration:

●      By adding merge requests, contributing to Drupal will become much more familiar to the broad audience of open source contributors who've learned their skills in the post-patch era.

●      By adding inline editing and web-based code review, it will be much easier to make quick contributions. This not only lowers the barrier to contribution for people new to our community, it also saves significant effort for our existing community members, as they'll no longer need to clone work locally and generate patches.

●      Finally, by creating a tight integration between the Drupal.org issue queues and GitLab's development tools, we'll be able to transition to this new toolset without disrupting the community's existing way of collaborating.

The Engineering team and our partners are currently evaluating the timeline for Phase 2 and will update our issue tracker once it’s established.

Drupal Steward Program

The program will focus on protection that closes the gap between security releases and site updates. The Security Team and the Drupal Association have been developing this program for over a year.

The goals are:

●      Provide a new service to the Drupal community, from small site owners to enterprise-scale end users, to protect their sites in the gap from security release to the time it takes them to patch.

●      Create a new model for sustainability for the Security Team, generating funding that 1) covers the operating costs of the program 2) can support security team operations and 3) can support additional Drupal Association programs.

Drupal Steward will offer sites a form of mitigation through the implementation of web application firewall rules to prevent mass exploitation of some highly critical vulnerabilities (not all highly critical vulnerabilities can be protected in this fashion, but a good many can be—this method would have worked for SA-CORE-2018-002 for example).

It will come in three versions:

●      Community version - for small sites, low-budget organizations, and nonprofits, we will offer a community tier, sold directly by the DA. This will be effectively at cost.

●      Self-hosted version - for sites that are too large for the community tier but not hosted by our vendor partners.

●      Partner version - For sites that are hosted on vetted Drupal platform providers, who have demonstrated a commitment of contribution to the project in general and the Security Team in particular, protection will be available directly through these partners.

We will announce more details of the program over the coming weeks and months as we get it up and running.

If you are a hosting company and are interested in providing this service to your customers, please reach out to us at [email protected].


Updates to Drupal.org metrics and visualizations

Please visit our new graphical display of project usage information at:  https://www.drupal.org/project/usage/drupal. The usage graph now displays a stacked chart by version. In the long term, we have plans to revise how our usage data is tabulated to provide more accurate and useful data. 

Changes in credit attribution

We have made available by default giving commenters credit attribution as we believe comments are an important part of the development process. Although we deployed this successfully, we had to roll this back so we can refine our guidelines a bit. For now this issue is in backlog and expect to have our guidelines by the end of the year.

Introducing Community Group Sections in the Community Portal

/Community has been expanded to include more targeted sections upon landing at the /Community page. We’ve defined these sections in groups. We also have a framework that will enable these groups to tell us:

  • Who they are
  • What they do
  • How they work
  • Their latest updates
  • How you can get involved

Some of the early adopters that are now posted are:

Each section will have “standard” home page content, detailing the info above, as many content pages as the group can muster, and a blog that will go on to Drupal Planet.

Drupal 7 Extended Support - request for partners

With the upcoming release of Drupal 9 in June 2020, it's time to start thinking about migration. Drupal 7 will be supported through November 2021, but after that any end-users who haven't yet updated will want to partner with a Drupal 7 Extended Support vendor.

The Drupal Security Working Group is accepting applications for vendors who want to be part of the extended support program.

A renewed push on the Composer Initiative

At DrupalCon Seattle there was also renewed interest in the Composer Initiative—this initiative seeks to rationalize the way that Composer is used in Core, to make it easier to manage sites using Composer, and also to make it easier for sites set up using a non-Composer method to be converted to using Composer, something increasingly important as contributed modules add Composer dependencies.

———

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:

  • Srijan - Renewing Signature Supporting Partner
  • FFW - Renewing Signature Supporting Partner
  • Sixeleven - Renewing Signature Supporting Partner
  • Acquia - Renewing Signature Hosting Supporter
  • Nexcess.net - *NEW* Signature Hosting Supporter
  • Specbee - *NEW* Premium Supporting Partner
  • EPAM - Renewing Premium Supporting Partner
  • Elevated Third - Renewing Premium Supporting Partner
  • publicplan - Renewing Premium Supporting Partner
  • CI&T - Renewing Premium Supporting Partner
  • Capgemini - Renewing Premium Supporting Partner
  • Zoocha - Renewing Premium Supporting Partner
  • 1XInternet - Renewing Premium Supporting Partner
  • Message Agency - Renewing Premium Supporting Partner
  • Lullabot - Renewing Premium Supporting Partner
  • Aten - Renewing Premium Supporting Partner
  • Contegix - Renewing Premium Hosting Supporter
  • Platform.sh - Renewing Premium Hosting Supporter
  • Contegix - Renewing Premium Hosting Supporter
  • KWALL - Renewing Classic Supporting Partner
  • ANNAI - Renewing Classic Supporting Partner
  • Softescu - Renewing Classic Supporting Partner
  • SymSoft - Renewing Classic Supporting Partner
  • Vardot - Renewing Classic Supporting Partner
  • Forum One - Renewing Classic Supporting Partner
  • Berger Schmidt - Renewing Classic Supporting Partner
  • Catalyst IT - Renewing Classic Supporting Partner
  • Old Moon Digital - *NEW* Classic Supporting Partner
  • AddWeb Solution - *NEW* Classic Supporting Partner
  • Urban Insight - *NEW* Classic Supporting Partner
  • Asentech - *NEW* Classic Supporting Partner
  • One Shoe - Renewing Classic Supporting Partner
  • Hook 42 - *NEW* Classic Supporting Partner
  • Electric Citizen - Renewing Classic Supporting Partner
  • Beaconfire RED - Renewing Classic Supporting Partner
  • University Of Virginia - *NEW* Classic Supporting Partner
  • Bear Group - *NEW* Classic Supporting Partner
  • Dropsolid - *NEW* Classic Supporting Partner
  • ezCompany - *NEW* Classic Supporting Partner
  • Spry Digital - Renewing Classic Supporting Partner
  • Perpetuum - *NEW* Classic Supporting Partner
  • Factorial - Renewing Classic Supporting Partner
  • Acro Media - Renewing Classic Supporting Partner
  • Third & Grove - Renewing Classic Supporting Partner
  • Digital Circus - Renewing Classic Supporting Partner
  • Bounteous - Renewing Classic Supporting Partner
  • Cybage - Renewing Classic Supporting Partner
  • QED42 - Renewing Classic Supporting Partner
  • Digitalist Group - *NEW* Classic Supporting Partner
  • Red Crackle - *NEW* Classic Supporting Partner
  • SeeD - Renewing Classic Supporting Partner
  • Last Call - Renewing Classic Supporting Partner
  • CivicActions - Renewing Classic Supporting Partner
  • Morpht - Renewing Classic Supporting Partner
  • Tata Consultancy Services - Renewing Classic Supporting Partner
  • Wunder - Renewing Classic Supporting Partner
  • Promet Source - Renewing Classic Supporting Partner
  • Unleashed Technologies - Renewing Classic Supporting Partner
  • Digital Echidna - Renewing Classic Supporting Partner
  • Evolving Web - Renewing Classic Supporting Partner
  • Adapt - Renewing Classic Supporting Partner
  • Microserve - Renewing Classic Supporting Partner
  • ImageX - Renewing Classic Supporting Partner
  • Therefore - Renewing Classic Supporting Partner
  • Sevaa Group - Renewing Classic Hosting Supporter
  • DRUD - Renewing Classic Hosting Supporter
  • Smartling - Renewing Classic Technology Supporter

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

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

Jun 27 2019
Jun 27

8 already provides the necessary configuration files and PHP plugins to migrate files from Drupal 6. But if you are using the Drupal 8 core media module for your files you need to add a second migration.

I assume that you are doing a Drupal 8 migration using the migrate tools and migrate plus modules.

File migration

Copy /core/modules/file/migrations/d6_file.yml to config/install/migrate_plus.migration.d6_file.yml in your custom module and set the source file path:

# Every migration that references a file by Drupal 6 fid should specify this
# migration as an optional dependency.
id: d6_file
label: Public files
audit: true
migration_group: d6
migration_tags:
  - Drupal 6
  - Content
source:
  plugin: d6_file
  constants:
    # The tool configuring this migration must set source_base_path. It
    # represents the fully qualified path relative to which URIs in the files
    # table are specified, and must end with a /. See source_full_path
    # configuration in this migration's process pipeline as an example.
    source_base_path: '/path/to/drupal6/files/to/migrate'
...

Drupal 8 refuses to install a module whose configuration has already been imported. To avoid such error add a dependency on your custom module to the migration file. If you uninstall the module, Drupal 8 will also remove the configuration:

dependencies:
  enforced:
    module:
      - custom_migrate_module

Media entity migration

Copy /core/modules/file/migrations/d6_file.yml to config/install/migrate_plus.migration.d6_media_entity.yml in your custom module.

Change plugin id and label, process and destination configuration in order to create media entities:

Before (excerpt)

id: d6_file
label: Public files
...
process:
    # If you are using both this migration and d6_user_picture_file in a custom
    # migration and executing migrations incrementally, it is strongly
    # recommended that you remove the fid mapping to avoid potential ID
    # conflicts. For that reason, this mapping is commented out by default.
    # fid: fid
  filename: filename
  source_full_path:
    -
      plugin: concat
      delimiter: /
      source:
        - constants/source_base_path
        - filepath
    -
      plugin: urlencode
  destination_full_path:
    plugin: file_uri
    source:
      - filepath
      - file_directory_path
      - temp_directory_path
      - is_public
  uri:
    plugin: file_copy
    source:
      - '@source_full_path'
      - '@destination_full_path'
  filemime: filemime
  # No need to migrate filesize, it is computed when file entities are saved.
  # filesize: filesize
  status: status
  changed: timestamp
  uid: uid
destination:
  plugin: entity:file

After (excerpt)

id: d6_media_entity
label: Media entities
migration_group: d6
...
process:
  langcode:
    plugin: default_value
    default_value: 'en'
  field_media_file/target_id:
    plugin: migration_lookup
    migration: d6_file
    source: fid
  field_media_file/display:
    plugin: default_value
    default_value: 0
  field_media_file/description:
    plugin: default_value
    default_value: ''
  status: status
  changed: timestamp
  uid:
    plugin: migration_lookup
    migration: d6_user
    source: uid
destination:
  plugin: entity:media
  default_bundle: file

Or if you migrate images:

id: d6_media_entity
label: Media entities
migration_group: d6
...
process:
  langcode:
    plugin: default_value
    default_value: 'en'
  field_media_image/target_id:
    plugin: migration_lookup
    migration: d6_file
    source: fid
  field_media_image/alt: filename
  field_media_image/title:
    plugin: default_value
    default_value: ''
  status: status
  changed: timestamp
  uid:
    plugin: migration_lookup
    migration: d6_user
    source: uid
destination:
  plugin: entity:media
  default_bundle: image

At last, add the migration dependencies to config/install/migrate_plus.migration.d6_media_entity.yml:

migration_dependencies:
  required:
    - d6_user
    - d6_file
dependencies:
  enforced:
    module:
      - custom_migrate_module

Running these 2 migrations will copy your files from the Drupal 6 to the Drupal 8 file directory and create a media entity for each of them.

Assign media entities to nodes

In order to assign media entities to media fields on nodes, you have to assign the media entity id (instead of the file id) to the field, e.g.:

id: d6_node
label: Nodes
audit: true
migration_group: d6
migration_tags:
  - Drupal 6
  - Content
deriver: Drupal\node\Plugin\migrate\D6NodeDeriver
source:
  plugin: d6_node
process:
  field_media:
    plugin: sub_process
    source: uploads
    process:
      target_id:
        plugin: migration_lookup
        migration: d6_media_entity
        source: fid
        no_stub: true
      display: list
      description: description
...
destination:
  plugin: entity:node

You may have to create a custom source plugin in order to retrieve the id of the file that is attached to a node.

Jun 26 2019
Jun 26

Design System artifacts go by many names - Living Style Guides, Pattern Libraries, UI Libraries, and just plain Design Systems. The core idea is to give digital teams greater flexibility and control over their website. Instead of having to decide exactly what all pages should look like in one big redesign and then sticking with those templates until the next redesign, a design system gives you a “lego box” of components the team can use to create consistent, beautiful interfaces. Component-based design is how you SCALE.

At Palantir we build content management systems, so we’ve named our design system artifact a “style guide” in a nod to the editorial space.

Our style guides are organized into three sections:

  1. 'Design Elements' which are the very basic building blocks for the website.
  2. 'Components' which combine design elements into working pieces of code that serve a defined purpose.
  3. 'Page Templates' which combine the elements and components into page templates that are used to display the content at destination URLs.

But how do we help our clients determine what the list of elements, components and page templates should be?

How to Identify Elements for Your Design System

In this post I’ll walk through how we worked with the University of Miami Health System to create a style guide that enabled the marketing team to build a consistent, branded experience for a system with 1,200 doctors and scientists, three primary locations, and multiple local clinics.

1. Start by generating a list of your most important types of content.

Why are people coming to your site? What content helps them complete the task they are there to do? This content list is ground zero for component ideation: how can design support and elevate the information your site delivers?

Table of content types

The list of content serving user needs is your starting point for components. In addition, we can use this list to identify a few page templates right off the bat:

  • Home page
  • Treatment landing page
  • Search page
  • Listing page: Search results, news, classes
  • Clinical trials landing page
  • Clinical trial detail page
  • Location landing page
  • Appointment landing page
  • Appointment detail page
  • Basic page (About us, contact us, general information)

This is just the start of the UHealth style guide; we ultimately created about 80 components and 17 page templates. But it gives you a sense of how we tackled the challenge!

2. Sort your list of important types of content into groups by similarities.

Visitors should be able to scan your website for the information they need, and distinctive component designs help them differentiate content without having to read every word. In addition, being rigorous about consistently using components for specific kinds of information creates predictable interfaces, and predictable interfaces are easy for your visitors to use.

In this step, you should audit the design and photo assets you have available now, and assess your capacity to create them going forward. If, for example, you have a limited photo library and no graphic artist on staff, you’ll want to choose a set of components that don’t heavily rely on photos and graphics.

Component example for UHealth site

In this example, we have three component types: News, Events/Classes, and a Simple Success story.

  1. News Component: This component has no images. This is largely about content management; UHealth publishes a lot of news, and they didn’t want to create a bottleneck in their publishing schedule by requiring each story to have a digital-ready photo.
  2. Events/Classes Component: This component has an option for images or a pattern. Because UHealth wants visitors to take action on this content by signing up, we wanted these to have an eye-catching image. Requiring a photo introduces a potential bottleneck in publishing, so we also gave them the option to make the image a pattern or graphic.
  3. Simple success story: This is the most visually complex component because successful health narratives are an important element of UHealth’s content strategy. We were able to create a complex component here because there’s a smaller number of success stories compared to news stories or classes and events. That means the marketing team can dedicate significant time and resources to making the content for this component as effective as possible.

3. Now that you’ve sorted your list by content, do a cross-check for functionality.

Unlike paper publications, websites are built to enable actions like searching, subscribing, and making appointments. Your component set should include interfaces for your functionality.

Some simple and common functions for the UHealth site included searching for a treatment by letter, map blocks, and step forms.

In a more complex example, the Sylvester Cancer Center included a dynamic “Find a lab” functionality that was powered by a database. We designed the template around the limitations of the data set powering the feature, rather than ideating the ideal interface. Search is another feature that benefits from planning during the design phase.

For example, these components for a side bar location search and a full screen location search require carefully structured databases to support them. The design and technical teams must be in alignment on the capacity and limits of the functionality underlying the interface.

4. Differentiate components by brand.

UHealth is an enormous health care system, and there are several centers of excellence within the system that have their own logos and distinct content strategies. As a result, we created several components that were differentiated by brand.

UHealth navigation bars

In this example, you see navigation interfaces that are different by brand and language. Incorporating the differentiated logos for the core UHealth system and the Centers of Excellence is fairly straightforward. But as you can see the Sylvester Center also has three additional top nav options: Cancer treatments, Research, and For Healthcare Professionals.

That content change necessitated a different nav bar - you can see that it’s longer. We also created a component for the nav in Spanish, because sometimes in other languages you find that the menu labels are different lengths and need to be adjusted for. In this case, they didn’t, but we kept it as a reference for the site builders.

5. Review the list: can you combine any components?

Your overall goal should be creating the smallest possible set of components. Depending on the complexity and variety of your content and functionality, this might be a set of 100 components or it might be just 20. The UHealth Design System has about 80 components, and another 17 page templates.

The key is that each of the components does a specific job and is visually differentiated from components that do different jobs. You want clear visual differences that signal clear content differences to your audience, and you don’t want your web team spending time trying to parse minor differences - that’s not how you scale!

In my experience, the biggest stumbling block to creating a streamlined list of components is stakeholders asking for maximum flexibility and control. I’ve found the best way to manage this challenge is to provide stakeholders with the option to differentiate their fiefdoms through content rather than components.

UHealth component examples

In this example, we have the exact same component featuring different images, which allows for two widely different experiences. You can also enable minor differentiation within a component: maybe you can leave off a sub-head, or allow for two buttons instead of one.

6. Start building your design system and stay flexible.

The list you generated here will get you 80% of the way there, but as you proceed with designing and building your design system, you will almost certainly uncover new component needs. When you do, first double check that you can’t use an existing component. This can be a little tricky, because of course content can essentially be displayed any way you want.

At Palantir, we solve for this challenge by building our Style Guide components with real content. This approach solves for a few key challenges with building a design system:

  1. Showing the “why” of a component. Each component is designed for a specific type of content - news, classes, header, testimonial, directory, etc. This consistency is critical for scaling design: the goal is to create consistent interfaces to create ease of use for your visitors. By building our Style Guides with real content, we document the thought process behind creating a specific component.
  2. Consistency. Digital teams change and grow. We use content in our Style Guide to show your digital team how each component should be used, even if they weren’t a part of the original design process.
  3. Capturing User Testing. Some of our components, like menus, are heavily user-tested to ensure that we’re creating intuitive interfaces. By building the components with the tested content in place, we’re capturing that research and ensuring it goes forward in the design.
  4. Identifying gaps. If you’ve got a piece of content or functionality that you think needs a new component, you can check your assumptions against the Style Guide. Does the content you’re working with actually fit within an existing pattern, or is it really new? If it is, add it to the project backlog!

Outcomes

The most important takeaway here is that design systems let your web team scale. Through the use of design systems, your digital team can generate gorgeous, consistent and branded pages as new needs arise.

But don’t take our word for it! Tauffyt Aguilar, the Executive Director of Digital Solutions for Miller School of Medicine and UHealth, describes the impact of their new design system:

“One of the major improvements is Marketing’s ability to maintain and grow their site moving forward. Previously each page was designed and developed individually. The ability to create or edit pages using various elements and components of the Design System is a significant improvement in the turnaround time and efficiency for the Marketing department.”

My favorite example of a new page constructed with the UHealth design system is this gorgeous interface for the Sports Medicine Institute.

Sports Medicine homepage

The Sports Medicine audience has unique needs and interests: they are professional and amateur athletes who need to get back in the game. The UHealth team used basic components plus an attention-grabbing image to create this interface for finding experts by issue.

And ultimately, that’s Palantir’s goal: your digital team should have the tools to create gorgeous, effective websites.

Jun 26 2019
Jun 26

by David Snopek on June 26, 2019 - 11:42am

As you may know, Drupal 6 has reached End-of-Life (EOL) which means the Drupal Security Team is no longer doing Security Advisories or working on security patches for Drupal 6 core or contrib modules - but the Drupal 6 LTS vendors are and we're one of them!

Today, there is a Critical security release for the Advanced Forum 6.x-2.x module to fix an Cross Site Scripting (XSS) vulnerability.

Advanced Forum builds on and enhances Drupal's core forum module.

The module doesn't sufficiently sanitise user input in specific circumstances relating to the module's default functionality. It is not possible to disable the vulnerable functionality.

This vulnerability is mitigated by the fact that an attacker must have a role with permission to create forum content.

See the security advisory for Drupal 7 for more information.

Here you can download the Drupal 6 patch or the full release.

Note: This only affects Advanced Forum 6.x-2.x -- not 6.x-1.x.

If you have a Drupal 6 site using the Advanced Forum 6.x-2.x module, we recommend you update immediately! We have already deployed the patch for all of our Drupal 6 Long-Term Support clients. :-)

If you'd like all your Drupal 6 modules to receive security updates and have the fixes deployed the same day they're released, please check out our D6LTS plans.

Note: if you use the myDropWizard module (totally free!), you'll be alerted to these and any future security updates, and will be able to use drush to install them (even though they won't necessarily have a release on Drupal.org).

Jun 26 2019
Jun 26

Streamlining the content creation and approval processes is necessary on many websites. Editorial workflows in Drupal 8 are easy to create and manage. This is achieved by the Content Moderation and Workflows modules.

These modules are Drupal 8’s innovation — they have appeared in the core and reached stability during the time from Drupal 8.2 to Drupal 8.5. So welcome on a tour of creating and managing editorial workflows with them.

Drupal 8 editorial workflows with Content Moderation in a nutshell

By default, Drupal offers you the “Published” and “Unpublished” states for content, as well as a system of permissions for particular roles to manage it. However, with the Content Moderation and Workflows modules, the process gets much more advanced.

With them, you out-of-box have an editorial workflow that has such content states as “Draft,” “Published,” and “Archived”, as well as configurable transitions between them. Transitions look like “Publish” (move from Draft to Published), “Archive” (move from Published to Archived), and so on.

The workflow can be customized to your liking. This is achieved by adding custom content states (like “First edit”, “Second edit,” “Needs review,” “Needs work,” or any other) and creating the appropriate transitions.

An important benefit is that you can have a published version of content available to visitors, and at the same time have a working copy to review or edit. The content revisions are stored in the database.

You are also able to create multiple content workflows and apply each to a specific content type. And, of course, granular content moderation permissions are available.

Our Drupal development team will be happy to help you create the content moderation workflows to meet your organizations’ needs.

A closer look at managing editorial workflows in Drupal 8

Enabling the modules

It begins with enabling the Content Moderation and Workflows modules on the Extend tab.

  • The Workflows module provides a UI and an API for managing the states and transitions between them. The states and transitions are supplied by other modules (in our case, Content Moderation).
  • The Content Moderation module provides the content states and transitions for editorial workflows.

Enabling modules for editorial workflows in Drupal 8

As soon as the two modules are enabled, we see the built-in “Editorial” workflow in Configuration — Workflow — Workflows.

Built-in editorial workflow in Drupal 8

Managing the states and transitions

We see states and transitions listed and provided with the options to “Add a new state” and “Add a new transition.”

Managing states and transitions in Drupal 8 editorial workflows

The transitions should be named clearly, with the use of verbs. They should show from which state and to which state they lead. In this example, the “Restore to Draft” transition restores the content from Archived to Draft:

Transition between states in Drupal 8 content workflows

Applying the workflow to specific content types

Our workflow can be applied to particular content types, custom block types, or media types (the latter is true if you have the Media module enabled). So you can have different editorial workflows for articles, news, blog posts, photos, videos, and so on.

Applying Drupal 8 editorial workflows to content types

Setting content workflow permissions

It’s important to make sure that all workflow participants have the necessary permissions. This is configured on the People — Permissions tab. The appropriate roles like Author, Editor, and so on, can be created on your website according to your workflow needs.

The permissions are in the “Content Moderation” section and many of them are in the “Node” section. These both sections should be carefully looked checked.

For example, the Author should be able to create new content, edit own content, view own unpublished content, have the permission to “Create New Draft” transition, and so on. The Editor should be able to restore content from draft to publish, view any unpublished content, and so on. Both should be able to view the latest version, view revisions, and revert revisions.

Permissions for content workflows in Drupal 8

With everything configured, your editorial workflow could look, for example, like this.

  • The author creates a draft and the editor checks it and transfers it to the published state.
  • The author then suddenly decides to change something and edits this piece of content. The edited copy is saved as draft and is seen to the Author and the Editor in the “Latest version” tab of the content piece.
  • The editor reviews the content again.
  • All this time, the published version remains available all readers as before.

Let’s create an editorial workflow for your team

No matter how complex your desired workflows are, they are possible to configure with just Drupal 8 core features. Entrust our development team with creating editorial workflows for your website. Enjoy efficiency in content editing!

Jun 26 2019
Jun 26

We are proud to announce that Zürich Tourism has been chosen as this year's recipient of the annual German Brand Award in the categories of Excellence in Brand Strategy and Creation, and Brand Communication (Web and Mobile) for its work on zuerich.com -- a collaborative project with Amazee Labs and Studio Marcus Kraft.

Zürich Tourism is at the helm of the region’s national and international destination marketing.The province of Zürich receives hundreds of thousands of visitors from all corners of the world each year. The Zürich Tourism website serves a wide range of tourists from different cultural backgrounds, as well as online interests and needs. 

zuerich.com is now a central content hub within Zurich Tourism’s content marketing strategy to show the city and region at its best. Since the site was relaunched, the new website for zuerich.com has impressed visitors and users by balancing abundant content with exceptional navigation and UI.  

This project is a milestone for the client. Amazee Labs was tasked with overhauling an extensive amount of code made from multiple agencies over time. The result is a state-of-the-art Drupal CMS that allows for smooth content editing, a dynamic filter with theme pages tailored to the users with a modern CI / CD and exciting visual experience created by Studio Marcus Kraft, a Zürich-based design agency. This social content encourages and inspires people to discover Zürich and the surrounding area in ways that appeal to different kinds of visitors. 

We’d also like to thank our partners for making this project such a soaring success -- our client Zürich Tourism, for this incredible opportunity, and Studio Marcus Kraft!

To all of this year’s winners and nominees -- Congratulations!
 

Jun 26 2019
Jun 26

Drupal 9 is coming — its arrival is planned for June 2020. So while the world continues enjoying Drupal 8’s benefits, it’s also time to start getting ready for Drupal 9. What does it mean and how to prepare? We are discussing this in our blog post.

Easy upgrades to Drupal 9 as a huge bonus

All website owners and developers can enjoy an amazing bonus related to Drupal 9. Thanks to efforts from the Drupal community, upgrades from Drupal 8 to Drupal 9 are made easy! They shouldn’t take more time than trivial updates between minor versions (for example, from Drupal 8.6 to Drupal 8.7).

As Dries Buytaert wrote in his State of Drupal presentation, when sites move from Drupal 8 to Drupal 9, content is already ready and code continues to work. Amazing!

Excerpt from Dries Buytaert's State of Drupal presentation

But, as you might have noticed, there is one remark in this illustration by Dries. Easy upgrades to Drupal 9 will be available if websites are not using deprecated code. Let’s see in more detail what is means and how to fulfill this condition.

Getting ready for Drupal 9: cleaning up deprecated code

To be ready for Drupal 9, all websites should cleaned up from deprecated Drupal APIs and functions (outdated ones that have more modern alternatives).

Since Drupal core and contributed modules are maintained by their developers, there is a big chance they will take care of the cleanup. So it is necessary to keep the core and contributed modules up-to-date as part of preparation for Drupal 9. However, a good deprecation check is also highly recommended.

When it comes to custom modules and themes, developed specifically for your website, they should be properly checked for deprecations and updated.

To discover deprecated code, there are useful tools in Drupal. Among them:

What to expect from the module readiness and the amount of work needed? Dwayne McDaniel of Pantheon checked almost 7,000 most popular contributed Drupal 8 modules with the Drupal-check tool. He found that almost half of the modules had no Drupal 9 compatibility issues, while 35% had 5 issues or less.

At MidCamp 2019, issues for 300 modules were additionally opened, so the work is already being done about them. Most modules just need an easy fix. All this is stated in the Drupal 9 slides by famous Drupal contributor Gábor Hojtsy.

How Drupal contributed modules are ready for Drupal 9

Dries Buytaert also says that many deprecations are just a matter of “find and replace” and he tried this on his own website.

So don’t worry — the cleanup work as part of getting ready for Drupal 9 shouldn’t take much time. Our Drupal team is always ready to help you check and clean your website from deprecated code.

What about Drupal 7?

Drupal 7 website owners can upgrade to Drupal 8 now or wait for Drupal 9. However, the first option looks much more beneficial. See why.

If they upgrade from Drupal 7 to Drupal 8 now, they can start enjoying what Drupal 8 has to offer (and that’s a huge piece of pie — just check out the basic Drupal 8’s benefits for business). And then they will just switch to Drupal 9 in a snap of a finger. Only one big move will ever be needed.

“Once you are on the Drupal 8 track, you will never have to change tracks again,” Dries writes in the presentation, comparing migration to changing railway tracks.

As you can see from his great illustrations, the Drupal 8 track leads to Drupal 9 and then to Drupal 10 stations. At the same time, Drupal 7 and especially Drupal 6 tracks have no future ahead.

Dries Buytaert illustrating the future of Drupal versions

Dries Buytaert illustrating the future of Drupal versions

In addition, the upgrade path from Drupal 7 to Drupal 8 is very well documented, tried by most developers, as well as improved a lot recently. Useful migration modules have become stable in Drupal 8 core, so it is much easier to migrate content and configuration.

So you will definitely benefit from moving to Drupal 8, and Drudesk team is ready to help you. Change the track if you are still with Drupal 7 and get on the train to the future!

Drupal 9 is coming — entrust us with getting your site ready

Entrust our Drupal support team with preparing your website for the future. Both cleanups and migrations are Drudesk’s area of expertise. We strive to make websites better, cleaner, more modern... and ready for Drupal 9!

Jun 26 2019
Jun 26

How to Set, Get and Invalidate the caches per user in Drupal 7, this blog article will explain a brief of how to do such implementation on Drupal using the default drupal cache functions.

Here, we go with the steps

  • Initially, create the custom functions for Get, Set and Invalidate the caches per user.
  • Here, cache id per user is pretty important, where user id or user email id will used as part of cache id.
  • And these functions should be used as when required for caching the page.
  • Their will be cases like, Caches should be Invalidated on some actions for that particular user. These can be covered with these below functions.

Here's the functions which are used to Get, Set and Invalidate caches.

<?php

function _get_cache($cache_id) {
    $cache = cache_get($cache_id);
    if (isset($cache_id) && REQUEST_TIME < $cache->expire) {
        return $cache->data;
    }
    else {
        return NULL;
    }
}

function _set_cache($cache_id, $data) {
    cache_set($cache_id, $data, 'cache', REQUEST_TIME + (60 * 60));
}

function _invalidate_cache($cache_id) {
    $cache = cache_get($cache_id);
    if (isset($cache) && !empty($cache)) {
        cache_clear_all($cache->cid, 'cache');
    }
}

Here's the function where we Set the cache on page load, if at all already cache doesn't exist for this cache id.

function sample() {
    global $user;
    $cache_id = $user->uid . "_sample";
    $cache_data = _get_cache($cache_id);
    if ($cache_data == NULL) {
        $cache_data = array();
        // Here processed data should be cached
        $data = getData();
        $cache_data['data'] = $data;
        _set_cache($cache_id, $cache_data);
    }
    return $cache_data;
}

Here's the function used to Invalidate the caches, on some particular actions of the particular user.

$cache_id = $user->id . "_sample";
_globe_invalidate_cache($cache_id);

Advantages of having the caches enabled for few pages, The page load time will be reduced..

Cheers :)

Jun 26 2019
Jun 26

The Drupal 8 Pager module provides simple pager navigation in a block to ease up the navigation between nodes of the same content type or between nodes with a common taxonomy tag.

This tutorial will explain the usage of this module with an example. Let’s start!

Step #1. - Download and enable the module

  • Open your terminal application and go to the root of your Drupal installation (where the composer.json file is located)
  • Type:

composer require drupal/pager

Use this command

  • Click Extend
  • Scroll down to the Pager module and check it
  • Click Install

Click Install

No further modules are required.

Step #2. - Create Content

For the purpose of this tutorial, you are going to create six content pieces by the Article type. Each one of these articles will describe a country in Europe. Three of these countries will have the taxonomy term Central Europe, whereas the other three will have the taxonomy term Southern Europe.

Title Body Image Tags Spain Your text Country Flag Southern Europe Italy Your text Country Flag Southern Europe France Your text Country Flag Central Europe Netherlands Your text Country Flag Central Europe


Click Save each time you create an article

  • Click Save each time you create an article, in order to create the next one

Content created and listed

Step #3. - Place the Pager Block

  • Click Structure > Block Layout
  • Scroll down to the Content section
  • Click Place block.

Click Place block

  • Use the search box to look for the Pager block
  • Click Place block.

Click Place block one again

  • Change the “Previous” and “Next” texts
  • Leave the default Image field and image style.

Leave the default Image field and image style

  • Choose the theme template pager--block.html.twig
  • Select the Article content type
  • Check both taxonomy terms
  • Leave the default direction
  • Make sure you leave the Maintain term checkbox unchecked.

Make sure you leave the <i>Maintain term</i> checkbox unchecked

  • Leave the default End Behavior
  • Click Save Block.

Leave the default End Behavior. Click Save Block

Head over to one of your articles. You will see the pager at the bottom of the Content region. If you notice, the pager does not make any difference between the nodes with the taxonomy term Central Europe and the ones with the taxonomy term Southern Europe.

You will see the pager at the bottom of the Content region

In order to paginate over articles with a common taxonomy term, it is necessary to check the Maintain term option within the block configuration.

  • Click Structure > Block layout
  • Scroll down to the Pager block and click Configure
  • Look for the Maintain term option and check it
  • Scroll down and click Save block.

Scroll down and click Save block

Go back to your site and you will be able only to paginate across articles with one particular taxonomy term. In the case of Germany for example, you will be only able to paginate over the other two nodes with the tag Central Europe.

Go back to your site and you will be able only to paginate across articles with one particular taxonomy term

In order to change the appearance of the pager, configure the block once again and select the other theme template (pager--wings.html.twig).

Configure the block once again

Check your site again after saving the block and you will see the other pager style. It’s up to you to adjust the CSS in order to match the pager’s style to the style of your site.

Check your site again after saving the block and you will see the other pager style

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.
Jun 25 2019
Jun 25

The Open Source CMS that Revolutionized the World

Acquia HQ and the Mayor of Boston

You may have already heard of Drupal, but for those who don't know, Drupal is an open source Content Management System. However, you might not know the history behind Drupal and the connection that it has with the SaaS company, Acquia. Well, in this blog post, I’m going to tell you the history behind the biggest open source Content Management System and the role it played in the founding of Acquia.

Drupal History

Dries Buytaert in his student days. Photo credit.

It all started in the year 2000 when Dries Buytaert and Hans Snijder, which at the time were students at the University of Antwerp, needed an internet connection, which was quite seldom found back in the days. This resulted in them both building a wireless bridge between their dorms. On top of that, they had a need for a place to also talk. This led Dries Buytaert to start a small news website with a chat board for him and his friends to be able to meet, publish and share the news.

The software that was built in the process remained unnamed until Dries had graduated. However, after his graduation, he put the website online, because he wanted to stay in touch with his friends. He originally wanted to name the domain to dorp.org.  The word "dorp" translates to "village" in dutch. However, Dries had misspelled the word "dorp" to "drop" and he chose to leave it like that. After a while, the website began to attract new members that would discuss topics on new technologies and ideas.

In January of 2001, Dries had decided that he wanted to release the software at the core of the website, for other people to be able to use it. So, it started as an open source project. The name of the software was derived from the English pronunciation of the Dutch word “Druppel”, which means “drop”. On top of that, the software was in need of a logo. For this task, Kristjan Jansen and Steven Wittens had stylized a water droplet with eyes, curved nose and a smile.

pA00 : 08 / 02 : 06O

Video showing one of the earliest Drupal Camps, New York City 2006. Unmute (bottom left) this video to get the full experience.

Drupal 1.0

The first release version was Drupal 1.0, which was built using Slash, a modular CMS, and Scoop. It was released on the 15th of January 2001. At first, there were 18 core modules, which were basically a set of PHP files containing a set of routines. Everything was accessed through PHP files due to the lack of a menu. On top of that, at first, the code had to be put into one of the seven hooks of the modules. The system was built from the beginning to be modular. This lets people adapt their websites to their needs. The system is depending on SQL in order to manage and change layout, themes and content.

Drupal 2.0

Just after two months on the 15th March 2001 Drupal 2.0 was released. This version added a translation feature that made it possible for users to translate their website into another language. On top of that, it also provided a framework that supported multilingual websites. It had 22 core modules and added user ratings and sections for stories.

Drupal 3.0

On 15th September 2001, Drupal 3.0 was released. The primary difference between this version and its predecessors is that it used nodes instead of pages. Meaning that every form of content was managed by a node from the node module. On top of that, this version reached 26 core modules.

Drupal 4.0

Video showing Drupal 4 with the (in)famous book module. 

It was released on the 15th of June 2002. At this point, there were already 100 websites that were operating on Drupal. This made Drupal truly an international open source project. A notable addition to this version was the taxonomy module which replaces the attributes and meta tags. On later versions, there were added a lot of new modules including the e-commerce module and the support for a profile module or theme template that facilitated an early version of the What You See Is What You Get. Right now, Drupal was starting to look like a truly enterprise CMS.

Drupal 5.0

On the 6th birthday of Drupal on 15th January 2007, Drupal 5.0 was released. What made this release stand apart from the others was the fact that it supported jQuery. jQuery is a JavaScript library that makes HTML scripting easier than the previous versions. Another feature that was added was the support for distributions of pre-created Drupal packages. These could be customized to the liking of the user. On top of that, modules were moved to their own folder which made it easier to install and uninstall them. The site load speeds were also improved by making use of a CSS preprocessor that migrated cacheable stylesheets into a single compressed folder.

Drupal 6.0

The 6.0 version was released on 13th February 2008. One major step for Drupal was that the Whitehouse has adopted Drupal as their website managing CMS. One notable improvement was the rewriting of the menu system from scratch, which makes it a lot easier to use. On top of that, users were now able to drag-and-drop a number of features such a blocks and taxonomy vocabularies and terms. Moreover, the language system was modified so it could handle right-to-left languages. Security was also improved by providing an Update Status module that automatically checks for new updates.

Drupal 7.0

Video showing Drupal 7 and its clear improvements in user experience

It was released on the 5th of January 2011. Drupal was used to build simple blogs and websites of large corporations, essentially becoming trustworthy worldwide. This version of Drupal also had a couple of improvements. First of all, nodes were no longer dependent on modules, as they could interact with any node at runtime, meaning that everything became an independent entity. On top of that, this version added a queue API and an improved jQuery usage. This made it possible for everything to be associated with web apps.

Drupal 8.0

The current version of the CMS was officially released on 15th November 2015. The previous generations did manage to accomplish a big deal, however, this version is sure to bring even bigger changes. Drupal 8 was a complete rewrite of Drupal 7, this time based on a PHP framework called Symfony. Notable new features that were added are enhanced multilingual features, Views in core, a new level of web accessibility, improved theming with Twig, modern PHP, Symfony and OOP (Object Oriented Programming) adoption amongst others. Another notable feature is the new in-line editing. However, not as powerful and intuitive as our own in-line editing tool, Glazed Builder, which is based on Drupal. Here you can try our more elaborate inline editing experience for free!

Glazed Builder: Our Drupal UX add-on solution

While Drupal made strides in improving its core components' user experience, Sooperthemes created a commercial add-on solution that takes Drupal to the next level. With our 10+ years experience in Drupal theming, we decided to concentrate our resources on developing a new Drupal experience for authors, marketers, and site builders. Here is a short demo of what our our Glazed Builder product can add to your Drupal website:

pA00 : 32 / 02 : 17O

Video showing our Drupal UX solution Glazed Builder. This blog post was also created with Glazed Builder and without our tool we couldn't have created this video-enhanced story-telling experience.

Acquia

When Drupal was gaining momentum in 2007, Dries Buytaert saw that in order to be able to deliver the best support for large organizations, a dedicated company was needed. However, he was still hesitant, since, at that time, he was dedicated to finishing his Ph.D. This all changes when Jay Batson introduces himself to Dries at the Sunnyvale DrupalCon. Jay dreaming of opening a company that was focused on providing support and supplementary services for open source software such as Drupal and Apache Solr. After Jay persuaded Dries, they dropped Apache Solr from the equation and chose to focus on Drupal. On June 25th 2007, Jay registered the company under the name Acquia.

Although Acquia did not have an official product yet, they still received their Series A funding. This meant that Acquia was to be a significant player in the Drupal communnity, having managed to raise $7 million. For the most part of the remaining year, Acquia worked on their corporate values and products. Finally, In September 2008, Acquia has opened the doors for business. From that moment on, Dries and Jay's vision to build the universal platform for the world’s greatest digital experiences had started to materialize.

Conclusion

Drupal and Acquia both have had humble beginnings. However, with the passage of time, they have become staples for the open source community. Right now, Drupal is the third most popular Content Management System by market share. Moreover, with the ongoing trend in the market for companies to adopt or incorporate open source, Drupal still has potential to grow. In our previous blog post, you can find out why open source is our future.

Jun 25 2019
Jun 25

Joris Snoek

Digital Consultant

+31 (0)20 - 261 14 99

I would like to stay up to date on all available open source / 'contrib' Drupal modules. 'There is a module for that', this applies to many use cases within Drupal; a deadly sin to build something that already exists, or is partially available. We keep track of the latest module releases every month, including what we noticed about module updates in the past month:

1. Clientside Validation

The Form API from Drupal is very comprehensive: neatly building, formatting and developing forms, in the broadest sense of the word, are interwoven into the system. There is no clientside validation as standard, simply put: that as soon as a visitor enters a 'form element' (for example his first name), that field is immediately validated. And not just after clicking on the 'Save' button.

https://www.drupal.org/project/clientside_validation

2. Forms Steps

Giving enough attention to forms on your website is essential; these are often a conversion point and you want nothing to stand in the way. A multi-step form can increase your conversion rate by 300%. With this module you can easily create such a form in Drupal.

https://www.drupal.org/project/forms_steps

3. Better Search Block

You can make the standard Drupal search box beautiful by overriding using Twig templates. But if you want a less technical approach, this module could help: it offers some configuration options such as:

  • Making some layout elements adjustable
  • Making the placeholder text adjustable
  • Mini animations as soon as a visitor clicks in the box.

https://www.drupal.org/project/better_search

4. Multiple Registration

A powerful permissions and roles system is embedded in the Drupal core, but offers only one registration page for website visitors as standard. If you want different registration pages on your website, for different roles (for example, customers and suppliers), give this module a try.

https://www.drupal.org/project/multiple_registration

5. Simple XML sitemap

An XML sitemap is essential for your website SEO. There are several Drupal modules that generate this XML sitemap for you, but this one seems to be the most popular with nearly 45,000 installs. This also supports the latest Google standards, regarding multilingual content.
Googlebots will thank you later.

https://www.drupal.org/project/simple_sitemap

6. Advanced Text Formatter

Within the Drupal core you can set according to which View mode an entered text field can be shown to the website visitor, for example 'default', 'teaser' or 'trimmed'. If you want more control over the way in which the entered text is displayed, install this module so that you can configure by field:

  • Automatically cut text on a certain number of characters.
  • Adding an ellipsis (...) as soon as a sentence is truncated.
  • Always cancel on whole word.
  • Tokens for adding automatically dynamic information.
  • Allow certain html tags.
  • Apply specific Text Format.

https://www.drupal.org/project/advanced_text_formatter

7. Menu Item Extras

Do you want to add extra fields to menu items? Install this popular module. You can see it as 'Fieldable menus', so you can store and display all kinds of extra information with a menu item.

https://www.drupal.org/project/menu_item_extras

8. Visitors

Don't want to give away all your data to Google? Or do you run Drupal as a social intranet with private data? Then you can install this module to generate statistics. It gives reports about the visitors to your website, in diagrams and other textual statistics. Some of the available reports:

  • Pages that have recently been visited
  • Pages that are often visited
  • Page visitors per month / week / day
  • Total number of visitors
  • Number of unique visitors
  • Number of registered users
  • Visitors by country, city
  • Number of visits per page per city

For the complete list, check the module page:

https://www.drupal.org/project/visitors

9. Geofield Map

Easily create beautiful maps using this Drupal module, it is built on the popular Geofield module and works in both the frontend and the backend with interactive maps makes management easy for content managers. The 2.x version even supports custom markers and images, based on dynamic data from that folder. Watch a live demo here.

https://www.drupal.org/project/geofield_map

10. Views Bulk Operations (VBO)

https://www.drupal.org/project/views_bulk_operations

This module has been around for a long time, but recently received another update. Using Views you can configure Drupal content lists in the broadest sense of the word: you can make a list of basically everything that lives in Drupal with it - from simple blog overviews to complex search pages with facets integrated in Solr.

This module expands Views with the possibility of having an action on all items in such a list: a 'bulk operation' as an extension of this limited function of the Drupal core.

An example is bulk editing of a selection of nodes. Exporting data to excel or csv is also possible via this additional module.

11. Monolog

Drupal core has a good log, in which you can find notifications, warnings and errors. But sometimes you need more reporting: this module offers integration of the Monolog library- "Logging for PHP". It integrates with Drupal Watchdog: the core log, so the module works with the Drupal core and contrib / open source modules.

https://www.drupal.org/project/monolog

12. Field Defaults

You can configure your content model in Drupal using content types and fields. After / during this configuration you build your website, after which you will fill it with content. Sometimes the content manager discovers after a while that an extra field is needed (for example an 'Intro Text'). You can easily add that field in Drupal, but with all existing content items that field is empty. This module comes in handy: as soon as you create a new field, it can automatically supplement all existing content with a chosen default value for that field.

https://www.drupal.org/project/field_defaults

13. Allow site iframing

For security reasons a website may not load within an i-frame, the Drupal core prohibits that by default. If you want to bypass this intentionally, this mini module offers the solution.

https://www.drupal.org/project/allow_iframed_site

14. Upgrade Status

A module mentioned in the Drupal Keynote by leader Dries Buytaert in the past DrupalCon. Specific for Drupal 8 installations: this module scans all code and reports whether it contains 'deprecated code'. Simply put, that is code that no longer works in Drupal 9. To make it easy to upgrade to Drupal 9 at a later stage, it is important not to have a deprecated code anymore, this module provides a good insight into that. Also: if you use the correct IDE, it will immediately indicate inline with the code.

View this directly in the Driesnote

https://www.drupal.org/project/upgrade_status

15. Views Bulk Edit

An addition to the Views Bulk Operations module: provides bulk updating of 'entity values': for example, filled-in text fields in content item, or categorization using Taxonomy

https://www.drupal.org/project/views_bulk_edit

16. Mobile Device Detection

Nowadays the responsive layout of your website is determined in the frontend: the html / css / js determines what it will look like on a certain screen format and also determines whether certain blocks are visible or not.

If you want to catch this on the basis of the website visitor's device, then take a look at this module. Depending on the device, you may or may not have certain Drupal blocks displayed to the website visitor, based on the device.

https://www.drupal.org/project/mobile_device_detection

17. Quick Link

Traced as a result of this blog: this module offers an implementation of the Quicklink library from Google Chrome Lab for Drupal. Quicklink is a lightweight JavaScript library (compressed less than 1 kb) that enables faster consecutive page loads by following in-viewport links.

How Quicklink works
Quicklink makes attempts to speed up navigation to subsequent pages. It:

  • Detects links within the viewport (using Intersection Observer)
  • Wait until the browser is inactive (with requestIdleCallback)
  • Checks whether the user has a slow connection.
  • Prefix of URLs to the links (using
    or XHR).

Under construction
The module has just been released and is currently under heavy construction, but absolutely one to watch.

https://www.drupal.org/project/quicklink

18. Freelinking

A 'looser' way for content managers to create links. By default you must enter a 'hard' link to a page, but after installing this Drupal module you can also use, for example, the page title, in which case you enter: [[nodetitle: Title of the Page]].

This module automatically turns this into a working link.

https://www.drupal.org/project/freelinking

19. Hook Event Dispatcher

There are several articles about why you have Drupal events or Drupal hooks They are both in Drupal 8, hooks are from the legacy era (Drupal 7 and earlier) and events originate from the Symfony framework which Drupal 8 is built on. The creator of this module believes that the hook system is outdated, but that is an ongoing discussion.

Anyway, this module ensures that Drupal dispatches some hooks as events, so that those hooks can be implemented as events. Because that way of implementation would be better. Among other things, it is about:

  • Entity hooks
  • Form hooks
  • Preprocess hooks

https://www.drupal.org/project/hook_event_dispatcher

20. Modules weight

Drupal executes code in modules on order of weights of modules. The module with the highest or lowest weight is executed first. As a result, it is possible that a certain code can overwrite each other because they have the same type of application. It is not possible to set which code has priority, so with the help of setting the module weight.

In the 'early Drupal 7 days' we did this by hand: directly adjust the values of the weights in the database, now there is a module for which you can simply configure this, nice:

https://www.drupal.org/project/modules_weight

Wrap up

That's it, for this month then. Hopefully you are well informed about the latest module releases and you will care a lot because 'there is a module for that'. For another xx cool Drupal modules - stay tuned next month!

Jun 24 2019
Jun 24

The planned Drupal 9 release date is June 3, 2020. While the Drupal 9 branch is not yet open, we've been working on Drupal 9 ever since the release of Drupal 8.0.0 through our deprecation processes. In fact, that is our process to clean up and refactor our APIs.

For a PHP API to be removed we need to deprecate and introduce a replacement (as appropriate). For a module to be removed, we need to deprecate it and at least move it to a contributed module (or provide a replacement in core). For a JavaScript dependency to be removed (such as the already end of life jQuery UI), we need to deprecate it and provide a replacement, and so on. So what can we get rid of in Drupal 9 finally? Well, all the things marked deprecated.

Other than third party dependency updates, things not deprecated in Drupal 8 will stay in Drupal 9 and be subject to backwards compatibility support in Drupal 9 until its end of life (likely around the end of 2023).

And this is a good thing. We want stability with Drupal, we want people to invest and find their investments work with Drupal for a reasonable time. To completely answer my clickbait title though: how long do we have to "finally" get rid of something? Well as per Dries's DrupalCon Seattle keynote, we have until Drupal 8.8 to define what we are deprecating for (and thus removing in) Drupal 9. Here is the video snippet:

What does that mean in practice? 8.8.0-alpha1 is by when we need to get the API for Drupal 8.8.0 done and therefore the API of Drupal 9 done (other than third party dependency updates). And 8.8.0-alpha1 is scheduled for the week of October 14th, 2019.

In other words, you have 111 days to get your least favourite thing removed from Drupal. If not, well, we will live with backwards compatibility to what we have in October 2019 for 4 more years to come.
Jun 24 2019
Jun 24

It is crucial for website security and usability to determine who is allowed to view, edit, or delete content on your platform. Things become easier with the configuration of user access if you are using Drupal. This CMS offers out-of-the-box user roles, as well as contributed modules for such functionality.

Today, the team at WishDesk explores user access modules in Drupal 8 — the latest Drupal version.

What is user access?

User access means that the user possesses a particular role on a website that lets them access certain areas of the site, as well as see the specific elements displayed on each web page after logging into the site.

Top Drupal 8 user access modules

Here is a list of the most popular user access modules for Drupal 8. Check out this information before choosing one for your website! The choice of this module depends on the functionality you want to add.

top Drupal8 user access modules

  • Permissions by Term

Permissions by Term is the Drupal module that lets you restrict or allow access to the specific website content on the basis of taxonomy terms. These permissions can be applied to user roles, as well as individual users and work for nodes, views, menus, etc. With the help of this module, taxonomy terms can be coupled to specific accounts.
 

  • Node View Permissions

The Node View Permissions module simply adds two types of permissions to every content type: "View own content" and "View any content." Besides, it can be easily combined with other user access modules.

  • Menu Admin per Menu

If you need certain users to add, edit, or delete particular menus, without access to other menus, the Menu Admin per Menu module is for you. Note, that users without full admin permissions may not see all the menus, so you need to move the necessary items to the root of the Management menu or somewhere else where it can be seen by those users.

  • Block Content Permissions

The Block Content Permissions module allows you to set permissions to custom block types, as well as create, update, or delete specific types of block content.  

  • Protected Pages

Protected pages is the Drupal 8 user access module that allows the administrator to protect certain web pages with a password. Some interesting features include global password setting, session expire time setting, bypass permission to skip password protection, and more!

Configure user access on your website with WishDesk!

This is just some of the Drupal 8 user access modules available — the choice depends on the type of website you have and the content you provide. Our Drupal team is always here to choose the most suitable modules for your platform and configure it to meet all your needs. We can also create custom modules for you if none of the existing ones fulfill your requirements!

User access in Drupal 8 is easy, especially when you have a reliable web development agency at hand. Contact us for any kind of digital help or assistance.

Jun 24 2019
Jun 24

Store Drupal logs on Amazon S3 via hook_watchdog, so that you can get rid of heavy logs on your drupal database and can later read from the S3.

For this todo on Drupal

  • You should use the "hook_watchdog" hook, where this hook allows modules to route log events to custom destinations.
  • In our case, our custom destination will be S3.
  • Initially we need to get the access to AWS and appropriate S3 bucket.
  • Store the connection configuration details of S3 buckets in the Drupal.
  • In the hook_watchdog, read the S3 Auth configs.
  • Create a connection to AWS S3, on success it return back with the S3 object.
  • Check if any buckets exist to write the logs, of not you should create bucket on S3 for logs.
  • Next, Create a log directory and log file, populate it with the data came on hook_watchdog.
  • Next, Write to the S3 bucket with parameters which "putObject" expects.
  • Next, Remove the log directory & file which is created in the process.
  • Check the S3 bucket via S3 UI, you could see the logs

Here's the piece of code, via we log to S3.

watchdog(
    'module_2',
    t('Info: Successfully completed.'),
    array($data),
    WATCHDOG_INFO
);
watchdog(
    'module_3',
    t('Error: Issue while processing.'),
    array($exception, $data),
    WATCHDOG_ERROR
);

Here, the piece of code which helps to connect & write log's to S3.

<?php

use \Aws\S3\S3Client;

/**
 * Implement hook_watchdog
 * @param array $log_entry
 */
function audit_watchdog(array $log_entry) {
    // Set the modules which needs to be logged to S3
    $modules = array(
        'module_1',
        'module_2',
        'module_3',
    );
    if (in_array($log_entry['type'], $modules)) {
        if(isset($log_entry) && !empty($log_entry)) {
            // Get the S3 config details
            $s3_config = variable_get("s3_config");
            $s3_bucket = $s3_config->s3_bucket;
            $s3_region = $s3_config->s3_region;
            $s3_key = $s3_config->s3_key;
            $s3_secret = $s3_config->s3_secret;
            try {
                if (!empty($s3_bucket) && !empty($s3_region) && !empty($s3_key) && !empty($s3_secret)) {
                    // Create AWS connection
                    $s3 = create_aws_connection($s3_region, $s3_key, $s3_secret);
                    if (!empty($s3) && is_object($s3) && $s3 != FALSE) {
                        if ($s3->doesBucketExist($s3_bucket)) {
                            $log_path = 'public://logs/to_aws';
                            // Create log directory
                            $dir_path = create_aws_log_directory($log_path);
                            // Create log file
                            $file_path = create_aws_log_file($log_entry, $dir_path);
                            // Get the name of log file
                            $keyname = get_keyname_for_log_file($log_entry['severity'], $file_path);
                            // Store the log file to S3
                            $s3->putObject([
                                'Bucket' => $s3_bucket,
                                'Key' => $keyname,
                                'Body' => '',
                                'SourceFile' => $file_path,
                            ]);
                            // Remove the directory & file created
                            if (is_dir($dir_path)) {
                                rmdir_recursive($dir_path);
                                rmdir_recursive('public://logs');
                            }
                        }
                    }
                }
            }
            catch (Exception $e) {
                // Exception is ignored so that watchdog does not break pages during the
                // installation process or is not able to create the watchdog table during
                // installation.
            }
        }
    }
}

function create_aws_connection($s3_region, $s3_key, $s3_secret) {
    $s3 = new S3Client([
        'version' => 'latest',
        'region'  => $s3_region,
        'credentials' => [
            'key'    => $s3_key,
            'secret' => $s3_secret,
        ]
    ]);
    $buckets = $s3->listBuckets()->get('Buckets');
    if (isset($buckets) && !empty($buckets)) {
        return $s3;
    }
    else {
        return FALSE;
    }
}

function create_aws_log_directory($log_path) {
    if (!is_dir($log_path)) {
        mkdir($log_path, 0777, true);
        chmod($log_path, 0777);
    }
    return $log_path;
}

function create_aws_log_file($log_entry, $dir_path) {
    $content = json_encode($log_entry);
    $log_file_name = $log_entry['type'] . '-' . date("Y-m-d-H-i-s") . '-' . preg_replace("/^.*\./i","", microtime(true)) . '.log';
    $file_path = $dir_path . '/' . $log_file_name;
    $log_file = fopen($file_path, "w");
    $write_log_file = fwrite($log_file, $content);
    $close_log_file = fclose($log_file);
    $chmod_log_file = chmod($file_path, 0777);
    return $file_path;
}

function get_keyname_for_log_file($severity, $file_path) {
    $watchdog_array = array(
        "0" => "WATCHDOG_ERROR",
        "1" => "WATCHDOG_INFO",
    );
    return 'drupal-logs/' . $watchdog_array[$severity] . '/' . basename($file_path);
}

function rmdir_recursive($dir) {
    foreach(scandir($dir) as $file) {
        if ('.' === $file || '..' === $file) continue;
        if (is_dir("$dir/$file")) rmdir_recursive("$dir/$file");
        else unlink("$dir/$file");
    }
    rmdir($dir);
}

Advantage of having Logs on S3

  • Reduce the number of DB log entries on Drupal database.
  • Completely Keep the Audit system outside Drupal, So Prod instance will play smooth.

Cheers :)

Jun 24 2019
Jun 24

When seven out of the world’s top 10 universities choose Drupal as their preferred partner in the vital task of creating and maintaining their websites, it’s safe to assume that the platform has much to offer even the best universities.

A good website saves on costs and optimizes the user experience of its visitors. All told, it’s a vital asset that few organizations can be without.

In this article, we’ll be going through the top 10 universities that built their websites using Drupal, an open source platform known for producing remarkable digital experiences. Drupal’s scalability and capacity for large amounts of content make it the number one choice for top universities all over the world.

1. Oxford University

In a fast-paced environment where broad functionality is key, Oxford University’s website is a testament to Drupal’s ability to host multiple sites and tasks while letting each department have control of its own web presence.

From information on admissions and university research to current news & events, the Oxford University website is a one-stop platform where faculty, students, and alumni alike can stay in the loop when it comes to life both on and off-campus.

Oxford University

2. Harvard University

The words ‘Ivy League’ call to mind a certain sense of prestige and tradition. Harvard University’s website brings these features to life with a distinct look and feel that communicates the Harvard brand to visitors right from the homepage.

Drupal’s friendly user interface enables Harvard administrators to design pages, host media, and post content in a way that allows branding consistency across the entire site.

Harvard University website

3. MIT

Best known for its programs in engineering and the hard sciences, the Massachusetts Institute of Technology maintains a competitive culture, encouraging its undergraduates to pursue their own original research.

Like all sites built on Drupal, The MIT website is strikingly well-equipped for site protection and data privacy. Institutions like MIT, which work hard to preserve the safety of their student and faculty records, trust the Drupal CMS for eliminating the risk of breaches. In fact, many corporations, non-government organizations, and state agencies choose Drupal for its strong safety and security capabilities.

MIT Website

4. Stanford University

Higher education websites tend to require different access privileges for a wide range of contributors, and Stanford University’s website demonstrates Drupal’s ability to provide ease of management and sharing content across various portals and sites. The Stanford website features a significant amount of content from its many offices and departments.

Stanford University Website

5. Duke University

Duke University takes pride in being a global institute of learning that houses perspectives from all over the world. The university ensures that this core belief translates into their online presence by building their website with Drupal, a CMS known for catering to a multilingual demographic.

Since Drupal operates in more than 110 languages, the platform provides an outstanding translation module that enables higher education institutions such as Duke University to cater to the global needs of their students and faculty.

Duke University Website

6. UCLA

UCLA is known for advancing knowledge and addressing social needs by fostering an environment full of diverse perspectives. The university extends the pursuit of these goals to their website, which houses rich content that’s accessible to all.

The UCLA website demonstrates how Drupal makes reusing and circulation content quick and easy. After the creation of a particular bit of content, website users are able to circulate it effortlessly through departments, intranets, and subsites.

UCLA website

7. University of Arizona

Drupal allows for powerful collaboration that supports both educational and research departments. As the University of Arizona prides itself on being a global and student-centered university, its website enables its faculty and students to access manuals, procedural forms, and research updates with no fuss or frills.

The University of Arizona’s website remains to be one of their key tools in the pursuit of their goal of community-wide collaboration to help solve critical challenges we face today.

University of Arizona Website

8. Penn State

A major public university that serves Pennsylvania and the global community, Penn State aims to make its online presence widely accessible. Built with Drupal, the Penn State website allows for responsive mobile access. In an always-on, mobile-first environment, the Penn State website paves way for great and functional communication that translates across all kinds of mobile devices.

Penn State University

9. University of British Columbia

With the university’s purpose of pursuing excellence in research to foster global citizenship, the University of British Columbia continuously works for the advancement of a sustainable and just society across the globe.

One of their most crucial tools in this regard is a website that hosts rich content on their core institutional objectives and accomplishments. Drupal allows the UBC website to access a wide range of people across different communities by enabling seamless integration from their website to different social media platforms.

University of British Columbia

10. University of Toronto

In the same way that Drupal allows non-experts to easily create and manage amazing websites, the platform also enables the creation of websites with sophisticated and user-friendly journeys.

The University of Toronto’s website demonstrates Drupal’s ability to allow for a platform that’s deceptively easy to navigate and browse through. For institutes of higher education, this feature matters greatly as users ought to have an easy time accessing information on a university’s website.

U of T website

Drupal continually demonstrates high levels of functionality, security, scalability, and flexibility in every way, and it’s no surprise, then, that Drupal is considered the foremost platform for developing higher education websites.

Finally, it’s worth mentioning that universities looking to use Drupal to jump-start their digital presence or revamp an existing website should consult with experts for a comprehensive assessment of where to begin. The platform is intuitive, but expert guidance can go a long way when making a digital transformation.

Jun 24 2019
Jun 24

Introduction


Hi, I am Artem and I am front-end developer. In my everyday work, I face with the styling of Drupal sites.

In this article, I am going to share my experience in integrating dynamic imports, splitting code into small chunks in Drupal 8. Also, I am going to show you how to write a webpack plugin that automatically connects these chunks with Drupal. With this plugin, you will not worry about the new chunk that needs to be connected, whether it is some js module or a piece of CSS.

What you need for comfortable usage of sites

When you open a web page, you definitely pay attention to its loading speed. Of course, no one wants to look at a blank page that is going to show you a super design with interesting animations but it takes ages to load. There can be many reasons for the long loading and not all of them are directly related to the size of the code that the browser is trying to load and execute. But the size of a bundle still plays a big role, especially with the advent of http2, where the main emphasis is put on speeding up multi-threaded loading of small packages.

So how can we deliver the code to the browser as efficiently as possible so that it does not overload and does not get anything else instead of the desired content? Try to answer this question by considering the chunks and dynamic imports solution.

Chunks and dynamic imports in Drupal

What we mean by “Chunks and dynamic imports”: it is splitting one large piece into smaller ones and having them lazy loaded if needed. Let's see how it can be implemented in Drupal 8 with examples.

I decided to keep up with the trends in our beloved front end world and write a config for the webpack dividing our bundle into two, to begin with: one for the Browser-That-Must-Not-Be-Named, the other for modern browsers that support all the main features of ES6 without compiling. 

Jun 23 2019
Jun 23

The summer of 2019 gave a reason for the Delhiites to rejoice. This time as one of the most conspicuous open source technology events of India, DrupalCamp was back after a sabbatical of two years, in Delhi.

DrupalCamp Delhi was a two-day conference that happened on 15-16 June at JNU Convention Centre. The event proudly hosted 350+ people, 20+ sessions, 7+ Founders speakers, and 3 trainings and a Drupal contribution sprint. Sponsored by 7 top Drupal companies across India and partnered by 10 technology/open source communities, DCD had some power packed Drupal talks by the brightest minds in Drupal and in India.

As an insignia of community inclusiveness, it had the presence of specially-abled artists from KPCT Foundation.

null

Participants appreciated the spectacular paintings by specially abled people from Kalpana Charitable Trust (KPCT)

We started with the prenote where we introduced DrupalCamp Delhi and discussed the flow of event. More importantly, we threw light on the very beginning of Drupal, the first Drupal event in Antwerp and how DrupalCamp community has grown to 1.3 million people globally.

Following this, the Keynote was delivered by Sudhanshu Mani, the man behind the conceptualization, engineering and manufacturing of India’s first engineless train, Train18.

 

null

He enthralled the audience by sharing his journey (talking about culture, structure and processes) as the General Manager of the Integral Coach Factory (ICF) and some to-the-point Shayari.

Day 1 witnessed a total of 18 sessions ranging from business & leadership, community, frontend & web design, coding & development, CI/CD & QA automation, beyond Drupal and case studies. People loved the session by Mathieu Spillebeen on - Frontend United: The energy of the people- which also took the audience by surprise since it was a virtual session. The attendees participated throughout by asking questions through the online platform, Slido.

null

Mathieu Spillebeen in action

Another notable event in the camp was the launch of Drupal India Association (DIA), by Shyamala Rajaram, a local chapter for Drupalites to contribute in India.

null

The official launch of DIA

At Birds of a Feather (BOF), we discussed the reasons for the inability to contribute to the community and what should be the action plan. Participants didn’t shy away from stating that it was the lack of exposure, mentorship and time which was holding them to contribute effectively.

Two parallel workshops were also running throughout the day for - beginners in Drupal and content writers.

Day 2 was filled with sessions, contribution workshops on Drupal and Gatsby, BoF, and Trivia Night. The day gave way to camp’s second keynote speaker Prashant Singh, VP - Product Management PayTM, take the podium to talk about the importance of technology in building a better track for India.

DSC_0133

Prashant Singh, VP - Product Management PayTM talking about the importance of technology in building a better India

The Contribution Sprint by Axelerant let people know how and why is it important for them to contribute to Drupal as much as possible. The two-hour-long contribution sprint, which was guided by mentors, saw people from coding as well as non-coding backgrounds joining to network with peers.

The event wrapped up with Drupal Trivia, which kept the audience engaged with some mind-boggling Drupal questions. It was adorable to see two cute kids join as co-hosts, to Tanisha and Akanksha, and were adamant to share no clue when asked for one! The winners of the evening were announced and team Srijan won by answering maximum questions right.

null

Team Srijan with hosts and the prize

#DCD19 remains special to my heart, for being able to carry out the whole thing successfully, whilst bringing in new set of volunteers to contribute, and for receiving a special note of appreciation from Shyamala Rajaram, Director and Co-founder Unimity Solutions.

null

 

Community events fuelled by passion, such as DCD, are always special. Here’s why:

null

 

For professionals, organisations and students, this is the best way to learn and reinforce your commitment to Drupal. These events create leaders, showcase the importance of non-code contributions and help us in propagating Drupal around the globe. DrupalCamp Delhi would be bigger and better in 2020. Would you be with us?

Time for a groupfie!

null
Jun 23 2019
Jun 23

Starting a new Drupal 8 project? And the first thing you might do is to install a module, but which one first. There are a few obvious ones to install and sometimes these have no relation with the functionality of your project but they always help you in the background.

But why do we install them? It's simple, they make our life easy while we are implementing the universe of features into our Drupal website. But then you always miss some of those life-saving modules and only install them when you feel the pain.

Now here is my list of Drupal 8 modules which will make your life smooth and you should install them as soon as you see that welcome message on the home screen.

  1. Admin Toolbar
  2. Environment Indicator
  3. Config Split
  4. Module Filter
  5. Site Settings and Labels

1. Admin Toolbar

Project page: https://www.drupal.org/project/admin_toolbar

Availability: Drupal 8

Downloads: 133157+

Okay, this was obvious! It was always annoying to go through all those pages to reach the manage field of a content type. In Drupal 7, Administration Menu module came to the rescue but in Drupal 8 it's Admin Toolbar which does the job perfectly. Admin Toolbar module integrates with the core's toolbar module and provides a drop-down menu for easy access to the menu items in the Administration menu. Just install and forget about it.

2. Environment Indicator

Project page: https://www.drupal.org/project/environment_indicator

Video: https://www.youtube.com/watch?v=8WbP9ZYxAx0

Availability: Drupal 8 | Drupal 7

Downloads: 18314+

Remember the time when you accidentally change settings or updated content on the wrong environment, thinking you are in the local environment. For these situations, the Environment Indicator module comes to the rescue. This module simply adds colors to the Drupal admin toolbar to indicate which environment you are working on.

You can simply configure different colors for different environments to differentiate like Development (Green), Staging (Orange) and Production (Red). Just try it and you will see how often you leave the wrong environment tab open in your browser.

3. Configuration Split

Project page: https://www.drupal.org/project/config_split

Tutorial: https://www.daggerhart.com/drupal-8-configuration-management-with-config-split/

Availability: Drupal 8

Downloads: 18816+

Drupal 8 introduced configuration management in the core to allow export of database configurations in YML files. But what if we don't want to keep everything same on all environment, maybe you want some development modules on configurations different for the local environment.

For these situations, Configuration Split does the job for us. This module allows you to create groups of configurations that you want to separate from the rest of the configuration. 

4. Module Filter

Project Page: https://www.drupal.org/project/module_filter

Availability: Drupal 8 & Drupa 7

Downloads: 327,907+

One of the first things you do on a first install is to go to the modules listing page and enable or disable modules. But with time this list of modules becomes so big that you start searching for it in browser search. So the best solution is to use the Module Filter module to search for the required module with a search box on the module listing page.

Another feature of the Module Filter module is that it provides a horizontal view for the module list page where modules are categories with their package. This makes it easy to just simply click on the package tab to see what module are available in it. This was the must-have module in Drupal 7 and so does in Drupal 8.

5. Site Settings and Labels

Project Page: https://www.drupal.org/project/site_settings

Availability: Drupal 8

Downloads: 641

With Drupal 8 all settings start to save into configuration and we export configuration. But if you want to have a configuration which can be changed whenever needed without the fear of overriding it on next config import.

"Site Settings and Labels" module is something you can use in your Drupal 8 project if you are in the same situation. This module allows you to set settings as content with the features and feel of Drupal 8 configuration system . So remember this module as this could be your secret weapon on your next Drupal 8 project.

In the comment, let me know which one is your favorite or if I missed your go-to module for a fresh Drupal 8 installation.

Jun 23 2019
Jun 23

APIGEE recently announced - from May 31, 2020, Apigee-sponsored hosting for Drupal-based portals will end. The existing customers who wish to remain on Drupal 7 need to assume hosting responsibility, they can either migrate to Drupal 8 or move to Apigee's integrated portal.

 

Those who wish to stick to Drupal 7 developer portals might possibly face challenges. But if Drupal has many security features and remains as one of the most secure Content Management System (CMS), what could possibly be the urgency to migrate?

What are the concerns?

Drupal 7 End-of-Life is Near

The developer portal is essentially a CMS, in case of APIGEE, based on Drupal. As the backend CMS, Drupal provides a core set of features in the form of modules that make it easy for you to build the content, as well as manage, websites.

Developer portals orchestrate API ecosystem which helps developers and external partners to quickly and securely gain access to the tools and information they need to explore, test, & consume APIs.

Apigee supports several developer portal solutions, ranging from simple turn-key to fully customizable and extensible, most if not all were built on Drupal 7. With community focus shifting to Drupal 9 release and end of life approaching for Drupal 7 (November 2021), among other circumstances Apigee will no longer be supporting the D7 developer portals.

With APIGEE support ending in May 2020, Drupal 7 developer portals will face the following security challenge.

 

Drupal 7 Can Put your Developer Portal at Risk


While Drupal also has many security features, security is not about working in isolation.  If one is to secure their digital property from the possible threats, it needs to follow best practices to maintain the top-notch standards.

One of the most important is keeping the core updated.

If you fall a long way behind the latest update, you are opening yourself to vulnerabilities. Let’s know in detail how Drupal 7 can put your developer portal at risk.

1. Doesn’t prevent cross-site scripting

Cross-site scripting (XSS) is a class of code vulnerabilities that allows code to be executed inside your browser without your consent or knowledge. XSS exploits are commonly performed with JavaScript, but Flash, Java, and other similar web programming technologies have been used.

It is one of the most frequent security vulnerabilities, a site owner should be aware of. It can be introduced in custom themes and custom-and-contributed modules. A poorly configured site can allow a malicious visitor to use XSS to change a user's password. Out of the box, Drupal 7 isn’t very effective to identify and fix XSS vulnerabilities.

In Drupal 7, elements like Drupal variables or Ctools exportables are represented as PHP code. This use of PHP input format in the core exposes possible code execution to vulnerability.

Drupal 8, however, filters the PHP input format in the core, manages code in a revision control system like GIT, and protects the code from any possible attack. Configuration Management Initiative uses YAML as the export and import format. YAML files are easy to manage together with your code and is a best practice to check it into a revision control system (like GIT).

2. Exposing session cookies

Drupal 7 stores the session ID and checks directly against the incoming session cookie from the browser. This poses a huge risk as the value from the database could populate the cookie in the browser assuming the session as well as the identity of any user who has had a valid session in the database.

On the other hand, Drupal 8 secures the session IDs against exposures via database backups or SQL injection, encourages serving your entire site via secure channel SSL and no longer strips the www from the session cookie domain.

3. No Automated CSRF token protection in route definitions

Cross-site request forgery (CSRF or XSRF) is a process where a request is made to a site which takes an action when the user did not intend to take that action.

GET requests with configuration change are not protected from CSRF in Drupal 7. This brings all the secure and unsecured requests under the scanner.  However, Drupal 8 makes it easy to specify a route (or system path) require a CSRF token.

4. No Clickjacking Protection

Drupal 7 cannot protect a site from click-jacking attacks wherein forms or links on the site are presented in a disguised fashion on an attacker's site inside an iframe. It cannot block the unauthorized re-use of site content via iframes too. However, Drupal 8 does this easily by sending the X-Frame-Options: SAMEORIGIN header in all responses by default. This header is respected by most browsers and prevents the site from being served inside an iframe on another domain.

Should you Migrate your Developer Portal to Drupal 8?

When choosing a solution, you need to balance your customization requirements against the time and knowledge required to implement your portal. Migrating your developer portal to Drupal 8 will ensure that any investments you make will extend the security of your digital presence.

Have doubts around your API security or want to migrate to Drupal 8 developer portal? Get in touch with our experts. We provide a range of services around API designed with a strategy tailored to your success.

Jun 21 2019
Jun 21

This is no news anymore: preparing to upgrade to Drupal 9 is just a matter of... cleaning your website of all deprecated code. 

No major disruption from Drupal 8. No more compatibility issues to expect (with dread)...

“Ok, but how do I know if my website's using any deprecated APIs or functions? How do I check for deprecations, identify them and then... update my code?”

2 legitimate questions that must be “haunting” you these days, whether you're a:
 

  • Drupal 8 website owner
  • developer currently working on a Drupal project
     

Since the great news of this smooth Drupal upgrade ships with the answer to your “What” question (“What do I do to get my website ready for Drupal 9?”), but leaves the “How” question open:

“How precisely do I check my website for deprecated code?”

Are there any analysis tools available? Tools that you could run to get a thorough and accurate deprecated code report? 

Luckily, there are. And I'll be focusing on 2 of the most effective ones that you should consider integrating into your workflow: Drupal Check and the Upgrade Status module.
 

1. But What Is Deprecated Code? And What Website Elements Should You Audit?

A piece of code is considered deprecated if:
 

  • there's an upgraded alternative for it already available
  • it's no longer in use
     

With this real “dilemma” now solved, there comes another one:

“What parts of my website should I check for deprecated code?”

Make sure you scan your:
 

  • Drupal core
  • Drupal modules
  • theme
     

Note: pay special attention to the contributed modules enabled on your Drupal 8 website; run a deep-scan and, if you get any deprecation warnings, make sure to alert those modules' maintainers to clean them up.
 

2. Drupal Check: Scan Your Database for Any Deprecations 

A handy PHP analysis tool to grab and to run whenever you need to look for deprecated code in your database. 

A command-line tool that Dries Buytaert recommends running the... automated way,  closely integrated into your own workflow. What it'll do is track down instances of deprecated code for you.

Then, all there's left for you to do is to... remove them. And, depending on the context, to replace them with their upgraded alternatives.
 

3. The Upgrade Status Module: Determine Your Site's Readiness to Upgrade to Drupal 9

If the idea of working with a command line doesn't sound too... “tempting” to you, how about adding a user-friendly graphical interface to the equation?

The Upgrade Status module, delivered to us by the Aquia team, lead by Gábor Hojtsy, makes checking for deprecated code a lot more enojyable and intituive, thanks to its admin dashboard.

It's particularly handy if you're a Drupal site owner and not a senior Drupal developer highly familiar with CLIs.

Install it, enable it and use it to evalute your website and to assess to what degree it is ready (meaning up to date) for the Drupal 9 upgrade.

But let's delve head first into details on:
 

  • what it takes to install it properly
  • what parts of your website it will deep scan
  • how you can narrow down its analysis to specific projects only
     

3.1. Use the Composer Package Manager to Install It

Since it ships with its whole collection of third-party PHP dependencies...

Another key requirement to set the stage for the Update Status module is to enable the Update Manager and the Git Deploy modules on your Drupal 8 website.

Once installed, you can access its user interface at /admin/reports/upgrade.
 

3.2. Check Up Your Codebase, Modules and Themes

The great thing about this module is that you get to run your checks right in your admin UI and get a full report.

Another great aspect is that, when it comes to contributed modules, it will provide you any available updates... inline. 

Once it's completed its scan it'll display either an “Errors found” or a “No known errors” message. To localizae the identified deprecations on your website, just click “View errors”.
 

3.3. Run It on Specific Individual Projects, Too

Maybe you don't always need a full check. Maybe you'd like to scan only a specific project that you might be working on, to ensure that it's ready to upgrade to Drupal 9 when due time.

You can do that. The module allows you to cut down the time you'd spend on an uneccessary full-scan by focusing on one target project only. 

Furthermore, to streamline things even more, it enables you to export each deprecated code report individually...
 

4. So,You'Ve Identified Your Deprecated Code: What Next?

In most cases, keeping your codebase up to date once you've detected the deprecated parts is just a matter of replacing those deprecations.

For the other few cases left, you'll need to carry out a more complex refactoring process.

Now that you know which are the tools to use for:
 

… your website's smooth upgrade to Drupal 9 depends on you exclusively. 

On sticking to your own routine of checking up your Drupal core, modules and theme and keeping them up to date.

Image by fajar budiman from Pixabay

Jun 21 2019
Jun 21

"There are hundreds of startups with a lot of brains and money working on various alternatives to traditional banking" - Jamie Dimon, CEO, JPMorgan Chase

FinTech and the disruption it can cause to the traditional banking systems is now a hot topic of debate in the banking conferences. Global venture capital funds are super-bullish on this front and are accentuating investments in the FinTech companies. Thanks to the burgeoning demand of FinTech in recent times, more crowdsourcing platforms are letting artists or fledgling entrepreneurs to crowd-source capital from a large constituency of online donors or investors.

A sheet of paper with Finance written in bold letters alongside relevant icons and laptop, notebooks, pen, and plant pot placed around it


For instance, peer to peer (P2P) lending, the high-tech equivalent of borrowing money from friends, helps in raising a loan from an online community at a mutually negotiated interest rate. Also, digital wallet providers allow people to zip money across borders even without any bank accounts using handheld devices.

Amalgamation of these technologies, which goes under the umbrella term FinTech, is expected to metamorphose the way all of us use banking and financial services. And Drupal can act as the perfect content management framework for building a great FinTech platform.

A portmanteau of financial technology

[embedded content]


Financial technology, which is referred to as FinTech, illustrates the evolving intersection of financial services and technology. FinTech allows people to innovate while transacting business ranging from digital money to double-entry bookkeeping.

The lines between technology and the financial services are blurring

Since the advent of the internet revolution and later the mobile internet revolution, financial technology has grown multifold. Originally referred to   technology applied to the back office of banks or trading firms, FinTech now caters to a broad variety of technological interventions into personal and commercial finance.

According to EY’s FinTech Adoption Index, one-third of consumers leverage at least two or more FinTech services and more and more of these consumers are also aware of FinTech being a part of their daily lives.

FinTech encompasses the startups, technology companies or even legacy providers. Startups use technology to offer existing financial services at affordable costs and to provide new tech-driven solutions. Incumbent financial enterprises look to acquire or work with startups to drive digital innovation. Technology companies offer payment tools. All these can be seen as FinTech. Surely, the lines between technology and the financial services are blurring.

Origins of FinTech

infographics showing the history of FinTech with relevant icons against each yearSource: 16Best

In broad lines, the financial industry has seen a gargantuan shift over the years with the way it is leveraged in the times of rapid technological advancements. 16Best has compiled a brief history of FinTech which shows how the gap between financial services and the technology has got bridged over the years.

The gap between financial services and the technology has got bridged over the years.

In 1918, the Fedwire Funds service began offering electronic funds transfer. And while the Great Depression was ravaging the world’s economies, IBM provided some solace with its 801 Bank Proof Cach Machine that offered the means for faster cheque processing. Subsequently, credit cards and ATMs came into existence in the ‘50s and ‘60s.

In 1971, first all-electronic trading emerged in the form of NASDAQ. And in 1973, the SWIFT (Society for Worldwide Interbank Financial Telecommunications) built a unified messaging framework between banks for handling money movement.

1997 was the year which saw the emergence of mobile payment through Coca-Cola Vending Machine. Fast forward to 2000s and the present decade, a slew of innovations crashed into the finance sector with the introduction of digital wallets, contactless payments and cryptocurrencies.

FinTech is definitely re-inventing a quicker and more durable wheel as the world continues to witness a superabundance of new ventures refining financial services with technology.

Merits of FinTech

Bar graph showing statistics on different areas of FinTech


Financial technology has taken the financial services to a whole new level with a cluster of merits that it offers. Here are some of the major benefits of FinTech:

  • Robo Advisors: They are one of the biggest areas of FinTech. These online investment services put users through a slew of questions and then relies on algorithms to come up with an investment plan for them.
  • Online Lending: It encompasses all aspects of borrowing from personal loans to refinancing student loans which improves money lending.
  • Mobile payments: There is a growing demand for mobile payment options with the stupendous rise of mobile devices over the years.
Bar graph showing statistics on global mobile payment marketTotal revenue of global mobile payment market from 2015 to 2019 (in billion U.S. dollars) | Statista

Personal Finance and Savings: A plethora of FinTech organisations in the micro saving department have been helping people to save their change for rainy days and a whole lot of them rewarding customers for doing so. For instance, Digit allows you to automate the process of saving extra cash.

Bar graph showing statistics on personal financeSource: Statista

Online Banking and Budgeting: Online banks like Simple reward users for using their ‘automatic savings’ service and also offer a cost-effective option over a traditional bank. Leveraging online tools, they assist users to plan budgets and handle their money smartly from their mobile devices with minimal effort to meet their savings goals.

Insurance: New insurance models have been strengthening the FinTech space. Metromile, an insurance model, sells pay per mile car insurance.

Bar graph showing statistics on Insurtech industrySource: Statista

Regtech: Regulation Technology, which utilises IT to enhance regulatory processes, is one of the significant sectors where numerous FinTech app ideas have come into light around this domain. Regtech is useful for trading in financial markets, monitoring payment transactions and identification of clients among others. For instance, PassFort helps in standardising the online compliance processes.

How is Drupal powering FinTech?

Organisations offering FinTech solutions need to maintain a robust online presence. Drupal has been powering the landscape of FinTech with its enormous capabilities.

The launch of TPG Capital

Homepage of TPG Capital with a timelapse image of running cars on the road and trees in the background


TPG Capital is one of the major enterprise-level FinTech companies which has leveraged the power of Drupal 8.

One of the primary objectives for TPG’s marketing circuit was to harness the Drupal’s flexibility as a digital empowerment platform. They wanted the ability to make alterations to content on the fly and try out new messaging approaches. Simultaneously, the financial industry’s stringent legal and regulatory requirements called for a flexible TPG platform that would meet the specific needs of the sector thereby offering top-notch security.

Drupal came out as the right choice when it came to the CMS that would facilitate the TPG’s goal for mirroring their cutting-edge business practices and incorporate modern website design and branding.

A digital agency built a responsive, mobile-first site. It featured newer CSS features like Flexbox and CSS animations and minimised the site’s dependence on Compass by introducing auto prefixer. Moreover, Drupal 8 version of Swifttype was built for the search component and contributed back to the Drupal Community.

The launch of Tech Coast Angels

Homepage of Tech Coast Angels with two people working on their laptop


Tech Coast Angels are one of the biggest angel investment organisation in the US. 

Tech Coast Angels selected Drupal as their CMS of choice for its excellent features vis-à-vis user authentication, account management, roles and access control, custom dashboards, intricate web forms for membership and funding application, workflow management and email notifications.

Performance improvements were made by a digital agency to both the Drupal application and the server environments which brought down the costs to a huge extent by minimising the hardware requirements necessary to run the Drupal codebase in both staging and production environments.

With Drupal being one of the most security focussed CMSs, it helped a great deal in making amendments related to security of the site. Views caching were enabled and unnecessary modules were turned off on the production server.

Market trends

Bar graph showing global investments activity in FinTech companies


The Pulse of FinTech 2018 by KPMG shows that global investments activity in FinTech companies has been steadily rising with 2018 turning out as the most profitable year. It is only going to grow more in the coming years.

Infographics showing bubbles inside a box on the left and description on the right about the size of bubbles with respect to FinTech companies

In the coming years, the main trends in the asset and wealth management, banking, insurance and transactions and payments services industries can be seen in the illustration above.

Conclusion

FinTech is a great alternative to traditional banks. FinTech excels where traditional banks lag behind. In addition to offering robust financial services leveraging technological advancements, organisations offering FinTech solutions need to have a superb digital presence to offer a great digital experience. Drupal can be an awesome content store for an enterprise-level FinTech platform.

Drupal experts at Opensense Labs have been powering digital transformation pursuits of organisations offering a suite of services.

Contact us at [email protected] to build a FinTech web application for your business using Drupal.

Jun 21 2019
Jun 21

EU Cookie Compliance, one of the top 100 Drupal modules, is a Drupal module that offers a cookie consent banner with various features, making it more convenient for your site to become GDPR compliant. GDPR is the new data privacy regulation that came into effect on 25 May 2018 and it sets out to bolster the rights citizens of the EU have over their data which is held by companies. Ramsalt Lab is currently supporting and maintaining the module as part of our GDPR audit services.

According to GDPR, if you have any traffic from EU citizens on your site, you need to ask for consent before you, or third-party scripts, process any of their personal data.

One recurring GDPR feature request we’ve seen over the past few years has been to allow granularity in the cookie compliance consent, so that the user could accept or decline various cookie categories. This feature has now been added to the recently released versions 8.x-1.6 and 7.x-1.29. You can find the new consent method on the module settings page. To enable this feature, select “Opt-in with categories” as the consent method.

In this blog post, you can learn how to configure the EU Cookie Compliance banner to use GDPR categories, as well as how to use the categories in your code to track the user only when they give consent.

The different GDPR consent methods that the EU Cookie Compliance supports.

GDPR consent banner configuration

Choosing this consent method reveals an expanded set of fields named “Cookie Categories” that you can find beneath the “Consent method” options. Here you can set up your cookie categories and configure how the banner behaves. Let’s first look at the categories:

Field for GDPR cookie categories showing configuration where 4 categories are entered

Categories are entered using the following pattern: “key|label|description”. The description is optional. The above setup will result in the following EU Cookie Compliance consent banner:

The resulting GDPR cookie banner, with the categories "Strictly necessary", "Performance", "Functional" and "Advertising" showing.

This will result in a fairly large GDPR consent banner. Note that the banner appearance in EU Cookie Compliance is based on a Drupal theme template, so you could always create a theme specific template and for example place the descriptions on the same line as the title, or perhaps have the descriptions appear on hover if space is a concern. By default, the banner has two buttons when you use the category consent method: “Save preferences” and “Accept all cookies”.

Below the text field for cookie consent categories are some additional options. The first option, which is on by default allows you to replace the “Agree” button with the two “Save preferences” and “Accept all cookies” buttons. In addition to labeling the buttons, you can also choose to make the first option compulsory by choosing “Tick the first checkbox and mark it read-only”. You can also choose to “Tick all category checkboxes by default” to make it more convenient for the user to opt-in to cookie usage under GDPR.

Screenshot showing the configuration options for the cookie banner with categories.

Code usage

In order to let your site and javascript comply with the cookie preferences set by the visitor, you may have to write some custom code. Although EU Cookie Compliance has some options to whitelist cookies and block scripts, not all scripts are added to the page source using the standard Drupal methods and can be altered through f.ex hook_js_alter in Drupal 7 (which is what the module attempts to do).

EU Cookie Compliance has for years had a method you can call to check if the user has agreed to store cookies and processing their personal data:

Drupal.eu_cookie_compliance.hasAgreed()

This function will return true when consent is given, and false when the user has declined processing of their data.

With the newly introduced categories, you can call the same function with a parameter:

Drupal.eu_cookie_compliance.hasAgreed(category)

Where ‘category’ is one of the category keys that you have defined on the EU Cookie Compliance module settings page, for example:

if (Drupal.eu_cookie_compliance.hasAgreed('performance')) {
  // Load scripts that deal with performance.
}

Conclusion

Many high profile sites allow visitors to choose among categories when the visitors give consent to the processing of private data through cookies in their browser. Now your site can do offer the same granularity if you use a recent version of the EU Cookie Compliance module.

If you need help setting up your GDPR cookie banner, or have questions about how your site can become GDPR compliant, you can always get in touch with us at Ramsalt Lab through our contact page.

Jun 21 2019
Jun 21

Your website, like a king, should look good in any situation — and on any device that users might be accessing it from. Thankfully, there is responsive web design.

With responsive web design, all images, buttons, columns, and other layout elements change their size and position to adapt to the device dimensions. This creates the smoothest user experiences, as well as improves website performance.

A special reason to be happy is that responsive design in Drupal 8 is thriving. Drupal 8 has been built with mobile devices in mind. It has responsive default themes, responsive admin interfaces, and powerful opportunities for mobile-friendly design. Great Drupal 8 modules are very helpful in implementing any ideas in this area.

Responsive design

Drupal 8 core modules for responsive design

Of course, we need to start with the powerful built-in modules that arrived at the core with the release of Drupal 8 to everyone’s applause.

Breakpoint

The Breakpoint module allows you to specify the breakpoints, for example, screen dimensions (minimum or maximum width), at which your website should start showing a different layout. The module is enabled out of the box in Drupal 8.

Breakpoints should be defined in the theme’s themename.breakpoints.yml file. Default themes like Bartik are known to be responsive out-of-box, so they already have this file with a set of ready breakpoints. For custom Drupal 8 themes or modules, this file needs to be created in the theme’s or module’s root directory.

Breakpoints in Drupal 8

The module manages the height, width, and resolution breakpoints. It enables modules and themes to use each other’s breakpoints.

Responsive Image

The Responsive Image module provides the appropriate image display for each breakpoint. The module is part of Drupal 8 core but needs to be enabled.

According to Drupal image style capabilities, images can be automatically scaled, cropped, resized, and so on, to be used in different scenarios. With the help of the Responsive Image module, these different image styles can be served for different devices based on breakpoints.

It’s just necessary to:

  • create the desired image styles in Configuration — Media — Image Styles

Image styles in Drupal 8

  • create a “Responsive image style” in Configuration — Media — Responsive Image Styles, choose the theme name in “Breakpoint group,” and assign image styles to breakpoints

Assign image style to breakpoints

  • assign the responsive image format to the image field of the desired content type in Structure — Content types — *Content type name* — Manage display

Assign responsive image format to image field

The Responsive Image module uses the HTML5 "picture" tag. It once used to be known as the Picture contributed module.

Contributed modules for responsive design in Drupal 8

Alongside the strong core features, there are contributed modules available in Drupal 8, each of which adds its own touch to responsive web design creation. Let’s review a few nice ones.

Simple Responsive Table

The Simple Responsive Table is a lightweight module that instantly makes Drupal website tables responsive. All that is needed to do is set the maximum screen width for which tables should be responsive. You can also optionally enable or disable this feature for Drupal admin pages.

Simple Responsive Table

Sidr: Responsive Menus

The Sidr: Responsive Menus module for Drupal 8 integrates a JavaScript plugin called Sidr, which is great for creating responsive side menus and more. The module should be installed together with the Sidr libraries.

With the help of this module, you can create configurable Sidr “trigger” blocks on your website. They can be placed anywhere in your theme region and configured to your liking. Their essence is that when a trigger is clicked, the Sidr side menu slides out or slides back in.

Sidr: Responsive Menus

Viewport

The Viewport is a simple Drupal 8 module that offers a user interface for adding a viewport meta element to the HTML header. The viewport element instructs the browser on how to display the visible part of the page on the users’ screen. Viewport varies from device to device.

The Drupal Viewport module’s interface allows you to specify the viewport values and the pages for which the element should be added.

Viewport module Drupal 8

Juicebox HTML5 Responsive Image Galleries

Here is a nice module for creating responsive image galleries and sliders. The Juicebox HTML5 Responsive Image Galleries module integrates the famous Juicebox library. The library is known for its full responsiveness, touch gesture support, embedding features etc.

The module provides a field formatter and a views style plugin that allows image fields and Views to be formatted as Juicebox Galleries. It features multilingual support, integration with the Media module, search engine friendliness, and much more.

Juicebox HTML5 Responsive Image Galleries

Fulfill your responsive design ideas

Responsive design in Drupal 8 is easy for developers to set up and enjoyable for users to work with. So contact our Drupal team if you are interested in:

  • building a responsive theme for your Drupal 8 website
  • making your current theme responsive
  • configuring any responsive design modules
  • providing responsive layout for any elements on your website
  • migrating your website to Drupal 8 that has so much for responsive design

The era of convenient web is here!

Jun 21 2019
Jun 21

Burnout is becoming an increasingly prevalent problem, especially in a field as fast-paced as development. With more and more businesses undergoing a digital transformation, the demand for experienced developers has never been higher - and with it, naturally, come higher and higher demands from these developers.

This is further accentuated by the work- and career-oriented mentality we see widespread today. You can frequently spot people on social media either bragging or complaining about how hard or how long they’ve worked, but, even in the first case, such a workflow is certainly not sustainable. 

It’s true that more work yields more profit; but what good is profit when one’s mental health, and by consequence also physical health, suffer on account of work overload?

Another reason for burnout that should also be mentioned, besides excessive working hours, is a general dissatisfaction with how the work is done and a suboptimal workplace experience. 

In fact, we could argue that monotony or having very little control over one’s work is even more detrimental than working really long hours. Put the two together and you’re practically calling for burnout to arrive. 

In this post, we’ll explore how you can spot the symptoms of your developers burning out and how you can mitigate or even prevent developer burnout. 

In the first part, we’ll focus on the symptoms of burnout; in the second, we’ll take a look at how to reduce the risks of burnout as a developer, as well as what measures to take as a manager to reduce those risks in your team and mitigate burnout when it happens.

Symptoms of burnout - and how to spot them

Let’s start with the symptoms of burnout. Logically, it’s easier to spot these through self-reflection (e.g. you notice a lack of energy and/or motivation, you start suffering from headaches, etc.), but it’s even more crucial for managers to be able to spot them in their employees. So, let's take a look at what signs to look for as indicators that your developers are burning out.

  • They’re lacking energy and/or motivation: this is likely the most obvious symptom of burnout, but should nonetheless be mentioned. If you notice that certain developers on your team constantly seem sleepy and unmotivated, especially in a more hectic period, this should be a red flag that something is wrong.
  • They’re frequently late to work: in line with the previous point, sleepiness and late working hours may result in sleeping through morning alarms and consequently arriving late. The first instinct would be to scold or punish the person in question, but a deeper investigation may reveal other reasons for it - especially if they still seem lacking in energy after arriving late, and this happens on a relatively regular basis.
  • They’ve isolated themselves and stopped talking to coworkers: this can be difficult to spot in employees who are more introverted by nature, or those who work on specific projects that don’t require as much collaboration (or even disallow it altogether, e.g. when working under a very strict NDA). This means that you need to be extra mindful of these employees so that potential signs of their burnout don’t go overlooked. 
  • They’ve stopped participating at meetings: this point is similar to the previous one in that it concerns a kind of isolation. If someone is physically present at meetings, but “not really there” in the practical sense, it can either be because they have so much on their mind already, or because they’re too tired to actively participate. Both of these can be signs of burnout. 
  • The quality of their work has decreased: if you notice an increase of bugs and mistakes in a certain developer’s code, or if they take longer than usual to solve relatively simple tasks that involve familiar technologies, this could indicate that they’re suffering from burnout. Make sure to thoroughly explore this possibility before you sanction them.

Granted, some of these are almost impossible to spot if you have a freelancer or a team of developers working for you remotely. In such a case, you should also look for the following indicators: a remote worker fails to do certain tasks, or delivers them very late, they stop responding to calls and direct messages, they fail to track their time, etc. 

A word of warning, though: most of the points we’ve discussed here can be indicators of other issues, not necessarily burnout, but also personal issues such as family troubles and health issues (but, again, these could be the result of burnout, so it’s a bit of a “chicken-and-egg” situation). 

Nevertheless, if you are an open company that has a healthy company culture and a pretty good grasp of the goings-on in the lives of your employees (without being too Big Brother-y, of course), you can assume these are symptoms of burnout - especially if they start appearing in periods that demand more, or more difficult, work than usually. 

As a manager or a CEO of a smaller company, you need to communicate frequently and clearly with your subordinates and establish a trusting relationship with them. This will make it more likely that they’ll be willing to open up to you about their work and any difficulties they might be facing, and getting to know them will help you spot that something is off.

This holds true for teammates as well - be mindful of changes in your coworkers’ behavior that may indicate that they are overworked and on a path towards burnout. It’s much easier to spot something when you’re aware of it and know what you’re looking for. 

A very useful tool for collecting feedback from your employees, which we at Agiledrop also make good use of, is Officevibe. By guaranteeing anonymity, it gives those individuals who don’t want to expose themselves a chance to voice their opinions and/or dissatisfactions. With it, you’ll be able to get honest feedback and therefore a better overview of your team.

How to prevent or mitigate burnout

Well, the first thing you can do to deal with burnout is to know how to spot it - we already discussed this in the previous section. The problem here is that this is only possible once someone is already suffering from burnout, so it’s not really a preventive measure. 

In this second part of the post, we’ll take a look at some ways of effectively preventing burnout and also dealing with it when it does occur. We’ll start with what you can do to prevent yourself from burning out and how to recover from burnout; while this is primarily aimed at developers, it can apply to anyone, in particular everyone working in the digital. 

What you can do as a developer

  • Find a job you enjoy doing at a company which respects you: this is some of the best advice even outside the context of burnout and is as such a no-brainer. If you enjoy your work and get a sense of accomplishment out of it, even longer working hours become less of a problem. In contrast, doing something you don’t enjoy or take pride in will likely lead to burnout even with a regular 8-hour workday. 
  • Understand that some days are harder than others: if you expect too much from yourself and always want to give 110%, you’re setting yourself up for dissatisfaction. Don’t beat yourself up if you perform a little less optimally on certain days. If you maintain an overall high quality of your work, your manager will know that you’ll more than compensate on other days. 
  • Don’t bite off more than you can chew: this coincides with the previous point to some extent. If you want to please everyone, people start to take advantage of that, often completely subconsciously. Things then quickly pile up and, before you know it, you’re swamped with tasks that give you less time to do the really important things, resulting in worrying and the inability to separate work from your personal life.
  • Maintain healthy habits: this helps both with preventing burnout as well as alleviating it once it’s already there. If you eat well and get enough sleep and exercise, you’ll be able to start each day fresh enough to tackle your daily tasks even in the more hectic periods. When you feel that you’re already burning out, you can do a lot by reestablishing a healthy sleep cycle and taking a short exercise break during your work. 

The bottom line is essentially this: the better you feel, the less likely you are to burn out. If you take proper care of yourself and enjoy what you do and the workplace experience in general, you’ll have already greatly diminished the chances of burnout occurring. 

Know your limits and remember that your company also benefits from you putting yourself first, so don’t overwork yourself in the belief that it’s beneficial to business. Chronic fatigue can be a very nasty thing - it’s relatively innocuous, but stubbornly everpresent. In extreme cases, it can even lead to short- or long-term illness, paving the way for even more health issues down the road. 

What you can do as a manager / CEO

Ok, we’ve outlined some of the things you can do to prevent yourself from burning out. Let’s now take a look at what measures to take as a manager to reduce the risks of burnout occurring in your team or, if it does occur, how to at least alleviate it. 

  • Provide a good working environment: naturally, employee well-being starts with a pleasant working environment. This includes healthy snacks, coffee, an agreeable atmosphere and good working conditions. A very important thing here is ergonomic equipment, which goes a long way towards improving at least the physical health of your employees.
  • Encourage and allow exercise: unfortunately, even ergonomic desks and eye-friendly displays aren’t enough for someone who has to spend countless hours hunched over their keyboard. You should encourage exercise, in and outside the workplace; it doesn’t have to be long, just something that stretches the muscles (especially the back!) and breaks the monotony. 
  • Allocate certain times of the day for breaks: you can connect this to the previous point - allow for short breaks in the workplace which developers can use either to get coffee, some exercise or for a non-work-related chat among colleagues. This should be available on a daily basis.
  • Organize teambuilding activities that encourage interaction and participation without forcing them: for longer stretches of time, organize events and teambuilding activities that bring the whole team together. We at Agiledrop frequently have common themed lunches, short presentations by developers on specific topics (not obligatory in any way, but always rewarded), group sports and other activities - next weekend, for example, we’re going kart racing! 
  • Motivate your employees with regular constructive feedback and praise for a job well done: lack of motivation in one’s work is one of the major causes of burnout. In contrast, feeling motivated and getting the deserved recognition can help weather through even the toughest days or weeks. If you acknowledge the hard work of your employees, you’re showing them that their extra effort is appreciated and not simply taken for granted. 
  • Reduce overtime and weekend work: in a perfect world, we’d all have weekends to ourselves, reserved for some quality family time or simply a break from a hard week’s work. Sadly, though, industry demands make the total elimination of overtime a hopeful utopia. At Agiledrop, we understand how crucial this time-off is for our employees and consequently to our overall work culture. We try to keep overtime to a minimum; even when it’s necessary, we coordinate it with the developer well beforehand. 
  • Allow for flexible working arrangements: for someone working on-site, the opportunity to work from home every once in a while can be extremely rejuvenating, especially in a period with a lot of work where the commute itself is already exhausting. But, be careful: while working remotely can mitigate burnout, it can also accentuate it, as the lines between work and free time become more blurred, especially for individuals who are very work-oriented. Ben Robertson of Mediacurrent has recently written about his very efficient solution to dealing with this.
  • Ensure a healthy work-life balance of your employees: while a lot of the points in this section are directly tied to this, a healthy balance between work and free time is so vital to preventing burnout that we believe it deserves its own slot. Guaranteeing our employees’ happiness and ensuring this balance are among our top priorities at Agiledrop. We wrote briefly about work-life balance and motivating our team in this blog post
     

Conclusion

While burnout is admittedly a persistent problem, there exist a number of ways of effectively preventing and tackling it. Being aware of it and implementing preventive measures into your very work culture is already half the battle. 

We hope we were able to shed some light on the issue of burnout and provided some guidelines, or at least inspiration, to counteract it. Have any more ideas on how to deal with developer burnout? Or have you spotted other symptoms of burnout in yourself or your team? If we missed something, please let us know! 

Jun 21 2019
Jun 21

"Information is a source of learning. But unless it is organized, processed, and available to the right people in a format for decision making, it is a burden, not a benefit." - C. William Pollard, Chairman, Fairwyn Investment Company

Have you always secretly wanted to spend your evenings writing symphonies, learning about filmography or assessing climate change? Studying niche subjects have traditionally been for niche students. But e-learning platforms have changed all that with the provision for learning almost any subject online.

A student in the front and two behind him sitting on their chairs with a paper and a pen in their hands


Corporate e-learning has witnessed a stupendous 900% growth in the last decade or so. With more and more e-learning platforms flourishing, organisations are striving to be the best to stand apart from the rest. Drupal has been a great asset in powering education and e-learning with its powerful capabilities that can help enterprises offer a wonderful digital experience. Let’s trace the roots of e-learning before diving deep into the ocean of possibilities with Drupal for building an amazing e-learning platform.

Before the internet era

Infographic with ten rows, icons and text showing the timeline of e-learningSource: eFront

A brief history of e-learning can be traced through the compilation made by eFront. Even before the internet existed, distance education was being offered. In 1840, Isaac Pitman taught shorthand via correspondence where completed assignments were sent to him via mail and he would, then, send his students more work.

Fast forward to the 20th century, the first testing machine was invented in 1924 that enabled students to test themselves. The teaching machine was invented in 1954 by a Harvard professor for allowing schools to administer programmed instruction to students. In 1960, the first computer-based training program (CBT program) called Programmed Logic for Automated Teaching Operation (PLATO).

At a CBT systems seminar in 1999, the term ‘e-learning’ was first utilised. Eventually, with internet and computers becoming the core of businesses, the 2000s saw the adoption of e-learning by organisations to train employees. Today, a plenitude of e-learning solutions are available in the form of MOOCs (Massive Open Online Courses), Social platforms and Learning Management System among others.

E-learning: Learn anywhere, anytime

In essence, e-learning refers to the computer-based educational tool or system that allows you to learn anywhere and at any time. It is the online method of building skills and knowledge across the complete workforce and with customers and partners. It comes with numerous formats like the self-paced courses, virtual live classrooms or informal learning.

E-learning refers to the computer-based educational tool or system that allows you to learn anywhere and at any time

Technological advancements have diminished the geographical gap with the use of tools that can make you feel as if you are inside the classroom. E-learning provides the ability to share material in all sorts of formats such as videos, slideshows, and PDFs. It is possible to conduct webinars (live online classes) and communicate with professors via chat and message forums.

There is a superabundance of different e-learning systems (otherwise known as Learning Management Systems or LMS) and methods which enable the courses to be delivered. With the right kind of tools, several processes can be automated like the marking of tests or the creation of engrossing content. E-learning offers the learners with the ability to fit learning around their lifestyles thereby enabling even the busiest of persons to further a career and gain new qualifications.

Merits and Demerits

Some of the major benefits are outlined below:

  • No restrictions: E-learning facilitates learning without having to organise when and where everyone, who is interested in learning a course, can be present.
  • Interactive and fun: Designing a course to make it interactive and fun with the use of multimedia or gamification enhances engagement and the relative lifetime of the course.
  • Affordable: E-learning is cost-effective. For instance, while textbooks can become obsolete, the need to perpetually acquire new editions by paying exorbitant amounts of money is not present in e-learning.

Some of the concerns that are needed to be taken care of:

  • Practical skills: It is considered tougher to pick up skills like building a wooden table, pottery, and car engineering from online resources as these require hands-on experience.
  • Secludedness: Although e-learning enables a person to remotely access a classroom in his or her own time, learners may feel a sense of isolation. Tools such as video conferencing, social media and discussion forums can allow them to actively engage with professors or other students.
  • Health concerns: With the mandatory need of a computer or mobile devices, health-related issues like eyestrain, bad posture, and other physical problems may be troublesome. However, sending out proper guidelines beforehand to the learner like correct sitting posture, desk height, and recommendations for regular breaks can be done.

Building Yardstick LMS with Drupal

OpenSense Labs built Yardstick LMS, a learning management system, for Yardstick Educational Initiatives which caters to the students of various schools of Dubai.

Homepage of Yardstick LMS with logos of schools containing leaves, candle, open books, and firestickYardstick LMS Homepage

The architecture of the project involved a lot of custom development:

1. Yardstick Core

This is the core module of the Yardstick LMS where the process of creating, updating and deleting the nodes take place.

2. Yardstick Quiz

We built this custom module for the whole functionality of the quiz component. It generates a quiz, quiz palette and quiz report after quiz completion based upon the validation of the visibility of the report.

Quiz report of Yardstick LMS with table consisting of columns showing the list of schools, students and grades.


We could generate three kinds of reports: 

  • An individual-level quiz where one’s performance is evaluated
  • A sectional-level report where performance for each section is evaluated
  • Grade-level report where performance for all the sections is compared and evaluated.

For the quiz, we had different sub-components like questions, options, marks, the average time to answer, learning objective, skill level score, and concept. The same question could be used for different quiz thereby minimising the redundancy of the data. Also, image, video or text could be added for questions.

Subcomponents of yardstick LMS with a tabular column for assessing the learning objective and two of the metrics coloured yellow and red.


3. Yardstick Bulk User Import

This module was built to assist the administrators in creating users all at once by importing a CSV file. Also, there is an option to send invitation mail to all the users with login credentials.

Message box for importing users with a blank box and a submit button


4. Yardstick Custom Login

We provided a custom login feature where same login credentials could be used to log into the Yardstick system. That is, we provided an endpoint for verifying the login credentials and upon success, users were logged in.

5. Yardstick Validation

This module offers all the validation across the site whether it is related to access permission or some time validation.

6. Yardstick Challenge

It offers the user an option to submit a task which is assigned to them where they are provided with text area and file upload widget.

Yardstick LMS has an intricate structure

On the end user side, there is a seamless flow but as we go deeper, it becomes challenging. Yardstick LMS has an intricate structure.

We had two kinds of login:

  • Normal login using Yardstick credentials
  • And the other for school-specific login like the Delhi Public School (DPS) users.
Flowchart with rectangles and circles of different colours explaining Yardstick LMS custom loginYardstick LMS custom login for DPS users

For DPS users, we used the same login form but a different functionality for validating credentials. DPS school gave us an endpoint where we sent a POST request with username and password. If the username and password were correct, then that endpoint returned the user information.

If the username was received, we checked on our Yardstick system if the username exists. If it does not exist, then we programmatically created a new user with the information that we received from the endpoint and created a user session. And if does exist, then we updated the password on our system.

Yardstick LMS is designed to govern multiple schools at the same time

We designed Yardstick LMS in such a way that multiple schools can be governed at the same time. All the students of various schools will be learning the same content thereby building uniformity.

The core part of our system dwells in the modules. The module is a content type that can store numerous information like components, concept, description, objective, syllabus among others. 

Several different components can be added like Task, Quiz, Video task, Extension, Feedback, Inspiration, pdf lesson plan, Real life application, and Scientific principles.

Yardstick LMS real-life application component page with an image showing animated human figures and atomic theory written above themYardstick LMS Real life application component page

Schools could opt for different modules for different grades. When a module was subscribed by a school, a clone module of the master module was created and the school copy was visible only to the school. School version could be modified by the school admin as per their needs and preferences. Master module remained the same. While creating a subscription, administrator had to provide the date so that the components were accessible to the students. School admin could set different dates to different components and only the components with past date were accessible.

Flow chart showing rectangles, squares and elliptical circle of different colours to explain module subscription to school in yardstick LMSFlow Diagram of module subscription to school

Also, we provided an option to create a dynamic feedback form for the modules for analysis. Yardstick Admin had the option to design and create a feedback form as per their requirement and could assign it to a particular module. Different types of elements could be utilised for designing the form like rating, captcha, email, range slider, text field, checkboxes, radio buttons and so on.

Message box showing star icons, a blank box and a submit button


Students and teachers need to submit their feedback for each of the modules. On the basis of this, Yardstick team try to improve the content of the system.

Session evaluation page of yardstick LMS with a set of questions on the left and different options on the right and a blank box at the bottom


Also, various roles were defined for users such as Yardstick Administrator, School Administrator, Teacher, and Student.

1. Yardstick Admin

Yardstick Admin can perform all the operations. He or she can create new users, grant permissions and revoke them as well.

2. School Admin

It has the provision for handling all the operation which are only related to their school. School Admin handles the modules and their components and can import user for their school. All school reports and task submissions are visible to School Admins.

3. Teachers

Teachers can view modules and components assigned to their classes and provide remarks to the students for multiple components and they can view all kinds of reports.

4. Students

They can attempt quiz, submit tasks, view components and view their own reports.

What’s the future of e-learning?

According to a report on Research and Markets, the e-learning market is anticipated to generate revenue of $65.41 billion by 2023 with a growth rate of 7.07% during the forecast period.

The report goes on to state that with the advent of cloud infrastructure, peer-to-peer problem solving and open content creation, more business opportunities would pop up for service providers in the global e-learning market. The introduction of cloud-based learning and AR/VR mobile-based learning will be a major factor in driving the growth of e-learning.

The growth of the e-learning market is due to the learning process enhancements in the academic sector

According to Technavio, the growth of the market is due to the learning process enhancements in the academic sector.

Infographic showing statistics on e-learning market with icons representing bar graph, speedometer, horizontal lines, and a bulbGlobal self-paced e-learning market 2019-2023 | Source: Technavio

Following are major trends to look forward to:

  • Microlearning, which emphasises on the design of microlearning activities through micro-steps in digital media environments, will be on the rise.
  • Gamification, which is the use of game thinking and game mechanics in a non-game context to keep the users engrossed and help them solve more problems, will see increased adoption rates.
  • Personalised learning, which is the tailoring of pedagogy, curriculum and learning environments to meet the demands of learners, can be a driving force.
  • Automatic learning, like the one shown in the movie The Matrix where a person is strapped onto a high-tech chair and a series of martial arts training programs are downloaded into his brain, can be a possibility.

Conclusion

It’s a world which is replete with possibilities. As one of the most intelligent species to walk on this earth, we perpetually innovate with the way we want to lead a better lifestyle. We learn new things to gain more knowledge. And in the process, we find ways of improving our learning experience. E-learning is one such tech marvel that promises to be a force to reckon with. It is not a disrupting technology but something that is going to get bigger and bigger in the years to come.

As a content management framework, Drupal offers a magnificent platform to build a robust e-learning system. With years of experience in Drupal Development, OpenSense Labs can help in providing an amazing digital experience. 

Contact us at [email protected] to build an e-learning system using Drupal and transform the educational experience.

Jun 21 2019
Jun 21

I am working with a customer now that is looking to go through a JSON:API upgrade, from version 1.x on Drupal 8.6.x to 2.x and then ultimately to Drupal 8.7.x (where it is bundled into core).

As this upgrade will involve many moving parts, and it is critical to not break any existing integrations (e.g. mobile applications etc), having basic end-to-end tests over the API endpoints is essential.

In the past I have written a lot about CasperJS, and since then a number of more modern frameworks have emerged for end-to-end testing. For the last year or so, I have been involved with Cypress.

I won't go too much in depth about Cypress in this blog post (I will likely post more in the coming months), instead I want to focus specifically on JSON:API testing using Cypress.

In this basic test, I just wanted to hit some known valid endpoints, and ensure the response was roughly OK.

Rather than have to rinse and repeat a lot of boiler plate code for every API end point, I wrote a custom Cypress command, to which abstracts all of this away in a convenient function.

Below is what the spec file looks like (the test definition), it is very clean, and is mostly just the JSON:API paths.

describe('JSON:API tests.', () => {

    it('Agents JSON:API tests.', () => {
        cy.expectValidJsonWithMinimumLength('/jsonapi/node/agent?_format=json&include=field_agent_containers,field_agent_containers.field_cont_storage_conditions&page[limit]=18', 6);
        cy.expectValidJsonWithMinimumLength('/jsonapi/node/agent?_format=json&include=field_agent_containers,field_agent_containers.field_cont_storage_conditions&page[limit]=18&page[offset]=72', 0);
    });
    
    it('Episodes JSON:API tests.', () => {
        cy.expectValidJsonWithMinimumLength('/jsonapi/node/episode?fields[file--file]=uri,url&filter[field_episode_podcast.nid][value]=4976&include=field_episode_podcast,field_episode_audio,field_episode_audio.field_media_audio_file,field_episode_audio.thumbnail,field_image,field_image.image', 6);
    });

});
jsonapi.spec.js

And as for the custom function implementation, it is fairly straight forward. Basic tests are done like:

  • Ensure the response is an HTTP 200
  • Ensure the content-type is valid for JSON:API
  • Ensure there is a response body and it is valid JSON
  • Enforce a minimum number of entities you expect to be returned
  • Check for certain properties in those returned entities.
Cypress.Commands.add('expectValidJsonWithMinimumLength', (url, length) => {
    return cy.request({
        method: 'GET',
        url: url,
        followRedirect: false,
        headers: {
            'accept': 'application/json'
        }
    })
    .then((response) => {
        // Parse JSON the body.
        let body = JSON.parse(response.body);
        expect(response.status).to.eq(200);
        expect(response.headers['content-type']).to.eq('application/vnd.api+json');
        cy.log(body);
        expect(response.body).to.not.be.null;
        expect(body.data).to.have.length.of.at.least(length);

        // Ensure certain properties are present.
        body.data.forEach(function (item) {
            expect(item).to.have.all.keys('type', 'id', 'attributes', 'relationships', 'links');
            ['changed', 'created', 'default_langcode', 'langcode', 'moderation_state', 'nid', 'path', 'promote', 'revision_log', 'revision_timestamp', 'status', 'sticky', 'title', 'uuid', 'vid'].forEach((key) => {
                expect(item['attributes']).to.have.property(key);
            });
        });
    });

});
commands.js

Some of the neat things in this function is that it does log the parsed JSON response with cy.log(body); this allows you to inspect the response in Chrome. This allows you to extend the test function rather easily to meet you own needs (as you can see the full entity properties and fields.

Cypress with a GUI can show you detailed log information

Using Cypress is like having an extra pair of eyes on the Drupal upgrade. Over time Cypress will end up saving us a lot of developer time (and therefore money). The tests will be in place forever, and so regressions can be spotted much sooner (ideally in local development) and therefore fixed much faster.

If you do JSON:API testing with Cypress I would be keen to know if you have any tips and tricks.

Jun 20 2019
Jun 20

We just moved our Drupal site to DigitalOcean and powered it with fully open-source, Kubernetes infrastructure that you could be using too. This is thrilling for us, and will be for you too!

Kubernetes Blog Header

A Little Background

Our very own Tess has been giving the session, “Return of the Clustering: Kubernetes for Drupal” during the last few months at Drupal camps across the U.S. In it she explains how it’s theoretically possible to deploy Drupal in production on a Kubernetes infrastructure. Drupal and Kubernetes don’t naturally play together, but we’ve done some serious work in devising a solution in which they would. For the last six months, Tess has been deep in research and development testing a solution, and last week we were confident enough to launch our own TEN7 site using it. 

Why is This a Big Deal?

Running a Drupal site on Docker in a production environment using open sourced Kubernetes  object descriptors has never been done before—not until now, and it’s all open source.  

“For the longest time, we’ve had a disjunction between what we use to develop sites locally, test sites locally, and what ends up on production environment,” said Tess. “It happens a lot, it’s difficult to get it to be the same thing. You need many more bits of technology, best practices, and discipline to pull it off. Kubernetes is becoming the de facto clustering standard, and they run Docker containers. We already do that locally. We’ve invested time and effort into developing those containers so they run in production.”

Using Kubernetes also solves a problem with scalability on VPS (Virtual Private Server) and shared hosting. “There’s a happy trough in the price curve for hosting at the far end,” said Tess. “If you don’t need the hosting to do much, you can do a lot for very little. But as soon as you get more traffic and need it to do more things, it gets really expensive.” 

“If your only choice is to make the server bigger, that has exponential cost. If you wanted to avoid that, you can scale out instead of scaling up. If you scale out, you need technology to have servers to coordinate with each other. That’s where Kubernetes comes in: it orchestrates the containers on the servers in a timely and flexible fashion.” 

You used to need hosting companies to do the hard work of infrastructure and container orchestration, but Kubernetes does all of the hard work for you. “You don’t have to build cluster orchestration, and you don't have to solve complex problems,” said Tess.

We still needed a partner to furnish the Kubernetes instance, and we chose DigitalOcean. They were one of the first companies to offer Kubernetes infrastructure. “DigitalOcean support for Kubernetes is impressive,” said Tess. “I didn’t expect a hosting company to offer that amount of flexibility, versatility and support versus the cost. We could do this without DigitalOcean, but we really like them. They’re more approachable than Google.”

Why This is Awesome for You

The success of this solution means we can roll out Kubernetes-based Drupal site hosting for our clients. And because we’ve open sourced the description and setup of the clustering itself, you could do it for yourself and your own clients too!

More Control Over Your Site and Fewer Hosting Limitations

The hosting on which your website code resides is the silent partner of your website, and it can either enable your website to be powerful, or curtail its development. 

Agencies that build websites typically don’t do the hosting for clients; they usually just farm it out to hosting companies with whom they have a business relationship. But your website will pay the price if the hosting isn’t up to snuff. “There are a lot of things that you can’t do with some of the popular hosting companies,” said Tess. “If you want certain capabilities, you might get into the ‘if you have to ask you can’t afford it’ category.” 

“Even if the providers let you do certain things, they might make it so you have to modify Drupal in ways to make it work on that particular host,” said Tess. “As a result, it won’t work well elsewhere. We call this ‘vendor lock.’” 

What we’ve done is create an open-source clustering standard that isn’t tied to hosting. “We're using open source containers and orchestration, and Kubernetes has a vendor isolation layer built in,” said Tess. “All this allows you to avoid vendor lock entirely! Our partner DigitalOcean furnishes the Kubernetes instance and they’ve installed the infrastructure around it. There’s nothing vendor-specific about it. We’re just allocating the cluster.” We use their object store called Spaces for file storage, but you could use any other S3 compatible object store on the market.

This Solution Helps Us Help You

The benefit of Kubernetes-based hosting for TEN7 clients is huge: “We can offer purely open source hosting that provides you top-tier hosting functionality, and we can do that at a lower price point than our competitors can,” said Ivan Stegic. “What we’re offering comparatively blows a lot of other agencies out of the water. For a comparable price, we can offer more scalability, bandwidth and versatility, which means we can do more ambitious sites. We’ll also have better tuning and finer control over the environment, allowing us to support our clients better.” 

Using this Kubernetes solution also aligns with TEN7’s love of open source products. “We want to be independent, and using a hosting solution that is supported in the open source and is vendor agnostic, which aligns with our commitment to open-source products and services,” says Ivan Stegic. 

You Could Host It Yourself Too (and We Won’t Be Offended)

We have long relationships with our clients, but if at some point they want to do their own Kubernetes hosting in the future, they can! They can pull the same containers and workflow we’ve been using, and put it on their own Kubernetes host. Since we’ve already architected the hosting, reusing our solution will be easier. “You don’t need to be nearly as much of an architect as I had to be in the first place!” Tess said.

We’d Love to Care for Your Site

We’ll be rolling out this solution to existing TEN7 Care clients over the next few months. In the future, we’ll experiment in setting up a Flight Deck cluster, for people to set up Kubernetes hosting for themselves!

Drop us a note if you’d like TEN7 to care for your Drupal site!
 

Jun 20 2019
Jun 20

For years, community members from Chattanooga talked about their local camp. These community members routinely support other camps, through attendance, volunteerism, and by giving talks. It was our time to return the favor.

Hook 42 not only sponsored the event, but delivered a training and two sessions. From our team Jonathan and Adam attended, and they really enjoyed the time there.

Adam’s Experience

I was grateful to have the opportunity to deliver a full-day training on GatsbyJS on Friday and one of the featured talks on Saturday. I want to recognize my training peer Ryan Bateman who helped out with many of the preparations for the training. I also want to thank attendees who came to either. 

The training was an end-to-end GatsbyJS primer. We set up a Pantheon instance running Umami. We walked through a series of primers and hands on lessons. Most in the room were able to deliver a working Gatsby recipe site to Netlify. It was fun to cover so much material and watch people go from nothing to a functional site. Feedback was positive and it was very helpful to have the super fast Chattanooga internet speeds.

I prepared a brand new talk entitled “Evolving Priorities: Tech, Community, and Impact.” I looked at topics like technical skills, emphasizing the needs of people, and changing our individual frame of reference to what has an impact on the world. I also shared some thoughts on the evolution of Drupal, both from a community and a product. I appreciated those who attended and subsequently gave me feedback for future improvements.

Many people from other close by camps were able to attend. It was so nice to see friends from Asheville and Atlanta to show their support for the deserving Chattanooga crew. Doug Vann, Mike Herchel, Aaron Feledy, and Jordana Fung, among others, also attended from the broader community. It was great spending time with everyone.

I found the camp to be friendly and represent the spirit of those giving back to the Drupal community. Organizers selflessly volunteered their time and committed to helping their guests have a wonderful time. In particular, I was able to go to Rembrandt coffee, Freemont (burger and craft beer night), and Heaven and Ales brew pub. It was a beautiful area with green scenery and beautiful waterways.

Jonathan's Experience

And so we meet again. 2019 was my 2nd year at Drupal Camp Chattanooga, and it was even better than the first. Hanging out with the locals and those visiting from other areas is one of my favorite parts of attending a Drupal Camp. Last year I had to rush home and didn’t get much of a chance to get the full experience, but this year was different in all the best ways.

We started the camp off right with a game night at Code Journeymen’s offices and had a rambunctious night of accusing people of fascism while enjoying each other’s company. It was a welcoming and comfortable atmosphere that, as a camp co-organizer myself, I admired greatly.

After I had a short adventure of being lost in the parking lot, the camp itself seemed to go off without a hitch. They had a lot of really great presentations. I evolved my priorities with Adam, learned about fixing my mistakes as a developer with Jordana Fung, finally got to see Mike Herchel’s Front-end Performance talk, and over lunch looked at some code and talked about custom composite/rich fields with Hawkeye Tenderwolf. It was great times all around.

It was also a great enjoyment to have the opportunity to give my presentation, Glitch: Love to Learn the web again, as the Glitch product and community are a topic I’m very excited about. Reception of the talk seemed to be good as well. There were multiple outstanding questions that I tried my best to answer, and I even remembered to repeat one of them back on microphone for the recording. Otherwise, it was basically a blur of me gushing over Glitch. Check it out!

After camp wrapped up, we were off to the arcade. Rather, a pinball museum, where we played some games older than anyone I’ve ever met and played on another machine that had to weigh over 1,000lbs. We enjoyed a round of pizzas and beverages before hitting the town, exploring a few of Chattanooga’s secrets.

All-in-all, what a great camp experience. As a co-organizer of Drupal Camp Asheville I have some sense of what it takes to make a camp happen, and those Chattanooga folk make the hard work look easy. I can’t recommend enough that you try to attend Drupal Camp Chattanooga 2020.

*Image taken at Drupal Camp Chattanooga, borrowed from Twitter.

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