Planet Drupal

Subscribe to Planet Drupal feed - aggregated feeds in category Planet Drupal
Updated: 8 min 30 sec ago

Tim Millwood: Selling the Drupal community to those here for the code

Mon, 11/07/2016 - 14:03
Throughout the software development world there are many “evangelist” roles who sell the code to the...
Categories: Elsewhere

OpenLucius: Update OpenLucius | June 2016

Mon, 11/07/2016 - 10:28

We just updated OpenLucius, these are the most important changes:

Categories: Elsewhere

PreviousNext: Refactoring Drupal batch API callbacks to increase testability

Mon, 11/07/2016 - 08:44

Drupal's Batch API is great, it allows you to easily perform long running processes with feedback to the user.

But during Drupal 8's development processes it was one of the remaining systems that didn't get the full object oriented, service-based architecture.

Much of the batch API is largely unchanged from Drupal 7.

But that doesn't mean you can't write unit-testable callbacks.

Let's get started.

Categories: Elsewhere

Wuinfo: Joy Of Collaboration

Sun, 10/07/2016 - 02:26

We make our life easier by making our colleague's lives easier. If our manager is in a stressful state, we'd better find the way to do something. It is such a fulfill feeling when we can do something together and contribute as a member of a productive team.

I had been in a financial system project for a company in NYC. We needed to migrate a huge amount of content from old system to a new one (Tech: Drupal 5 to Drupal 7). The business is making money by selling data. So, data accuracy was a big thing. Due to the complexity of the data, couple months into the project, we had not got the content migrated. Some technical problems prevented us from going forward. Everyone in the team was under pressure and working very hard. Company executives were starting to losing patience and doubt our ability to get the job done. Our boss was under a lot of stress. In a weekly meeting a few weeks after I joined the project, our manager told us that he was not sure he would still be working for the company the next day. He was afraid he might get fired by his boss. It was like a stone in my stomach. What would happen to us if he lost the job? The whole team was quickly motivated. We all liked him and did not want it to become reality. We all know it was the time all out for a greater good.

For the interest of the group, we did not care about a small personal loss. When migrating location nodes, we needed Google map API to translate hundreds of thousands postal address. It is not free. To save time from asking permission to buy the service, one of our colleagues just went ahead and created an account with his personal credit card. It cost him some money but saved some time for the whole team. We all worked late, collaborated closely and more efficiently. We did not mind to sacrifice for the interest of the project.

My job was to assistant the other backend developer to migrate the content. It was such a compelling feeling to be a part of it and wanted the success of the project. It occupied my mind. When eating, walking, taking a shower, sleeping and even dreaming I had been thinking the ways to solve some technical problems; contemplating the best possible solutions. Many of us include myself were a little bit sick. But, physical health with good rest and diet is the key to a clear and sharp mind. Even though we had a lot of stress, I believe that was one of the key elements to the success of the project. I had learned some time management skill before. Not wasting a minute, I allocated enough time to eat and sleep, and that help me to keep my mind fresh and calm all the time. Two weeks after the meeting, we successfully overcame all the major technical difficulty and got the content migrated.

Everyone seemed to be relaxed right away. It was a pleasure to the conversation during the following meeting. Like fighting a battle should by should against a ferocious enemy and win it, everybody in the team felt closer and more connected to each other. We helped each other and collaborated closely and made our life easier. It is a real joy from collaboration.

Categories: Elsewhere

CiviCRM Blog: Mapping it in 5-10min - a CiviCON 2016 Lightening Talk

Sat, 09/07/2016 - 20:31

Someone asked me to post this here - so that he can give it a try!

I did a Lightening Talk at CiviCON 2016 showing how you can put your Contacts on a Leaflet Map. It only takes a few minutes to put your CiviCRM Contacts on a Leaflet Map if you're using Drupal. Leaftlet is an open-source JavaScript Library for interactive maps. In addition what's really cool is that you can color the PIN based on the value of a CiviCRM custom field!

I've posted the details in a QA format including some of my slides from my CiviCON Lightening Talk on CiviCRM's StackExchange site:

Give it try!

Categories: Elsewhere

Freelock : Git Branch Strategy meets Continuous Deployment

Sat, 09/07/2016 - 01:14

Our branch strategy based on Git Flow did not survive. It was getting a bit old in the tooth, but the final blow was automation.

At Freelock, we've been hard at work building out automation so we can handle the maintenance on hundreds of websites with better test coverage and more confidence than ever before. Exciting news! It's all coming together, and we have it working across the board on ALL of our projects, now.

DrupalDevOpsContinuous IntegrationContinuous DeploymentQuality AssuranceDrupal PlanetBotgit flowgit
Categories: Elsewhere

Fuse Interactive: Why you and your clients should be excited to build your next project with Drupal 8

Fri, 08/07/2016 - 23:39

Over 8 months after release and my first D8 site under my belt I can now say I am excited for the future of working with Drupal’s freshest release. That being said at this stage in the game the decision to go with D8 should approached with caution. It does what it does well but many of those shiny contrib modules you’re used to using just aren’t there yet. Unless your team and client are willing to spend the time and money needed to develop or port the missing functionality it might not be a fit for that particular project.

Categories: Elsewhere

ImageX Media: Higher Education Notes and Trends for the Week of July 4, 2016

Fri, 08/07/2016 - 21:22

The landscape of higher education continues to shift toward changing student demographics, evolving different learning approaches and what seems like a perpetual shortfall of funding for post-secondary institutions. These trends mirror that of our client website aspirations which are now more than ever are focusing on engagement with key audiences such as prospective students and alumni due to greater competition in the marketplace with less dollars to spend. 

Categories: Elsewhere

Chromatic: Digging In To Drupal 8: Code Snippets for Site Builders

Fri, 08/07/2016 - 19:36

The more I work with Drupal 8, the more I realize how much has changed for developers in the Drupal community. While the transition to a modern, object-oriented system is what's best for the longevity of the platform, it certainly doesn't come without challenges. As someone who doesn't come from an OOP background, I've found the transition difficult at times. In many cases, I know exactly what I want to do, just not how to do it the "Drupal 8 way". On top of this, tutorials and blog posts on D8 are all over the map in terms of accuracy. Many posts written during D8's development cycle are no longer applicable because of API changes, etc.

Below is a list of snippets that might be helpful to site builders or developers more familiar with D7 hooks and procedural. It might also be useful to OOP folks who are new to Drupal in general. My goal below is to add to and update these snippets over time.

Routes & Links Determine the Current Drupal Route

Need to know what the current Drupal route is or need to run some logic against the current route? You can get the current route like so:

$route = \Drupal::routeMatch()->getRouteName();

To some, the \Drupal::routeMatch() syntax might look foreign (it did to me). Here's a rundown of what's happening here:

First, \Drupal. This is calling the global Drupal class, which, in Drupal 8, is a bridge between procedural and OO methods of writing Drupal code. The following comes from the documentation:

This class acts as a unified global accessor to arbitrary services within the system in order to ease the transition from procedural code to injected OO code.

Right. Moving on to ::routeMatch(). Here we're using the routeMatch() method which "Retrieves the currently active route match object." Simple enough. But what is "::" all about? This StackOverflow answer helped me to understand what that's all about.

From there, the getRouteName() method returns the current route name as a string. Here are some example routes: entity.node.canonical, view.frontpage and node.type_add.

Is this the Front Page Route?

Need to check if the current route is the front page route? There's a service and method for that:

// Is the current route/path the front page? if ($is_front = \Drupal::service('path.matcher')->isFrontPage()) {}

Here we're calling the path.matcher service (defined in /core/ and using the isFrontPage() method. For more on services, check out the "Services and Dependency Injection Container" documentation on which helped me understand how all of these bits work together and the why of their structure.

Get the Requested Path

Need to know what the current page's requested path was, as opposed to the route? You can do this:

$current_uri = \Drupal::request()->getRequestUri(); Redirect to a Specific Route

Need to redirect to a specific page? In Drupal 7, you would likely handle this with drupal_goto() in your page callback function. In Drupal 8, you can use RedirectResponse() for that. Here is the relevant changelog.

Here are some examples, borrowed heavily from said changelog. First, in procedural PHP:

use Symfony\Component\HttpFoundation\RedirectResponse; function my_redirect() { return new RedirectResponse(\Drupal::url('')); }

Here is how you would use a Drupal 8 controller to accomplish the same thing:

use Drupal\Core\Controller\ControllerBase; class MyControllerClass extends ControllerBase { public function foo() { //... return $this->redirect(''); } } Links on the Fly

Drupal 7 and prior relied heavily on the l() function. (In fact, I would wager this was my most used function over the years. In Drupal 8, if you need to create links on the fly, utilize the Link class

$link = \Drupal\Core\Link::fromTextAndUrl($text, $url); Working with Entities Query Database for Entities

If you need to query the database for some nodes (or any other entity) you should use the entityQuery service. The syntax should be pretty familiar to most D7 developers who have used EntityFieldQuery:

// Query for some entities with the entity query service. $query = \Drupal::entityQuery('node') ->condition('status', 1) ->condition('type', 'article') ->range(0, 10) ->sort('created', 'DESC'); $nids = $query->execute(); Loading Entities

If you need to load the actual entities, you can do so a number of ways:

While the following will technically work in Drupal 8:

$node = entity_load_multiple('node', $nids);

This method has been deprecated in Drupal 8 and will be removed before Drupal 9, in favor of methods overriding Entity::loadMultiple(). To future-proof your code, you would do something like the following:

$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple($nids);

Here's how you would do similar for a single node:

$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);

Here are a few other entity snippets that might be useful:

// Link to an entity using the entity's link method. $author_link = $user->toLink(); // Do the same thing, but customize the link text. $author_link = $user->toLink('Some Custom Text'); // Given a node object, here's how to determine its type: $type = $node->getType(); // To get the full user entity of the node's author: $author = $node->getOwner(); // To get the raw ID of the author of a node: $author_id = $node->getOwnerId(); Image Styles

Need to whip up an image using a particular image style on the fly? This will work for that:

// Create an instance of an image using a specific image style, given a path to a file. $style = \Drupal\image\Entity\ImageStyle::load('yourStyle_image'); $img_path = $user->field_profile_some_image->entity->getFileUri(); $img_style_url = $style->buildUrl($img_path);

That's it for now. I intend to keep this post updated as we learn more and more about the new world of Drupal 8. If you have a snippet worth sharing, drop us a line via Twitter and we’ll add it to this post (with credit of course).

Categories: Elsewhere

Chromatic: Be Promiscuous with Drush's core-quick-drupal

Fri, 08/07/2016 - 19:36
Aren't you a cutie?

Here at Chromatic HQ, the team is encouraged to give back to the open-source community. (And on company time!) One way to do this is by reviewing and contributing Drupal patches. For me, this can be both rewarding and frustrating. When things go well, I feel good about contributing and I might even get a commit credit! But there are times when patches don't apply, I have no clue what's wrong and I need to start fresh. First, I curse mightily at the time wasted, then I create a new db, and then re-install a fresh copy of Drupal, and then configure it etc. etc. Using drush site-install makes this process relatively easy, but what if it could be easier? (Hint: It is!)

Hooray for promiscuity!

I recently had a fling with Drush's core-quick-drupal command. I had known about it for years, but I hadn't realized what it could really do for me. This has now changed, and together we're having an open affair!

For the uninitiated, drush core-quick-drupal takes advantage of PHP's built-in web server (PHP >= 5.4) and uses a sqlite database to get a fresh, stand-alone copy of Drupal up and running, all in about a minute. It has two aliases: drush qd and, my personal preference, drush cutie.

Out-of-the-box overview
  • In about a minute it installs a full instance of Drupal.
  • Runs a web server at (no apache config).
  • Uses a self-contained sqlite file as the db (no mysql db to create and configure).

It's so much fun, you may want to follow along. From the command line, just cd to a folder of your choosing and run drush cutie --yes. (You'll need to have drush installed.)

Behind the scenes, a folder is created called quick-drupal with a timestamp appended to the end. (One of my older cutie folders is quick-drupal-20160214193640... a timestamp from a Valentine's evening with Drush that my wife won't soon forget!) Inside the new quick-drupal folder are subfolders with the latest D8 files and the sqlite db file. (There are lots of options to customize the Drupal version and environment, but the default nowadays is Drupal 8.)

Running it looks something like this drush cutie --yes Project drupal (8.0.3) downloaded to ... Installation complete. User name: admin User password: EawsYkGg4Y Congratulations, you installed Drupal! Listening on

(The output above has been edited to highlight the tastier bits!)

And with that I have the latest version of D8 running at As you can see from the shell output above, the superuser is admin with a password of EawsYkGg4Y.

Okay, okay, very cool, but what can I do with it? Here's a breakdown:
  1. Review patches with minimal fuss, thereby giving back to the Drupal community.
  2. Investigate new modules without sullying your main dev environment.
  3. Test that new Feature you created to see if it really works.
  4. NOT RECOMMENDED! When that friend asks you how long it will take to build him a website, respond with "about a minute" and fire it up.
You thought I was done?

Let's run through the steps to review a patch. This is where drush core-quick-drupal really shines because it's best to have a clean install of Drupal to work with; this minimizes the number of externalities that can interfere with testing. Having a single-command, throwaway copy of vanilla Drupal is the way to go.

You could call this a blog version of a live demo; I have chosen a patch out in the wild to review. I found this one for the core taxonomy module, that had a status of "Needs Review" on D.O.

The patch file itself is here:

Here are the steps I took on the command line:

# Install a temporary copy of D8 into a folder I named "test2644718" drush cutie test2644718 --yes

With the above command I got my environment running. The patch itself simply fixes the formatting in taxonomy-term.html.twig, which is a default template file for taxonomy terms, provided by the core taxonomy module.

I first tested to see the original template in action. Satisfied with the way it was working, I took steps to apply the patch.

# Move into the root folder of the new site cd test2644718/drupal/ # Use wget to grab the patch from D.O. wget # Apply the patch patch -p1 < taxonomy-term-twig-cs.patch patching file core/modules/taxonomy/templates/taxonomy-term.html.twig

The patch was applied successfully and a minor change in taxonomy-term.html.twig was made. I quickly tested to ensure nothing had blown up and was satisfied that the patch works as expected.

Back in D.O., I added my two cents and marked the issue as Reviewed & tested by the community. And that's that.


Though the patch originally sat awaiting review for 2 months, I'm happy to claim that my review got things moving again! After I posted RTBC, a flurry of activity took place with the scope increasing and new patches being created. I reviewed those too! A day later the patches were committed to 8.1.x. Nice.

Categories: Elsewhere

Mediacurrent: Friday 5: 5 Quick Ways to Check Your Site&#039;s Health

Fri, 08/07/2016 - 18:39

TGIF and welcome back to another exciting episode of The Mediacurrent Friday 5!

Categories: Elsewhere

Jeff Geerling's Blog: Getting Emoji and multibyte characters on your Drupal 7 site with 7.50

Fri, 08/07/2016 - 17:43

Almost exactly a year ago, I wrote a blog post titled Solving the Emoji/character encoding problem in Drupal 7.

Since writing that post, Drupal 7 bugfixes and improvements have started to pick up steam as (a) many members of the community who were focused on launching Drupal 8 had time to take a breather and fix up some long-standing Drupal 7 bugs and improvements that hadn't yet been backported, and (b) there are two new D7 core maintainers. One of the patches I've been applying to many sites and hoping would get pulled into core for a long time was adding support for full UTF-8, which allows the entry of emojis, Asian symbols, and mathematical symbols that would break Drupal 7 sites running on MySQL previously.

My old blog post had a few steps that you could follow to make your Drupal 7 site 'mostly' support UTF-8, but there were some rough edges. Now that support is in core, the process for converting your existing site's database is more straightforward:

Categories: Elsewhere

Zivtech: How to Grow Your Own Team

Fri, 08/07/2016 - 15:00
Lack of available talent is a common refrain of business owners. Give up on looking and complaining! Learn how to create a sustainable business.

Growing your own means hiring smart, motivated people with all the right soft skills and investing in them for the long haul. In return, they'll reward you with loyalty, teach your newer staff, and work in unison with a cohesive vision.

Where is the Talent? It’s not realistic to imagine that you live in a world where there are people that you can just hire for a decent price who already have all the skills you need. Just come in, hit the ground running, and make you a bunch of money. You wouldn't have any problems with them, and you wouldn't have to do much for them other than feed them some pizza and pay them.

So when managers can't find those people, they get upset, and they say, "There's not enough talent. People are not getting educated properly. We don't have the right people and the right programs out there."

The world is full of talent! No, they haven't learned the specific skills that you need, but there are so many intelligent people out there who would thrive with a little help.

What Are You Farming? When I started working in software development, I saw myself as someone who made websites. That was my output: I was making websites, or I was making code. Over the years now I see that my product is people. I'm selling their time, expertise, knowledge, and human capacity.

In web development, who cares about the code when you have the coder? It's like the egg and the chicken. You have to take care of the chicken, and not each little egg, because the chickens just keep making more.

Being a great website maker isn’t really that valuable. What is really valuable is being able to grow more people who can do the work. Then you really scale up. You're only going to do so well as a solo practitioner. If you're able to grow more and more skilled people, not only is your business doing better, but you start to realize that the task of training people is more important than building websites.

Download the full Grow Your Own white paper for free.
Categories: Elsewhere

OSTraining: How to Display PDFs on a Drupal Site

Fri, 08/07/2016 - 14:10

An OSTraining member asked us about attaching PDFs to a Drupal site.

It is possible to use the default File field and allow people to download the PDF. However, this member wanted visitors to read the PDF directly on the site.

Categories: Elsewhere

Drop Guard: Why we don’t (continuously) update our Drupal websites

Fri, 08/07/2016 - 13:00


Two weeks ago we decided to run a little survey asking Drupal folks one simple, but provocative question “Why I don’t update my website continuously”. I decided to present you the results - and I can tell that some serious voices got out!

First, I want to speak highly of least 38 of 78 participants, who actually update their website continuously and seem to know exactly what happens if they wouldn’t do it.

Drupal Drupal Planet Security Survey
Categories: Elsewhere

Leopathu: 6 Essential Drupal Interview Questions*

Fri, 08/07/2016 - 12:06
1. Name and describe the five conceptual layers in a Drupal system.
Categories: Elsewhere

LevelTen Interactive: How to Market a Speaking Tour: Behind the Scenes of the R.O.W. Roadshow

Fri, 08/07/2016 - 07:00

Hey, let’s put on a show!

My colleague Felipa and I felt like we were in a Judy Garland-Mickey Rooney movie. “Let’s put on a show!” said Tom, the CEO here at LevelTen, and we all jumped in to clear out the barn and save the orphanage....Read more

Categories: Elsewhere

Yuriy Gerasimov: Automated deployments to Acquia. Cloud API

Fri, 08/07/2016 - 06:45

When you set up your Continuous Integration you really would like to set your deployments automatically. If you use Acquia hosting for your website it does make a lot of sense to use all environments in your workflow. But how you can automate deployments to these environments without touching UI (copying database, files, deploying code)?

The answer is in Cloud API

You can call them either with drush command or curl request. We will touch the drush commands approach in this post.

I personally was heavily involved in workflow called CIBox that uses separate from Acquia github repo.

I used 'master' branch to deploy to DEV environment. But both STAGING and PRODUCTION environments are tag based.

DEV environment deployment

First step of deployment for me was to sync the repositories.

cd /var/git/acquia git pull github master git push origin master # Sleep for 30 seconds. We expect Acquia to update the code. sleep 30

Little note: all these commands are run on CI server for me. So you will find plenty of ssh and scp to Acquia servers later.

Repository /var/git/acquia is a clone from hosting repo but with set up remote to our own private repo. If you use hosting repo as primary you probably won't need this step.

In Acquia UI I have set up DEV environment to follow master branch. So code gets deployed automatically.

In my CI set up, I keep copy of project's database on CI server to use it in all builds. So I deploy this db to DEV environment as next step. Workflow diagram looks like this.

Code snippet

# Copy db to DEV server scp /var/www/backup/DBNAME.sql.gz # Deploy db on DEV server ssh -t 'rm -rf /home/PROJECT/DBNAME.sql && gunzip /home/PROJECT/proddump.sql.gz && cd /var/www/html/ && drush sql-drop -y && `drush sql-connect` < /home/PROJECT/proddump.sql'

Remember in order to run this operation you need to set up your ssh keys so jenkins user (I use Jenkins as CI tool) can go to Acquia servers without password being requested.

And the last step is run all the updates, registry rebuilds and whatever your project requires.

# Run registry rebuild and clear caches ssh -t 'cd /var/www/html/ && drush php-eval "registry_rebuild();" && drush cc all -y'   # Run hook updates ssh -t 'cd /var/www/html/ && drush -y updb'

These commands actually can be set up with drush aliases. But I used terminal approach as already using it for deploying database. Just consistency reasons.

Another part I skip here is copying files over. We don't do that. Instead we enable stage_file_proxy on DEV and STAGE environments and point them to PROD so files got copied over upon request. This saves plenty of space.

STAGE environment deployment

As staging environment uses tags we need to change our code deployment part.

In order to use Cloud API you need to set up special private key in Acquia UI. Please review for more details.

After setting up the key, ssh to DEV server and run command 'drush ac-api-login' and provide your email and key to it. In this way you will set up all your credentials and be able to run Cloud API drush commands.

And now, we can deploy the code.

ssh -t 'cd /var/www/html/ && drush ac-code-deploy test --verbose'   # Sleep for 30 seconds. We expect Acquia to update the code. sleep 30

This will deploy the code from DEV environment to STAGE and adds the tag automatically. Basically it mimics the operation of dragging the code bar in Acquia UI.

All other steps (database deployment and cache clear) are the same as with DEV environment.

PROD environment deployments

Production deployment is going to be the same as STAGE with only difference we need to ssh to STAGE server to deploy the code. And of course we do not to deploy database anywhere.

I am sure in your projects you might need to add some more steps. Maybe reindexing solr, or clearing varnish caches. All these can be done with drush commands.

How do you do deployments? Please share your experience in comments.

Tags: drupal 7drupal planet
Categories: Elsewhere

Appnovation Technologies: Drupal 8 and the User Experience Upgrade

Fri, 08/07/2016 - 02:27

Drupal and user experience can sometimes be at odds.

Categories: Elsewhere

Drupal Blog: Drupal 7.50 released

Thu, 07/07/2016 - 20:28

Drupal 7.50, the next release in the Drupal 7 series, is now available for download. It contains a variety of new features, improvements, and bug fixes (no security fixes).

Wait... Drupal 7.50?

Yes, there is a version jump compared to the previous 7.44 release; this is to indicate that this Drupal 7 point release is a bit larger than past ones and makes a few more changes and new features available than normal.

Updating your existing Drupal 7 sites is recommended. Backwards compatibility is still being maintained, although read on to find out about a couple of changes that might need your attention during the update.

Download Drupal 7.50 Notable changes

There are a variety of new features, performance improvements, security-related enhancements (although no fixes for direct security vulnerabilities) and other notable changes in this release. The release notes provide a comprehensive list, but here are some highlights.

New "administer fields" permission added for trusted users

The administrative interface for adding and configuring fields has always been something that only trusted users should have access to. To make that easier, there is now a dedicated permission which is required (in addition to other existing administrative permissions) to be able to access the field UI.

For example, you can now assign the "administer taxonomy" permission (but withhold the new "administer fields" permission) to allow low-level administrators to manage taxonomy terms but not change the field structure. Read the change record for more information.

Protection against clickjacking enabled by default

Clickjacking is a technique a malicious site owner can use to attempt attacks on other sites, by embedding the victim's site into an iframe on their own site.

To stop this, Drupal will now prevent your site from being embedded in an iframe on another domain. This is the default behavior, but it can be adjusted if necessary; see the change record to find out more.

Support for full UTF-8 (emojis, Asian symbols, mathematical symbols) is now possible on MySQL

If content creators on your site have been clamoring to use emojis, it's now possible on Drupal sites running MySQL (it was previously possible on PostgreSQL and SQLite). Turning this capability on requires the database to meet certain requirements, plus editing the site's settings.php file and potentially other steps, as described in the change record.

Improved support for recent PHP versions, including PHP 7

Drupal core's automated test suite is now fully passing on a variety of environments where there were previously some failures (PHP 5.4, 5.5, 5.6, and 7). We have also fixed several bugs affecting those versions. These PHP versions are officially supported by Drupal 7 and recommended for use where possible.

Because PHP 7 is the newest release (and not yet used on many production sites) extra care should still be taken with it, and there are some known bugs, especially in contributed modules (see the discussion for more details). However anecdotal evidence from a variety of users suggests that Drupal 7 can be successfully used on PHP 7, both before and after the 7.50 release.

Improved performance (and new PHP warnings) when Drupal is trying to find a file that does not exist

When Drupal cannot find a file that it expects to be in the filesystem, it will no longer continually search for it on a large number of page requests (previously, this could significantly hurt your site's performance). Instead, it will record a PHP warning about the problem.

Read the change record for more information, and make sure your production site is not configured to show warning messages like this on the screen, since it is not desirable for site visitors to see them. (In order to configure this, go to "Administration" → "Configuration" → "Development" → "Logging and errors" and set the "Error messages to display" option to "None".)

Improvements to help search engines index your site's images/CSS/JavaScript

Modern search engine web crawlers read images, CSS and JavaScript (just like a regular web browser) when crawling a site, and they use this information to improve search results.

Drupal's default robots.txt file now includes rules to allow search engines to access more of these files than it previously allowed them to, which may help certain search engines better index your site. See the change record for additional details.

More information
  • You can find the full list of changes between the previous 7.44 release and the current 7.50 release by reading the 7.50 release notes.
  • Also see the release notes for additional update information and known issues discovered after the release.
  • You can find a complete list of all changes in the stable 7.x branch in the git commit log.
  • Translators should be aware of a few administrative-facing translatable string changes and additions in this release.
Security information Future releases
  • Drupal 7 is being actively maintained, so more maintenance releases will be made available, according to our monthly release cycle.
  • We will consider continuing to do larger Drupal 7 releases like this one every six months or so (where the next larger release will be 7.60, in keeping with Drupal's new release cycle) if there is interest and continued contributions from the community. See the ongoing discussion for further details.
New Drupal 7 co-mainainers

In case you missed the news earlier, we recently added two new Drupal 7 co-maintainers: Fabianx (@fabianfranz) and stefan.r (@stefan_arrr)! Despite only having been official maintainers for the past two weeks, they put in an enormous amount of effort and skill into Drupal 7.50, which was essential in getting it out the door with all the improvements mentioned above.


Overall, 230 people were credited with helping to fix issues included in this release:

akoepke, alanburke, Alan D., alberto56, Albert Volkman, alexmoreno, alexpott, amontero, andypost, ar-jan, arosboro, askibinski, attiks, basvredeling, beejeebus, benjy, Berdir, bmateus, borisson_, botris, bradjones1, brianV, broeker, c960657, Carsten Müller, catch, checker, chintan.vyas, chirhotec, Christian DeLoach, ChristophWeber, chx, cilefen, ciss, ckng, colinmccabe, corbacho, criz, cspitzlay, cwoky, dagmar, DamienMcKenna, damien_vancouver, darol100, Darren Oh, das-peter, Dave Reid, davic, david_garcia, David_Rothstein, dawehner, dcam, DerekL, donutdan4114, droplet, DuaelFr, e._s, eesquibel, eiriksm, Elijah Lynn, emcniece, Eric_A, EvanSchisler, ExTexan, Fabianx, felribeiro, fgm, fietserwin, forestgardener, gcardinal, geerlingguy, gielfeldt, Girish-jerk, greggles, GrigoriuNicolae, Gábor Hojtsy, hass, Henrik Opel, heyyo, hgoto, hussainweb, idebr, ifrik, imanol.eguskiza, IRuslan, izaaksom, jackbravo, jacob.embree, jbekker, jbeuckm, jduhls, jenlampton, jeroen.b, jhodgdon, jibran, joachim, joegraduate, joelpittet, johnpicozzi, joseph.olstad, joshtaylor, Josh Waihi, jp.stacey, jsacksick, jthorson, JvE, jweowu, kala4ek, Kars-T, Ken Ficara, kenorb, kevinquillen, Kgaut, KhaledBlah, klausi, klokie, kristiaanvandeneynde, kristofferwiklund, ksenzee, k_zoltan, leschekfm, Liam Morland, lOggOl, lokapujya, Lowell, lucastockmann, Lukas von Blarer, maciej.zgadzaj, marcelovani, mariagwyn, Mark Theunissen, marvin_B8, maximpodorov, mayaz17, MegaChriz, mfb, mgifford, micaelamenara, mikeytown2, Mile23, mimran,, miro_dietiker, mistermoper, Mixologic, mohit_aghera, mondrake, mpv, mr.baileys, MustangGB, Neograph734, nevergone, nicholas.alipaz, nicrodgers, NikitaJain, nithinkolekar, nod_, Noe_, onelittleant, opdavies, orbmantell, oriol_e9g, ParisLiakos, pashupathi nath gajawada, Peacog, Perignon, Peter Bex, peterpoe, pfrenssen, PieterDC, pietmarcus, pjcdawkins, pjonckiere, Polonium, pounard, presleyd, pwaterz, pwolanin, rafaolf, rbmboogie, realityloop, rhclayto, rocketeerbkw, rpayanm, rupertj, Sagar Ramgade, sanduhrs, scor, scottalan, scuba_fly, sdstyles, snehi, soaratul, SocialNicheGuru, Spleshka, stefan.r, stovak, sun, Sutharsan, svanou, Sweetchuck, swentel, sylus, s_leu, tadityar, talhaparacha, tatisilva, tbradbury, therealssj, travelvc, TravisCarden, TravisJohnston, treyhunner, tsphethean, tstoeckler, tucho, tuutti, twistor, TwoD, typhonius, vasi1186, Wim Leers, Xano, xjm, yannickoo, yched, YesCT, zaporylie, Zerdiox, and znerol.

(This list was auto-generated, so apologies if anyone was left out.)

Your name could be on a list like this in the future; see the Ways to get involved page to find out how.

Thank you to everyone who helped with Drupal 7.50!

Categories: Elsewhere