Upgrade Your Drupal Skills

We trained 1,000+ Drupal Developers over the last decade.

See Advanced Courses NAH, I know Enough
Jun 24 2020
Jun 24

Despite all the disruption and technological advances that occurred over the past few years, the structure of higher education institutions and state of academic curriculums are closer to what would be the case during the early stages of industrialization.

In 2020, we are well into the digital era and students face a set of challenges unique to their age and technology plays a significant role, both as part of the challenge and an opportunity to overcome those challenges.

Can schools and universities afford to operate using the existing model? What technologies will be needed? How will higher education experiences change in the coming years?

One fact is undeniable; higher education should focus on the direct needs of students and the demands of an increasingly digital market in the future.


1. Flexible Learning Experiences

A flexible learning experience is essential these days; not just because of unexpected force majeure circumstances such as the global COVID-19 outbreak.

New challenges have arisen due to the shift in the digital economy's demand for new skill sets and capabilities. The job market has witnessed a sharp demand for "digital", "innovation", "data science", and "information" in their job descriptions and titles.

The current curriculum being taught is fast becoming irrelevant and seems rigid to those seeking to learn a new in-demand skill or enhance their professional status. As a result, learning centers that provide focused online workshops and certifications are increasingly becoming a popular and cheaper alternative thanks to the flexibility, focus, and accessibility they have on offer for learners.


“The learner, the learning provider and the employer all are speaking different languages that don’t interconnect,” said Michelle Weise, chief innovation officer at the Strada Institute for the Future of Work.

Universities and schools should consider the subscription-based model where students would pay monthly fee subscriptions to attend the modules and courses they prefer instead of attending 9 hour school days. Learners can complete their selected courses at their own pace and enjoy convenient accessibility.

Students should be able to access specific learning resources, materials, libraries, labs, and digital learning activities at any time from anywhere across all devices.

Flexibility and accessibility are standard requirements for any digital experience and should be at the forefront when considering an enterprise-level digital project. But it's easier said and done - identifying and investing in the right IT infrastructure will be essential to support a comprehensive digital learning experience for your students.

2. Remote and Distance Learning

The days of strict daily hours of attendance of pre-fixed classroom schedules are over. 

We were inevitably going to rely more heavily on remote and distance learning in the upcoming years, however; the recent outbreak of COVID-19 across the globe has accelerated this process.

They realized the importance of aligning their strategic business needs with the ideal mix of technology value-stack required to ensure their digital growth and future.

We specialize in providing higher education institutions with comprehensive digital transformation solutions based on Drupal and we witnessed a sharp increase in both verbal interest and demand from schools, universities, and even teachers for our services.

Schools and universities have immediately reallocated their resources and budgets to prioritize remote and distance learning. Unfortunately, not all schools and universities are technologically capable to embrace full-fledged remote learning as the norm.

Almost every industry has been disrupted by the outbreak of Coronavirus but schools and universities have been hit the hardest because they had to reckon with the fact that their entire business model and operations have to change. Do they even need a campus anymore?

CS: American School of Dubai

Drupal 8 Transforms the American School of Dubai

3. Immersive Learning Experiences

There is no doubt that flexibility, accessibility, and maximum immersion will be critical in appealing to students around the world. 

This has led over 70% of the top 100 universities around the world to adopt Drupal which enabled them to build a truly digital campus and immersive learning experience for their students and faculty. Drupal has enabled these institutions to seamlessly integrate essential cutting-edge solutions that complement and support their digital transformation.

Essential integrations such as VR.

VR implementation in learning is on the rise and enables any school or university around the world to offer classes to a global audience of interested pupils. For example, a student from Beijing can attend a French language class at a middle school based in San Francisco through VR.

Some universities have introduced A.I. into their learning experiences as well.

Through A.I., students can learn from a robot teacher. This teacher is capable of grading, checking spelling, grammar, etc. and also monitor the performance of students to identify gaps in knowledge and weaknesses which in turn can be analyzed by academic advisors to further support their students improve their grades and performance.

There are a number of interesting experiments being run by Georgia Tech's Center for 21st Century Universities (a Drupal 8 platform) to identify which solutions work and which don't that are trying to find the right balance with regards to the involvement of A.I. in education and learning experiences.

Who Leads Digital Transformation?

Transformation is inevitable but it is often misguided due to lack of education (pun unintended) and awareness regarding the technologies that will be essential to elevate a university or school into a modern higher education experience.

Academics and higher education institutions must realize that technology alone is not the answer. It is only the tool.

Top management and leadership at academic institutions must drive the change and digital transformation based on facts and solid requirements in a bid to identify which technologies will be essential to build the foundation for an evolving interconnected web of digital learning assets and platforms.

Some have even adopted the wrong tools - technologies that do not match their digital transformation requirements or support their objectives.

Technology alone won’t be the answer to the existential challenges that schools and universities face. The culture of teaching and learning must also change. The real question that needs to be addressed is: what good or value is higher education supposed to deliver?

Addressing the needs of students already living in a digital environment and a digital marketplace will be paramount and Coronavirus might just be that disruptor that forces us to accelerate the digital transformation process.

One thing is for sure; it will force higher education institutions and academics to go back to the roots of education: storytelling, research, and development.

In the meantime, we will continue to provide our assistance to universities and schools in identifying the appropriate technologies needed to develop the ideal digital learning experience for their students.

Questions About Drupal 9

Questions About Drupal 9?

Jun 24 2020
Jun 24
Jun 24, 2020 Product

We collected user feedback from which new functions were built, we also improved existing features and did a design update. The highlights:

 Group types

The generic term 'group' turned out to be too abstract, we have now divided this into:

  • Company wide
  • Teams
  • Projects

group types

Activity badges in main menu

As soon as there is activity in a group, team or project, you will now see this with badges in the main menu on the left:

Activity badges

Text documents / Notebooks

It is now possible to create text documents, you can also use this as a notebook. Some examples:

  • (Project) documentation
  • Ideas
  • Manuals
  • General business information
  • Onboarding information, for new employees
  • Brainstorms
  • Event preparation.
  • ... and basically everything you want to share and manage in a text document.

The documents can be added in folders, in order to provide structure for multiple documents.

Add new text document:

Text doc

Format text document:

Text doc 2

  1. Title
  2. Content
  3. Add attachments
  4. Send e-mail notifications

Organize text documents in folders:

Text doc

 

When you add new members, they are automatically placed in the 'company wide' groups and therefore have immediate access to general information such as company manual, onboarding information or house rules.

Stream items: chats vs other activity

A visual distinction has now been made between chat items and other activity:

Stream items

Design update

An upgrade has been made in the design: more modern color scheme, font and icons, which also improves readability and usability:

update design

Tuning existing features

For optimization, we worked on about ~30 minor issues on existing features.

Try it instantly 

Would you like to try Lucius right now? Click here to get started.

Install, host and customise it yourself, 100% open source

Please check this project page for detailed information.

Feedback, feature request

Please let us know your feedback or/and feature requests in the comments below, via our support form or via the open source issue queue.

Jun 19 2020
Jun 19

With the global crisis establishing digital transformation as an unavoidable strategy, many businesses are now thrown into digitalizing their operations, or suddenly needing to dedicate everything they’ve got into streamlining their digital transformation.

Due to all this, we’re also seeing a growing demand for services provided by digital agencies through outsourcing or staff augmentation. Whether that be design, development or marketing, the ability to rely on the proven expertise of a digital agency sure is a welcome one. 

But with so many agencies now offering and advertising their services, how can you start looking for the right one for you? And how can you know you’ve found the right partner before actually working with the chosen agency?

This is exactly what this post will focus on: how to find a digital agency that will take care of your specific digital experience needs. We’ll define the three most important criteria for determining if you’ve found the right one, as well as let you in on some convenient places to look at in order to check that they meet those criteria. 

How do you find the right digital agency for you?

So, let’s say you’ve found a number of agencies that could meet your digital experience needs, and you’re now faced with choosing one among this (likely large) selection.

The first thing you need to determine is, well, their expertise, industry and/or technology-wise, that is. If an agency doesn’t specialize in the tool/technology you need, or doesn’t follow your desired methodologies, you can safely eliminate it in this initial stage.

But things get a little more tricky when you only know what you need, but not which technology to use to achieve that goal. It certainly helps if you’re at least somewhat familiar with the capabilities and limitations of different tools and platforms.

The best partner agency would ideally also help you make the right technology selection in addition to helping you deliver the project. This also means that the partner will work closely with you, and not just execute the work on their own without any oversight and/or control from your side.

Second, you need to determine if your potential partner’s company culture aligns with your own. What are their mission and vision? How do they treat their employees? If they’re an agency that specializes in open-source software, how active are they in those respective communities?

Due to the globally distributed, remote nature of work having eliminated a lot of cultural and physical barriers which used to hinder effective collaboration, culture fit is much less important than company culture fit. 

So, you’ll want to check out their company culture, their communications (both internal and external), stuff like that. The agency’s blog will typically be a great resource for all of these; blogs often contain posts on different topics, ranging from technology tutorials and industry insights to company-related posts and pieces of news.

At Agiledrop, we even have a Community section of our blog, which is mostly dedicated to interviews with members of different open-source communities and industry experts discussing a variety of topics. 

Another great way to ascertain community involvement is social media. In the tech communities, Twitter is probably the go-to platform, but other giants such as Facebook and Instagram also come into play as more company-oriented platforms, while LinkedIn is a great place to learn about individual team members. These are all places where you can learn a lot about a company through content about their culture, events and contributions.

Some open-source projects such as Drupal have a system set up that allows a company’s contributions to the ecosystem to be recognized and displayed on their official website. A bit of a brag here - over the past few months, our team has done a huge amount of work contributing to Drupal, racking up over 100 issue credits in this short time!

Okay, so, when you know that the agency you’re eyeing specializes in the technologies that you need, or offers to help you determine the right tech stack for your project, and also their values and culture align with yours, what’s the last thing you need to do?

Well, you need to find out if they actually own up and deliver on what they offer. And how do you do that?

A lot of companies will have a Clutch profile with additional information and/or client testimonials. Other platforms such as TopDevelopers also do regular technology-specific lists of top companies in a certain field.

But perhaps the best bet would be to just look at the agency’s website, as most of them will feature case studies and client testimonials right there. 

You can learn about the types of companies they’ve worked with, types of projects they’ve worked on, and even more specific information such as details about developer diligence, for instance, or a testament to your potential partner’s timeliness and/or efficiency in communication.

It can be especially helpful if you discover that the agency has previously worked with companies and on projects that are similar to yours - e.g. you’re an educational non-profit from London, and find out they’ve successfully worked with a higher ed institution from, say, Bristol. 

If you manage to find a company that satisfies all three criteria - so, inudstry/technology expertise, company culture and proof of success - you can rest assured that you’ve found the right partner, either for your next project where you just need to scale temporarily, or a long-term digital partner that you know you’ll be able to rely on for all your future digital needs.

Conclusion

Illuminated lightbulb lying in sand

Finding the right partner agency among a plethora of options can be a difficult task. We hope this blog post has armed you with the right set of tips to make the process of selection at least somewhat easier.

If you’ve checked out our blog and social media, and discovered that Agiledrop would be the best fit for your development needs, reach out to us and we can start talking about how we can help you out.

Jun 18 2020
Jun 18

Our normally scheduled call to chat about all things Drupal and nonprofits will happen TODAY, Thursday, June 18, at 1pm ET / 10am PT. (Convert to your local time zone.)

No set agenda this month -- we can discuss whatever Drupal related thoughts are on your mind. If you would like to contribute to the conversation, please join us. 

All nonprofit Drupal devs and users, regardless of experience level, are always welcome on this call.

Feel free to share your thoughts and discussion points ahead of time in our collaborative Google doc: https://nten.org/drupal/notes

This free call is sponsored by NTEN.org but open to everyone.

REMINDER: New call-in information -- we're on Zoom now!

View notes of previous months' calls.

Jun 18 2020
Jun 18

Rahul Dewan sent us this story, documenting how the Drupal India Association was formed, and we wanted to reproduce it here to help it reach the greatest audience. As you will read, the Drupal India Association has significantly helped the Drupal community in India work together to grow the community and joins 28 other local associations around the world. The Drupal India Association is a great example of this, and we’re thrilled to see the momentum behind the community there. 

The formation of a formal ‘Drupal India Association’

For several years, a conversation about the need to form an India-centric Drupal Association has been doing rounds among Drupal business owners. However, this idea finally found conviction and the necessary determination to push it through, when Shyamala Rajaram signed-off from her position on the Board of the Drupal Association after completing her two-year term.

Shyamala’s voice and tone over the phone call one morning, was so full of enthusiasm and energy that inspite of all my skepticism and reservations of ‘why do we need a legal entity to do all the good work we want to do?’, melted away. “We Indians can make so much more impact in the world of Drupal!”, she said. Almost immediately, under Shyamala’s leadership, was laid the foundation of the ‘Drupal India Association’ (DIA) just before the Drupal Camp Delhi in June 2019.

In my experience, it’s the inertia and if i may, a bit of analysis-paralysis, which holds us back from making a determined push to make things happen. Then started the process of forming a board, enrolling all the business owners and key community members to form a formal board. 

The following companies came forward to contribute seed money of Rs.21,00,000 (approx $30,000) to form a kitty: 

  1. Ameex Technologies
  2. Axelerant Technologies 
  3. Innoraft Solutions
  4. Open Sense Labs 
  5. QED42
  6. Srijan Technologies
  7. Unimity Solutions 

The ambition of contribution and influence

By the time Drupal Camp Pune happened in September 2019, what we finally had in place was a functional yet loose governing body — with pretty much every leader from across six cities in India. Inspite of the informality of the board we starting collaborating exceptionally well. On the sidelines of the Pune Camp we stated our ambition of creating a sphere of influence in the entire Indian Ocean Rim, and agreed to not only limit our influence to India.


Board meeting in Pune.  

All of the members present were patting ourselves about the high number of contributions that India makes to Drupal. Dipen Chaudhary, the pioneer of the Drupal community in India and our board member, busted our little bubble by reminding the group that it was a classic of ‘quantity of quality’ and that contributions coming from India were much lower in the rung while all the heavy lifting such as contributions to the Drupal Core were made by the west, Americans in particular. 

Meanwhile, with Prasad’s help we were able to get initiatives like offering discounted Acquia Certifications at every camp. 

Our ‘Big-Hairy-Audacious-Goal’ (BHAG)


After the Chennai Board Meeting

On the sidelines of the Drupal Camp Chennai in December 2019 Shyamala invited—Shri Ramraj the founder of Sify and an advisor and board member of some of the largest Indian IT service companies. We took turns in sharing what we think was inspiring us to come together. Not impressed, Ramaraj prodded us to think of some big goals. He said that coming together is easy, but staying together requires a North Star, and nudged us to think of some big ambitious goals. 

Dipen’s reality check of the Indian contributions had been bothering me since our meeting in Pune. Drupal 9 was on the cards. For us, it wasn’t hard to put two-and-two together and suggest an audacious goal of becoming the largest contributor to Drupal 9 by June 2020 when D9 releases. A lot of anxious looks and pin-drop silence later, a consensus was reached— that we are going to go after this goal. 

Personally, true to the Indian tradition, i felt like touching Ramraj’s feet, truly living by the Indian tradition of showing respect to Gurus or teachers.

Enter ‘COVID-19’ 

Under Mukesh’s leadership Drupal Camp Kolkata planned for March 2020 was in full swing. All the funds being raised were for the first time were being raised under the aegis of Drupal India Association. Excitement levels were high. 

And then came the Covid crash. Drupal Camp Kolkata was cancelled. All the money from the various sponsors of the camp returned. Down but not out! 

Not letting the ball drop

Fortnightly recurring calls and Shyamala showing up on them each & every time, ensured that the group did not fall back into inertia. Our event calendar for Drupal Camps, Meetups, Contribution days agreed to in Chennai, ensured that our activities and also North Star goal remained in sight. 


A social promo prepared for excitement of release of Drupal 9 

Meanwhile, Piyush Poddar led our social media charge and designed systems to ensure Drupal agencies get into a healthy competition of contributing content to be promoted under DIA. 

Drupal Cares
We joined hands as a group to run campaigns for the ‘Drupal Cares’ initiative asking Drupalers in our respective companies to sign up as members and also donate. 

Drupal 9 Porting Weekend
Surabhi Gokte worked with Gábor Hojtsy to help organise the Drupal 9 porting weekend on May 22–23. Led by 10 mentors, 45 Indian Drupalers worked on 165+ modules for porting over to D9.

Under Dipen and Rachit’s leadership, Surabhi is now pushing forward to put together a plan for an all-India online event — our next BHAG (phew!). Do look for news on Drupal Groups for this.

Well, what about our North Star?

When we setup our North Star goal we had decided that our developers would ofcourse continue to tag their respective companies but additionally would add DIA as the client. 

As i write this post, Drupal India Association, has risen from zilch to being at position #7 on the Drupal Marketplace in terms of contributions.

Drupal contributions listing for DIA

While we will not end up meeting our BHAG ‘by June 2020 when D9 releases’, we will continue to strive as a group to become ‘the largest contributor to Drupal 9’.

All credit to the contributing developers and community members

None of our North Star BHAG could ever be possible without all the unnamed Indian developers working in several member companies who’ve been spending time doing Drupal contributions, including on weekends and after-office hours. Contributors like Prof. Sunthar, Prafful, Vidhatananda, Hussain, Rakhi, Vijay, Surabhi, Sharmila cannot go without mention. 

At the Drupal Association, we look forward to hearing more from Rahul and their BHAG.

Jun 17 2020
Jun 17

This is the sixth post in our series about integrating Drupal.org with a 3rd party developer tooling provider:

In March of last year the team here at the Drupal Association migrated all of the Git repositories at Drupal.org from bespoke Git hosting to a self-hosted GitLab instance. This was a major milestone in modernizing the developer workflow, immediately providing better search within project codebases, a better code viewer, and direct code editing in the browser for project maintainers.

However, we know that the primary feature the community has been waiting for is merge requests. We're very excited to report that we're now very close to opening up a beta test of merge requests integrated with Drupal.org issues.

Stepping back for a moment, let's remember the ideal contribution flow that we defined when evaluating our Developer tool options: 

Drupal Flow

  • The issue itself should remain a single-threaded conversation for discussing the particular problem to be solved.
  • Every issue will be associated with one canonical issue fork(with multiple branches, as needed) which can be collaborated on by any contributor, and merged by a project maintainer.
  • Contributors will be able to modify the code in these issue forks by:
    • Checking out the code and committing/pushing changes to the workspace.
    • Inline editing files using GitLab's web interface.
    • Legacy: uploading a patch.
  • All types of contribution—whether merge requests or the legacy patch workflow—will continue to trigger DrupalCI testing.
  • Issue forks can be rebased (manually or automatically) when needed to resolve conflicts with upstream commits.
  • Contributors and project maintainers will be able to comment on individual lines of code.

The foundation for this work is the ability to create these issue forks from an issue on Drupal.org. This involves building an interface from Drupal.org that creates an issue fork in GitLab associated with the Drupal.org issue, and then any Drupal.org user can push to that fork and branches within it. Maintainers may then merge this work from a branch on the issue fork the project.

That foundational work to create the necessary git hooks and access control management is now complete.

The next steps are:

How can you get involved?

If you are a contributed module maintainer, and would like to be a part of the early beta test program for Drupal.org-integrated GitLab merge requests, please indicate your interest by posting a comment to this issue with a list of projects you would like to opt-in.

When will merge requests be available to the community at large?

Creation of issue forks and branches will be available to a limited subset of projects this week, the week of June 14th, 2020. Over the course of the next several weeks we hope to implement the additional UI features that will display relevant information about the issue forks back in the Drupal.org issue, and ultimately allow merge requests themselves.

We hope to have the beta of merge request functionality available to some projects no later than DrupalCon Global, in Mid-July. From there, we'll work through feedback from our beta testers, and work with Drupal core maintainers, to enable issue forks for all projects in the coming months

We hope that you're as excited about this update as we are. It represents a lot of thought on the part of many community contributors, and a lot of work on the part of the Drupal Association staff.

Post-Script - What about DrupalSpoons?

As you read this update, many of you may be wondering how this work fits together with an emerging community initiative called DrupalSpoons. DrupalSpoons is an effort to not only use GitLab for merge requests, code viewing, inline editing, etc… but also to replace Drupal.org issues and DrupalCI with their GitLab equivalents, unifying the developer experience in a single UI.

To be clear, neither we at the Drupal Association, nor the DrupalSpoons initiative are recommending that projects at large begin migrating to the current experimental DrupalSpoons environment. Rather, DrupalSpoons is encouraging experienced maintainers who want to try the workflow as early adopters to try managing their projects on DrupalSpoons. Their goal is that initiative will prove new workflows and ideas that can be brought back into the official community tools on git.drupalcode.org.

The DrupalSpoons contributors have done some helpful and innovative work so far. We appreciate seeing contributors pushing the boundaries of what can be done with 'off-the-shelf' tools, and there's potentially quite a lot we might learn from this work that will inform future tooling for the Drupal project. For example, it's likely that we'll look to DrupalSpoons' use of GitLabCI as we look towards the next generation of DrupalCI.

We are always watching and listening to see what the community wants and needs for Developer Tools. Over time, new tools emerge that add significant value. As the Drupal Association, being responsible for maintaining these tools, we would like to approach each component independently (i.e: look at merge requests, issues, or GitLabCI, each independently) as the DrupalSpoons project continues.

In the meantime, we are moving forward with integrating GitLab merge requests with the Drupal.org issue queues. Once that's complete, we'd like to see a gap analysis to see what would be gained and lost when comparing Drupal.org issues with GitLab issues.

Jun 17 2020
Jun 17
Project: Drupal coreDate: 2020-June-17Security risk: Less critical 8∕25 AC:Complex/A:User/CI:None/II:Some/E:Theoretical/TD:UncommonVulnerability: Access bypassCVE IDs: CVE-2020-13665 Description: 

JSON:API PATCH requests may bypass validation for certain fields.

By default, JSON:API works in a read-only mode which makes it impossible to exploit the vulnerability. Only sites that have the read_only set to FALSE under jsonapi.settings config are vulnerable.

Solution: 

Install the latest version:

Versions of Drupal 8 prior to 8.8.x are end-of-life and do not receive security coverage. Sites on 8.7.x or earlier should update to 8.8.8.

Reported By: Fixed By: 
Jun 17 2020
Jun 17
Project: Drupal coreDate: 2020-June-17Security risk: Critical 17∕25 AC:Complex/A:None/CI:All/II:All/E:Theoretical/TD:UncommonVulnerability: Arbitrary PHP code executionCVE IDs: CVE-2020-13664Description: 

Drupal 8 and 9 have a remote code execution vulnerability under certain circumstances.

An attacker could trick an administrator into visiting a malicious site that could result in creating a carefully named directory on the file system. With this directory in place, an attacker could attempt to brute force a remote code execution vulnerability.

Windows servers are most likely to be affected.

Solution: 

Install the latest version:

Versions of Drupal 8 prior to 8.8.x are end-of-life and do not receive security coverage. Sites on 8.7.x or earlier should update to 8.8.8.

Reported By: Fixed By: 
Jun 17 2020
Jun 17
Project: Drupal coreDate: 2020-June-17Security risk: Critical 15∕25 AC:Complex/A:None/CI:Some/II:Some/E:Theoretical/TD:AllVulnerability: Cross Site Request ForgeryCVE IDs: CVE-2020-13663Description: 

The Drupal core Form API does not properly handle certain form input from cross-site requests, which can lead to other vulnerabilities.

Solution: 

Versions of Drupal 8 prior to 8.8.x are end-of-life and do not receive security coverage. Sites on 8.7.x or earlier should update to 8.8.8.

Reported By: Fixed By: 
Jun 17 2020
Jun 17

This is not a migration

Previously, a major version update for Drupal implied a time-consuming migration process. It usually involved content migrations, configuration changes and porting modules to enable them to work properly. In some cases, migrating took nearly as much effort as rebuilding a site from scratch. 

This time however, upgrading will most probably have none of that. In fact, according to the founder of the Drupal project, a key target when developing Drupal 9 was ease of upgrade (https://dri.es/making-drupal-upgrades-easy-forever). Version 8 was all about dealing with technical debt so that future releases would be like they are in WordPress: painless, fast, and fun. With Drupal 9, this has finally been accomplished.

There’s plenty more shiny new stuff under the hood that propels Drupal into this new era of digital experience frameworks.

What’s great about Drupal 9

Ease of upgrade is not the only new feature in Drupal 9. There’s plenty more shiny new stuff under the hood that propels Drupal into this new era of digital experience frameworks. What we are most excited about is its API-first development. Drupal now includes JSONAPI in core. This means Drupal is no longer the traditional monolithic cms we’ve come to know. Instead, it is now built to support headless applications, third-party data integrations and pretty much any modern innovative use cases for the open web. Furthermore, editorial flexibility and content management experience both took huge leaps forward.

Upgrading from Drupal 8

Drupal site owners who have been keeping their Drupal install up-to-date are in for the smoothest ride. The only differences between Drupal 8.9.0 and Drupal 9 is the removal of some deprecated APIs and the inclusion of updated third-party dependencies, such as Symfony and Twig. As long as the modules you have in use do not rely on deprecated code or libraries, you should be good to go.

This how our Drupal experts prepare for a smooth operation when upgrading a Drupal 8 site to Drupal 9: 

  • Ensure that a site is running the latest stable version of Drupal 8 and any contributed modules installed
  • Install and run the Upgrade Status module. This tool integrates into the site’s status update to check system requirements and contrib module compatibility for Drupal 9.
  • If we run into contrib modules with compatibility issues, scan the respective module’s Drupal.org page and issue queue to find out about their Drupal 9 readiness and possible solutions or workarounds.
  • Check custom modules for use of deprecated libraries or APIs. The Rector module is often very helpful. It automates PHP code upgrades by renaming classes, methods, properties, namespaces and constants.
  • Check the hosting environment and make necessary changes if needed. The Upgrade Status module should point out the system requirements for Drupal 9.

After completing these steps, we are ready to update the Drupal core to version 9.

Upgrading from Drupal 7

For Drupal 7 site owners, there is no clear upgrade path. Upgrading from Drupal 7 usually involves rebuilding the site in the new version and migrating all content and configuration to the new site. This may require more resources, but it is a great opportunity to rethink the site structure and implement some major improvements.

We’re here to help

Whatever your current situation, we are here to help. We combine strategy, design and development on a daily basis to help our clients solve complex business challenges. And our Drupal migration experts are more than comfortable upgrading or migrating any complex website to Drupal 9. 

Send us an email or give us a call to discuss your project with us! We’re happy to help.
 

Jun 17 2020
Jun 17

Looking for More Drupal Event Organizers. This must be the place.

It feels like a lifetime ago that the event organizers’ request to become an official working group was approved by the Drupal Association at DrupalCon Amsterdam. Since then, 2020 has been a year that no-one will forget—from a global virus to social justice demonstrations—the world as we know it has been forever changed. 

Lessons We Are Learning in 2020

So far in 2020, we have learned some valuable lessons that we think will help us be a better working group moving forward. 

Organizing Events is Hard. Organizing volunteer-led events is difficult already, let alone during complete uncertainty. Many event organizers have had to make very difficult but swift decisions by either canceling or trying to pivot to a virtual conference format. 

Finding the Right Time is Hard. Organizing a global group of volunteer event organizers is also hard. As someone who has had little time on international teams, I admittedly thought of finding a meeting time a breeze. I was completely wrong. 

Global Representation is Hard. One of our top priorities was to have global representation to help foster growth and collaboration around the world but unfortunately due to either the meeting times or not enough focused marketing on international event organizers the participation was just not where the board felt it should be.

Changes We are Making

After a few emails and some friendly debates, the board looked for opportunities for change that can help solve some of the lessons we have learned. 
 
Alternating Meeting Times in UTC Format. To help foster more international participation, all scheduled meetings will alternate times all marketed and posted in the Coordinated Universal Time (UTC) format. Public meetings will now be at 12:00 pm UTC and 12:00 am UTC.   

Increase Board Membership to 9. The group decided to expand the board members to 9. We are highly encouraging organizers from around the world to submit their names for interest to increase our global representation. 

Maintain and Recruit Advisory Board Members. Succession planning is critical for any operation, and our advisory board provides more flexible commitment in participation which we hope will be our number one resource for new members down the road. 

Board Members Nominations. In addition to expanding the number of board seats, Suzanne Dergacheva from DrupalNorth (Canada) and Matthew Saunders (DrupalCamp Colorado) have accepted their nominations from advisors to board members. 

Current Board Members

  • Camilo Bravo (cambraca) - DrupalCamp Quito - Ecuador / Hungary
  • Baddý Sonja Breidert (baddysonja) - DrupalCamp Iceland, Germany, Europe, Splash Awards - Europe
  • Kaleem Clarkson (kclarkson) -DrupalCamp Atlanta  - Atlanta, GA, USA
  • Suzanne Dergacheva (pixelite) - DrupalNorth - Montreal, QC CANADA
  • Leslie Glynn (leslieg)  Design 4 Drupal Boston, NEDCamp - Boston MA
  • Matthew Saunders (MatthewS) - Drupalcamp Colorado - Denver, CO, USA
  • Avi Schwab (froboy) - MidCamp, Midwest Open Source Alliance - Chicago, IL, USA

Things We are Working On

There are so many things that all of us organizers would like to get working, but one of our goals has been to identify our top priorities.

Event Organizer Support. We are here to help. When volunteer organizers need guidance navigating event challenges, there are various channels to get help. 

Drupal Community Events Database. In collaboration with the Drupal Association, the EOWG has been working on putting together a new and improved event website database that will help market and collect valuable data for organizers around the world.
Submit your event today: https://www.drupal.org/community/events

Drupal Event Website Starter kit. To help organizers get events up and running quickly, an event website starter kit was identified as a valuable resource. Using the awesome work contributed by the Drupal Europe team, JD Leonard from DrupalNYC has taken the lead in updating the codebase. It is our hope more event organizers will help guide a collaborative effort and continue building an event starter kit that organizers can use. 

Join the Event Organizer Slack here and Join #event-website-starterkit

Seeking Event Organizers Board Members and Advisory Committee Members - Submit Your Nomination Today

The Drupal Event Organizers Working Group is seeking nominations for Board Members and Advisory Committee Members. Anyone involved in organizing an existing or future community event is welcome to nominate. 

EOWG Board Members. We are currently looking for nominations to fill two (2) board seats. For these seats, we are looking for diverse candidates that are event organizers from outside of North America. Interested organizers are encouraged to nominate themselves. 

EOWG Advisory Committee. We are looking for advisory committee members. The advisory committee is designed to allow individuals to participate who may not have a consistent availability to meet or who are interested in joining the board in the future. 

Nomination Selection Process: All remaining seats/positions will be selected by a majority vote of the EOWG board of directors. 

Submit Your Nomination: To submit your nomination please visit the Issue below and submit your name, event name, country, territory/state, and a short reason why you would like to participate.  

Issue: https://www.drupal.org/project/event_organizers/issues/3152319

Nomination Deadline:  Monday, July 6th, 11:59 pm UTC 

File attachments:  tim-mossholder-GOMhuCj-O9w-unsplash.jpg
Jun 17 2020
Jun 17

Last month, the Drupal community was abuzz with anticipation of version 9. Our recap of May’s top Drupal posts, then, features a lot of those related to the release of Drupal 9, from the new Drupal brand to recollections of the Drupal 9 Porting Weekend. We hope you enjoy revisiting them!

New Drupal Brand Ready for Drupal 9 Launch

Let’s start with the already introduced new Drupal brand, unveiled early enough for all Drupal 9 related messaging to feature the updated branding. In this first post, the Drupal Association’s CTO Tim Lehnen introduces the new Drupal logo which aims to reflect the flexibility and modularity of the CMS, and the strength of its connected community. 

The new design, created by the Italian company Sixeleven, prioritizes continuity and is planned on being used for Drupal 10 and beyond. The inner drop idea was inspired by a past DrupalCon logo design. While the new logo has become the standard in all messaging, the famous Druplicon still exists, along with its many variations, of which we’ll likely see more again as the new Drop is reimagined. 

Read more

The bliss of contributing to Drupal 9

The second post on this month’s list, written by Hadda Hreiðarsdóttir of 1xINTERNET, functions kind of as a second part to their post about the Drupal 9 Porting Weekend, with the first post announcing the event and this second one providing a recap of it. 

1xINTERNET’s main goal was providing a stable release for every module maintained by someone from their team. They worked on 46 different projects, produced 15 stable Drupal 9 projects, enabled several first-timer contributions, all while working together in the true spirit of Drupal. 

You’ll also find first-hand recollections from specific team members in the post. Big kudos to the entire 1xINTERNET team for their strong commitment to the project and its community!

Read more

Thanks for making a difference at Drupal 9 Porting Weekend!

Next up, we have another post about the Drupal 9 Porting Weekend on May 22 - 23, this one by the Drupal 9 initiative coordinator Gábor Hojtsy. Following the success of the first Drupal 9 Porting Day Gábor organized in April, he decided to do another event lasting the whole weekend. 

This one turned out to be even more successful, with a large number of people and organizations actively participating and working on over 500 issues during the weekend. The weekend and the days following it also produced more daily Drupal 9 ready projects than any day before. As such, the two events were definitely important last steps towards Drupal 9 readiness.

Read more

Multilingual Drupal - Part 1: The Process

Moving on, we also really enjoyed Amazee LabsChristophe Jossart’s guide to creating multilingual websites and web applications with Drupal. In part one, Christophe covers the basics you need to get started, such as the main considerations and concepts.

He starts off with how to define the right approach to the translation strategy, then continues with some of the most important concepts for multilingual Drupal and the expectations of different stakeholders. 

Next, he gives a summary of the translation features in Drupal Core and some contributed solutions, e.g. Translation Management Tool (TMGMT). He finishes the post with some quick tips and a list of additional resources to check out.

Read more

Accelerating Drupal 9 module and theme readiness with automated patches

We continue with a post jointly written by Tim Lehnen and Acquia’s Ted Bowman. While the update to Drupal 9 is already unprecedentedly smooth, there exists a certain tool that facilitates upgrading even further: Drupal Rector, supplied by Palantir.net and Pronovix.

Using Drupal Rector, developers are able to automatically remove deprecations and make code compatible with Drupal 9. To make this process even easier and less time-consuming, the Drupal Association also introduced the Project Update Bot which provides patches generated by the tool. Still, ultimately, it’s left to project maintainers to decide whether to use the patches provided by the bot.

Read more

Content creators going layout – with Drupal Layout Builder

In May 2019, the up-until-then experimental Layout Builder was included in Drupal’s core and is now included as an out-of-the-box feature with new versions of Drupal. This post by Jan Lemmens of Amplexor takes a look at how the job of content creators and site builders is greatly facilitated thanks to Layout Builder.

The tool gives non-technical users a lot more control over a page’s layout, allowing them to manage the layout of fields or structure the placement of blocks, for example. When comparing it to the more established Paragraphs module, Jan points out that it is more suited towards managing page content, whereas the Layout Builder is for page layout. 

Read more

Assessing your Drupal 9 Readiness, Part I: Estimate, plan and action. Without tears.

Almost at the end of this month’s list, we have a blog post by Manifesto’s Gabriele Maira aiming to prepare users as best as possible for the upgrade to Drupal 9. The key question to ask, according to Gabriele, is: How Drupal 9 ready am I? (If you’re keeping up with Drupal 8.x core releases, you’re already well on your way!)

The first thing he suggests doing is reviewing the usage of your modules and themes, then installing the Upgrade Status module to scan them, beginning with custom code. Then, make sure that the hosting platform requirements are still satisfied and, finally, make a plan for upgrading any custom code you’re using, taking special care with those that depend on contributed projects. 

Read more

A Guide to Preparing for Drupal 9

Last but not least, we have another post concerning Drupal 9 preparation. Its author, Sarah LeNguyen of Forum One, first gives some historical background on the upgrades between major versions of Drupal, then explains how Drupal 9 differs from previous major versions.

Namely, it’s exactly the upgrade process that has been smoothed out, with backwards compatibility; Drupal 9.0 thus only removes deprecations and updates third-party dependencies, while new functionality will come in 9.1 and beyond. 

The second half of Sarah’s post is dedicated to helping people get ready for the upgrade, whether it’s the easier upgrade from Drupal 8 or the more demanding one from Drupal 7. She covers both cases, as well as provides some key information on support timelines.

Read more

Woman releasing multicolored balloons into clear blue sky

At the time of writing and publishing this post, Drupal 9 has already been released, and we at Agiledrop have already worked very successfully with the new version. Reach out to us if you need any help with an upgrade, or with custom development for your new Drupal 9 site.

Jun 16 2020
Jun 16

We have been sent the following rather fabulous guest blog post by Yogendra Prasad, Surabhi Gokte, and Karthik Kumar and we wanted to share it with everyone here. We would love to see this inside the upcoming Contributor Guide (more details of which coming soon...)

What is the Drupal Community?

The Drupal Community consists of all the members using Drupal and coming together to form a group and voluntarily give their time to contribute towards bettering the community.

Why should I contribute to the Drupal Community?

Come for the software, stay for the community!

Drupal has been our bread and butter for so many years and so it’s one of our prime duties to give back to the Drupal Community in whichever ways we can.

LEARN & GROW WITH THE COMMUNITY:

  • You get to learn as you work with the community worldwide
  • You get to present yourself which in turn brings visibility to both you and your organization
  • You get to know about the Drupal events happening throughout the community.
  • You get to participate in the events by speaking or volunteering.

Prerequisites:

  • Basic understanding about Drupal
  • Have done local setup earlier
  • Know how to Install Contributed Modules
  • Must have basic knowledge of Git
  • Must know how to Create/Apply Patch

What is the Life Cycle of a Drupal Issue?

Following can be the different states of an issue:

  • Active - When a new issue is created, it is in an Active state.
  • Needs work - When the issue needs to be worked upon, it is in a Needs Work state.

One can pick the issues from either of the two states to start with.

  • Needs review - Once the issue is picked, the patches are successfully submitted and all the test cases are passing, the issue’s state should be changed to Needs Review.
  • Reviewed & tested by the community - Once the issue is reviewed by any contributor, the issue is moved to “Reviewed & tested by the community” (RTBC) state where one of the members from the core community team reviews the issue
  • Fixed - When an issue passes from the RTBC state, it is moved to the Fixed state
  • Closed (fixed) - After the Fixed state, the issue moves to Closed (fixed) automatically within two weeks. This is the last state of an issue.
  • Closed (duplicate) - When any issue gets created which is a duplicate of any earlier one, it directly gets closed as Closed (duplicate)
  • Closed (won't fix) - This state represents that an issue has no solution
  • Closed (works as designed) - This state represents that an issue raised is providing the functionality what it was supposed to and so moved to “works as designed”. In other words, the issue raised is not a bug but a feature.
  • Closed (cannot reproduce) - When an issue is not reproducible is moved to this state.
  • Closed (outdated) - When an issue is either too old to fix or gets fixed within some other module’s issue, the state can be Closed (outdated) for that issue.

Other States:

  • Patch (to be ported): When a Patch is to be ported for other versions of Drupal/Contributed module.
  • Postponed: When the Issues/Feature/bug is postponed by the author/community, and doesn’t need a fix.
  • Postponed (maintainer needs more info): When an issue is raised but according to the maintainer of the Contributed module, more info is needed about the issue to get it fixed.

What ways can I contribute to the Drupal Community?

There are multiple ways to contribute to the Drupal community, and you don't need to have a developer background to give something to the community.

  • Drupal Core issues: You can select issues from Drupal core from : https://www.drupal.org/project/issues/search/drupal to contribute. Here you can commit patches to the issue, review tickets that are in “needs review” and if you have found any issue in Drupal you can log here by providing basic details about the same.
  • Contribute a Module to Drupal: If you have any feature in mind that you think can be used in Drupal as a standalone module , so that a larger audience can start using it , you can add your module to Drupal. For creating and getting it approved you have to follow steps mentions here: https://www.drupal.org/developing/modules
  • Contributed Module Issues: Along with DrupalCore issues , there is a huge list of bugs/issues which you can pick for fixing by providing patches from contributed modules: https://www.drupal.org/project/issues/search.
  • Documentation: if you do not have any Development background or are not interested in contributing by writing code, another interesting way is to help Drupal.org in improving Documentation. Documentation in Drupal is needed in the form of README.txt in every single module/theme , in form of code commenting , class usage etc.
  • Validating Issues: If you are good at reviewing tickets or have QA background you start contributing to the Drupal community by verifying the fixes provided by any community member on the. For this you have to pick up tickets specifically which are in “needs review” status. List of issues you can found here: https://www.drupal.org/project/issues/search/drupal?text=&assigned=&submitted=&project_issue_followers=&status%5B%5D=8&issue_tags_op=%3D&issue_tags= , This list contains both Drupal core and Contributed modules issues , it's up to you which you want to pick and start working.
  • Contribute financially: The Drupal Association is a nonprofit (501c3) organization serving the international Drupal community. One can also contribute to the Drupal Community in monetary terms by opting for the individual membership. Read more here - https://www.drupal.org/association/individual-membership.

Note: https://www.youtube.com/watch?v=INpedSOpdqw&feature=youtu.be

  • Log new Issue: You can also log your own issues to Drupal.org. The issue can be from both Drupal Core and Contributed modules. If you faced any issue while using Drupal in Core or any module you can go and log the issue directly to Drupal.org. Make sure to not log a duplicate issue.

How to start contributing?

How to get registered with Drupal.org?

The very first step is to register yourself on the drupal.org website by creating an account. Go to https://register.drupal.org/user/register. If you already have an account, simply login at https://www.drupal.org/user.

How to get registered to Drupal slack?

There are various communication channels to connect with the community, the famous one is Slack!

If you do not have an account on Drupal slack, go to http://drupalslack.herokuapp.com. Once there, you can join various channels as per your requirements like - #support, #frontend, #d9readiness etc. You can also search for channels by clicking on “+” > “Browse Channels” in the Channels section.

There are other mediums too like Telegram, Rocket Chat, IRC, etc. where people connect.

How to find issues?

Go to Drupal’s issue queue and filter the list based on your area of interest:

You can visit Drupal.org to find the issues you want to work on, for this please login to Drupal.org so that you can use the Advanced filter feature which only appears for logged in users.

For Drupal Core specific tickets : https://www.drupal.org/project/issues

For Combined list of Core and contributed modules issues list: https://www.drupal.org/project/issues

Basic guideline to find issues:

There are few filter criteria we follow before picking up any ticket from the issue queue, so these criteria helps us to get to ticket/issue closer faster. Following are the criteria:

The filters on issue queue will look like this:

  • Use issue tags: Novice, documentation, Drupal 9 compatibility : IF you are new to Drupal contribution arena , and you want to start with easy and straightforward issues that will help you boosting your confidence , then you can filter the issue queue with “ Novice, documentation, Drupal 9 compatibility” issue tags. This will give you the list of issues which are tagged with following tags only.
  • Use the Component filter of your interest : You can make use of this filter to get a list of issues of your interest area. For ex: Bootstrap system, Ajax System ets.
  • Use Status filter : Active/Needs Work/Needs review/Patch to be ported : By Default Issue list contains closed issues associated with irrelevant status, so to reduce the list of the issue use the mentioned status.
  • Sort issues list on ASC order of replies : This Sorting will give you the list of issues which have less number of replies, means no one has picked or less people have worked on the issue.
  • Sort Issues list on DESC order of Last updated: This will give you list of most active issues on which you can start working , Ideally we not prefer to pick issues which have last activity more than a Year ago, as it implies the issue is less active and there are huge chances that the issue will take more time to get closed in comparison with issue will more active.
  • Pick issues with empty “Assigned to” value: Please Keep in mind that it is not advisable to pick any ticket on which someone is already working or the ticket is already assigned to someone.

Note: You can use this URL to get directly to the filtered issue queue.

What to do after finding the issue?

As you identified the issue on which you want to work/contribute you can follow the following steps to help the issue to get more close to its closure state.

Note : Keep in mind about the version of Drupal Core/ contributed Module for which the issue has been raised by the author. You can get the version on the issue detail page as shown in image.

In the Given Image the Issue project is Drupal Core and the version for which the issue is reported is 8.8.x-dev.

How to Setup a Local machine to replicate the issue?

Now you have to be ready with your local setup of the machine. Local setup is necessary in case you want to give a patch to the issue or even if you want to test a patch on a given issue.

As per mentioned above, you have to set up an exact version of Drupal Core/ Module on your machine for which the issue has been reported.

  • If the issue belongs to Drupal core and you need to set up a specific version of Drupal core you have to follow : https://www.drupal.org/project/drupal/git-instructions to setup Drupal.
  • If the Issue belongs to the Contributed module , in this case setup Drupal with the latest stable version available on your machine and then clone the module which is needed to replicate the issue. For ex in the given image below you can see the module version for which the issue has been reported.

Now you have to get this specific version on your machine to replicate the issue and to fix, for this visit the detail page of the module as given in the above image , and on the detail page you will have a link for version control. For example, have a look at the image below:

When you click on version control you will get page as given in the below image:

Now you have to follow the steps and clone from the specific branch for which the issue has been reported.

Note: Make sure you have Drupal Installation already and make sure to place/clone the module at the proper directory so that you can use the module and fix the issue.

  • Get understanding of issue: First step is to get complete understanding about the issue , try to replicate the issue on your local machine for the same version for which the issue has been reported.
    • In case of any query, put appropriate comments to the ticket and ask for more details..
      • Try to replicate the issue in your local environment.
      • Once you have a clear understanding of the issue and have an idea /approach to fix it , Assign issue to yourself so that other community members will not take it up.
      • Add necessary tags to issue: Usually in code sprints and Drupal events when we pick any issue we add a relevant tag to the ticket so that we get to filter the list of tickets from the tag and get a list of issues picked in that particular event.
      • Depending on the state of the ticket, start working on it.

How to Contribute by adding a patch to the issue?

  • Once you have started work on the ticket, you might be able to get the resolution or you might have some more questions.
  • Comment back in ticket, with the questions and follow up ticket.
  • If you are having resolutions, that would be a piece of code change / style fix / Adding Readme / Annotation changes etc.
  • There might be issues, which already have some patch, at that point you have to add changes to the existing patch and get the interdiff.
  • After the issue is fixed, test it locally and create a patch.
  • Try to execute the unit test on your local machine , to make sure that unit tests are working fine.
  • If you have to write any test cases for your changes, do the same.
  • Your patch attaching to ticket will be like either one of the below
    • Patch file + comments
    • Patch file + Interdiff file + comments

How to create a patch?

  • Use GIT command to create patch
  • In case of new patch
    $ git diff
    $ git diff > <ticket-number>-<comment-number>.patch
    

    • In case of an existing patch, download it.
      $ wget <patch-url-from-ticket-to-download>
      $ git apply -v <download-patch>
      

      Make the changes needed existing patch

      $ git diff
      $ git diff > <ticket-number>-<comment-number>.patch
      $ interdiff <old-patch> <new-patch> > interdiff_<old>-<new>.txt
      
      • Naming of patch
        • Patch name
          <ticket-number>-<comment-number>.patch
          
          • Interdiff name
            interdiff_<old-comment-number>-<newcomment-number>.txt
            
            • Validate patch on your machine
              $ git apply > <new>.patch
              
              

How to attach a patch to Issue?

  • Add patch as a file to issue with needed information in comment
  • Update ticket status to Needs Review after Applying patch and unassigned it
  • If patch turns green and passes all test cases issue is ready to be reviewed by community

    • If patch fails then look into the logs and try to rework on the issue by assigning back to yourself.
    • In case need help seek help from community via adding comment to ticket or on Drupal slack

How to Contribute by reviewing an issue?

There is a great opportunity for folks who do not want to contribute to Drupal by giving patches, instead you can start reviewing/ testing patches that are getting applied for corresponding issue

.

  • Get the issue list filter with “Needs Review”: To Review any patch provided for the issue you have to filter the issue queue using “Needs Review" for both Drupal Core issues and Contributed module issues.
  • Identify the issue on which you can do the testing/reviewing.
  • Make sure to pick the latest patch applied to the issue, As given in the image below:

As you can see there are lists of patches applied for this issue , but you have to work/review the latest patch applied to the issue ,which will be sorted by Comment ID in DESC order.

  • Make Sure the Patch has passed all the Unit test cases and have turned to green color , like in the given image.
  • If possible you can have a look at the patch for the code changes done to fix the issue. You can have a look to analyse the coding standards, indentations , logic or any technical debt.
  • If you have any comment/feedback/suggestions on the patch , just go ahead and add a relevant comment to the issue regarding the patch.

Reviewing Patch Using “Dreditor”:

There is a Browser plugin which you can use to test the patch on virtual/temporary setup using Simplytest.me, Setup this Plugin on your Browser. Make sure to restart your browser before using it.

Now when you visit to Issue detail page which you already shortlisted for reviewing , you will able to see image as below :

Two new action buttons will be displayed.

  • Testing/verifying patch using Simplytest.me: As you want to test the particular patch you have to now click on “Simplytest.me" button to initiate setup process.
  • After clicking you will be redirected to page as given in image:

  • Here you have to select the version for which you want to validate the patch, Version will be as same as mentioned on the issue.
  • After selecting the correct version , click on “Launch SandBox”. There will be a process to setup a environment will initiate, like in image given below:

This will take some time to complete.

  • Once the process is completed you will land on the Drupal site , which already have the patch applied to the code base.
  • Admin Login: If you want to login to the system you can use: admin/admin as username/password for the system.

Reviewing Patch on a Local machine:

It is always better to test/verify the patch locally instead of using simplytest.me. For this you have to follow the following steps.

  • Setup local environment: Once you are ok with the Code changes done in the patch you can start setting up your local machine for the corresponding version mentioned in the issue for Drupal Core/Contributed Module. Follow the steps given above to set up your local machine.
  • Apply Patch on Local Environment: Now you can download patch by clicking on the patch link directly to your local machine and then apply the patch on your machine using :
    git apply > <patch-file-downloaded>
    
    Note: Make Sure about the path on which you are while applying the patch.
    
    

Validating/Testing the Patch (Cloud/Local):

  • Testing: Test the patch locally and verify that the issue has been fixed after applying the patch. Try to test for regression as well.
  • Patch is working fine and the issue got Fixed: If you feel the patch is correct and working fine as per your expectation and as per the criteria mentioned in the issue , then update the status to “RTBC”(Reviewed and tested by community) from Needs Review. Add Needed comments/Images/Videos to support your points.
  • If you feel you need more eyes needed to help you then make a comment to the tickets about the steps you took for testing and ask for more people to look into it.
  • Seek help on Drupal slack in case needed.
  • Issue is not fixed/Bug still exists: If you see the bug/issue is still appearing and not fixed by the patch, then add your relevant comment by tagging the author of the patch in comment and move the ticket status back to “Needs Work”.

Next Steps after Contributing to Issue (Reviewed/Applied Patch):

Once you have done your job on the issue, do the following:

  • Put a proper comment on the ticket about your work. Add screenshots if necessary.
  • Move the ticket to the next relevant state i.e from “Needs Works” => “Needs Review” or from “Needs Review” => “RTBC”
  • Attribute your contribution by adding an organization and customer, if appropriate. Refer screenshot below:
     

Also, you should keep following points in mind to check for any updates on the issue:

  • An update to the issue can be a new comment , Information updated for the issue or state changes to the issue.
    • Keep monitoring your Dashboard: Drupal.org provides you a personal Dashboard, which contains your latest activities and issues list on which you recently contributed. You should keep a close eye on the Dashboard and see the progress on issues you worked on.

      You can access your dashboard after you logged in to the site and hover on your user image on the header section as displayed in image below:

  • You will be receiving all updates on the issues via mail on your Drupal.org mail ID
  • In case needed i.e if ticket status is moved back to Needs work/Needs Review and you feel you can work/contribute to it , Then you can pick the issue and work on iit accordingly.
  • If the status of the ticket is closed, no need to do anything now on this ticket.

When is a Credit received for the contribution?

NOTE: It's not mandatory that you will always receive credit for a closed issue on which you worked.

Once the issue is marked Fixed, the maintainer chooses which contributors on the issue will receive credit. Usually these are the contributors who...

  • When you submit a successful patch for an Active or Needs Work issue
  • When you review any existing patch of a Needs Review issue
  • When you create a new issue
Jun 16 2020
Jun 16

The following case study was written collaboratively by hestenet and nnewton, explaining how we use rsync.net to manage backups for Drupal.org. The Drupal Association used rsync.net for many years prior to any partner relationship, and is now proud to count rsync.net among our Technology Supporters.

Drupal.org has been the home of the Drupal community for many years. Online since 2001, and fed by a global community of contributors, there is a tremendous amount of open source history recorded here.

It's critical that we safeguard that history for posterity, and of course all of our current activity so that we can maintain the momentum of the Drupal project.

Naturally, we've done a tremendous amount of work to make our infrastructure robust and fault tolerant from the top of the stack to the bottom. Individual servers use RAID storage, our infrastructure is built using highly-available pairs, and the Oregon State University Open Source Lab, our data center, has good data center hygiene and redundant power and cooling.

But disasters can and will happen, and this is why off-site backups are critically important.

Drupal.org uses rsync.net to manage off-site backups, and we highly recommend them as a solution. rsync.net is built on ZFS, a file system we have experience with and trust to be durable and offer cheap, immutable snapshotting. rsync.net gives you an empty filesystem to do anything you want with and works with any SSH or SFTP based tool. This standard approach allows us to easily use the service with existing tooling. We have used rsync.net for various purposes for almost ten years and have not had a single incident.

How exactly do we use rsync.net

rsync.net is actually configured as our primary backup location for all of the Drupal.org infrastructure. In addition to this, because we take advantage of rsync.net's geo-redundancy feature, rsync.net provides those backups in multiple, separate data centers. We also use rsync.net for a secondary backup layer for some select data pools that are already backed up in Amazon S3, or on the Open Source Lab's backup servers.

How do we have it configured?

For the Drupal.org infrastructure we use BorgBackup (https://www.borgbackup.org) to manage compression, encryption, and deduplication of our backup data. We then entrust rsync.net with ZFS snapshotting of the Borg data, providing us with points in time to easily roll back to. This gives us a sliding window of encrypted backups. It also gives us protection from malicious actors or ransomware as the rsync.net snapshots are immutable, or read-only.

The actual execution of borg and tracking of backups is done using a bash script that is placed on each server by our Puppet tree. Puppet also places a private key for encryption and the appropriate ssh private key for rsync.net access. We wrap Borg in a script due to our need to cleanly initialize new vaults when we spin up a new server, as well as our need to monitor Borg execution. One thing we have found is that it is difficult to detect silent failure for Borg specifically, so we have multiple points of feedback in the script. Our script functions as follows:

  1. Check if a vault on rsync.net exists for this host, if not create it.

  2. Backup the paths passed to this script to said vault for today’s date.

  3. Check the return of the last command, if it has failed email our monitoring endpoint to trigger an alert.

  4. Use Borg to pull statistics from the last backup, such as count of files backed up, chunks backed up, size of backup, etc.

  5. Massage those statistics into usable metrics and send them to statsd, where they will end up in our monitoring system.

With this process we both have an alert in the time of failure and also can create alerts based on the graphs we create from statsd. We do this to catch times when a backup may have succeeded but the amount of data backed up dramatically fell. That “success” may have been a failure in that case, just not an obvious one.

Example dashboard built from statsd information:

A major reason we value rsync.net is it presents a simple/standard ssh interface that allows us to use tooling we can customize to exactly what we need, as in the above example.

Why would we recommend this to others?

We share the Drupal community's love of simple, elegant, and technically excellent solutions to problems. Configuration and backup management with rsync.net ticks all of those boxes, and further the business-side is run in a very friendly way, with frequent increases in capacity available at very reasonable rates.

It's proven to be an effective and affordable way to use the funding we receive from the Drupal community to protect the project, and we believe you can trust it to protect your own projects as well.

Jun 15 2020
Jun 15

This post will document how to get Gatsby to talk to Drupal when Drupal is running in Lando.

For whatever reason, trying to get Gatsby to access Drupal in a Lando container doesn't work. I'm not sure if it's localhost or localhost:PORT that Gatsby has trouble with, but we can work around that limitation by using ngrok. ngrok lets us access localhost URLs from a public URL. I installed it on my Mac using Homebrew (cask), but you can visit the downloads page for other methods of installation. You'll also have to register on the ngrok website, but their free account will work just fine.

Once you have ngrok installed, set up Lando as usual. In my particular instance, I used the pantheon recipe, but any recipe should work.

Start up your Lando app (lando start). Once it has successfully started, Lando will provide you with a handful of URLs you can use to access Drupal within Lando. I've found the best results when using the non https localhost:PORT URL. As a side note, this port changes every time your Lando app is restarted.

Open up a terminal, and type in

ngrok http http://localhost:PORT

where PORT equals your Lando app's port as noted above.

Once ngrok has started, you'll get a few more URLs, but the one you want is labeled "Forwarding" and starts with http://.

If using gatsby-source-drupal, put this URL in the baseUrl option in gatsby-config.js (or use a .env.development file):

...
plugins: [
  {
    resolve: `gatsby-source-drupal`,
    options: {
      baseUrl: `http://xxxxxxxxxxxx.ngrok.io`,
      apiBase: `jsonapi`,
    },
  },
]
...

You can now start Gatsby (npm run develop).

One little tip: in your Gatsby package.json, add this to your scripts section:

"scripts": {
  "refresh": "curl -X POST http://localhost:8000/__refresh",
}

You will need to create a .env.development file at the root of your Gatsby project if you don't already have one, and add the following:

ENABLE_GATSBY_REFRESH_ENDPOINT=true

This will allow you to grab new content from Drupal without having to stop and restart Gatsby:

npm run refresh
Jun 14 2020
Jun 14

In previous article we have seen how we create a very simple theme with 1 main content region as page layout.

theme admin

Lets look now at the custom module to handle theme switch and content display.

Part 2: the custom module

The module called "land_page" structure is as follow:

module

Lets look at the most important parts specific to the land page.

land_page.info.yml : this is the standard module info settings.

land_page.rounting.yml : in this file we will define our land page routes. Those route will be the reference to switch theme. I.e.

default_land_page:
path: '/land-page _controller: '\Drupal\land_page\Controller\Controller::defaultLandPage'
requirements:
_access: 'TRUE'

The next important part is the class that manage the theme switching in ThemeNegotiator.php (see Drupal):

<?php
/**
 * @file
 * Contains \Drupal\land_page\Theme\ThemeNegotiator
 */
namespace Drupal\land_page\Theme;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Theme\ThemeNegotiatorInterface;
class ThemeNegotiator implements ThemeNegotiatorInterface {
    /**
     * @param RouteMatchInterface $route_match
     * @return bool
     */
    public function applies(RouteMatchInterface $route_match)
    {
        return $this->negotiateRoute($route_match) ? true : false;
    }
    /**
     * @param RouteMatchInterface $route_match
     * @return null|string
     */
    public function determineActiveTheme(RouteMatchInterface $route_match)
    {
        return $this->negotiateRoute($route_match) ?: null;
    }
    /**
     * Function that does all of the work in selecting a theme
     * @param RouteMatchInterface $route_match
     * @return bool|string
     */
    private function negotiateRoute(RouteMatchInterface $route_match)
    {
        if ($route_match->getRouteName() == 'default_land_page')
        {
            return 'ek';
        }
        return false;
    }
}

When the visitor navigate on the website, the theme negotiator will check if the route = land page route and sitch to the appropriate theme.

In order to achieve the above you need to declare a service.

land_page.services.yml :

services:
    land_page.theme.negotiator:
        class: Drupal\land_page\Theme\ThemeNegotiator
        tags:
          - { name: theme_negotiator, priority: 1000 }

In the Controller.php we will create the function that is called in the land_page.routing.yml (defaultLandPage()):

/**
 * Default land page
 * @return array
 *
*/
 public function defaultLandPage() {   
    $items = [];
    $items['asset'] = drupal_get_path('module', 'land_page') . "/assets/";   
    return array(
        '#theme' => 'land_page',
        '#items' => $items,
        '#title' => '',
        '#attached' => array(
            'library' => array('land_page/land_page'),
        ),
    );
 }

In this function we define which template to use, we pass some $items for content and attach our library.

The them template is defined in land_page.module :

/**
 * Implementation hook_theme().
 */
function land_page_theme() {
  return array(
    // default
    'land_page' => array
    (
      'template' => 'land_page',
      'variables' => array('items' => array(), 'data' => array()),
    ),  
  );     
}

The library is defined in land_page.libraries.yml . Library will be very important as it will define all the custom css, js or external resources needed to render the page. A simple example of library  that include custom css, js and fonts will be:

land_page:
  version: 1
  css:
    theme:
      //fonts.googleapis.com/css?family=Barlow:400,500,600&display=swap: { type: external }
      css/land_page.css: {}
  js:
    js/js.min.js: {}
    js/land_page.js: {}

In the hook_theme(), the template called is "land_page" which is a twig template under template folder: land_page,html.twig. In this template you will build your html content to render the actual land page. This is where your creativity will start.

On big advantage of twig templates is that you can insert content from other Drupal source like webform or existing blocks directly into the land page.

Now you can install your module, navigate to your /land-page url and access to your land page content.

Jun 14 2020
Jun 14

Landing pages are great for product presentation and customer engagement.

There are a must for today marketing campaigns, mobile advertising and sales development.

landing pages

There is no easy way to build a simple landing page in Drupal.

You can use custom themes or modules to manage layout like parade but it is not that simple. Layout options are limited. For instance. The module does the job; you can build a simple landing page without custom development, but requires a lot of dependencies for a simple page and you may still have to do some css editing.

In this article we will explain how our landing page has been constructed within Drupal 8 website using separate dedicated theme and a custom module with twig templates.

The original page which is a stand alone 1 page theme is now fully integrated in the website.

It may not be the best method, but it can be easily replicated and give more room for creativity and extra flexibility compared to a layout module or a full land page theming construction.

Part 1: the custom theme

To achieve that, we created a custom theme with only 1 region for content. When building a 1 page theme, you usually do not want side columns or extra headers and footers.

To create your theme, you only need 1 file to be saved under your custom theme folder in the Drupal 8 "themes" folder: myTheme.info.yml.

type: theme
base theme: false name: 'EK'
description: 'Built to use land page'
version: VERSION
core: '8.x' regions:
  content: Content
  footer: Footer

This is what is needed to create the basic theme that will be used in our landing page. We keep a region "footer" to insert hidden blocks or content.

This theme will be called on specific routes names and will replace the default theme of the site.

You can add a screenshot image also in the theme folder if you want to enhance your admin view.

theme admin

In the next step we will explain how our custom module switch theme for dedicated url and build the landing page with twig template. For that step you will need some knowledge on creating a simple module, insert libraries and make a twig template.

Jun 12 2020
Jun 12
Jun 12, 2020 Drupal

While building this Drupal 9 site a few months ago we needed to handle the contact form. Normally we would use the Drupal Webform module, but that wasn't Drupal 9 ready enough at the time. So we decided to build the form ourself, AJAX based to make it as user friendly as possible and learn a few things. We published the complete code in a working, installable Drupal module. A small explanation:

So the Drupal example module contains:

  • The AJAX form;
  • A Block, so you can place it in some site region;
  • A Twig html file for block markup;
  • An implementation of hook_mail() to get the email sent.

 All-in-one Drupal based toolkit for remote work.    Check how Lucius works

Example end result

Te code is cloned from our support form, see the leading image above.

Copy and run off

We published it on Github so you can copy it and run off with it to do whatever you need, so at the moment it's not a published Drupal.org project with all kinds of configurable stuff.

Bootstrap based

The classes in the form are bootstrap's. So if you implement Bootstrap libs it will automatically look good / better.

Most important code to get AJAX working

drupal ajax form

  1. Add the AJAX callback and use '#type' = 'button', not '#type' = 'submit'.
  2. Add the libraries needed to get AJAX working.

drupal ajax form response

  1. Initiate AJAX response.
  2. Add AJAX commands, a full list of Drupal core AJAX callback commands.
  3. Return response.

Flood protection, honeypot and code optimisation

There is no flood protection added yet, and if you like to implement Honeypot then uncomment line 103 in AjaxContactForm.php

Of course code can be optimised, there is a too big procedural if/else and a Drupal Service might come in handy, also mail bodybuilding is not quite. But I think you'll git the pic by now.

Drupal 'quick-start'

PS, to test this module fast in a fresh Drupal install, Drupal's quick-start comes in very handy.

Find the code on Github

Download or view the code here on Github.

Like to see this as a contrib Drupal module?

Please let me know, if there is enough positive feedback on this we might make it configurable and contrib it!

Jun 09 2020
Jun 09

This blog has been re-posted and edited with permission from Dries Buytaert's blog.

Lat week, we released Drupal 9.0.0! This is a big milestone because we have been working on Drupal 9 for almost five years.

I updated my site to Drupal 9 earlier today. It was so easy, it's hard to believe.

As I write this, I'm overwhelmed by feelings of excitement and pride. There is something very special about building and releasing software with thousands of people around the world.

However, I find myself conflicted between today's successful launch and the tragic events in the United States. I can't go about business as usual. Discrimination is the greatest threat to any community, Drupal included.

I have always believed that Drupal is a force for good in the world. People point to our community as one of the largest, most diverse and most supportive Open Source projects in the world. While we make mistakes and can always be better, it's important that we lead by example. That starts with me. I am committing to the community that I will continue to learn more, and fight for equality and justice. I can and will do more. Above all else, it's important to stand in solidarity with Black members of the Drupal community — and the Black community at large.

During this somber time, I remain incredibly proud of our community for delivering Drupal 9. We did this together, as a global community made up of people from different races, ethnicities, genders, and national origins. It gives me some needed positivity.

If you haven't looked at Drupal in a while, I recommend you look again. Compared to Drupal 8.0.0, Drupal 9 is more usable, accessible, inclusive, flexible, and scalable than previous versions. We made so much progress on such important things:

  • Drupal 9 is dramatically easier to use for marketers
  • Drupal 9 is easier to maintain and upgrade for developers
  • Drupal is innovating with its headless or decoupled capabilities

It's hard to describe the amount of innovation and care that went into Drupal since the first release of Drupal 8 almost five years ago. To try and grasp the scale, consider this: more than 4,500 individuals contributed to Drupal core during the past 4.5 years. During that time, the number of active contributors increased by almost 50%. Together, we created the most author-friendly and powerful version of Drupal to date.

Thank you to everyone who made Drupal 9 happen.

Jun 08 2020
Jun 08

This blog has been re-posted and edited with permission from Acquia's blog.

We’re so close to the release of Drupal 9 and the excitement is alive all throughout the Drupal community. It has been 5 years since Drupal 8.0 was released and in that time, thousands of contributors and organizations have worked together to create a more powerful, accessible and innovative Drupal experience based on the input of people all around the world. As we await the reveal, we know that you are eager to know what Drupal 9 will mean for your sites and the next generation of web experiences. 

We recently joined Drupal founder Dries Buytaert in a webinar hosted by The Drupal Association and Acquia to answer your top Drupal 9 questions. Since we weren’t able to cover everyone’s questions, we wanted to cover some of the most popular ones here. Keep reading to find out what’s in store for Drupal going forward.  

Making the Migration

What are the migration options for users currently on Drupal 7? 

Gabor: Prior to the release of Drupal 9, we’ve been recommending people move to Drupal 8 first because the upgrade from 8 to 9 is much simpler. However, once Drupal 9 is released, people can use the Drupal 7 to Drupal 9 migration path directly built into Drupal 9.

The question comes down to whether the extensions that you are using are already available for Drupal 9 or not. Drupal has 9,000 extensions and more than 2,200 of them are already Drupal 9 compatible. We’re seeing hundreds of extensions added each week. The majority of people find that most/all of their extensions are already Drupal 9 compatible, in which case it is easiest to go directly from Drupal 7 to Drupal 9.

To track all of the great progress we’re making toward getting all of the Drupal extensions compatible, you can check out the Drupal 9 Deprecation Status Tracker.

Angie: Acquia also has a new tool in development for Drupal 7 to 9 migrations called Acquia Migration Accelerator, which we'll talk about more in a later section!

Do you expect support for Drupal 7 will be extended beyond November 2021?

Gabor: Currently, community support for both Drupal 7 and Drupal 8 will end in November 2021. However, Acquia is a member of the Drupal 7 Vendor Extended Support Program and will be providing commercial support for Drupal 7 until 2024

What migration tools are recommended to support the upgrade to Drupal 9?

Gabor: Drupal 9 has the same migration capabilities as 8.9, meaning that the standard migration tools can be applied when migrating to Drupal 9. The three main tools we recommend are:

  1. The Core Migrate Module suite - Migrates your content and site configuration  
  2. The Upgrade Status Module - Provides information about contributed project availability
  3. For Drupal 8 sites, the Upgrade Rector module automates updates of many common deprecated code to the latest Drupal 9 compatible code
  4. For Drupal 7 sites, the Drupal Module Upgrader - Scans and converts outdated code on your site. (This was recently upgraded by Acquia to generate code that is compatible with Drupal 8 and 9 at the same time where it can do transformations.) 

Angie: We’re also excited that Acquia will soon be offering the Acquia Migration Accelerator. This tool, which is currently in development, will help automate parts of the Drupal 7 to 9 migration process by giving companies access to a dashboard to view their data migration, provide module replacement recommendations, and offer insights into things like validation and migration errors.

Accessibility and Security 

What accessibility features will Drupal 9 have built-in? 

Angie: Drupal 9 is going to continue the strong commitment to accessibility that began in Drupal 7. Drupal's Core Accessibility Gate, required for all core changes, is a major show of dedication to accessibility efforts, and it makes sure that any new feature added will be accessible right out of the box. We’ve made a lot of positive strides when building Drupal 8 with full keyboard support, voice-to-text support for visually impaired users and media and layout enhancements. There was a lot of care put into the issue of accessibility and it’s something that will continue to be refined and worked on as part of the future of Drupal 9. 

Gabor: We’re also excited that the new Claro Administration theme, which was specifically optimized to feature an accessible design, will become the eventual default backend theme in future versions of Drupal 9. 

What security enhancements should we expect in Drupal 9?

Gabor:  A large part of the reason for the Drupal 9 upgrade itself is to ensure Drupal is more secure and compatible with modern system requirements. Also, Drupal 9 removes deprecated code so you’re working with a smaller codebase. This means there is less chance for potential security risks or errors. 

In general, Drupal has always shown itself as a secure choice. Drupal’s trusted by some of the biggest names from NASA to Tesla to NBCSports, so we’re confident it will continue to meet these high standards. The open source model creates shared responsibility throughout the community, meaning that security is a constant focus.  

Headless/Decoupled Drupal 

Is there going to be any movement toward more robust headless support and non-web content?

Gabor: We know there’s a huge interest in headless and non-web content with things like chatbots and IoT devices right now. While there aren’t currently any set plans to expand into more decoupled features, the push for change and innovation will be driven by the community. Anyone interested in advancing the current decoupled Drupal capabilities should submit their thoughts in Dries’ 2020 Drupal Product Survey, which is used to inform the strategic roadmap of Drupal’s future. 

Angie: Drupal 9 will still have all of the diverse options around traditional, partially decoupled and fully decoupled Drupal. For anyone looking for more support for their decoupled modules and content, there are tons of great contributed modules dedicated to decoupled and headless support. 

The Future of Drupal   

Will Drupal 9 include more “no/low code” features and features for non-developers?

Gabor: Definitely. Making Drupal more intuitive for all users is a big priority. There’s the Automated Updates Initiative in the works that began during Drupal 8. Funding for the second phase is being collected right now. That would help a lot of organizations with their site upkeep and maintenance without requiring a lot of dev resources.

Angie:  We’ve also got the new front-end theme, Olivero under development, that’s optimized for accessibility and tailored to front-end experiences. It’s made for people like marketers, site designers and content editors with a huge focus on responsiveness. 

Beyond core, users who want an easier experience on the front end should check out Acquia Cohesion, a low-code site building tool that lets people create new sites really quickly and easily. 

What sets Drupal 9 apart from other enterprise CMS platforms? 

Gabor: It’s the best and most modern version of Drupal, which has long been a CMS that offers the most variety, flexibility and freedom. Drupal's foundation was always in structured data which naturally caters itself to today's needs of multichannel interactions. Also Drupal has one of the biggest open source communities on the planet. There are thousands of people and over a thousand companies working on it to add more features, to improve security and to create new extensions.

Plus, those open source roots mean that companies that choose Drupal aren’t limited or trapped if one proprietary software company suddenly decides to switch vendors. They always have the option to move to another provider.  

Angie: Drupal is amazing because it’s always on the cutting edge. There’s no waiting around for one company to catch up with the digital roadmap. For example, a few years back when Pinterest had just come out and was becoming popular, Drupal had a plug-in for it in just two days! We have a community of thousands of developers that can embrace change right away as these big developments happen and I think that’s a big advantage when it comes to web experience. 

---

Drupal 9 marks another huge milestone in the world of web content management and digital experience. As you prepare for Drupal 9’s release, we’ve got the Ultimate Guide to Drupal 9 to help guide you on this exciting journey.  

Jun 08 2020
Jun 08

PatrickContinuing our short series of articles highlighting ways that the Drupal software and its community are building solutions to help combat the effect of COVID-19, today we hear from Patrick Corbett of Redfin Solutions. Here, he describes their project at the  Rural Aspirations Project.

The Rural Aspirations Project was created to expand educational opportunities in rural Maine that develop and honor the community while stimulating the innate curiosity of the students and teachers. When the Maine state government shut down the schools to limit the spread of COVID-19, parents and teachers found their roles turned upside down. Rural Aspirations saw the need for a service to connect Maine families and teachers with the wide array of activities and resources offered by Maine organizations.

In light of this growing need, Redfin Solutions collaborated with Rural Aspirations to launch an improved Community Learning for ME website. The new website had to be capable of addressing immediate needs in the community: collegial support for teachers, a way for organizations to explore and pilot innovative virtual connections, and a quick and easy resource for families that are struggling to manage what some have called “crisis schooling.”

With communitylearningforme.org, local educational organizations such as the University of Maine Cooperative Extension, the Portland Public Library, and the Maine Audubon can post their resources, learning activities, and links to live events. With Drupal, we were able to use taxonomy and views with exposed filters to empower the teachers and parents to find the perfect resource while enabling them to discover more. Users can filter and search by subject, age group, and duration for a resource that fits a specific need. They can also browse through the website to learn more about what Community Learning for ME has to offer. Teachers can create schedules for their students to follow along with at home. Parents can find resources to support them in engaging their child, and fun activities for their child to work on. 

screenshot of website

Community Learning for ME is a volunteer-driven, grassroots effort. The website is best served by Drupal because it allows administrators to grant trusted organizations access to manage their own pages on the site through a custom publication workflow. Before using Drupal, the administrators spent hours each day on a Wix-based site creating and updating resources manually. Now, with the time they save, they can focus on providing targeted support to those in the rural Maine community who need it the most.
 

Jun 05 2020
Jun 05

In anticipation o' th' June 3rd launch o' Drupal 9, I spent the weekend a week previous to the launch dustin' off th' tha Drrupal module I'm most famous fer: th' Pirate module! What does it do, exactly? Like th' WP extension, th' Pirate module changes yer site's content t' pirate-speak on September 19th, International Talk Like a Pirate Day. I took th' tagline ("Ah, Squiddy! I got nothin' against ye. I just heard thar were bein' gold in yer belly. Ha ha har, ha ha ha har!"), which I buried in th' configuration, from a non-pirate, sea captain Horatio McCallister. (Spoiler alert: The ornery cuss's not even a real sea Cap'n.) It adds a text filter (previously known as an input format) t' whatever field ye specify, an' on September 19th, that field's content is changed into vari'us pirate-like sayin's, interspersed with yarr! an' avast! Durin' Drupal's semantic versioning transition, versions 8.x-1.1 forward be intended t' be fully compatible with tha Drrupal 9.

The module started out as an internal ticket at Bryght in 2005. Boris Mann came across th' Talk Like a Pirate plugin fer WordPress, an' since both tha Drrupal an' WordPress be written in PHP, he wanted it ported o'er. I took th' ticket, 45 minutes before a colleague saw it an', almost 15 years later, it serves as th' project I use t' keep up with tha Drrupal internals. Thanks t' a patch from Snehal Brahmbhatt, later confirmed by a robot, I am able t' legitimately claim that th' module has full tha Drrupal 9 compatibility. (Unlike th' move from tha Drrupal 7 t' 8, Drupal 9 is an update, not a rebuild.) It has had an official release fer all versions o' tha Drrupal since 4.6.

Over th' weekend o' updatin' th' module fer D9, I caught wind o' DrupalSpoons, an' without fullin' realizin' th' implications, I applied t' have the Pirate module mirrored there. (Moshe was excited!) After readin' the DrupalSpoons announcement, I understood it t' be an experiment in usin' GitLab as th' issue queue an' repository platform more directly than th' tha Drrupal core an' contributed modules projects, which uses GitLab as an underlying provider for their official repositories. As long as code an' issues be synced betwixt th' two, I dern't have a problem pushin' an' respondin' in both spaces.

I'm lookin' forward t' September 19th this year an' years t' come. Yarr!

Jun 04 2020
Jun 04

The Drupal CMS has always been at the forefront of ambitious digital experiences, even when these were confined to the web. As a viable open-source equivalent to proprietary platforms such as Sitecore, Drupal has remained the go-to choice for enterprise users throughout its nearly 20 year long lifecycle. 

Drupal has come a long way since its early days. Each major version represented a significant improvement over the previous one, with Drupal 8 introducing many of the most sought-after features while optimizing the experiences of developers, content editors and site builders. 

The just released version 9, then, represents the most significant shift the CMS has seen to date and paves the way for a new outlook on digital experiences. This post will provide an overview of some of the most notable novelties with Drupal 9 and why they’re so groundbreaking for the digital sphere.

First off - Gartner’s abandoning of the Magic Quadrant for WCM

Gartner's DXP Magic Quadrant January 2020

Gartner's DXP Magic Quadrant (Source: Gartner)

Gartner, along with some other notable people in the industry, was one of the first to realize the shift in the collective mindset from web content management to digital experience management. 

To this end, they abandoned their WCM Magic Quadrant in January 2020, prioritizing instead the DXP Magic Quadrant, where the Drupal-based Acquia is positioning itself as a key player

With the release of Drupal 9 and Acquia’s recent acquisitions, this sets the stage for a new era for digital experiences, Acquia is able to position itself as the leading open-source digital experience platform, competing even with established proprietary solutions. 

New front-end and back-end themes

Not wanting to fall behind with the times, users of Drupal have pointed out its outdated front- and back-end themes. To this end, development of the two revamped themes began, with the Claro back-end theme released in late 2019 and the front-end theme, Olivero, planned for 9.1.

The new themes feature a modern, slick look, which assures a good user experience that never comes at the expense of accessibility. Having a reputation as a very accessible CMS, Drupal 9 retains its commitment to accessibility with the two new themes.

Vetted and tested by a huge community of experts

Incredible amounts of organizations and individuals in the Drupal community have during the past months been busy getting everything set for the release of Drupal 9. Updating and removing dependencies began well over a year ago, but since the start of 2020, we’ve seen many initiatives focused exclusively around getting 9 ready for a stable June release. 

Here are only a few of the most notable people and organizations that definitely deserve a shout-out: Gábor Hojtsy, the release coordinator; Matt Glaman, the author of drupal-check; the 1xINTERNET team for their commitment to the Porting Weekend and the release celebration; and many others dedicating their time to the project.

Such thorough vetting and testing logically also guarantees stability and security, in which previous iterations of the CMS already excelled, but which Drupal 9 has prioritized even more strongly. 

API-first

Drupal has committed to being an API-first framework, and version 9 continues with this trend. The REST API allows it to function as a “headless” or “decoupled” CMS, enabling numerous possibilities for integration. 

These integrations can either be with other web frameworks, e.g. e-commerce and/or front-end, or they can even go beyond the web thanks to Drupal’s powerful multichannel capabilities, which version 9 is likely going to further develop and streamline.

Unprecedentedly easy upgrade path

By now, you might be wondering “But where are all the groundbreaking changes you’ve touted?”. Well, this is exactly what’s so groundbreaking about this major release. As Dries Buytaert, Drupal's founder and project lead, has stated: “The big deal about Drupal 9 is … that it should not be a big deal.” 

Drupal 9 capitalizes on Drupal’s existing strengths, while prioritizing a smooth and easy upgrade process focused on backwards compatibility. Users who make sure to keep their Drupal 8 codebases updated to the latest minor version will be delighted by an unprecedentedly easy upgrade. 

Basically, the main goal of the 9.0 release is helping as many users as possible update to the most up-to-date version, while subsequent minor releases will be able to innovate more and deliver new features. 

Dries Buytaert Drupal 9 quote

Open-source digital experience framework

The release of version 9 truly cements Drupal as a leading open-source digital experience framework, combining all the benefits of open-source software with powerful enterprise capabilities.

Due to the rising need for digital experiences, software needs to at once be future-proof and prioritize innovation in order to still be relevant in light of future trends and disruptions. As a framework that’s only grown more and more relevant throughout the 20 years of its existence, Drupal is sure to remain a key tool in the future of digital experience. 

Conclusion

The release of Drupal 9 represents a major milestone in both the framework’s evolution and in digital experience management. We’re very excited to see what this will mean for the project and its community, as well as the digital industry as a whole. 

If you’re on the latest version of Drupal 8, you can update to 9 completely hassle-free by simply removing deprecations. If you’re still on an older version, or even on a different CMS, you can leverage Acquia’s CMS Migrate tool to migrate smoothly to Drupal 9. 

If you have any trouble migrating, or need custom functionality for your new Drupal 9 site, give us a shout out and we can help you tailor Drupal’s powerful features to your specific needs (we've already migrated a website from Drupal 6 to Drupal 9 before yesterday's official release!).

Jun 03 2020
Jun 03

Most websites, even ones that have a perfect URL structure from the beginning, may need URL redirects sooner or later. URL redirects are small tasks that carry a big value. Since one of our fields of expertise is Drupal website support & maintenance, we often face website redirect tasks.

Today, our team shares their thoughts on what redirects are, in what situations they are needed, how they can help you, and how to redirect a website URL on a Drupal website with the help of the Redirect module. This will also include the simplest answer to the popular question “How to create a 301 redirect?”

What is a website redirect?

URL redirection, also known as URL forwarding, is a technique used on the World Wide Web that takes one website URL and points it to another. When someone visits the original address, they are taken to a new one. A URL redirect tells a user’s browser where to find the content they are looking for.

Temporary and permanent redirects

Web page redirects can be temporary or permanent. They are used to inform search engines whether the page has changed its address forever or this is just a temporary measure. They are associated with the corresponding HTTP status codes — 301 and 302 (the most widely used ones on the whole list of statuses from 301 to 307):

  • 301 – The page has moved permanently.
  • 302 – The page has moved temporarily.

Why redirect a website URL: common scenarios

If a page is no longer available at its old address, a redirect will prevent your visitors from getting a 404 “Not found” error when they visit it (from saved bookmarks, shared links, and so on). Keeping your website clean from broken links helps you reduce the bounce rate and improve session duration, which is very important for SEO.

Redirects are also a great way to inform the search engines that the new address is now official and should “inherit” all the SEO achievements of the old page. According to Moz (the creators of the famous SEO toolset), 301 redirects pass between 90-99% of link equity (ranking power) to the new URL. This means you are not losing any of your previous SEO efforts.

Here are the situations when it may be necessary to redirect a website to another URL. Depending on the situation, this can apply to the entire website or single pages:

  • Moving your site to a new domain (if you have purchased the domain of your dream, if you have to change domains due to intellectual property issues, or in other situations).
  • Forwarding multiple domains to a single one (if you have purchased multiple domains, if users regularly misspell your domain in some common way, or in other situations).
  • Forwarding subdomains to your main domain (for example, if you initially had “blog.mywebsite.com” and now you want to make it “mywebsite.com/blog”).
  • Directing all traffic to a single (“canonical”) URL (if a website uses both a WWW and a non-WWW version).
  • Changing a URL structure due to website redesign.
  • Redirecting duplicate content to the original page to avoid the confusion of search engines and users.
  • Fixing a mistake or a typo in a URL (web addresses need to be both human-readable and SEO-friendly, so sometimes fixing an important issue in them is worth a redirect).
  • Saving a situation, like when a wrong URL has been mistakenly shared with many people (e.g. via a newsletter to thousands of customers).
  • Creating a simple, brief, and catchy URL for print advertising campaigns.

How to redirect a URL with the help of the Redirect Drupal module

Sites built on content management systems (aka CMSs) offer hassle-free ways to redirect a website URL. Drupal is no exception. Of course, this can be done by a developer in the .htaccess file on the server, but there are much more user-friendly tools that offer intuitive interfaces. One of these for Drupal sites is the Redirect module. It has been recently updated by its creators.

The module allows you to easily create manual redirects from one URL to another and maintain a canonical URL for all content. This contributed module comes as a package of three submodules:

  • Redirect. It allows you to redirect a website URL to another one.
  • Redirect 404. It logs 404 errors and allows you to create a redirect for these pages.
  • Redirect domain. It allows you to perform a redirect between different domains.

Redirect Drupal module

By just enabling the main module, you get a simple interface that makes it immediately clear to non-tech savvy users how to do 301 redirect and more. We have also recorded a video tutorial that is waiting for you at the end of the page.

On the Configuration — Search and metadata — Redirect page, we see the page where all your redirects will be stored. You will be able to easily find the necessary ones through filtering (by source, destination, status code, and original language). It’s possible to edit or delete them from this page.

Redirect module page on a Drupal website

We need to hit the “Add redirect” button and then enter the details:

  • the source URL
  • the destination URL
  • the status (from 301 to 307)

The default status is 301, which is recommended, but you can change it on the Settings tab if needed.

Add a URL redirect on a Drupal website

The module has plenty of capabilities that developers love it for (Views API integration, integration with Drupal's page cache for performance optimization, redirect counter, automatic cleanup of inactive redirects, and much more). An important point is the module can team up with the Pathauto module to automatically generate path redirects and make sure the URL changes do not break the existing links.

Need help with your URLs?

Send tasks to experts! We have shared a basic guide on how to redirect a URL to another URL in Drupal. Our Drupal team is always there for you if you need:

  • assistance in installing and configuring the module
  • recommendations from our SEO team on your URL structure
  • more consultations on how to forward or redirect a URL
  • help with website redirects of any complexity
  • and much more

Drop us a line today and let’s make sure your customers and search engines find your pages at the right addresses! We will also be glad to hear from you about any ideas on site optimization, design, or development.

[embedded content]

Jun 03 2020
Jun 03

For our team at the Drupal Association, the events of the past week have once again emphasized the severity and violence of racism that communities experience in the United States and across the world every day.

Amidst the COVID-19 pandemic, where black and brown people are disproportionately affected, seeing racial turmoil unfold is particularly painful and difficult to witness. We stand with people across the globe in condemning racism, racist behavior and all abuses of power. We grieve for the black community, which has endured another unspeakable tragedy in a long history of injustice.

Drupal is global in scale, reach and opportunity.  It takes many contributions, from many diverse contributors to thrive. Drupal is about standing up for what could be and for promoting hope through access.  As such, our community adheres to a set of values and principles. Of particular importance is our value to “treat each other with dignity and respect” emphasizing that we do not tolerate intolerance toward others.  It is time to live our values out loud seeking first to understand, then to be understood. 

The Drupal Association values equity, diversity and inclusion, and we recognize we still have work to do to create meaningful change.  Here are the ways in which we are encouraging our team to take action.  We are sharing in hopes that you will take action, too.

If you have resources to share or organizations to highlight, please post them on social media using the hashtag #DrupalBetterTogether so that we may compile a comprehensive list for our community.

In the coming weeks and months, you will learn more about the programs we are putting into place to take action.  Our Drupal Community is truly Better Together, and together we will accelerate our ability to affect positive change.  Now is the time to raise our voices, not to silence them.

Jun 02 2020
Jun 02

End of life (EOL) software is a very real problem. Whether your business is using ecommerce and customer relationship management systems across multiple platforms or relying on basic scheduling and accounting software, you will at some point reach a technological expiry date.

Acro Media has developed a 6 step action plan for handling software end of life. View it here >>

When a system reaches end of life, the creator/owner of the software/technology no longer delivers support services for the product. That can include technical support, hardware or software upgrades, bug fixes, security patches, or feature development. In short, the system gets abandoned by its owner. 

Software becoming obsolete can cause all sorts of problems. Here are a few of the  risks to your business in running EOL software:

1. Compromised security

If you hold people's information and data, you are responsible and liable for it.

End of life technology receives no security updates. No bug fixes. No patches. No monitoring. Your technology is dead in the eyes of the creator. That means your security is completely compromised, not only for the platform that is EOL, but also potentially for any others that connect to it.

At minimum, your system can be accessed and your content or records edited, stolen, or deleted. If you have any user data, financial data, or sensitive information, you could have a major problem. The monetary and reputational cost could kill your business.

A survey of 2,600 CIOs across the U.S. found that the number one concern was keeping systems and information secure. By being proactive and not letting your systems reach their end of life, your company is better positioned to ensure that your data, and your customer’s information remains secure.

2. Lack of reliability

If you were a taxi driver, would you willingly drive an old car that is no longer maintained and has sporadic issues? Of course not. That’s because your livelihood relies on the economics of your vehicle. 

But that is what you are doing if you continue with EOL software. Old software is less reliable and more prone to failure. 

Maintaining EOL software is complex and expensive, and integrations into other systems require even more time-consuming and expensive workarounds. 

Regular updates, bug fixes and support in general goes away at EOL, which makes system maintenance much more difficult. Instead of spending your resources on new tools or building better customer experiences, you are stuck paying top dollar for fixes and updates no longer covered by the software creator.

Which brings us to our final point...

3. Higher operational costs

EOL software costs more, whether it’s through lost/stolen data, updating and maintaining with third parties, legal liabilities, or lost revenue from downtime or issues. 

The sticker price on a new system can sometimes seem large and prohibitive from a business point of view. But, consider the consequences of a security breach, or a major bug. The peace of mind  that comes with having a fully secure and supported system that won’t arbitrarily go offline is worth its weight in gold.

Another benefit from moving away from EOL software is the opportunity to review your company's entire technology stack/architecture. If you have software moving towards EOL, it's essential to look at not only replacing the single system, but also assessing your whole technology landscape for opportunities to make larger improvements.

Conclusion

Ultimately, EOL technology is costly to your business in multiple ways. Most technology providers give lots of notice when one of their products is going to be unsupported. That gives you time to assess your options and determine the path you should take. 

To help you assess your options download our 6 step action plan for handling software end of life.

Download the End of Life Playbook (PDF)

Editor’s Note: This article was originally published on June 2, 2020 and has been updated for freshness, accuracy and comprehensiveness.
Jun 02 2020
Jun 02

During content creation, it is not uncommon to refer to external content, from simple documents or web pages to multimedia or specific content such as tweets or posts from other platforms.

Links are one of the pillars of the web, but sometimes you want something more integrated. If you want to refer to a tweet, why not embed it in our content? A very common case is a Youtube or Vimeo video so that it can be played without leaving the page. Another case can be to visualize a Scribd's PDF file.

Embedding contents with oEmbed

To achieve this there are Drupal modules specific to each case, or generic but focused on one area, such as those that integrate video services. Another strategy is to use something like oEmbed. oEmbed is a format that allows you to describe URL representations that can be embedded in other web pages. That is, it is a way by which a provider (YouTube, Twitter, Scribd, Flickr, etc) can describe to a consumer (our Drupal website, for example) how to display a provider's resource.

Or let's look at a practical example. This article has been tweeted by the Twitter Metadrop user. This tweet has a URL. Well, using oEmbed is enough to use that URL to get this result:

Embeding content using oEmbed and Drupal: https://t.co/3o6F2IKzgU

¡También en español! «Incrustando cosas mediante su URL usando oEmbed»: https://t.co/93QuZOGvKq pic.twitter.com/bFaWvP1VLN

— Metadrop (@metadrop) June 2, 2020

Fantastic! Obviously, the article has been tweeted and then quickly edited to add the tweet's URL, circular references were never easy!

URL Embed module

Embedding content using oEmbed requires the Drupal site to support this format. But we are lucky since the Drupal's Media Initiative has created the URL Embed module. The module integrates oEmbed and allows it to be used in CKEditor fields in a very simple way through a simple dialogue in CKEditor itself.

Diálogo de inserción de URL del módulo URL Embed.

Embeding a URL in this article on a new autoreference.

The list of supported providers is long, and includes providers of video, documents, photos, and many other things I honestly don't know about.

Let's do another test. How about a Vimeo video?

[embedded content]

Demostración del módulo GA Push.

¡Wonderful!

A Flickr's album?

2017-05-05--11-17-26

Drupal Camp Madrid 2017

Great!

A SlideShare's document?

Security considerations

There's a delicate matter.  Through oEmbed, we receive HTML data from external sources that are displayed on our website. Potentially, this can create Cross-Site Scripting problems: if we insert a malicious JavaSript code, it will have access to our domain's cookies, for example. To mitigate this problem oEmbed suggests displaying the external data on a different domain using an iframe. Unfortunately, URL Embed does not have this possibility. Does this mean that this module opens a security hole? Not exactly. The point is that we must trust the provider. For example, it is not probable that a known service as YouTube to return malicious code in its oEmbed response, just like other services such as Vimeo, Flickr and so on (although not impossible, of course). But less well-known services, and therefore less subject to scrutiny, are more likely to return code that is not entirely secure, either intentionally or unintentionally. If we allow oEmbed responses from any provider we'll probably face some security problems in the future.

Therefore, it is enough to know the security implications and act with the head, as it usually happens in real life.

Conclussion

URL Embed is a good module even though it is still alpha. Today it has almost 2,300 installations and in our tests it has not failed. It is true that it is looking for maintainers and that it would love some contribution, but it is good enough to be used, always taking into account the security considerations.

Jun 01 2020
Jun 01

Drupal 8's Layout Builder allows content editors and site builders to easily and quickly create visual layouts for displaying content. Users can customize how content is arranged on a single page, or across types of content, or even create custom landing pages with an easy to use drag-and-drop interface. Our recently contributed module - The Layout Builder Asset Injector module is definitely not a replacement for theming, but it provides site administrators with a quick and easy approach. The Layout Builder Asset Injector module allows site builders to add CSS and JS to the layout builder blocks. 

| Benefits 

  • It allows you to inject CSS and JS within the layout builder blocks without the need to add it in the codebase.

  • Append unique CSS and scripts specific to layout builder blocks

  • It provides content editors with basic knowledge of CSS and JS to style their individual layout builder blocks and add short JS scripts to modify the behaviour.

  • Instead of adding CSS and JS on a page level, this module allows you to inject them on an individual block.

| CSS Injector

CSS Injector allows administrators to inject CSS into the page output based on configurable rules. It's useful for adding simple CSS tweaks without modifying a site's official theme.

| JS  Injector

JS Injector allows administrators to inject JS into the page output based on configurable rules. It's useful for adding simple JS tweaks without modifying a site's official theme.

Note: Block class will be appended automatically to each CSS.

For example when we add a CSS as given below:

h1.node__title {

  background-color:red;

}

It will automatically append the class of the block for which CSS is added once saved.

.block-field-blocknodepagebody h2.node__title{

   background-color:red;

}

 

Layout Builder Asset Injector Drupal module

| How does it work? 

  • Enable the Layout Builder Asset module

  • After you enable the module, enable the layout option from the manage display section as shown below:

Layout Builder Asset Injector Drupal module

Layout Builder Asset Injector Drupal module

Layout Builder Asset Injector Drupal module

To understand Layout Builder in detail refer  https://www.drupal.org/docs/8/core/modules/layout-builder

  • You can add your styling and scripts under the CSS and JS fields respectively

  • To make the styling and scripts specific to a block, add classes under the Classes text field. This class should be unique so as to reflect scripts and styling specific to a block.

  • On adding the CSS and JS and saving the configuration, it will automatically prefix the CSS with a custom class added.

Note: You don't need to add it manually.

Layout Builder Asset Injector Drupal module

Layout Builder Asset Injector Drupal module

 https://www.youtube.com/watch?v=3Ogya_66GDU&feature=youtu.be

| Implementing the Layout Builder asset injector module 

Click here for the steps to install the Layout Builder asset injector module - https://www.drupal.org/docs/8/extending-drupal-8/installing-drupal-8-modules

[embedded content]

| Developer support

Kishor Kolekar: https://www.drupal.org/u/kishor_kolekar

Harshal Pradhan: https://www.drupal.org/u/hash6

Abhishek Mazumdar: https://www.drupal.org/u/abhisekmazumdar

Hardik Patel: https://www.drupal.org/u/hardik_patel_12

Naresh Bavaskar: https://www.drupal.org/u/naresh_bavaskar

| Module download link 

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

| Alternative module links 

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

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

Jun 01 2020
Jun 01

While trying to build a form, I found that it would be useful to have a one-click/touch option to clear text field values instead of selecting all the text and removing it. Even though this appears like a small issue, solving this would make users life easy! This was the driving force behind creating the Clear Field Values module for Drupal 8. The Clear Field Values module provides a way to clear data in the text field values with a single click/touch.

| Clear Field Values module

This module adds a button to clear text field values in one click/touch and provides two options at present, one is a simple cross button and the other is using font awesome icons.

| Benefits 

  • Helps clear the entire input field without having to delete the whole text manually 

  • Clears a pre-suggested input present in the input field, that the user does not require.

| Implementing the Clear Field Values module

Follow these steps to configure the Clear Field: 

  1. Go to /admin/config/clear-field/settings steps

  2. Enable Clear Field by selecting the checkbox 

  3. Next, select the type of Button:

    1. Simple X 

    2. Fontawesome for all generic fields

  4. You can then add the text and tooltip which you need to add along with icon or keep it empty if not required.

  5. Add classes for the text field elements where you need the cross button to be visible.

Step 1 : Move to  Settings page /admin/config/clear-field/settings 

Step 2: Enable Clear Field Checkbox

Select Type of Button

  1. Text along with X for all

Selecting the above option would add X(cross) with text beside the text field

  1. Font Awesome for all fields generic

Enable FontAwesome module https://www.drupal.org/project/fontawesome and you can add the cross button

Default values for the text of the icon and tooltip are Clear Field & Clear field value which can be overridden.

Default values for the Classes are form-text form-email separated by a space.

For a custom-form add custom classes defined under element’s attributes under Classes field.

[embedded content]

| Developer support

This module is supported by 

  1. Harshal Pradhan https://www.drupal.org/u/hash6

  2. Kiran Kadam https://www.drupal.org/u/kirankadam911

| Module download links

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

https://www.drupal.org/project/clear_field/releases/8.x-1.x-dev

Do send in your feedback around this module! We would love to hear from you. 
 

Reference: https://www.geeksforgeeks.org/html-clearing-the-input-field/

May 29 2020
May 29

Happy to announce we're attempting to kick off a new community initiative primarily focused on fixing and closing bugs.

We're hoping to

  • reduce the total amount of open core bugs
  • reduce the average age of open bugs
  • increase the number of closed bugs
  • mentor those looking to get more involved in contributing to core
  • give community members from countries in the Eastern Hemisphere the chance to participate in a core initiative in their local time zone.

We need you!

Resolving core bugs requires a wide range of skills - we're looking for volunteers to join us who can help with one or more of the following tasks:

  • Triaging and classifying bugs
  • Writing good bug reports, with steps to reproduce
  • Writing patches to resolve the bug
  • Writing automated test-cases to confirm the bug, and that it is resolved
  • Reviewing patches, through the lens of each of the core gates e.g. technical, accessibility, performance, backwards-compatibility, documentation, internationalization and usability.
  • Communicating with sub-system experts in order to gain sign off on non trivial changes
  • Writing documentation as required
  • Manual testing of the patch
  • Communicating any changes via blog posts, change records, release note snippets etc.
  • Coordination and management

If you are are looking to get involved - come join us on Slack in the #bugsmash channel.

We will meet asynchronously in the #bugsmash slack channel fortnightly on a Tuesday at 0400 UTC which maps to the following times:

  • 2pm AEST
  • 12 noon AWST, CST
  • 4pm NZST
  • 9.30am IST
  • 6.00am CEST
  • 5.00am BST
  • 8.00pm PST
  • 11.00pm EST
May 29 2020
May 29

With the imminent release of Drupal 9, it’s a great time to give serious consideration to your update strategy. There is much to look forward to this time around, whether you are a Drupal veteran or new to the family.

The good news is that this will be a much easier process than the most recent major version updates, so if you’ve been using Drupal a while, this should come as a relief. However, It is important to note that while it is not a painful migration process, it’s also more than just a few clicks away. Drupal 9 changes a few assumptions many of us are used to as Drupal site builders, but preparing now will take you far.

Drupal 9 is basically just Drupal 8 with updated dependencies and deprecated code removed, which makes for a fairly straightforward update process, but the devil is in the details.

Getting Started

First, there are some prerequisites you’ll want to keep in mind.

  • Your current site must be running on at least drupal 8.8 to upgrade. This means a fully up to date install.
  • You must use PHP 7.3 or higher. Drupal 9 requires php 7.3
  • In some cases, Drupal 9 needs a newer version of whatever database you're on now, so you may need to upgrade your database. See Environment requirements of Drupal 9 for details.

As you start looking for Drupal 9 compatible modules, you may find yourself a little perplexed as you browse modules on Drupal.org and notice that none seem to have a Drupal 9 compatible release.

They do, but it's a bit hidden.

(Note that you do not have to look up every module you are using on Drupal.org. We'll get to a handy reporting and scanning tool shortly, but it's important to note these changes to how modules will work with Drupal 9.)

You will find Drupal 9 compatibility in the small text under "Project Information."

The concept of modules being tied to a major release is old Drupal, and we're living in the future now. Modules can work with more than one major version of Drupal! So, you won't see a big highlighted box for a Drupal 9 release on module pages.

In the near future, you'll start seeing more module releases using semantic versioning on Drupal.org. A few are already there. The major version of core will no longer be part of the module's version number. You can see this in action on the semver_example module and on the Lightning project page.

Lightning version 5.x.x uses semantic versioning.

Evaluate Your Site

Once you have met the requirements to run Drupal 9, the next step is to evaluate your site. The first course of action is to update all modules to the latest version. There's a good chance they're already D9 compatible. Then, check for deprecations in your themes, contrib modules, and custom modules.

Deprecations are old Drupal 8 functions which have been removed from Drupal 9, and you’ll need to find them to replace them with up-to-date code. To do this, I recommend starting with the Upgrade Status module. This module will scan your codebase for deprecations and provide you with a handy report. Install it in your development environment, and note that it must be installed with composer.

$ composer install --dev
$ composer require 'drupal/upgrade_status:^2.0'

Once you've enabled Upgrade Status and navigate to its report at admin/reports/upgrade-status, you'll see some important information about your environment that will indicate your ability to run Drupal 9.

The top of the Upgrade Status report. Upgrade Status will scan your custom modules and themes and all your contrib projects and give you this lovely output.

One warning per custom project is great news, especially when the fix is as easy as adding core_version_requirement to the project's info file. Further down the report, you'll see the a list of your contrib modules. Even though we've updated our modules, we may still see that they are not all D9 compatible, and Upgrade Status will show those errors.

You may see some text under the module that indicates its status. Module maintainers may optionally provide this very helpful information. Sometimes it might be as simple as "This module is ready for Drupal 9".

If you see something like "Version 1.x-dev is ready for Drupal 9", "dev" means the latest version isn't D9 compatible. They may also indicate which future release will be compatible, and even include a link to an issue on drupal.org with further information about the module's status, and we’ll see an example of that when we dive deeper into evaluating contributed modules.

But wait, you are probably wondering how Admin Toolbar is compatible when it shows 12 warnings!

You'll errors like this sometimes when using Upgrade Status. There are two main reasons why you'd see this:

  1. The problem might be in a test class, like in this example. Tests can't always be scanned, but you can safely ignore them because you won't run test code in production.
  2. The module might have a third party dependency that you don't have installed. That's totally okay -- those dependencies may not even be Drupal modules, so they don't matter to Upgrade Status.

Generally, you can trust the maintainers that the module is indeed "ready for Drupal 9."

You'll get lucky with some modules, and they'll have errors that are pretty easy to fix. Some may be a little more challenging or involve some refactoring, but many will have  a handy link to the API documentation, as below.

If you click one of the nice error messages, you get to the api documentation page for the deprecated function, which may also contain a helpful link to the change record with thorough examples to help you change your code the best way: 

Change records document changes to Drupal core. They will describe the change and the impact of the change. It should include any interface changes, function or hook changes, and it's helpful for understanding how to address these changes with your own code.

Note that not all errors will have a link to further documentation, but that's okay because a little API searching will do the trick.

The deprecation notice.

If you look at the top ten most popular Drupal 8 compatible modules, all are compatible in their dev branch, and 9 of the 10 have full compatible releases. This is incredible progress.

But, as we get further down the popularity list, we're likely to find some incompatible modules.

As you continue your discovery process, it's a great time to evaluate where your pain points will be. Get involved and try to help modules reach their Drupal 9 compatibility goals, or if a module seems stalled or the last commit was 3 years ago, have a backup plan to include a patch or re-evaluate the need for the module at all.

Acquia's Drupal 9 Deprecation Status page is also a great source of information. This shows the status of all contrib projects, and gives you an idea of where the entire Drupal ecosystem stands with regard to Drupal 9 readiness.

Fix Your Errors

Once you've equipped yourself with the prerequisite information, it's time to move on to fixing any errors you have found. I'd start with the easy ones and work your way up.

Now is a great time to introduce the Upgrade Rector module. Upgrade Rector is a UI that uses drupal-rector to help you automatically generate patches. If you install the Upgrade Rector module, since it integrates nicely with Upgrade Status, you'll be able to generate an automatic patch for some modules as you scan them. Rector is limited at this point though, so you may end up with results similar to the following screenshot, but even a couple patches could get you a little ahead of the game and save a bit of time. And, like everything in the Drupal world, development is moving fast. By the time you install Upgrade Rector and scan your site, it's likely you'll be able to automate several of your patches.

Drupal Rector output visible on the Upgrade Status report (admin/reports/upgrade-status).Click the "patch available" link to see the generated patch.Drupal Rector displays the patch in a modal window.

Below, you see the changed lines highlighted, and your custom code is ready to go. There is a caveat, however. If you've found a contrib module that has not yet been patched in the issue queue and you'd like to add one, I can tell you from experience that if you post a patch like this for a contrib module, an experienced maintainer is likely to ask you to make changes to it. In this case, someone could point out that these replacements use the global Drupal class, which is not always the ideal approach in contrib modules, but it's safe to use in your custom projects.

This example used a contrib project, but it's useful to remember that with contrib projects, you aren't alone, so save yourself some work and check the module issue queues to see if the deprecations have already been patched, or even committed. Some maintainers will also have an explicit link to the main Drupal 9 issue in their queue, and this will be visible on the Upgrade Status Report, on the module page, and on the Acquia Deprecation Status tool.

If they haven't, then you can make the changes yourself and submit a patch to the issue queue and do your good deed for the day. With any luck, you'll just have to focus on your custom code.

In short:

  1. Avoid duplicating work.
  2. Check the issue queue first.
  3. Then submit a patch.

Once you have gone through your list and fixed and rescanned until it's all green, or you have gotten as far as you can, next make sure all your automated tests are passing. There is a pretty good chance the Update Status results screen will never be completely green, and that's okay because static analysis is not perfect, and neither are automated tests.

Once you feel like you've exhausted all your options with static analysis, you can try actually testing with Drupal 9 core.

You can test your current status by requiring Drupal 9 like so:

$ composer require 'drupal/core:~9.0'

Now, you may have to do some composer wrestling to get this going, but you'll get there!

You may see errors like this:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Conclusion: remove drupal/cookieconsent 1.4.0
    - Conclusion: don't install drupal/cookieconsent 1.4.0
    - Conclusion: don't install drupal/core 9.0.0-beta2
    - Conclusion: don't install drupal/core 9.0.0-beta1
    - Conclusion: don't install drupal/core 9.0.0-alpha2
    - Conclusion: don't install drupal/core 9.0.0-alpha1
    - Conclusion: don't install drupal/core 9.1.x-dev
    - Installation request for drupal/cookieconsent ^1.4 -> satisfiable by drupal/cookieconsent[1.x-dev, 1.4.0].
    - Conclusion: remove drupal/core 9.0.x-dev
    - drupal/cookieconsent 1.x-dev requires drupal/core ~8.0 -> satisfiable by drupal/core[8.0.x-dev, 8.1.x-dev, 8.2.x-dev, 8.3.x-dev, 8.4.x-dev, 8.5.x-dev, 8.7.x-dev, 8.8.x-dev, 8.9.x-dev].
    - Can only install one of: drupal/core[9.0.x-dev, 8.8.x-dev].
    - Can only install one of: drupal/core[9.0.x-dev, 8.9.x-dev].
    - Can only install one of: drupal/core[9.0.x-dev, 8.0.x-dev].
    - Can only install one of: drupal/core[9.0.x-dev, 8.1.x-dev].
    - Can only install one of: drupal/core[9.0.x-dev, 8.2.x-dev].
    - Can only install one of: drupal/core[9.0.x-dev, 8.3.x-dev].
    - Can only install one of: drupal/core[9.0.x-dev, 8.4.x-dev].
    - Can only install one of: drupal/core[9.0.x-dev, 8.5.x-dev].
    - Can only install one of: drupal/core[9.0.x-dev, 8.7.x-dev].
    - Installation request for drupal/core ~9.0 -> satisfiable by drupal/core[9.0.0-alpha1, 9.0.0-alpha2, 9.0.0-beta1, 9.0.0-beta2, 9.0.x-dev, 9.1.x-dev].

You may see errors like this. Any modules that don't declare compatibility with Drupal 9 will not install. They need to do that with core_version_requirement in their info file. As a workaround, you could temporarily remove them until they do, and test the rest, or you could bring them in without using composer, and check them that way. That will allow you to identify any missing core_version_requirement keys in sub modules, or other issues that may have slipped through.

Once you have a Drupal 9 codebase, you are not necessarily home free, as static code analysis doesn't catch everything. At this point, you may face errors when trying to run your site. In fact, it's likely. A good way to check for errors is to run drush cr once you've upgraded. In my experience, references to deprecated services may have slipped through, and they'll pop up once you've switched to Drupal 9.

At this point, you may face errors when trying to run your site. In fact, it's likely. A good way to check for errors is to run drush cr once you've upgraded. In my experience, references to deprecated services may have slipped through, and they'll pop up once you've switched to Drupal 9.

For example:

You have requested a non-existent service "entity.manager".
 
 
You have requested a non-existent service "path.alias_manager".

Next Steps

If errors are coming from a contrib module, your first stop should be the module's issue queue. Report the error if it has not already been reported. Active maintainers and other contributors are likely to respond to the error quickly, especially in popular modules. If you need to explore further, run the module's tests.

If the error is in your custom code, as in contrib modules, some of these changes will be easier, like simply replacing the old service with the new, and sometimes you'll have to rethink your code a little bit. You may find some guidance in the change records: https://drupal.org/list-changes

Once you have your fixes in place, you should again be ready to make sure any automated tests are passing with Drupal 9. Then, give things a manual test for good measure.

But what if it hasn't gone so smoothly? What other challenges might we face?

The differences between getting custom projects ready for D9, versus contrib projects, are pretty clear. You are in charge of your custom code, and you can define your own timeline for a Drupal 9 compatible release. With contrib projects, the maintainers are the gatekeepers, and you may find yourself temporarily blocked while waiting for patches to be committed. The upside is that once ready, it's an easy update away!

Almost all Drupalers are kind and generous people, as you know, but some are a little busy. Ultimately, it's going to take the efforts of many to get the contrib modules you need ready. And in the meantime, you probably have enough custom code to tackle.

Making Sense of Contrib

As someone who used to spend a lot more time using Drupal than looking at issue queues, I can understand how the process of evaluating a module's readiness, or progress toward readiness can be less straightforward. But I'll show you some key places where I go digging for this information.

Search API is a great example of a helpful status message. You'll find the status when using Upgrade Status and at Acquia's deprecation status page.

You'll see that this module has included a link to an issue which will tell you what you need to know about the status of its Drupal 9 compatibility. This is very convenient.

But now, let's look at reCAPTCHA. You'll notice there is no indication of Drupal 9 compatibility on the module page.

Next, we can check it on Acquia's Deprecation Status page.

This suggests reCAPTCHA is ready to go, but let's try and verify. Note that no Drupal 9 plan is provided to indicate the status of its compatibility.

It's always a good idea to check the issue queue for Drupal 9 progress when it's not linked from the status message. We got lucky, and this post is right near the top. 

There are some good signs in this issue. There's a patch and it was committed.

There are also some less good signs. What are these D9 composer require failures? We don't really know the status based on this. And remember, just because this test isn't running does not necessarily mean this test won't work for you. The only way to know for sure will be when you try it.

So, let's go back to the module page. 

The modules automated tests are another important source of truth.

This page looks less promising. The module's tests currently fail with Drupal 9. If we click the failure notice, we'll see the test failures in detail. 

Here we can see the problem. reCAPTCHA can't be Drupal 9 ready until its depedency, CAPTCHA is. So now's a good time to head over to the CAPTCHA module's page and check its status.

Maybe you could help them move it along!

In this post, I've laid out the major steps toward getting your site ready for Drupal 9.

  1. Update core and all your modules, and satisfy Drupal 9 minimum requirements.
  2. Remove all deprecations in your custom code, and make sure all your contrib modules are ready for Drupal 9.
  3. Upgrade to Drupal 9 and test manually.

In summary, if you start this process now, you'll be a little ahead of the game. If your projects are ready, it's a pretty seamless update, and if not, now is the time to get them there. Keeping your current Drupal 8 site up to date will get you far.

Resources

Drupal 9 resources

Drupal 9 Overview Page

Upgrade Status Module

Upgrade Rector Module

Acquia's Drupal 9 Deprecation Status Tool

May 28 2020
May 28

It’s been a long few months for many of us and we’re all ready for some good news!! Luckily, as a part of the Drupal open source community, we have some. Our group continues to be full of strong, resilient, and uplifting individuals who truly understand that we're all in this together. 

You Have Resources

We cannot recommend strongly enough to please, stay connected and in-touch with your local community. Now more than ever, this can help maintain momentum and provide the companionship that many of us miss during this time of social and physical distancing. Many local and regional meetups provide time at the beginning of their events for networking, including dedicated time for those looking for work and those who are hiring. We encourage virtual event organizers to continue to provide (or even expand) this aspect of online events.

Beyond the power of word-of-mouth, there are other online resources available to you in these unusual times. There are Drupal Camps that have year-round job boards posted on their websites. Drupal.org has a whole section of their website dedicated to those looking for work. The organizations that are posting here are invested in Drupal, just as you are. This common spark could start you on a new path. 

What You Can Do for Yourself

In spite of the global state, there are many things you can do - you are empowered! We suggest you start with the following:

  • Add your profile on Drupal.org
  • If you already have one, give your Drupal profile an overhaul and be sure it’s up to date. 
    • Update your bio: Ask yourself if that is really how you see yourself
    • Past companies: Don’t forget to show your growth
    • Bio Picture: Just make sure that if you look like it’s your prom picture, that you intended it that way.
    • Ask a fellow community member to review and provide suggestions for improving it. Many of us have difficulty in promoting ourselves, so ask for help to ensure that potential clients/employers see you for all that you are!
  • Update your resume
  • How to prepare for an interview
  • Don’t get shy. We repeat: Don’t Get Shy! Even when feeling the “aloneness” of it all, get out there virtually. Attend local meetups and camps to network and grow the community
  • Keep learning. In the face of everything, stay curious! It’s probably how you started down this road, to begin with

How Employers Can Help

Great leaders know that communication is the key to success. Now more than ever, your leadership skills and community contributions are needed to help pull us through this global crisis. Please, 

  • Be transparent with employees and contractors. We are all in this together.
  • Sponsor DrupalCamps at the job board level to get connected.
  • List any open positions on Drupal.org.
  • And remember the gift of presence; network at local and regional meetups and mentor those you can.

We Never Stop Growing

Even in challenging times, we as individuals and as groups cannot stop growing. Take time, get talking, and get excited. There are many more roads to be traveled, together.

Resources

We welcome additional resources in the comment section, thanks!

May 27 2020
May 27

Greg HarveyContinuing our short series of articles highlighting ways that the Drupal software and its community are building solutions to help combat the effect of COVID-19, today we hear from Greg Harvey of Code Enigma. Here, he describes their project at the the National STEM Centre in York, England

STEM stands for Science, Technology, Engineering and Mathematics. STEM Learning is the company that built and operates the National STEM Centre in York, England. They provide specialist training in STEM subjects to teachers from across the UK. As well as classroom training opportunities in state of the art facilities, they provide free, high-quality online education resources via their website. They have been using Drupal to deliver this important content since 2015.

Supported by their principle Drupal services supplier, Code Enigma, STEM Learning increased their server capacity when it became clear the COVID-19 pandemic was going to hit and many children in the UK would soon be homeschooling. 

STEM anticipated increased demand (having seen how online education resources in France were beginning to feel the strain of school closures (one of Code Enigma’s directors is a parent in France) and decided to react before it became an issue. 

Code Enigma is also an AWS Select Tier partner. The website is hosted at AWS, so it was possible to quickly scale the solution using AWS’s public cloud products and services. The fact that Drupal is ready to Enterprise-scale right out of the box, with the right support, was also extremely helpful.

Consequently, when the UK Department for Education contacted STEM Learning to inform them they wanted to sign-post teachers and parents to the website from the main UK government website, everything was already in place. Code Enigma’s developers and designers worked quickly with STEM Learning to adapt the front page to help people find homeschooling resources efficiently. They also designed and created some new landing pages, such as this one for parents, to help people get straight to the relevant content.

In short, thanks to Drupal, STEM Learning is actively supporting homeschooling in the UK during this global pandemic, by providing high-quality teaching resources online and for free.
 

Screenshot of STEM website

May 27 2020
May 27

We live in the age of the digital, with digital experiences an intrinsic part of our everyday lives. This means that now more than ever there’s a need for incredible amounts of people who have the skills to craft compelling experiences in the digital. A large portion of them is represented by software developers.

However, one of the main characteristics of the digital is its unbelievably fast pace. There are new trends and technologies emerging constantly, and it’s very difficult to keep up, especially for larger businesses whose digital endeavors are broader and encompass multiple different channels. 

What this means is that all these highly skilled developers need to at once be familiar and experienced enough with existing technologies and prepared for any future trends that might emerge further on. It’s definitely no easy task finding and retaining this perfect blend, especially with the unprecedentedly high demand for developers today. 

In this post, we’ll dive deeper into the importance of a development team that’s future-ready, explain what future readiness even means, and look at some tried and tested methods for acquiring a team of future-ready developers. 

What does it mean to be future-ready?

Future readiness means different things for developers and businesses, so we’ll define each separately. Still, both of them ultimately tie together: due to the need for digital experiences, business future-readiness depends majorly upon developer future-readiness.

Developers

If a developer is future-ready, it means they are familiar with and follow best practices, know and effectively implement accessibility guidelines, and are up-to-date with a range of technologies as well as trends (e.g. web components, lazy loading, etc).

They don’t necessarily have to be experts at obscure emerging frameworks, but they do know enough about the state of the software development landscape that they’re able to adopt a new technology if it turns out to offer a significant business advantage, or a greatly improved developer experience.

When it comes to a future-ready development team, one of the most important characteristics is the developers’ ability to cooperate internally. They are able to complement each other’s potential skill gaps to deliver a cohesive final product. 

Businesses

A business that’s future-ready is not locked into a system that doesn’t allow integrations, or that’s dependent on a lot of other technologies that are outdated. 

It’s built on a platform that can scale and that is owned by the business, not a third party. It has the capability of integrating new technologies, and is optimized for mobile and multichannel digital experiences.

By investing in their employees’ growth, as well as by following industry standards and agile methodologies for swift iteration, it is resistant to disruption and always able to use its familiarity with the digital to its advantage.

Why do you need a future-ready development team?

This is more or less a no-brainer; if you want your digital business to be future ready, the baseline of that business has to be future ready. 

Plus, the future is uncertain - that means, while you can never be fully prepared for it, you have to do what you can to at least be somewhat prepared. There are new technology trends emerging all the time, and if you want to be on the cutting edge, you need to be able to leverage them when you or your clients need them. 

Also, considering the current disruption, the nature and importance of digital experiences are themselves changing - right now, for example, we’re seeing a major rise in e-commerce and video conferencing solutions. Those that respond quickly without having to change course have an obvious advantage in navigating such crises. 

This is where a future-ready development team comes into play. It’s even more convenient if you leverage the expertise of a skilled development agency, as you don’t have to invest a lot of resources into vetting and re-/up-skilling your in-house employees, but rather get a readymade team of developers possessing the exact skill-sets that you need.

If you are, for example, a startup building your groundbreaking tech product, you’ll definitely want to make use of the most innovative technology available to you, as well as make sure you’re working with vetted experts who follow best industry practices. Read here how proven Agiledrop engineers can help you build high-end digital products. 

The future is uncertain quote

What’s the best way to secure a team of future-ready developers?

As with any developer, there are several ways, e.g. outsourcing (to an agency or a freelancer) or in-house. For a future-ready team, however, it’s even more important that you’re able to get exactly what you need without too much additional overhead. 

With everything going on recently, it’s become incredibly difficult to attract in-house talent that fits your needs, let alone vet them and/or invest into up-skilling your existing talent. As stated, your best bet right now would be to partner with a company that’s focused exclusively on development, as you can be sure they’ll invest their energies into being up-to-date. 

For complex projects that require various technologies all functioning together, you’d typically need a full team, not just a single developer. Cherry-picking the team with the exact needed skill-sets from a pool of available freelancers would likely be a very time consuming and costly process - plus, you get no guarantee that these individual developers will work well together.

A development company such as Agiledrop can provide a full team that is used to working together and collaborating on complex problems to deliver smooth and efficient solutions. Our engineers are encouraged to learn about any new technologies that interest them, and to share what they’ve learned with the whole team during monthly AgileTalks. 

As is also obvious from our name, we follow agile methodologies in all our projects, but we ultimately always adapt to our clients’ workflow, adopting their tools and processes. This ensures that, while our clients benefit from our expertise in the latest trends, this benefit never comes at the expense of internal consistency. 

So, if you’re currently in the process of searching for a future-ready development team, you’re in luck - get in touch with us and find out how our skilled engineers can help you deliver just the product you need. 

Conclusion

Man in cloak on a rooftop with orange sunset in the background

The faster the pace of the digital, the more important it is to be future-ready. And, as drivers of digital experiences, developers and engineers are key in guaranteeing digital-based future readiness. 

Future-ready businesses have an obvious competitive edge, but it is not always possible to invest in an in-house team of future-ready developers. In those cases, finding and partnering with a development company that’s able to provide the right skills for your needs is definitely the best bet. 

Ideally, you’d also want that partnership to be long-lasting, so that you don’t have to search for the right partner again during every big project. If you’re able to secure a partner that can accommodate your digital requirements when you need them, you’ll never again have to worry about future disruption - you’ll be future-ready.

May 26 2020
May 26

Many costs are associated with developing a new ecommerce site or migrating from an antiquated setup to an upgraded version. And unless you work in the thick of ecommerce development every day, you likely don't know what questions to ask to ensure you’re getting the full picture.

This article explains what your typical expenses will look like and makes a few suggestions about how to approach budgeting for this undertaking.

Open Source vs. SaaS: A Comparison of Costs

You need to decide whether you will go with open source or a Software-as-a-Service (SaaS) platform to power your site. The cost of doing business is very different with each model.

An open source ecommerce framework has the expenses front-loaded. You pay for development time and configuration costs, and then the final product is yours to own and manage—license-free. 

A SaaS approach is quicker to get live and has lower costs up front. But then you pay an annual license fee and give a percentage of your revenue to the platform with each transaction made. 

Start by doing some easy math. Calculate three percent of your average annual sales. With an SaaS approach, if you sell $50 million online each year, you'll pay $1.5 million in revenue share (on top of licensing fees). If that is an acceptable cost of doing business and allows you to “set it and forget it," then SaaS is likely the right way to go for you.

But if you're a business that needs or wants more control of the front- and back-end experiences, you can use that three percent as a starting point to decide how to shape and invest in your online architecture. With open source software, you’d invest this money up front in year one. In years two and beyond, expenses taper down to about 15 percent of this initial investment annually to keep operational. 

Complete this exercise in relation to your own revenue and figure out what your working budget would be to get started. If three percent leaves you with peanuts, I’d suggest searching out a DIY platform-first ecommerce tool and seeking the help of an independent contractor to start generating revenue online. Your year-one investment may look closer to 50 percent of your annual online revenue to get where you need to be. 

Try to avoid thinking of this as an expense. Instead, think of how much money you’re going to spend to get a return on investment. How long will it take you to earn that ROI? Are these expectations realistic?

How to Budget for an Open Source eCommerce Architecture

Moving from an existing platform (typically SaaS or home-brew) over to a fully open source, headless ecommerce architecture setup incurs costs like:

Planning

Planning is the backbone of a successful ecommerce development project. If you don’t spend the time and money to work out that foundational blueprint, you will get a half-assed outcome that will likely cost more than you were initially promised.

On average, the planning processes for building a substantial ecommerce site for businesses that generate $50 million or more in revenue take 10 weeks of work and cost about $50,000. 

Planning is the absolute MUST-DO on your list. If you skip it, you may save $50,000, but your project will spend it on the other end trying to figure out who meant what because you flew cheap and blind. 

Ask if your proposed agency completes the following activities in their planning phase: 

  • Visualization / live prototyping 
  • Conversion planning, persona development, user journeys 
  • API integration planning, platform and integration reviews and selections 
  • ERP / product mapping 
  • Server and dev ops planning, security, performance and scalability planning

If you’re being pitched the above list, and you can see working past examples of blueprints such as these, then you’re spending your money wisely and you have a shot at getting this project right the first time. 

TIP: This plan should be detailed enough that you can either take it and build out your new site in its entirety with your on-staff tech team, or take it to ANY agency and have a crystal-clear spec for execution. 

Planning is not conceptual. It is a fully operational blueprint that the engineers have stamped and approved. This is a one time cost and the most essential ingredient in your budget. 

If you can only afford to get through planning in year one, make it a priority and wait for the next round of capital expenditure funding to implement it.  

Creative Design

Designing a new eComm site is the fun part. This phase of the project should be done after planning is fully signed off on. That’s because planning allows ideas to flow and evolve. And changes in functionality dictate front-end experiences. 

Your design phase will vary in price depending on what you want to see mocked up versus just built by the team without your input. Set aside $25,000 to $45,000 to make sure your creative phase reflects the quality of your business accurately. This is a one-time cost.

Here are a few tips to ensure that you’re spending your money wisely:

  • Beware of agencies that propose mockups for 30 pages within your new ecommerce site. This is a waste, a cash grab, and a sign of an inexperienced development team.  
  • Limit mockups to the home page, catalog landing page, product details page, and a general content page. However, if you have some funky options in your cart and/or checkout process, design them, too. 
  • Don’t bother fully mocking up creative designs for responsive options. If you’re dead set on seeing the mobile experience, start with the homepage on phone only and evaluate from there. 
  • Don’t waste time or money creating full mockups for each page. You can always add more designs as you go, if needed, or designers can provide elements to improve designs on single pages.
  • Complete and approve the home page design fully first before moving onto any “internal” templates. You don’t want rework across multiple designs. 
  • Use a web design agency, not a design agency. There are specifics for designing to web standards that don’t apply to companies that deal in logos, brands, and print work.

Sprinting / Development

Your project team should work with you to break your planning into stories, block these stories into epics, and group these epics into sprints. You’ll then have an idea of how many sprints you’ll need to get live.

Typical costs for sprinting range from $20,000 to $60,000 a month for the lifetime of the build cycle, which is usually six to 12 months. After this investment, you have a feature-rich ecommerce setup to push live. (Remember: These expenses are front-loaded. After this one-time cost, you own the site and don’t have to pay licensing fees or share your revenue).

Sprinting costs depend on velocity. That is, how many bodies can we afford to put on this development until the sprints are done? If you have $20,000 a month to spend for six months, you’ll get through $120,000 worth of programming or about 600 hours (give or take per agency).

That’s a decent amount of programming time for a version one go-live. You can alter the velocity, or speed with which you move, by altering your spend. After you get to that first launch, you may have the option to taper down resourcing (i.e., output) and slow spending over the following months.

Additional Features or Ongoing Support

Your site is not a static business channel. You’ll need to budget for continued rollout of new ideas, features, integrations, and changes. We often work with companies to train an in-house developer and take the agency expense out. With an open architecture and open source ecommerce setup, the ongoing costs are fully in your control.

Plan out your monthly spend over 12 months to figure out what’s realistic to your ROI, and if you should start right away or take a break.

TIP: Budget for  at least a year of ongoing expenses at whatever rate you deem suitable if you want to get a little consulting, training, advice, or coding from some experts. Just be sure to align your expectations of output with your willingness to spend.

Third-Party Expenses

Look past your site to see the full picture. What else does it need or plug into that has an annual contract? Account for these costs, too. A few typical additional expenses include:

  • Hosting
  • Server maintenance, security, updates and monitoring
  • Accounting software
  • ERP software / PIM 
  • CRM software
  • 3PL software (shipping, warehousing, labeling)
  • Programmers on staff
  • CSRs on staff 
  • Training and documentation

Conclusion

Your website is not an expense; it's a revenue channel that needs to be flexible and well architected. A substantial investment will be needed to compete online, so make sure you understand the costs involved. 

If you don’t know where to start, chat with a consultant to see if your math lines up with your goals, and then take this information to your internal team. You have options, and they should be clearly laid out for you up front, not presented to you with an invoice when you’re well into development with an agency’s team. 

Inform yourself on the process, not on the programming, and you’ll be in a better position to evaluate the best path forward.  

Click to contact one of our ecommerce consultants

May 25 2020
May 25

Over the past month, I have been working on a large scale Drupal 8 build that is leveraging the Layout Builder module for much of the site's displays. If you are not familiar with Layout Builder, it's a fairly new initiative that hit Drupal 8 core as an experimental module in 8.5 and then gained full status in 8.7.

So far, I am really enjoying using Layout Builder, my point of view being very much form a theming perspective. In my option, Layout Builder is almost like a hybrid between Panels and Paragraphs. It's ideal for content-centric sites where you'd like to hand over more control of content display to editors while keeping to a structured modular content model. This paradigm should sound vaguely familiar for those folks who have been building with Paragraphs.

"Drupal 8's Layout Builder allows content editors and site builders to easily and quickly create visual layouts for displaying content. Users can customize how content is arranged on a single page, or across types of content, or even create custom landing pages with an easy to use drag-and-drop interface."

Overview

Here are some highlights that I think are worth noting.

  • Works on all different kinds of entities, media, nodes, blocks, Paragraphs, and more
  • Drag and drop goodness in the Admin UI, similar to Panels
  • Pulls in all kinds of entities from fields, blocks, custom modules, views, user information, system, and more
  • Limit entities that can be selected on a per content type basis (or allow all!)
  • UI option to Override a layout on a per node basis per content type
  • Large ecosystem via contrib. modules
  • Extensible via custom code, for example defining a new layout in a theme or module
  • One-off Layout Builder custom blocks created in the UI.
  • Excels at the creation of structured modular content for content editors.
  • Layouts export to config (drush cex) with the exception of those that have been overridden on an entity.

While the Paragraphs module has been all the rage for the past several years, Layout Builder has gained more prominence recently, though I suspect Paragraphs will be around for some time to come. I have not tried it, but I am guessing you could even bring in Paragraphs to Layout builder so you would have a joining of the two. On the site I am working on now, we are using standard fields and blocks as our main Layout Builder content.

The Drupal 8 Layout Builder drag and drop admin UI showing how blocks and sections are laid out The Drupal 8 Layout Builder drag and drop admin UI showing how blocks and sections are laid out

Kicking the tires

If you have not used Layout Builder yet for a project and have been wanting to jump in, I hope this article will serve as a good overview. So far, I have learned a lot by just playing around with it. The basic setup happens on a an entity's manage display admin UI where you can check a box to have Layout Builder take over and manage the display of a given view mode.

Speaking of view modes

I've found view modes to come in quite handy with Layout Builder. There are a few different ways we are using view modes here. One is to set other view modes that Layout builder blocks can reference. For example, if you are in a Default view mode for your main layout, you could also setup another view mode, say "Related" for your main blocks to use for their displays on Default.

Another method is to setup an entirely different view mode as a Layout Builder layout and then give content editors an option to switch view modes per node. I figured out how to use hook_entity_view_mode_alter to switch our Layout Builder display based on a field value, I'll probably write up a dedicated post for that. I did see mention of a contrib. module called Layout Builder Library which allows content editors to switch layouts from a predefined list so that might be a good way to go as well. I have not tried that module so I can not speak to how it works.

Layout Builder Styles

One contrib. module I have found to be invaluable is Layout Builder Styles. This allows for setting pre-defined HTML classes for use in the Layout Builder UI for both sections and blocks. You can choose to allow for multiple classes per element or just one. Since I write my Sass using BEM, I tend to add some of the section classes as BEM modifiers so as to fit these classes into my existing Sass workflow seamlessly.

Another advantage of using Layout Builder Styles is that once you assign a class to an element, it then creates custom theme hooks based on your class. Imagine if you will, a number of blocks with the same class that you want themed in a specific manner, you could use the same template for all of these based on a class that has been set. Note, there is an open issue with an RTBC patch that fixes cases where these theme hooks do not work. I tested the patch here installing via composer and it does fix the issue.

Layout Builder Modal

This is another very useful contrib. module in the Layout Builder ecosystem. This module takes some of the configuration out of the very narrow native off-canvas dialog and turns it into a configurable modal which to me if much more editor friendly. It also gives you the option to switch to the admin theme while in the modal which I like very much.

Mind the admin UI

One thing that I noticed is, since the Layout Builder UI uses your front-end theme, there may be some cases where your theme CSS might do some unexpected things on the admin side. For these instances, I created a _layout-builder.scss file where I use a class that only renders within the admin UI, for example, layout-builder__section and make a few updates straighten things out.

Overrides

If you have an entity type that allows per entity override with Layout Builder, keep in mind that once you override that entity, the layout will no longer be kept track on in config. That's expected behavior but does allow for more flexibility for content editors. For those cases, you might limit what entities can be selected in the main entity settings. For example, we see these three radio button options available on the entity config display settings for "Content Fields."

  1. Allow all existing & new Content fields blocks.
  2. Allow specific Content fields blocks (whitelist):
  3. Restrict specific Content fields blocks (blacklist):

Summary

One thing that caught me out in the Layout Builder blocks UI was that I was expecting to be able to put an HTML wrapper around certain blocks within a section but that functionality does not exist yet. There are a few open issues for that feature request. Think Field groups within the blocks layout UI.

Overall, I think Layout Builder in Drupal 8 core is an amazing and very useful tool that will be around for some time to come including the upcoming release of Drupal 9, June 2020.

Key Resources, Issues, and APIs

Tags

May 23 2020
May 23

In a new Drupal 8 build that I am working on, there is a use case for some menu items to have an abbreviation underneath. I wanted to create a content editor friendly way of achieving this in the Drupal menu admin UI. Since I have already implemented the Drupal 8 Link Attributes widget module, I got to thinking that perhaps I could extend the module to handle these abbreviations.

Extending the Link Attributes widget

I was happy to discover that Link Attributes can be extended to any kind of additional HTML attribute you might need for your menu. I came up with the idea that if I could add a new field for the abbreviation, I could turn it into an HTML data attribute for a menu item and then output it with a little jQuery.

There are two pieces to extending the widget within a custom module, my_module.

  1. Leverage function my_module_entity_base_field_info_alter to add the new attribute desired.
  2. Create a custommy_module.link_attributes.ymlfile and add your attribute in there.

Function

Our function looks like this:

function my_module_entity_base_field_info_alter(&$fields, \Drupal\Core\Entity\EntityTypeInterface $entity_type) {
  if ($entity_type->id() === 'menu_link_content') {
    $fields['link']->setDisplayOptions('form', [
      'type' => 'link_attributes',
      'settings' => [
        'enabled_attributes' => [
          'id' => FALSE,
          'name' => FALSE,
          'target' => TRUE,
          'rel' => FALSE,
          'class' => TRUE,
          'accesskey' => FALSE,
          'data-menu-abbreviation' => TRUE,
        ],
      ],
    ]);
  }
}

YAML

The key from the above code is 'data-menu-abbreviation' => TRUE, to let Drupal know, we want a field with that name. Once that is done, we can write a little code in our my_module.link_attributes.yml file as to how this will look in the menu UI. Note that we match the attribute name from entity_base_field_info_alter.

data-menu-abbreviation:
  title: Menu Abbreviation

Once you clear cache, the menu UI will now show the new field we created.

The Drupal 8 menu admin UI showing the new field for an abbreviation attribute The Drupal 8 menu admin UI showing the new field for an abbreviation attribute

Because we use data- here, this attribute will render as an HTML5 data attribute which is ideal to leverage with jQuery. Inspecting on the front end, we see the menu item render as:

Rendered HTML

<a href="https://www.dannyenglander.com/blog/drupal-8-architecture-how-to-add-custom-html-data-attributes-to-menus//" class="custom-menu__link" data-menu-abbreviation="DRPL">
  A menu link with an abbreviation
</a>

This is a great, we now have our abbreviation within the menu link. The next step is to read the data in jQuery and render that as a span tag within the menu item.

Pull the data in via jQuery

Now in our custom theme JS file, we can loop through the menu items and output each data attribute like so:

     // Get the menu data attribute and render as a span tag.
      $(context).find(".custom-menu__item--level-1 > a").once('menu-abbreviation').each(function () {
      // If there is a data attribute, "menu-abbreviation".
        if ($(this).data('menu-abbreviation')) {
        // Set a variable.
          var menu_abbreviation = $(this).data('menu-abbreviation');
          // Output the tag from the data.
          $(this).append('<span>' + menu_abbreviation + '</span>');
        }
      });

After this code, we now see the output look like this:

<a href="https://www.dannyenglander.com/blog/drupal-8-architecture-how-to-add-custom-html-data-attributes-to-menus//" class="custom-menu__link" data-menu-abbreviation="DRPL">
  A menu link with an abbreviation
    <span>DRPL</span>
</a>

This works great and solves a very specific use case but as you can imagine, this type of customization could come in handy for a lot of menu needs.

Gotchas

There are a few gotchas here, it sounds like hook_entity_base_field_info_alter may be changed or deprecated in Drupal 9 so be aware of that when upgrading. (see the issue listed below in resources). You also might need to use hook_module_implements_alter to adjust the weight of your custom code to be sure it fires after link_attributes if your module is named with a letter starting before the letter "L".

Resources

Tags

May 22 2020
May 22

Today we participated with our full team in the  Drupal 9 porting weekend. You can read about our commitment to Drupal 9 here.

During this efforts we updated the contributed module Image Edit. The module allows to edit images in place on Drupal 8 and Drupal 9 websites. The module was originally developed for a client. Initial development was by our colleague Melinda, who is currently on a maternity leave.

While making the module ready for Drupal 9, we fixed some issues and released the first stable version.

When I tested the patches provided by different colleagues, I realized how useful this module is.

Therefore I created some examples and a short screen cast about it.

With this module you can transform an image like the two images below.

May 20 2020
May 20

Read our roadmap to understand how this work falls into priorities set by the Drupal Association with direction and collaboration from the Board and community. You can also review the Drupal project roadmap.

Project NewsDrupal 9.0

Drupal 9 will be released on June 3rd, 2020

Despite the disruption of a global pandemic, the Drupal community has beaten the odds and Drupal 9.0 is on time for it's scheduled release window on June 3rd, 2020.

Drupal 9 represents the culmination of all of the features developed over the course of the Drupal 8 lifecycle, as well as the realization of the project's commitment to easy upgrades.

Drupal 9 beta 3 is available now, and the first release candidate will be available soon. We encourage you to participate in the Drupal beta test program, to help us ensure a smooth release.

Drupal 9 porting weekend from May 22-23

With the release of Drupal 9 only a couple weeks away, the community is coming together to support the effort to get modules ready for Drupal 9. After a successful Drupal 9 porting on April 28th, nearly 75% of the top 200 most used modules are already Drupal 9 compatible. Never before has so much of the contributed module ecosystem been ready even before the new release.

If you'd like to join in on the Drupal 9 module porting weekend, community member @kristen_pol has written a guide to the event.

New Drupal Brand assets available

The Drupal Association was very pleased to announce a new evergreen Drupal brand in time for the release of Drupal 9.

What does 'evergreen' mean?

The new branding is evergreen in the sense that it is no longer tied to a specific major version of Drupal. Whether for Drupal 9, Drupal 10, and beyond this new brand can remain the consistent identity for Drupal. This parallels the Drupal project's own development philosophy, where major version upgrades should no longer be a difficult process for end users.

With these new brand materials we hope to be able to unify the presentation of Drupal throughout the ecosystem, and help reintroduce Drupal to the world when the project inevitably gains more attention during Drupal 9's release.

We encourage you to begin using the new brand within your own materials as well - to support this effort.

Automated Deprecation Patches to port your module to Drupal 9

The Drupal Association is working together with the Drupal Rector team from Palantir and contributor Tedbow from Acquia to provide automatically generated Drupal Rector patches for all the projects on Drupal.org.

As of April, these patches are already available through DrupalCI. In May we hope to begin having a bot automatically post these fix patches to Drupal.org issues

More Drupal 9 Readiness tools

Drupal.org Updates

Events listing feature on Drupal.org

As we spoke about in last month's update, we've been working on a Event Listing Content Type on Drupal.org to help replace the aging Groups.Drupal.org subsite, and to support our global community by providing a central repository of events.

EDITED: The new event listings are being beta tested by the Event Organizers Working Group before a roll-out to initial community users.

Respectful Advertising

The COVID pandemic and its impact on DrupalCon has only emphasized the need for the Drupal Association to further diversify its revenue sources. We've made significant strides over the last several years, but as we've heard from many of you, that work must accelerate.

We've made a few changes over the course of April to start accelerating this revenue diversification:

In the most noticeable change, we've partnered with CarbonAds, a network that focuses on advertising to technical audiences, to create placements on Drupal.org.

These placements are hidden for Drupal Association members, so this program also helps promote DA membership as well, and does not put advertising in the workspace of our committed supporters.

Enhanced Membership Options

Speaking of membership - we also made some major overhauls to the Drupal Association membership program during the #DrupalCares campaign. Many members of the community reached out to us asking for more options for supporting the Drupal Association through membership, and we were happy to accommodate those requests.

There are now new membership levels for annual renewal, and we've also added a monthly membership option, which is now the default. We hope to continue to expand the membership program and its benefits to further support our fiscal stability in the future. 

#DrupalCares

A special thanks

———

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:

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

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

May 20 2020
May 20
Project: Drupal coreDate: 2020-May-20Security risk: Moderately critical 10∕25 AC:Basic/A:None/CI:None/II:None/E:Theoretical/TD:AllVulnerability: Open RedirectCVE IDs: CVE-2020-13662 Description: 

Drupal 7 has an Open Redirect vulnerability. For example, a user could be tricked into visiting a specially crafted link which would redirect them to an arbitrary external URL.

The vulnerability is caused by insufficient validation of the destination query parameter in the drupal_goto() function.

Other versions of Drupal core are not vulnerable.

Solution: 

Install the latest version:

Reported By: Fixed By: 

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