Atlantic Business Technologies, Inc.

Category: PHP

  • Optimizing The Events Calendar Plugin in WordPress: Resolving High CPU Usage During Query Execution

    Optimizing The Events Calendar Plugin in WordPress: Resolving High CPU Usage During Query Execution

    Recently, we encountered an issue while upgrading a client’s WordPress site that utilizes The Events Calendar plugin from theeventscalendar.com. The upgrade caused a significant spike in database CPU usage, leading to severe performance degradation and eventual downtime. The site would become unresponsive within 1 to 12 hours post-deployment, forcing us to revert to the previous version.

    Identifying the Issue: A Slow Query

    After investigation, we isolated the problem to a specific SQL query that was being executed repeatedly:

    SELECT SQL_CALC_FOUND_ROWS wp_4_posts.ID, CAST(wp_4_tec_occurrences.start_date_utc AS DATETIME) AS event_date_utc
    FROM wp_4_posts
    LEFT JOIN wp_4_term_relationships ON (wp_4_posts.ID = wp_4_term_relationships.object_id)
    LEFT JOIN wp_4_term_relationships AS tt1 ON (wp_4_posts.ID = tt1.object_id)
    LEFT JOIN wp_4_term_relationships AS tt2 ON (wp_4_posts.ID = tt2.object_id)
    LEFT JOIN wp_4_term_relationships AS tt3 ON (wp_4_posts.ID = tt3.object_id)
    LEFT JOIN wp_4_term_relationships AS tt4 ON (wp_4_posts.ID = tt4.object_id)
    LEFT JOIN wp_4_term_relationships AS tt5 ON (wp_4_posts.ID = tt5.object_id)
    LEFT JOIN wp_4_term_relationships AS tt6 ON (wp_4_posts.ID = tt6.object_id)
    JOIN wp_4_tec_occurrences ON wp_4_posts.ID = wp_4_tec_occurrences.post_id
    WHERE 1=1
    AND (
    (
    wp_4_term_relationships.term_taxonomy_id IN (147,148,149,150,96)
    AND tt1.term_taxonomy_id IN (147,148,149,150,96)
    AND tt2.term_taxonomy_id IN (147,148,149,150,96)
    AND tt3.term_taxonomy_id IN (147,148,149,150,96)
    AND tt4.term_taxonomy_id IN (147,148,149,150,96)
    AND tt5.term_taxonomy_id IN (147,148,149,150,96)
    AND tt6.term_taxonomy_id IN (147,148,149,150,96)
    )
    )
    AND CAST(wp_4_tec_occurrences.start_date_utc AS DATETIME) > '2024-06-24 03:59:59'
    AND wp_4_posts.post_type = 'tribe_events'
    AND wp_4_posts.post_status = 'publish'
    GROUP BY wp_4_tec_occurrences.occurrence_id
    ORDER BY wp_4_tec_occurrences.start_date_utc ASC, wp_4_posts.post_date ASC
    LIMIT 0, 1;

    Each execution of this query was taking over 23 seconds, leading to a bottleneck that caused the CPU to max out at 100%. Clearly, this query needed optimization.

    Investigating the Query: EXPLAIN Command to the Rescue

    To better understand what was causing the delay, we turned to MySQL’s EXPLAIN command. By analyzing the query execution plan, we could pinpoint inefficiencies related to the joins and groupings, particularly involving the wp_4_term_relationships and wp_4_tec_occurrences tables.

    We found that key indexes were either missing or not being utilized optimally. The absence of appropriate indexing on columns like object_id, term_taxonomy_id, and post_id meant that the database had to scan entire tables repeatedly—leading to high CPU usage and slow response times.

    The Fix: Adding Indexes

    To resolve the issue, we added three specific indexes. These were designed to speed up the joins and comparisons that were bogging down the query:

    CREATE INDEX idx_wp_4_posts_id ON wp_4_posts (ID);
    CREATE INDEX idx_wp_4_term_relationships ON wp_4_term_relationships (object_id, term_taxonomy_id);
    CREATE INDEX idx_wp_4_tec_occurrences ON wp_4_tec_occurrences (post_id, start_date_utc);

    By introducing these indexes, we were able to reduce the query execution time from 23 seconds down to just 1.3 seconds—a significant performance boost.

    Monitoring the Results

    To ensure everything was working smoothly in production, we continuously monitored our query performance using the following command:

    SHOW FULL PROCESSLIST;

    This allowed us to track the running queries and verify that our optimization was successful. The CPU usage stabilized, and the site performance returned to normal without further issues.

    Conclusion: Indexing Matters

    If you’re running into similar performance issues after upgrading The Events Calendar plugin or any other database-intensive WordPress plugin, we recommend analyzing your queries using EXPLAIN and considering appropriate indexing. Note that your table names might differ depending on your WordPress setup, so adjust accordingly.

    Optimizing database performance can be tricky, but with the right tools and approach, even complex queries can be tuned for efficiency.

  • Upgrading Drupal 7 to Drupal 10 can be a game changer for your business. Here’s why.

    Upgrading Drupal 7 to Drupal 10 can be a game changer for your business. Here’s why.

    As with all major website changes, the upgrade from Drupal 7 to Drupal 10 may be intimidating to plan. Despite the time investment, fully recognizing the benefits of the newest version of Drupal will be well worth your while. Read on to learn more about how upgrading will help your business through increasing efficiency, security, and an improved overall experience for your team.

    Primary Benefits of Upgrading to Drupal 10

    So why should you upgrade to Drupal 10, rather than staying with Drupal 7 or moving to another platform like WordPress?

    Ensure your application is secure.

    Drupal 7 is scheduled to reach its end of life in January of 2025. This means it won’t receive security updates or bug fixes after that point. The Drupal Association has discontinued their 3rd party maintenance program for Drupal 7, so this will be your last chance to upgrade!

    The Drupal community already did the work for simple migration paths.

    The Migrate module has been moved into Drupal 10 core code, and the community has included migration scripts to migrate most Drupal 6 and Drupal 7 configuration and content to Drupal 10. If you were moving to another platform, you would have to develop your new data structures, themes, and migration scripts yourself. With Drupal 10 you can leverage the efforts of the community to migrate your data structures and content with less effort.

    Upgrading to Drupal 10 will facilitate your upgrade to Drupal 11.

    While the Drupal 7 to Drupal 10 transition requires a migration of configuration and content (because of the extensive re-factoring of Drupal’s core code), the Drupal 10 to Drupal 11 upgrade will not require a migration. The Drupal community is returning to an upgrade-in-place strategy, much like between previous versions.

    Drupal 11 will be built off of Drupal 10, with its third-party dependencies updated and some old code removed. This will result in a smoother transition between Drupal 10 and 11.

    You may be wondering: why not upgrade to Drupal 8 or 9 first? The biggest reason is that Drupal 8’s end of life was November 2021, and Drupal 9’s end-of-life was November 1, 2023!

    What Drupal 7 Problems Will Drupal 10 Solve For Me?

    There are many new features in Drupal 10 that will improve both the developer and end-user experience for your application. It’s important to recognize that even if you’re not a developer, the new developer features make it easier to develop and deploy Drupal, which leads to a more efficient process all around.

    Three Problems for Admin Users in Drupal 7

    1. Issues with Content Editing

    One of the most frequent complaints about Drupal 7 is that the content editing experience wasn’t very good. Content editors usually had to edit their content on a form, and couldn’t really see how the content looked on the page before publishing. There was a preview function, but it didn’t always work correctly or required a lot of additional development to make it useful.

    Drupal 10 seeks to improve the content editing experience by introducing a few new features. The first is Quick Edit, which allows editors to change content inline on the page they are editing, rather than going to the edit form every time. Another is Layout Builder, which allows users to easily change the layout for a page without editing its template in code. The third is by moving the CKEditor WYSIWYG editor into Drupal’s core code, which makes it easier for editors to format text without knowing how to code.

    2. Issues With Media

    Another complaint about Drupal was its handling of media. Drupal’s solution for media management was previously cobbled together from a number of modules developed by the Drupal community. While there were some popular solutions, how to implement media management was left up to the individual site builder or developer, which led to a lot of confusion.

    Drupal 10 adds a more comprehensive media management solution in its core code that allows editors to create and re-use media content around Drupal. Drupal 10 even allows editors to embed Drupal-managed media into HTML text fields, which has been a much-requested feature for years.

    3. Issues with Moderation and Workflows

    Similarly to the media solution, the solution for content moderation and workflows were usually cobbled together from contributed modules. Drupal 10 contains the Workflows and Content Moderation modules, which provide a more tightly integrated moderation experience to Drupal’s content. Drupal 10 also introduces the concept of Workspaces, which are copies of the live site that allow developers and content editors to try out their changes in a separate environment and move the changes to the live site when they are ready. The Workspaces module is experimental for now, but should be declared stable by Drupal 11.

    Four Problems for Developers in Drupal 7

    1. Issues With Drupal’s Steep Learning Curve

    Drupal has always had a reputation of being hard to learn as a developer because it has so much custom code and therefore a steep learning curve. Additionally a lot of the most popular functionality was provided by modules contributed by the community, which developers had to know about to use and had the potential to lose support over time due to being maintained by open source contributors. Drupal’s data structures were also implemented inconsistently, which led to developer confusion about how things were implemented.

    Drupal 10 addresses the problem of custom code by re-factoring much of the code to use 3rd-party libraries with a wider knowledge base. The biggest example is that some of the previous custom functionality has been replaced by the Symfony framework. Drupal 10 also uses Composer for dependency management, rather than simply downloading core code and contributed modules from drupal.org.

    Drupal 10 also moves some of the more popular and important contributed modules into core, which has a more stable contributor base and therefore lessens the risk of these important modules becoming abandoned. The most notable examples are the Views, Migrate, Internationalization, CKEditor, and Bean modules.

    The inconsistency of the data in Drupal 7 has also been addressed by making more things “entities”, which are data structures which have common methods for working with them and which can be configured in predictable ways. This helps developers better understand how to work with Drupal data and cut down on specialized, Drupal-specific knowledge required to develop with Drupal.

    2. Issues With Deployments

    Prior to Drupal 8, deploying configuration among environments was a pain and required shuffling databases around or required contributed modules like the Features module. Drupal 8 introduced the configuration management system to combat these problems and it continues to be used in Drupal 10. Developers can export site configuration to files and check them into a source code repository. Then they can import them into different instances of the site to make deployments easier and more testable.

    3. Issues With Theming

    Drupal 7 (and prior versions) were designed as a web content management system before the popularity of smartphones and tablets, so it wasn’t designed with responsive web design in mind. Responsive best practices that required back-end support had to be implemented by custom code or by contributed modules.

    Drupal 8 added the Breakpoint and Responsive Image modules. The Breakpoint module allows developers to make modules and themes aware of each other’s breakpoints. Responsive images allows developers to tell Drupal to generate different image sizes for each breakpoint, and load those images selectively in the browser. Each of these modules helps developers make great-looking and usable sites in Drupal 10 as well.

    4. Issues With Web Services

    Drupal was also designed to build browser-based experiences. In the years since, building REST-based services became more popular by developers, and developing them in Drupal required a lot of custom code or by adding contributed modules.

    Drupal 10 has built-in support to output its data in formats other than HTML, which allows Drupal more flexibility. Drupal 10 allows developers to integrate with front-end frameworks like React and Vue easier than before, and allows users to follow a COPE (Create Once, Publish Everywhere) mindset.

    Start Your Drupal 10 Upgrade Today

    Drupal 10’s new features make many improvements for developers, content editors, and ultimately end-users. While the effort of a Drupal 7 upgrade seems heavy at first, the benefits can more than make up for it in developer and user experience. Now is the time to consider moving your site to Drupal 10! Visit our Drupal 10 page to learn more and get started with a free Drupal Migration Audit from our experts.

  • A Full Guide to PHPUnit in Drupal 10

    A Full Guide to PHPUnit in Drupal 10

    Like many open-source projects, Drupal comes with automated tests that help prevent breaking changes while promoting code quality. Drupal 8 changed its testing framework for unit and functional tests from its own Simpletest framework to PHPUnit. PHPUnit is a unit testing framework hosted by GitHub and built for the PHP programming language.

    The change from Simpletest to PHPUnit follows Drupal 8’s strategy of using more third-party libraries in Drupal Core. All Simpletests have been moved to PHPUnit as of Drupal 8.7.x, and the Simpletest module was removed in Drupal 9.

    PHPUnit can handle different types of tests in Drupal core: unit tests, kernel tests, and functional tests. With these three tests, you can confirm the quality and reaction of code on edge cases in different layers.

    Unit tests test functions, methods, and classes without requiring a database connection to run. On the other hand, kernel tests test the integration of module APIs and require a database connection to be configured to run. Functional tests test the entire system and require more setup than the others. Within the functional tests, there are both browser and JavaScript tests. In addition to these PHP-based tests, you may also run core JavaScript tests using the Nightwatch framework.

    PHPUnit: Unit Tests

    Your unit tests won’t be found unless they follow specific file structure, namespace, and metadata requirements. Drush can generate stub tests for a module.

    When writing custom code, be sure to use dependency injection to make mocking easier. You can find detailed information in this blog post, or see the examples module.

    Unit test mocks are created using Prophecy.

    PHPUnit: Kernel Tests

    Per the documentation of the KernelTestBase class, kernel tests are “useful for testing some types of integrations which don’t require the overhead of a fully-installed Drupal instance, but which have many dependencies on parts of Drupal which can’t or shouldn’t be mocked.” The class partially boots Drupal, and can load the services and hooks of other modules. The documentation says that the configuration, database schema, and entity schema could be installed for some modules, but it’s not clear which modules support this.

    PHPUnit Functional Tests

    Browser Tests

    PHPUnit browser functional tests are run against a fresh Drupal installation so each test requires set up like installing modules, creating users, etc. This can be done in the BrowserTestBase::setUp() method (which is run before each test method in the class) or by writing an abstract base class (that extends BrowserTestBase) to be extended by additional test classes. You could also simply run a previous test at the beginning of the test you are writing. The results of the browser tests are saved to a directory, which can be configured in the phpunit.xml file. See PHPUnit Browser test tutorial in the Drupal documentation.

    JavaScript Tests

    PHPUnit Javascript functional tests are run against a fresh Drupal installation in an actual browser window, in order to test Javascript and AJAX functionality. They extend WebDriverTestBase. Running them requires setting up Chromedriver and Chrome/Chromium. See PHPUnit Javascript test writing tutorial in the Drupal documentation.

    Behat Tests

    While not part of Drupal core, some contributed modules also include tests using the Behat framework. Behat uses the Gherkin syntax to describe features, which are then translated to functional and UI tests.

    Behat tests would be used to test site-specific functionality and uses the site’s database, rather than a clean installation of Drupal. The Behat Drupal Extension is an open-source project that provides drivers and useful step definitions for Drupal. Tests are organized into features, scenarios, and steps. Features and scenarios can be tagged to be run in groups, or to let Behat know to use a certain driver.

    While this Gist offers a helpful list of step definitions provided by the Behat Drupal Extension, users can also run the command “behat -dl” for a list of steps defined for a system.

    Each of these steps uses a different driver, which provides a different layer of integration with Drupal.

    Blackbox Driver

    The blackbox driver operates similarly to both the PHPUnit Browser and JavaScript functional tests. If the feature or scenario isn’t tagged, it will be run in a headless browser. If the test is tagged with @javascript, Behat can use Selenium to open a browser window and run the test. Selenium can then be set up to run the tests in several different browsers.

    Drush Driver

    The Drush driver uses the Drush command line tool to complete steps. In order to use the Drush driver, the feature or scenario must be tagged with @api. The Drush driver allows tests to use all the blackbox steps, plus a few more steps like logging in and creating users. The Drush driver can be run on multiple sites via Drush aliases.

    Drupal API Driver

    The Drupal API driver provides more complex steps, but can only be run on one site at a time. Behat can be configured to use this driver when features or scenarios are tagged with @api. Behat can be configured to run either the Drush driver OR the API driver at one time.

    Custom Step Definitions

    Custom step definitions would be added to the FeatureContext.php file that gets created when Behat is initialized for a project. The step text and any arguments are set up in annotations to functions in the FeatureContext class. See the Behat documentation for details.

    Next Steps

    Unit and functional tests are a great way to help improve your code quality. Drupal core supports many different kinds of tests that focus on different parts of the system, and some tests may be better for testing different things. Look for a future blog post on how to run these tests, and incorporate automated testing into your workflow.

    Atlantic BT is well-versed in Drupal architecture, development, and testing. Learn more about our development services, or contact us to chat with an expert.

  • 3 Reasons It’s Time to Move On From AngularJS and Zend Framework 2

    3 Reasons It’s Time to Move On From AngularJS and Zend Framework 2

    AngularJS was once one of the most popular structural frameworks for dynamic web applications. The beauty of this tool was that it let you use HTML as your template language and build applications without the code otherwise needed. Developers had come to love its ease of use and the speed with which they could offer complete application builds. 

    Another popular open-source tool, Zend Framework, also made it easy to produce and manage PHP-based websites for a long time by creating object-oriented web applications using PHP 5 scripting language. 

    Both did an incredible job for years – but as with everything, time changes things and there are better, more efficient ways to get application building done. 

    The world of software development is changing. Creating applications that are far more scalable, and secure and that meet the constantly changing demands of the market requires change. 

    In 2014, Zend Framework 2 stopped being maintained and after pushing back its support end date due to the pandemic, AngularJS support support officially ended in January 2022

    Angular, now replaces AngularJS and is a typescript-based rebuild of the AngularJS framework. As a more modern web framework, it includes a number of improvements. The latest version, Angular 15, was developed by Google and released on November 16, 2022, and supports the latest TypeScript 4.8 release. 

    Zend Framework has now been renamed Laminas Project and is under an open governance model managed by the Linux Foundation. It includes a number of professional PHP-based packages for web applications in PHP 7. Laravel is another popular and widely supported PHP framework.

    With AngularJS and Zend Framework 2 now both obsolete and new tools coming out all the time, it’s time to start thinking about how you’ll move your applications into the next generation. Not convinced? Here are 3 important reasons to move on to new application tools.

    Security Issues

    Even if your website and applications are still working as they should, it’s important to not ignore the security risks involved with outdated, no longer supported tools. Vulnerabilities in web applications are serious and costly risks. They can allow hackers to go in and manipulate the source code of an application, gain unauthorized access to private data and even interfere with the normal operation of a website or web application. Migrating to a modern web framework is the best defense against these types of vulnerabilities as most come loaded with techniques to protect against common breach types.

    Slow Loading 

    Performance is a critical factor in the success of a business. People expect instant results when they use an application, and anything less is intolerable to them. This is a major problem for businesses because slow-loading applications lead to lost revenues, unhappy customers, and other problems. When your applications are not up to date, you will have trouble keeping up with performance requirements. One way to combat slow loading times is to make sure that you have the most recent version of the PHP or web application framework. Updates happen periodically and should always be maintained.

    Scalability Limitations

    It’s important to have an appropriate technology stack when creating a scalable web application. A good framework is one of the key factors in ensuring scalability, but it must be updated and maintained regularly if you want to avoid common problems.

    The best way to move forward with your application development strategy is by making sure your team has all the information they need to make smart decisions. That’s where we come in! We have worked with hundreds of companies just like yours to help them make those big decisions for their software development future.

    We’d love to help you get started on your journey toward building applications that are future-ready. Reach out today and let us know how we can help!

  • Is WordPress the best option for my CMS?

    Is WordPress the best option for my CMS?

    WordPress is the most popular Content Management System (CMS), covering 64% of the market. That’s because it’s a free, open-source platform that is simple to host and manage.

    At Atlantic BT, we find that WordPress is a good option in many industries in a range of business cases. Take a look at some of the advantages of using WordPress and see if it fits your unique business needs.

    WordPress’ popularity provides many benefits.

    Due to its popularity, WordPress has a mature ecosystem of plugins, themes, and tools that are easy to integrate. Furthermore, there is a large community of developers, documentation, and content creators for support. Many third-party plugins have created integrations for certain business cases which simplify data streams.

    WordPress facilitates DevOps.

    The WordPress core codebase and most publicly available plugins are available through wpackagist, so you can track and manage dependencies via Composer.

    Using dependency management tools like Composer allows development teams to easily track, update, test, and deploy updates to dependencies based on known compatibility.

    It also makes it easier to identify any conflicts between versions of dependencies and to roll-back those dependencies to previous versions known to work.

    WordPress makes it easier for marketers to do their jobs.

    Marketers love to use WordPress for two primary reasons:

    • WordPress is designed for SEO. Advanced features are freely available through the ubiquitous Yoast SEO plugin.
    • WordPress is simple to administer, with an intuitive UI and a range of plugins and themes that provide similarly intuitive UIs.

    WordPress simplifies the web design process.

    WordPress includes a basic site layout and navigation out of the box. Furthermore, custom themes can easily be created by web designers and applied through PHP development.

    In what scenarios would WordPress be a good option?

    In general, WordPress can be a good fit for simpler websites. Simple does not refer to size; WordPress can be used for small businesses or large organizations. But the functionalities your business requires are key deciding factors. WordPress may be a good fit if:

    You are building a “brochure website”.

    Maybe you are creating a blog or “brochure site” that will not require custom functionalities. In this case, you can take advantage of WordPress’ out-of-the-box features like:

    • Blogging Platform
      • Commenting on content.
      • Tracking multiple authors, editors, publishers by user permissions.
      • Scheduled publishing content in advance.
    • Easily administered content types whose schema may change slightly over time.
    • Hierarchical Taxonomy
    • Basic search functionality based on dates of content entry, taxonomy, and content itself.

    You have a small scope or budget.

    Speaking of using out-of-the-box features, relying on these will keep you within a tight budget. If WordPress’ core features will serve your needs, it’s an extremely affordable option.

    Additionally, many smaller WordPress sites have a simple infrastructure that allows it to work with cheaper hosting solutions.

    Third-party extensions can also be much cheaper than with other frameworks and SaaS offerings.

    You plan to take over all administration/configuration of the site, without relying on a partner.

    Because of WordPress’ administrative simplicity, it is a good option if a less technical role needs to take on site maintenance.

    You are creating a proof of concept.

    If you simply need to create a Proof-of-concept or MVP, you can likely accept some trade-offs with customization. Tradeoffs could include using a less refined admin experience or less efficient backend in exchange for rapid prototyping and development.

    You are building a small eCommerce store.

    Small businesses can use WordPress for eCommerce if:

    • They can rely on simple payment processors (like Stripe)
    • They have small inventories to manage
    • There is no need to integrate with a large CRM or other software

    For example, perhaps your website is primarily used to showcase services, offering just a few products for sale in addition. If eCommerce is not the primary focus of a website, WordPress could be the optimal solution.

    You need to unify multiple sites.

    If you need to create a network of sites sharing similar functionality and a common administration area, a WordPress Multisite can help you achieve your goals.

    In what scenarios would WordPress not be a good option?

    If any of the following cases apply, you might consider looking at using a different CMS solution (like Drupal) or a custom framework (like Laravel) to build your application.

    You have many custom requirements.

    Required functionality may not be easily be added. Maybe your website requirements do not not closely fit what can be accomplished using the core WordPress codebase.

    You want to have extra data control.

    Maybe you want to have fine control over how your data is stored, modified, and queried. In this case, WordPress’ database structure is limited and not scalable for extensive queries.

    Furthermore, this limiting factor can make custom reporting on your data difficult to implement.

    You need to define content types with complex and nested relationships.

    Let’s say a site needs to track a complex hierarchy of custom content types (industry → company → person) where some of those content types may also need to relate to themselves (person → person).

    This may work well with small queries on each page for navigation. But let’s say you want to query through all data and generate a report for all people in the system, showing how companies, industries, and other people are related.

    In this type of query, the WordPress database schema will make that very slow and inefficient. It would be better to implement a custom framework (like Laravel) where you can easily define data relationships.

    Security is a high priority for your platform.

    Due to its open-source nature and large market share, WordPress is often a target for malicious actors. Security updates need to be applied regularly to stay ahead of those who would try to force entry.

    WordPress does not provide much control over format of data in the database. Unless you are prepared to store and manipulate data yourself using basic PHP functionality, you should not use WordPress to store sensitive customer data or other personally identifiable information.

    A team experienced in many platforms can guide you.

    Need help evaluating your situation and choosing the best platform? Reach out for a free consultation with one of our experts. We’re happy to help you get started with your solution.

  • Frequently Asked Questions About Major Version Upgrades for Drupal Websites.

    Frequently Asked Questions About Major Version Upgrades for Drupal Websites.

    Continued upgrades are needed to keep Drupal websites secure and to receive new feature opportunities. However, many businesses hesitate to upgrade to new versions of Drupal due to the complexity of the process. There’s no simple solution, and these projects take careful scoping and planning.

    To help you fully understand the process, we’ve compiled answers to the most common questions we see about migrations to Drupal websites.

    When are Drupal 7 and 9 end of life?

    Drupal 7 end of life has been extended several times over the years, but its final end of life date has been set for January 5, 2025 (14 years after Drupal 7 was first released). Drupal 8’s end of life was in November 2021. Drupal 9 is scheduled to hit end of life Nov 1, 2023 (the same day as the end of life for Symfony 4, which Drupal uses extensively). Drupal 10 is the latest version of Drupal, and its end of life date hasn’t been announced yet.

    When did Drupal 10 Release?

    Drupal 10 was released in December of 2022. Drupal 10.0.0 was essentially the same code as Drupal 9.5.0, with upgraded third-party libraries and deprecated legacy code. Drupal 10.1 is the current version.

    What is the migration process from 7 to 10 for Drupal websites?

    Drupal 10 has been re-architected to use more third-party PHP libraries like Symfony, so Drupal websites that are still running on Drupal 7 are required to migrate their configuration and content to upgrade to Drupal 10.

    The Drupal 10 Migration API makes this piece easy for core modules, which have pre-configured migration plugins. On the other hand, migration support for contributed modules is spotty.

    You’ll need to evaluate which modules will be difficult to migrate, and a Drupal migration audit can help determine the best course of action by answering these questions:

    • Does the module have migration support?
    • Would it be beneficial to replace it with another module before migration?
    • Could writing a custom module streamline the site’s migration?

    Is there an upgrade path from Drupal 7 to Drupal 10?

    Yes – the migration path from 7 to 10 is the same migration path as from 7 to 8.

    For Drupal websites still on Drupal 7, we recommend upgrading to Drupal 10 as soon as possible to avoid problems associated with end of life software.

    What is the Drupal 10 to 11 Upgrade Path?

    The strategy for major version releases starting with Drupal 9 has been to upgrade Drupal’s dependencies (e.g. Symfony) and deprecate legacy code, rather than re-architect like what happened between 7 and 8. This will make it easier to upgrade-in-place, rather than migrate between versions.

    Ready to get started with your Drupal website upgrade?

    Atlantic BT is experienced with custom Drupal website development and helping you evaluate your content and modules. As the end of Drupal 7 approaches, we are offering a free preliminary assessment to kickstart your Drupal 10 migration and upgrade. Contact us here to get started.