frontpage posts: Drupal 9 Porting Weekend May 22-23, 2020

Planet Drupal - Tue, 2020/05/05 - 9:26pm

Join the Drupal Community in this worldwide event focusing on Drupal 9 stability and adoption across contributed projects. Over 1600 projects are already Drupal 9 compatible a month before Drupal 9's release which is unprecedented. However, there are still thousands that only need very small changes and a release made.

The first Drupal 9 Porting Day was on April 28, 2020, led by Gábor Hojtsy, Lee Rowlands, Vladimir Roudakov, QED42, Srijan, Adam Bergstein and Mike Lutz. Altogether 126 issues were worked on that resulted in 89 newly Drupal 9 compatible releases on that day and the following two days. It was not only successful but we had a lot of fun too. So we are of course here to do another one this month!


Drupal 9 Porting Weekend is on May 22-23, 2020. Friday, May 22 would have been contribution day at DrupalCon Minneapolis. We picked the dates in honour of the cancelled event.

Mentors / leaders needed worldwide

We are looking for leaders at various time zones to help mentor people working in that timezone. Spreading the effort to more people would help everyone's questions be answered. Contact Gábor Hojtsy if you are interested to be a mentor / leader in your timezone and we'll add you here. We are looking to cover as many time zones as possible.

How to participate

Anyone can help!

  • Let's meet online in the #d9readiness channel on Drupal slack:
  • We'll use slack threads to discuss projects and to help coordinate the work.
  • Do tag issues worked on with "Drupal 9 Porting Weekend" on

Tools that we'll definitely use include:

Kristen Pol did a great writeup of her process contributing at Drupal 9 porting day using the above tools, see

We may use other tools as needed to speed up the process, stay tuned.

Help get the word out!

Excited about participating? Let your friends and colleagues know! You don't need to be a module maintainer to participate. Tweet and post on other favourite social platforms about Drupal 9 Porting Weekend using #Drupal9Weekend.

Special thanks to @surabhi.gokte and @gambry for their help to get this off the ground.


php[architect]: Decoupling Drupal From Its Frontend System to Use in an Existing Website

Planet Drupal - Tue, 2020/05/05 - 8:46pm

The ability to create and publish content in real-time without knowing HTML or the ability to program is a common feature of many websites. This capability allows individuals to produce web content regardless of their technical ability. Producing web content is a common feature of many content management systems (CMS). Some websites don’t allow direct creation and publication of content, so a possible solution to address this shortcoming is integrating a CMS into these websites. This article describes how Drupal, a CMS, was added to an existing Symfony website to allow users to publish content in real-time. Implementation details about integrating Drupal into the existing website using Headless Drupal are shared.

The post Decoupling Drupal From Its Frontend System to Use in an Existing Website appeared first on php[architect].


Dropsolid: Supporting the Drupal Association and investing towards an Open Source Dividend

Planet Drupal - Tue, 2020/05/05 - 3:54pm
05 May Open source as a top sport

If Drupal was a sport, the Drupal Association would be the International Olympic Committee (IOC). They don’t practice the sports on their own, they do not vouch for a specific nation, nor do they have a direct financial benefit. Mind you, a non-profit organisation doesn’t mean nobody gets paid. The IOC’s main job is to make sure the Olympic Games happen, and that the infrastructure, the contracts with the countries are set up, that in the end the sports are represented by the best and that fair-play is guaranteed.

The Drupal Association isn’t that different, just replace sports with Drupal. They support the infrastructure needed to make sure that agencies, hosting companies, etc. can all benefit from the Open Source Drupal project with the tools that are more than just source code. Think of events, composer repositories, collaboration tools, sponsorships benefits management, etc.. 

Without such a central component, many companies like Dropsolid wouldn’t be as productive as we are today, nor would we have the power to have such an impact on the world that is in dire need of digital transformation in these times

Even the Olympics suffer from COVID-19

Unfortunately, the global pandemic has a severe impact on the Drupal Association with DrupalCon Minneapolis that needed to be postponed. Even though Open Source is crucial for the world at times of crisis, at the same time it's being hit.

"People all over the world can access open source technology to create solutions for crisis communication, remote education, and community cooperation."
- Forbes, Daniel Newman

And that is where we, and maybe also you, stepped in.

We play the game, we make it better

Dropsolid is proud of identifying itself as a maker in order to sustain the growth of Open Source. In the last 3 months we were attributed to 61 maker credits on, which places us 32nd worldwide. 

Next to being a maker we also understand that hard cash is needed as an investment for the future. Not only do we consider the money that goes into the Drupal Association as a donation, we see it as a crucial investment, with a return an Open Source Dividend, in the future of Dropsolid. 

“These pivots can only happen in one kind of organisation. Organisations that have embraced digital transformation. These are the organisations that were ready for technology. These are the organisations that looked at a piece of technology and said: this can be used differently. They have the leaders who were ready for change. They have the cultures that were ready to step up. This is what digital transformation for good looks like. “
- Forbes, Daniel Newman

We sponsored Drupalcon Amsterdam 2019 as a Diamond sponsor and have early-on committed to being a Diamond Sponsor of Drupalcon Barcelona 2020, delayed or not. Also several local initiatives such as Drupal Dev Days, Drupaljam or Drupalcamp London. All these sponsorships in the last years amounted to more than 60.000 euro. However, in this difficult time we feel like we need to do more.  

That is why we decided to upgrade our partnership with the Drupal Association to a premium level at the end of March. We are in conversation with the Association about another 11.000 euro support. 

@dropsolid creates “digital user experiences that increase customer lifetime value”. Thank you for upgrading to a Premium Supporting Partner and being a part of #DrupalCares.

— Drupal Association (@drupalassoc) April 21, 2020


To stay in the game, we all need to play

Like the Olympics couldn't happen without the support of the IOC, we need the Drupal Association to support the global community of Drupal athletes.

We are proud supporters of the community. We hope that you will follow in our footsteps. It’s the right thing to do, and that is what we stand for.

Donate to the Drupal Association

Nick Veenhof

Tag1 Consulting: The Drupal Association is the Drupal DNA giving Life to our Code & Community - TTT #014

Planet Drupal - Tue, 2020/05/05 - 2:36pm

Drupal is one of the largest and most active open-source projects in the world, and the Drupal Association is responsible for enabling it to thrive by creating and maintaining tooling and other projects that keep Drupal humming.

Read more preston Tue, 05/05/2020 - 05:36

Specbee: Getting Started with Focal Point Module in Drupal 8

Planet Drupal - Tue, 2020/05/05 - 2:12pm
Getting Started with Focal Point Module in Drupal 8 Maithri Shetty 05 May, 2020 Top 10 best practices for designing a perfect UX for your mobile app

Drupal 8 has thousands of contributed modules meant to make the lives of Content editors easier. The Focal point module in Drupal 8 is one such module that we are focusing on today. 
Content editors spend a big chunk of their time on editing images. Unless they are also experts in Photoshop, cropping and resizing could get messy sometimes. Simply cropping out an image to fit well on the screen might seize the importance out of it. Drupal offers many interactive means to crop and resize images but they don’t provide the flexibility that the Focal Point module offers. The Focal Point module allows for smart cropping while focusing on the important part of the image.

Installation of the module

Step 1: Install the module using the composer. Use the command “composer require drupal/focal_point”.

Step 2: Enable the module.

The module can be enabled through front-end or with the help of the composer, which also enables its dependency modules.

Working of Focal Point Module

Step 1: Create Image styles for the image.
Go to the path Configuration-> Media -> Image styles to create your custom image style.

Step 2:  Select the effect to your image style.

Select, Focal Point Scale and Crop option from the drop-down menu.

Step 3: Give image Height and Width for smart cropping.

After the effect is added to the image style, an option to add the width and height of the image is offered. This is basically the width and the height to which the image should be cropped.

Step 4: Selecting widget type in Manage form display.

After creating the image style, navigate to manage form display of the field, and select “Image (Focal Point)”.

In the image widget settings, select the custom image style which you have created.

Step 5: Selecting image style in format settings of Manage display.

Under manage display, navigate to the format setting of your image field and select the image style which you have created.

After completing all these steps, you will be able to add content to a content type. Once the image is uploaded, a plus(+) mark appears at the center of the image. Also, a preview button will be displayed below the image.

In the above image, you can see the plus symbol, and also the preview button. If you click on preview, you will be redirected to the preview of the cropped image.

Initially, the original image is  of a bigger size and once the image style is selected, the preview of your image is displayed. You can also change the crop section by moving the plus(+) mark anywhere on the image.

In the above image, I have moved the plus symbol to the right corner, so it crops the left portion of the image.

In the above picture, the left portion of the image is cropped by placing the plus(+) mark on the right of the image. This is how the drupal focal point works. 

Plain cropping and scaling of images sometimes leads to chopping off the important part of the image. The Drupal 8 Focal point module offers more flexibility than other image editing features provided by Drupal. True to its name, the Focal point module lets you focus on the most important feature of your image. As a leading Drupal development company, our focus lies on solving your problems. Contact our expert Drupal developers to know how we can leverage the best of Drupal 8 to create a compelling user experience for you.

Drupal Planet Shefali ShettyApr 05, 2017 Subscribe For Our Newsletter And Stay Updated Subscribe

Leave us a Comment

  Shefali ShettyApr 05, 2017 Recent Posts Image Getting Started with Focal Point Module in Drupal 8 Image (More than just) How to Configure Apache Solr in Drupal 8 for a Powerful Search Experience Image Drupal Masquerade Module – A Brief Tutorial on How to Easily Switch Your Drupal Roles Want to extract the maximum out of Drupal? TALK TO US Featured Success Stories

Know more about our technology driven approach to recreate the content management workflow for [24]


Find out how we transformed the digital image of world’s largest healthcare provider, an attribute that defined their global presence in the medical world.


Discover how a Drupal powered internal portal encouraged the sellers at Flipkart to obtain the latest insights with respect to a particular domain.

Categories: 12 month contrib challenge: XML sitemap

Planet Drupal - Tue, 2020/05/05 - 12:37pm

We've been busy recently, but that doesn't stop us at ComputerMinds contributing back to the Drupal community! For our latest multilingual website, we needed an XML sitemap with alternate links and hreflang attributes. This site uses separate domains for each language - for example, (🇸🇪) and (🇳🇴). Search engines need these alternate links to help them understand how to match up each translation of a page, which are distributed across these different domains. But this site is built on our existing Drupal 7 e-commerce platform that uses the XML sitemap project, which has no support for alternate links (nor entity translation).

Sometimes contributing is glamourous (think of getting new features into Drupal core, or creating new modules for the community), but other times it just involves stepping back to gain some perspective, and do some menial tasks. This was the latter! There have been two long-running issues on about getting the functionality I needed, both created way back in 2012:

So my challenge was to wade into these two, and the 281 comments on them, to figure out how to make progress. It turned out that I'd actually dipped into the first one nearly 2 years ago, and my colleagues had used work from them before too. But a lot changes in that time! The patches needed updating ('re-rolling') to work with the most recent code of the XML sitemap project itself and to work with the latest versions of entity_translation. I particularly enjoyed spotting a comment from our very own Mike Dixon, who threw a spanner in the works with a patch that confused everyone!

Eventually I created updated patches, resolved some bugs, and incorporated some additional valuable work that hadn't yet been reviewed by anyone. These patches ensured our client would be satisfied, and hopefully someone else will come along to review & approve them some day too.

Perhaps the most interesting thing to have come out of the work was a snippet of PHP I relied on to process links that needed adding to the sitemap. The XML sitemap project provides a UI to rebuild things in a batch, but recent changes to respect access mean that even that does not quite build the sitemap entirely. Instead, the work is done via cron, including a queue. Queues are pretty brilliant for ensuring background processes happen at some point, without hitting timeouts, or having to code up boilerplate code in hook_cron() implementations. But there's no way to limit what runs on cron (without additional modules) - I didn't want other modules to go doing other things when I was working on this, I just wanted my sitemaps to be built! So I came up with this, which is otherwise almost entirely pinched from drupal_cron_run():

function limited_cron($cron_modules, $queue_keys) { $queues = module_invoke_all('cron_queue_info'); drupal_alter('cron_queue_info', $queues); // Limit to the queue(s) that we specifically want. $queues = array_intersect_key($queues, array_flip($queue_keys)); foreach ($queues as $queue_name => $info) { DrupalQueue::get($queue_name)->createQueue(); } $implementations = module_implements('cron'); $implementations = array_intersect($implementations, $cron_modules); foreach ($implementations as $module) { // Do not let an exception thrown by one module disturb another. try { module_invoke($module, 'cron'); } catch (Exception $e) { watchdog_exception('cron', $e); } } foreach ($queues as $queue_name => $info) { if (!empty($info['skip on cron'])) { // Do not run if queue wants to skip. continue; } $callback = $info['worker callback']; $end = time() + (isset($info['time']) ? $info['time'] : 15); $queue = DrupalQueue::get($queue_name); while (time() < $end && ($item = $queue->claimItem())) { try { call_user_func($callback, $item->data); $queue->deleteItem($item); } catch (Exception $e) { // In case of exception log it and leave the item in the queue // to be processed again later. watchdog_exception('cron', $e); } } } } // Only run the cron implementations and queues that the // XML sitemap project provides. limited_cron(array('xmlsitemap', 'xmlsitemap_node'), array('xmlsitemap_link_process'));

This allowed me to very easily get my sitemap built up quickly, by repeatedly calling limited_cron() with just the things that I needed to run. Note that it doesn't act exactly the same as the normal Drupal cron, which runs as the anonymous user and avoids updating the session. But I have found myself returning to use this on other projects for other modules' cron queues. Hopefully you might find it useful too :-)

Photo by Ian on Unsplash

Categories: Build a business website with Drupal: discover the types

Planet Drupal - Tue, 2020/05/05 - 8:22am
Businesses are different, and so are their websites. In this post, discover more about the different types of business websites that can be built with Drupal.

Agaric Collective: Drupal migrations reference: List of properties per Commerce content entity

Planet Drupal - Tue, 2020/05/05 - 4:48am

In a previous article, we presented a list of properties per content entity in Drupal core and some contributed modules. This time we will provide a similar list for Drupal Commerce. When migrating into content entities, these define several properties that can be included in the process section to populate their values. For example, when importing Drupal Commerce product variations you can specify the SKU, price, list price, etc. In the case of promotions, you can set the start and end dates. Finding out which properties are available for an entity might require some Drupal development knowledge. To make the process easier, in today’s article we are presenting a reference of properties available in content entities provided by Drupal Commerce and some related contributed modules.




For each entity we will present: the module that provides it, the class that defines it, and the available properties. For each property we will list its name, field type, a description, and a note if the field allows unlimited values (i.e. it has an unlimited cardinality). The list of properties available for a content entity depend on many factors. For example, if the entity is revisionable (e.g. revision_default), translatable (e.g. langcode), or both (e.g. revision_translation_affected). The modules that are enabled on the site can also affect the available properties. For instance, if the “Workspaces” module is installed, it will add a workspace property to many content entities. This reference assumes that Drupal was installed using the standard installation profile and only Drupal Commerce related modules that provide content entities are enabled.

It is worth noting that entity properties are divided in two categories: base field definitions and field storage configurations. Base field configurations will always be available for the entity. On the other hand, the presence of field storage configurations will depend on various factors. For one, they can only be added to fieldable entities. Attaching the fields to the entity can be done manually by the user, by a module, or by an installation profile. Again, this reference assumes that Drupal was installed using the standard installation profile with Drupal Commerce related modules enabled. By default, the commerce_product entity adds a bodyfield. For entities that can have multiple bundles, not all properties provided by the field storage configurations will be available in all bundles. For example, with the standard installation profile all content types will have a body field associated with it, but only the article content type has the field_image, and field_tags fields. If subfields are available for the field type, you can migrate into them.

If you are migrating into Drupal Commerce, make sure to check the Commerce Migrate module. It offers migrate destination field handlers for commerce fields and a plugin for commerce product types. It also provides a migration path from Commerce 1 (Drupal 7), Ubercart, and other e-commerce platforms. It is even possible to import data from other platforms like WooCommerce, Magento, and Shopify via CSV exports.

Store entity

Module: Commerce Store (part of commerce module)

List of base field definitions:

  1. store_id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. langcode: (language) Language.
  4. type: (entity_reference to commerce_store_type) Type. The store type.
  5. uid: (entity_reference to user) Owner. The store owner.
  6. name: (string) Name. The store name.
  7. mail: (email) Email. Store email notifications are sent from this address.
  8. default_currency: (entity_reference to commerce_currency) Default currency. The default currency of the store.
  9. timezone: (list_string) Timezone. Used when determining promotion and tax availability.
  10. address: (address) Address. The store address.
  11. billing_countries: (list_string) Supported billing countries. Allows unlimited values.
  12. path: (path) URL alias. The store URL alias.
  13. is_default: (boolean) Default. Whether this is the default store.
  14. default_langcode: (boolean) Default translation. A flag indicating whether this is the default translation.
  15. shipping_countries: (list_string) Supported shipping countries. Allows unlimited values.
  16. prices_include_tax: (boolean) Prices are entered with taxes included.
  17. tax_registrations: (list_string) Tax registrations. The countries where the store is additionally registered to collect taxes. Allows unlimited values.
Product entity

Module: Commerce Product (part of commerce module)

List of base field definitions:

  1. product_id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. langcode: (language) Language.
  4. type: (entity_reference to commerce_product_type) Product type.
  5. status: (boolean) Published.
  6. stores: (entity_reference to commerce_store) Stores. The product stores. Allows unlimited values.
  7. uid: (entity_reference to user) Author. The product author.
  8. title: (string) Title. The product title.
  9. variations: (entity_reference to commerce_product_variation) Variations. The product variations. Allows unlimited values.
  10. created: (created) Created. The time when the product was created.
  11. changed: (changed) Changed. The time when the product was last edited.
  12. default_langcode: (boolean) Default translation. A flag indicating whether this is the default translation.

List of field storage configurations:

  1. body: text_with_summary field.
Product variation entity

Module: Commerce Product (part of commerce module)

List of base field definitions:

  1. variation_id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. langcode: (language) Language.
  4. type: (entity_reference to commerce_product_variation_type) Product variation type.
  5. status: (boolean) Published.
  6. uid: (entity_reference to user) Author. The variation author.
  7. product_id: (entity_reference to commerce_product) Product. The parent product.
  8. sku: (string) SKU. The unique, machine-readable identifier for a variation.
  9. title: (string) Title. The variation title.
  10. list_price: (commerce_price) List price. The list price.
  11. price: (commerce_price) Price. The price
  12. created: (created) Created. The time when the variation was created.
  13. changed: (changed) Changed. The time when the variation was last edited.
  14. default_langcode: (boolean) Default translation. A flag indicating whether this is the default translation.
Product attribute value entity

Module: Commerce Product (part of commerce module)

List of base field definitions:

  1. attribute_value_id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. langcode: (language) Language.
  4. attribute: (entity_reference to commerce_product_attribute) Attribute.
  5. name: (string) Name. The attribute value name.
  6. weight: (integer) Weight. The weight of this attribute value in relation to others.
  7. created: (created) Created. The time when the attribute value was created.
  8. changed: (changed) Changed. The time when the attribute value was last edited.
  9. default_langcode: (boolean) Default translation. A flag indicating whether this is the default translation.
Order entity

Module: Commerce Order (part of commerce module)

List of base field definitions:

  1. order_id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. type: (entity_reference to commerce_order_type) Order type.
  4. order_number: (string) Order number. The order number displayed to the customer.
  5. store_id: (entity_reference to commerce_store) Store. The store to which the order belongs.
  6. uid: (entity_reference to user) Customer. The customer.
  7. mail: (email) Contact email. The email address associated with the order.
  8. ip_address: (string) IP address. The IP address of the order.
  9. billing_profile: (entity_reference_revisions) Billing information. Billing profile
  10. order_items: (entity_reference to commerce_order_item) Order items. The order items. Allows unlimited values.
  11. adjustments: (commerce_adjustment) Adjustments. Allows unlimited values.
  12. total_price: (commerce_price) Total price. The total price of the order.
  13. total_paid: (commerce_price) Total paid. The total paid price of the order.
  14. state: (state) State. The order state.
  15. data: (map) Data. A serialized array of additional data.
  16. locked: (boolean) Locked.
  17. created: (created) Created. The time when the order was created.
  18. changed: (changed) Changed. The time when the order was last edited.
  19. placed: (timestamp) Placed. The time when the order was placed.
  20. completed: (timestamp) Completed. The time when the order was completed.
  21. cart: (boolean) Cart.
  22. checkout_flow: (entity_reference to commerce_checkout_flow) Checkout flow.
  23. checkout_step: (string) Checkout step.
  24. payment_gateway: (entity_reference to commerce_payment_gateway) Payment gateway. The payment gateway.
  25. payment_method: (entity_reference to commerce_payment_method) Payment method. The payment method.
  26. coupons: (entity_reference to commerce_promotion_coupon) Coupons. Coupons that have been applied to order. Allows unlimited values.
Order item entity

Module: Commerce Order (part of commerce module)

List of base field definitions:

  1. order_item_id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. type: (entity_reference to commerce_order_item_type) Order item type.
  4. order_id: (entity_reference to commerce_order) Order. The parent order.
  5. purchased_entity: (entity_reference to node) Purchased entity. The purchased entity.
  6. title: (string) Title. The order item title.
  7. quantity: (decimal) Quantity. The number of purchased units.
  8. unit_price: (commerce_price) Unit price. The price of a single unit.
  9. overridden_unit_price: (boolean) Overridden unit price. Whether the unit price is overridden.
  10. total_price: (commerce_price) Total price. The total price of the order item.
  11. adjustments: (commerce_adjustment) Adjustments. Allows unlimited values.
  12. uses_legacy_adjustments: (boolean) Uses legacy adjustments.
  13. data: (map) Data. A serialized array of additional data.
  14. created: (created) Created. The time when the order item was created.
  15. changed: (changed) Changed. The time when the order item was last edited.
Payment method entity

Module: Commerce Payment (part of commerce module)

List of base field definitions:

  1. method_id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. type: (string) Payment method type.
  4. payment_gateway: (entity_reference to commerce_payment_gateway) Payment gateway. The payment gateway.
  5. payment_gateway_mode: (string) Payment gateway mode. The payment gateway mode.
  6. uid: (entity_reference to user) Owner. The payment method owner.
  7. remote_id: (string) Remote ID. The payment method remote ID.
  8. billing_profile: (entity_reference_revisions) Billing profile. Billing profile
  9. reusable: (boolean) Reusable. Whether the payment method is reusable.
  10. is_default: (boolean) Default. Whether this is the user's default payment method.
  11. expires: (timestamp) Expires. The time when the payment method expires. 0 for never.
  12. created: (created) Created. The time when the payment method was created.
  13. changed: (changed) Changed. The time when the payment method was last edited.
Payment entity

Module: Commerce Payment (part of commerce module)

List of base field definitions:

  1. payment_id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. type: (string) Payment type.
  4. payment_gateway: (entity_reference to commerce_payment_gateway) Payment gateway. The payment gateway.
  5. payment_gateway_mode: (string) Payment gateway mode. The payment gateway mode.
  6. payment_method: (entity_reference to commerce_payment_method) Payment method. The payment method.
  7. order_id: (entity_reference to commerce_order) Order. The parent order.
  8. remote_id: (string) Remote ID. The remote payment ID.
  9. remote_state: (string) Remote State. The remote payment state.
  10. amount: (commerce_price) Amount. The payment amount.
  11. refunded_amount: (commerce_price) Refunded amount. The refunded payment amount.
  12. state: (state) State. The payment state.
  13. authorized: (timestamp) Authorized. The time when the payment was authorized.
  14. expires: (timestamp) Expires. The time when the payment expires. 0 for never.
  15. completed: (timestamp) Completed. The time when the payment was completed.
  16. test: (boolean) Test. Whether this is a test payment.
  17. captured: (timestamp) Captured. The time when the payment was captured.
Promotion entity

Module: Commerce Promotion (part of commerce module)

List of base field definitions:

  1. promotion_id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. langcode: (language) Language.
  4. name: (string) Name. The promotion name.
  5. display_name: (string) Display name. If provided, shown on the order instead of "Discount".
  6. description: (string_long) Description. Additional information about the promotion to show to the customer
  7. order_types: (entity_reference to commerce_order_type) Order types. The order types for which the promotion is valid. Allows unlimited values.
  8. stores: (entity_reference to commerce_store) Stores. The stores for which the promotion is valid. Allows unlimited values.
  9. offer: (commerce_plugin_item:commerce_promotion_offer) Offer type.
  10. conditions: (commerce_plugin_item:commerce_condition) Conditions. Allows unlimited values.
  11. condition_operator: (list_string) Condition operator. The condition operator.
  12. coupons: (entity_reference to commerce_promotion_coupon) Coupons. Coupons which allow promotion to be redeemed. Allows unlimited values.
  13. usage_limit: (integer) Usage limit. The maximum number of times the promotion can be used. 0 for unlimited.
  14. start_date: (datetime) Start date. The date the promotion becomes valid.
  15. end_date: (datetime) End date. The date after which the promotion is invalid.
  16. compatibility: (list_string) Compatibility with other promotions.
  17. status: (boolean) Status. Whether the promotion is enabled.
  18. weight: (integer) Weight. The weight of this promotion in relation to others.
  19. default_langcode: (boolean) Default translation. A flag indicating whether this is the default translation.
Coupon entity

Module: Commerce Promotion (part of commerce module)

List of base field definitions:

  1. id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. promotion_id: (entity_reference to commerce_promotion) Promotion. The parent promotion.
  4. code: (string) Coupon code. The unique, machine-readable identifier for a coupon.
  5. usage_limit: (integer) Usage limit. The maximum number of times the coupon can be used. 0 for unlimited.
  6. status: (boolean) Status. Whether the coupon is enabled.
Log entity

Module: Commerce Log (part of commerce module)

List of base field definitions:

  1. log_id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. uid: (entity_reference to user) User. The user for the log.
  4. template_id: (string) Log template ID. The log template plugin ID
  5. category_id: (string) Log category ID. The log category plugin ID
  6. source_entity_id: (integer) Source entity ID. The source entity ID
  7. source_entity_type: (string) Source entity type. The source entity type
  8. params: (map) Params. A serialized array of parameters for the log template.
  9. created: (created) Created. The time when the log was created.
Price list entity

ModuleCommerce Pricelist

List of base field definitions:

  1. id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. type: (string) Price list bundle.
  4. uid: (entity_reference to user) Owner. The user that owns this price list.
  5. name: (string) Name. The name of the price list.
  6. stores: (entity_reference to commerce_store) Stores. The stores for which the price list is valid. Allows unlimited values.
  7. customer: (entity_reference to user) Customer. The customer for which the price list is valid.
  8. customer_roles: (entity_reference to user_role) Customer roles. The customer roles for which the price list is valid. Allows unlimited values.
  9. start_date: (datetime) Start date. The date the price list becomes valid.
  10. end_date: (datetime) End date. The date after which the price list is invalid.
  11. weight: (integer) Weight. The weight of this price list in relation to other price lists.
  12. status: (boolean) Status. Whether the price list is enabled.
  13. changed: (changed) Changed. The time when the price list was last edited.
Price list item entity

ModuleCommerce Pricelist

List of base field definitions:

  1. id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. type: (string) Price list item bundle.
  4. uid: (entity_reference to user) Owner. The user that owns this price list item.
  5. price_list_id: (entity_reference to commerce_pricelist) Price list. The parent price list.
  6. purchasable_entity: (entity_reference to commerce_product_variation) Purchasable entity. The purchasable entity.
  7. quantity: (decimal) Quantity. The quantity tier.
  8. list_price: (commerce_price) List price. The list price.
  9. price: (commerce_price) Price. The price.
  10. status: (boolean) Status. Whether the price list item is enabled.
  11. changed: (changed) Changed. The time when the price list item was last edited.
Shipment entity


List of base field definitions:

  1. shipment_id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. type: (entity_reference to commerce_shipment_type) Shipment type.
  4. order_id: (entity_reference to commerce_order) Order. The parent order.
  5. package_type: (string) Package type. The package type.
  6. shipping_method: (entity_reference to commerce_shipping_method) Shipping method. The shipping method
  7. shipping_service: (string) Shipping service. The shipping service.
  8. shipping_profile: (entity_reference_revisions) Shipping information.
  9. title: (string) Title. The shipment title.
  10. items: (commerce_shipment_item) Items. Allows unlimited values.
  11. weight: (physical_measurement) Weight.
  12. original_amount: (commerce_price) Original amount. The original amount.
  13. amount: (commerce_price) Amount. The amount.
  14. adjustments: (commerce_adjustment) Adjustments. Allows unlimited values.
  15. tracking_code: (string) Tracking code. The shipment tracking code.
  16. state: (state) State. The shipment state.
  17. data: (map) Data. A serialized array of additional data.
  18. created: (created) Created. The time when the shipment was created.
  19. changed: (changed) Changed. The time when the shipment was last updated.
  20. shipped: (timestamp) Shipped. The time when the shipment was shipped.
Shipping method entity


List of base field definitions:

  1. shipping_method_id: (integer) ID.
  2. uuid: (uuid) UUID.
  3. langcode: (language) Language.
  4. stores: (entity_reference to commerce_store) Stores. The stores for which the shipping method is valid. Allows unlimited values.
  5. plugin: (commerce_plugin_item:commerce_shipping_method) Plugin.
  6. name: (string) Name. The shipping method name.
  7. conditions: (commerce_plugin_item:commerce_condition) Conditions. Allows unlimited values.
  8. condition_operator: (list_string) Condition operator. The condition operator.
  9. weight: (integer) Weight. The weight of this shipping method in relation to others.
  10. status: (boolean) Enabled. Whether the shipping method is enabled.
  11. default_langcode: (boolean) Default translation. A flag indicating whether this is the default translation.
Available properties for other content entities

This reference includes Drupal Commerce content entities and some provided by related contributed modules. The previous article included a reference for Drupal core content entities. That being said, it would be impractical to cover all contributed modules. To get a list of yourself for other content entities, load the entity_type.manager service and call its getFieldStorageDefinitions() method passing the machine name of the entity as a parameter. Although this reference only covers content entities, the same process can be used for configuration entities.

What did you learn in today’s article? Did you know that there were so many entity properties provided by Drupal Commerce? Were you aware that the list of available properties depend on factors like if the entity is fieldable, translatable, and revisionable? Did you know how to find properties for content entities from contributed modules? Please share your answers in the comments. Also, we would be grateful if you shared this article with your friends and colleagues.








Read more and discuss at


Promet Source: 5 Fun Ways to Engage Remote Teams

Planet Drupal - Mon, 2020/05/04 - 11:42pm
Even among teams who are accustomed to working remotely, staying positive and connected can be a challenge when statewide stay-at-home mandates turn lives upside down in a myriad of different ways. At Promet Source, we took it up a notch this spring, with some new ways to enliven meetings and support each other. The following five initiatives helped us to:

Jacob Rockowitz: Webform Composites vs. Tables

Planet Drupal - Mon, 2020/05/04 - 11:34pm

Collecting rich and structured data

In our API-first and data-driven world, we need to collect rich and structured data. The Webform module for Drupal 8 empowers websites to build any type of form which collects any type of data.

The Webform module supports composites elements, which are multiple inputs working together to collect rich and structured data. Composite elements can collect information, including addresses. Composite elements combined with the Webform module's support for multiple values can collect multiple addresses that are represented using a table where rows can be added or removed. Yet, the Webform module's support for composite elements has some limitations.

Composites the good and the bad

The best way to begin using and understanding composites is to build a webform that contains an address element and examine how the address element's data is submitted, stored, and exported. Below is a quick demo of a basic address composite element. If you install and enable the Address module, you can add an 'Advanced address' element to your webforms, which does a great job of managing locality and zip codes.

If the default composite elements included in the Webform module do not meet your requirements, you can also create a custom composite in the Webform module's UI or using custom code.

To create a custom composite, add a 'Custom element' to your webform, select the desired elements and voila, you have a custom composite.

An immediate limitation that site builders will notice is the not all webform elements are available via the UI. Also, elements that collect multiple values are not supported. The Webform module stores submission data using an Entity-Attribute-Value (EAV) model, which limits the complexity of what type of data can be collected....Read More


Drupal blog: Drupal in COVID-19 Series: Arts Council England

Planet Drupal - Mon, 2020/05/04 - 6:50pm

Continuing 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 Paul Johnson of CTI Digital. Here, he describes their project at the Arts Council England.

Arts Council England support and help fund cultural activities within local communities, arts organisations, museums and libraries. After the UK government mandated the closure of all cultural venues including national parks and theatres, The Arts Council have made available 160 million GBP of emergency funding to offer individuals and organisations working in the cultural sector new financial support during this crisis.

The Arts Council is providing:

  • Up to 90 million for National Portfolio Organisations (NPOs) and Creative People and Places (CPPs) lead organisations
  • 50 million for organisations that are not in receipt of regular funding from the Arts Council
  • 20 million for artists, creative practitioners and freelancers

(These figures are correct at time of writing)

Their Drupal platform is central to making the funding available by providing information and access to funding applications. With an urgent need to accept and process high volumes of applications, the Arts Council found themselves in a strong position as their existing Drupal website easily accommodating rapid creation of new site sections without need for developer intervention.

Arts Council England quickly created detailed pages using existing components that lead users through the application process. Clear and accessible design patterns help users hone in on useful information that answers everything from where the funding comes from, to how to use the funding application system. 

This information is available alongside videos and help articles. All of the content is also entirely accessible and provides a smooth user experience at what can be a distressing time.

Critically, the Arts Council is able to continue to build new pages, extend pages, and update content as the government introduces new measures. 

The funding applications currently push through a dedicated grant-based system, but Arts Council England have the capability to manage applications directly within their Drupal platform if required at a later date. 

Learn more about the Arts Councils support for arts organisations and individuals on their website


Mediacurrent: Area Alert: A Pre-Built Drupal Emergency Response Site

Planet Drupal - Mon, 2020/05/04 - 6:13pm


​For the past several weeks, the Mediacurrent team has spent hours collaborating on an open source emergency site. In a recent Area Alert post, expert designer Becky laid out the UI design approach to creating websites dedicated to emergency responses like the COVID-19 pandemic. Becky walked through user scenarios and digital psychology that inspired her design choices. 

This week, we are proud to announce the beta release of the Area Alert distribution! Mediacurrent has partnered with Pantheon to create a free public upstream along with 90 days of free hosting for qualifying organizations.

What’s In The Box

The goal of the Area Alert project is to enable organizations to rapidly develop and deploy emergency websites in a matter of hours or days, not weeks or months.

Explore the full demo at

Flexible Components

The first way we help expedite website creation is by giving content editors the tools to easily drop different types of components onto the page. The screenshot below shows you a toolbox of components that can be added to any page.

The Area Alert distribution is pre-loaded with sample content that can help editors quickly get started and provides guidance about how to keep going.

Color Support

The next way this distribution supports the rapid setup of emergency response sites is with the “Color” feature. This feature gives administrators the ability to change the color scheme of the website from the UI.

By giving editors the ability to quickly add branded colors, site administrators will be able to give site visitors more confidence in the authority of the website and more trust in their information right from the start.

Additional Features

The Area Alert profile comes with 4 content types and 15+ components including carousels, FAQs, maps, and media content.

Key features include:

  • Enterprise-level security
  • Fully responsive, mobile-ready theme
  • Fast translation using
  • Full-text site search to quickly search for a specific topic
  • Out of the box, pre-configured content types such as landing pages and press releases
  • Automated content aggregation for article content with a dedicated landing page and featured news area on the homepage
  • Twitter integration
Getting Started

As mentioned, Mediacurrent has partnered with Pantheon to create a free public upstream. This means that with a free account on, you can fully install the Area Alert profile in a matter of minutes. Pantheon is also offering free elite plans for qualifying organizations. Read more about Pantheon’s offers. Visit the Area Alert public upstream link hosted on Pantheon to get started.

For advanced installations, developers are encouraged to visit the official project page on for more information. The project page also has information about how to submit bugs or join our public Slack channel.

If you would like to use this product but need some help to get started, Mediacurrent is standing by, ready to partner with organizations that need assistance with building out and maintaining their COVID-19 site, or any emergency response site. Contact us for a live Area Alert demo or for more information about our services. 

We’re In This Together

Mediacurrent, a long-time contributor to open source, is committed to helping the community respond to emergencies, like the COVID-19 pandemic, in any way we can. If you have any questions or comments, please contact us for more information. Our hope is that this contribution can help municipalities and organizations better communicate with the public during this difficult time.


Tag1 Consulting: How to enable server-side rendering with Web Components in Drupal-part 4

Planet Drupal - Mon, 2020/05/04 - 2:59pm

Among the most pitched debates currently in the Drupal community is the discussion over the future of Drupal's front-end and whether decoupled Drupal marks how front-end development in one of the world's most popular content management systems (CMS) will look for years to come.

Read more preston Mon, 05/04/2020 - 06:00

GuillaumeDuveau: Developer activity, a module to fetch users activities on & GitHub

Planet Drupal - Mon, 2020/05/04 - 10:26am

Developer activity is a small module that I just released on It fetches local users activities on and on into custom entities.

Only public endpoints are used and they at each cron. So all you need are a user ID and a user name fields for your Drupal users (and of course install the dependencies, which is just Migrate plus 8.x-5.x.

You can then create Views with those custom entities, for instance.


OpenSense Labs: Diversity, Inclusion and Drupal: A triangle of great relevance

Planet Drupal - Sun, 2020/05/03 - 1:08pm
Diversity, Inclusion and Drupal: A triangle of great relevance Shankar Sun, 05/03/2020 - 16:38

Time and again, we are reminded of the adage: “There’s unity in diversity.” Contemplating this deeply would make one realise the vastness of this statement. Depending on the region of the world you operate in, diversity may connote issues of religion, race, nationality, ethnicity, class, gender, age, sexual orientation or physical ability. It may constitute all of these or none of them. To formulate a perfect diversity and inclusion (D&I) strategy that is really global in nature, one has to understand the culture, politics, economics and relevant legislation within the regions. Taking diversity and inclusion global is not about the distribution of certain programs but about creating a movement that holds D&I as a fundamental tenet.

Defining, leveraging, and measuring diversity and inclusion is of great relevance. More than ever, businesses, governments, nonprofits and other institutions have been putting a lot of emphasis on the adoption of a global mindset in order to remain viable and relevant in the global marketplace of this day and age. Diversity and inclusion practitioners have been perpetually engaged in assisting people from all backgrounds to hear and be heard, understand and be understood, and work in unison with higher levels of productivity.

Open source communities have been at the forefront of this work. Building a diverse and inclusive community is increasingly becoming a top priority of open source enthusiasts. Drupal, one of the market leaders in the world of open source content management systems, is also backed by a strong and growing community that embraces the principles of D&I. From workplaces to open source communities, the D&I factor has been very impactful. To understand how the open source community, the world over (Drupal, in particular), is grabbing the plate full of diversity and inclusion strategies with both hands, we need to look deep into its immense necessity and importance.

Richness of diversity and inclusion

Diversity is a powerful term and calls for empowering people. It emboldens the idea of respecting and appreciating what makes a person different from another. Exploring the differences in a secure, positive and nurturing ecosystem is the basic principle of diversity.

When you talk about inclusion, you talk about a sense of belonging that a person, no matter what socioeconomic status or ethnicity or race or any other criteria he or she belongs to, feels in a community. People feel valued and respected which makes them put their best put forward and lend immaculate performances.

Source: Deloitte

It’s the leadership group that can make a massive impact. Every individual leader, both intellectually and emotionally, needs to buy into the value of belonging. In other words, you can call it empathetic leadership. It’s a critical starting point. It makes a person, who is part of the leadership group, remember the times when they were excluded, shamed, or interrupted. Tuning into empathy can make a person understand the feeling of being excluded or making others feel excluded. When you have a strong leader, who embraces D&I principles, practices them, and enables others to choose this path, you can expect behavioural changes to kick in and culture reset to happen. According to Deloitte, following characteristics, interrelated and mutually reinforcing, defines a good leader.

Source: Deloitte

The importance of diversity and inclusion at the workplace has already been realised by top companies and necessary steps have been taken. If you look at the financial sector, for example, D&I remains a higher priority according to a global CEO survey. This, they believe, would eventually pave the way for newer talents.

Source: PwC

As one of the largest media networks, BBC has chalked out a clear-cut plan of making diverse thinking and inclusive action as its elemental parts.

Source: BBC

Another industry giant, Nestlé, has also made discernible commitment to embed diversity and inclusion across everything that it does with a primary focus on culture, innovation and society. Action plans for creating a gender balance, promoting cultural agility, empowering different generations at the workplace, supporting people with disabilities, tackling discrimination against LGBTQ+ community, and so forth, have been increasingly emphasised upon and put to work.

Open source communities embracing D&I

Technology that has taken birth with the help of homogenous groups has shown to be negatively impacting the women in the past. Amazon had to scrap an AI recruiting tool as it showed bias against women. Back in 2014, menstruation was not included as a health metric in Apple’s health tracking app. And, a story on Vice stated how the prospect of fully artificial heart implants seemed exciting for men and not for women as they were not designed to fit women. Therefore, while building open source software, diverse participation can ensure equitable outcomes.

While building open source software, diverse participation can ensure equitable outcomes.

The importance of diversity and inclusion has been coming to realisation and large organisations have already been trying to make sweeping changes to make their workspaces more diverse and inclusive. 78% of organisations, according to a report on ZDNet, are running all part of their businesses with open source software. So, in addition to organisations, open source communities need to imbibe the principles of D&I.

Source: ZDNet

It’s true that anyone who wishes to license an open source project has to agree, among other things, to not get involved in any discriminatory action. However, it is easier said than done. For example, in a GitHub survey, which is the world’s leading repository of open source code, over thousands of open source users and developers across the globe were asked questions on a range of topics. Of that randomly selected cohort, 95% of the respondents were found to be male, 3% as female and 1% as non-binary. 

Let’s put it this way: Only the scanty vestiges of the day have come in through the open door. In spite of a faint shimmer of light in the hall, the doorway yawns impenetrably black. Open source has work to do. A lot needs to be done because the obstacles faced by the under-represented groups in the open source fraternity are piling up. The position, they are finding themselves in, can’t be addressed through a single lens or strategy.

In spite of a faint shimmer of light in the hall, the doorway yawns impenetrably black.

The positive sign is that the open source world has shown tremendous improvement and has been proving their commitment to D&I. To start with, there’s a collective of people called Open Source Diversity that is working on driving more D&I initiatives in free and open source software communities. It has laid down the basics that can help make an open source project more friendly and inclusive. For instance, the Open Source Diversity prescribes the usage of the Contributor Covenant. This is a code of conduct for open source projects that is created to overtly welcome everyone to contribute to open source software.

Mozilla, in 2018, to promote D&I within their ranks and their work, prepared an action plan for making the code review process more egalitarian and subvert unconscious gender bias.

The Linux Foundation takes a lot of pride in being an open, friendly, and accessible community for new participants and doesn’t leave any stone unturned to show the world the proof of that.

Source: The Linux Foundation

Open source meritocracy, where there is recognition and decision-making on the basis of work or talent that a person can contribute to the project, is something that Tor firmly believes in and likes to put to practice. This is why it started the Global South Initiative to improve diversity, inclusion and equity in the work that it was doing and get more people from the ‘global south’ to be involved in the Tor community.

GitHub, to cultivate a culture of inclusion, provided training to its managers on the best practices of promoting inclusivity and established a recurring dialogue between its Leadership Team and its Inclusion Advisory Council.

The Apache Software Foundation has ambitious plans too. It wants to become the most equitable open source foundation in the world.

In a bid to promote nonprofits that are dedicated to education, inclusiveness and skill-building for under-represented groups, IBM even awarded $50,000 to Girls Who Code for the latter’s terrific work on increasing the number of women working in computer science.

Drupal’s contribution to promoting diversity and inclusion

It’s more strategic than arbitrary when it comes to the efforts of the Drupal Community to promote D&I. There has been a year-on-year statistics aggregation happening to check how Drupal’s development is being sponsored.

In an in-depth analysis report of 2018-2019 edition, characteristics like gender diversity and geographic diversity were analysed. The data showed discernible gender imbalance in Drupal and underscored the need to continue fostering D&I in our community.

Source: Dries Buytaert's blog

When measuring geographic diversity, it was seen that Europe and North America continued to contribute more and more to Drupal but the contributions from Asia were declining year over year.

Source: Dries Buytaert's blog

Before exploring Drupal and its various efforts of creating a sense of belonging among its community members, let’s go across the pond and check out WordPress Community’s efforts.

With a clear hegemony over the market share, WordPress, as an open source CMS, is powering the most number websites around the world. (Drupal wins on the security front.) It’s the big players in the open source CMS market, like WordPress and Drupal, who need to show the way forward. WordPress has been working on making its community more diverse by driving some splendid initiatives. They have developed a workshop, for example, that trains women and other people from traditionally underrepresented groups in technology. They help them out to present sessions at conferences. The sole aim is to see more underrepresented groups as speakers and bring about a real change in the speaker roster for their annual conferences. WordPress has also been very supportive of its LGBTQ+ community and has been celebrating Pride Month every year. In short, WordPress is doing great work.

There’s a reason why we talked about WordPress (a competitor to Drupal). When it comes to the question of diversity and inclusion, open source communities work together to increase the number of participants and contributions from marginalised and underrepresented groups. Jill Binder, who has been at the forefront of major speaker diversity improvement programs within the WordPress community, helped the Drupal Diversity and Inclusion Contribution Team with its efforts.

DDI is an independent collective within the Drupal Community that champions a number of initiatives to foster a welcoming and inclusive culture everywhere Drupal exists - from events to online meetups to workplaces. Jill helped DDI organise a speaker diversity workshop in September 2019 to help people from underrepresented groups to prepare for submitting talks to global events.

To make sure prospective and existing community members are treated with respect, Drupal has instituted a community-wide code of conduct. Drupal’s Community Working Group’s documentation includes clear guidelines for:

  • Handling the conflict between you and another contributor
  • Escalating the conflicts to this Community Working Group if an issue feels unresolvable
  • Reporting the cases of harassment no matter if you are the victim or an observer of it

To make the Drupal project accessible to a diverse user base, it has a Core Accessibility Gate which has to be passed before any patch can be shipped.

With a majority of demographic surveys requiring users to conform to restrictive identity fields and alienating underrepresented groups, the Open Demographics Initiative wanted to develop forms that are more inclusive. In addition, it wanted to give people more authority over the data they think is right to be revealed. Therefore, the Drupal Association planned to implement Open Demographics Initiative’s recommendations on It collaborated with the Open Demographics team for adding the recommendations to the user registration process on

Dries Buytaert, the founder and project lead of Drupal, firmly believes that “everyone deserves the opportunity to contribute”. He encourages Drupalists to inspire and enable a new, diverse group of people to contribute to Drupal through Drupal Core Mentoring. He also advises leveraging the Drupal Apprentice Initiative by TalentPath that can help businesses in building a diverse talent pipeline through apprenticeships.

Major events like DrupalCons and DrupalCamps gather a range of citizens of the Drupal ecosystem to learn, share and collaborate together. The perspectives, vigour and diversity of experiences these participants share make these conferences invaluable. These Drupal events ensure that everyone, no matter who they are or where they are from, is invited to attend.

These Drupal events have made it a priority to include D&I as an important element to be tracked, measured and improved. For instance, DrupalCon Seattle 2019 saw an increase in the number of sessions submitted from underrepresented groups.

Source: DrupalCon Seattle 2019Final note

Open source community carries a great potential to transform society for the better. The more diverse and inclusive an open source community is, the stronger, vibrant and ambitious it is in its approaches. Drupal is making giant strides. A lot of positive signs have emerged in the recent past to make the Drupal project better.

Drupalists have to constantly work on making the Drupal ecosystem a place where people from all walks of life can participate and contribute their knowledge and skills.

OpenSense Labs embraces the principles of diversity and inclusion and ensures that it sets an example of an organisational culture eloquent of wonderful diversity at the workplace. Ping us at to explore the wonders of promoting and embracing D&I.

blog banner blog image Diversity Inclusion Diversity And Inclusion Drupal Blog Type Articles Is it a good read ? On

OpenSense Labs: Contributing to Drupal : Approaches and Perks

Planet Drupal - Sun, 2020/05/03 - 11:14am
Contributing to Drupal : Approaches and Perks Tuba Ayyubi Sun, 05/03/2020 - 15:37

This is part two of a two-part series on different ways and benefits of contributing to an open-source project. In the first part, we looked at the perks of contributing to an open-source project. In this article, we will explore Drupal project, one of the largest open-source projects with a thriving community, and the ways to get involved with it.

Don’t we all want to leave our mark on this world and to know that our life matters? I’m sure all of us want to leave a legacy that means something to people. By legacy, I mean putting a stamp on the future, and making a contribution to coming generations. 
In one of the scenes of Dead poets society, John Keating, who is an English teacher, discusses with his students about the meaning of life. During his lesson, he quoted from Walt Whitman’s poem, Oh Me Oh Life, as follows:

“Oh life! of the questions of these recurring, Of the endless trains of the faithless, of cities fill’d with the foolish. What good amid these, O me, O life? Answer: That you are here — that life exists and identity, That the powerful play goes on, and you may contribute a verse.”

The poem explains that life is like a play, in which anyone who has ever lived gets to contribute one verse. Later, Keating questions the students: “What will your verse be?” 

Your legacy will be that you contribute to the verse! 

Similarly, when you contribute to an open source project, you not only contribute to its growth but also to yours. You leave your mark in the project that you contribute to, inspiring hundreds of other contributors. Drupal allows its users to freely modify and integrate the work into their projects. It gives you ways to freely plan and exchange ideas with like-minded people in their community. It also offers immense opportunities to contribute and leave your mark. is home to thousands of contributors and it's where users find the projects and succor they need to make Drupal better everyday.

Why Drupal?

Now that we know how much value a contribution holds, let’s talk about why we should specifically choose Drupal over any other CMS.

Have you wondered about the one similarity between the websites of The Economist, NY Government, Arizona University and Mint? 

Well, these websites are a product of Drupal open source content management system (CMS) framework. 

PHP is an open source script code, which is freed from any licensing costs and a choice of developers from a few years. Drupal is written in PHP code, and, therefore, it saves money when it involves developing a web site using it.

Drupal is very flexible due to its modularity. Which means, you can easily extend it. It is capable of managing and creating a wide variety of content and this has proved to be one of its greatest selling points. Hence, Drupal enables a flexible design platform to create content rich websites for different markets like commerce or media. 

Another major reason to choose Drupal is its scalability. It’s used by NASA and Oxford University because it’s highly scalable and great at accommodating content growth. Even if you plan to deliver the best digital experience to your customers, it will all go in vain if your site is hit with a lot of traffic and goes down. No matter how much traffic you receive, Drupal can handle it.

In addition to being one of the best tools for creating websites, the greatest strength of Drupal is that it is one of the largest open source communities. The open source community proffers voluminous public documentation, chat and mailing lists, well-developed discussion board parallel to an air of affable online culture.

Drupal ensures that its users get rapid responses from a dedicated security team along with a large professional service provider ecosystem and Drupal's community, which is one of the largest developer communities in the world. The goals of the Drupal security team include resolving reported security issues, helping the infrastructure team to keep the infrastructure secure and providing documentation on securing your site. 

According to the Imperva’s report on The State Of Web Application Vulnerabilities in 2018, Drupal reported less number of security vulnerabilities in comparison to Wordpress. While Wordpress reported 542 security attacks in 2018, Drupal reported 107. 

Source: Imperva

Drupal also makes content authoring easy. The tools that Drupal provides makes it easier for the content creators to do their jobs. Drupal allows the creators to edit and write the content in place. Even if you are away from your laptops/PC’s, mobile editing comes to the rescue! You can very easily edit and approve content from any mobile device. Content revision is another tool that comes in handy to keep a track of all the changes made in the content and by whom.  

Drupal has made building multilingual websites faster and easier. Full translation of every part of the site is provided by four core modules in Drupal. Every part of the interface can be customised according to your language and needs. 

Drupal 8 comes with 94 different languages and they can be installed without any additional components. Also, the diversity in languages makes it hassle-free for the site administrators!

Doesn’t matter what device you’re using, Drupal helps in building responsive websites and provide a seamless content experience anytime, anywhere. 

In order to make Drupal content ready for delivery to site apps and free from presentation, Drupal lets you decouple the back and front-end where needed.

Frank Nagle, in his research at Harvard on the hidden benefits of giving back to open source, found that those who contributed to open source projects gain more productivity and knowledge of the software they use everyday. So, the more you contribute to Drupal, the more you learn about it.

Your contribution is visible to anyone around the world and can learn your name and admire your skills and also might be the one to help you land your dream job! 

Statistical outlook on the development of Drupal

Drupal, being an open-source project, does not have employees to deliver improvements and support. It depends on its varied community of individuals who work diligently to push the project forward by working on not just web development and user support but also many other contributions and interests that comprise, marketing, helping to review issues, organizing user groups and camps, maintaining documentation and speaking at events.

To start doing your bit, you can start by making an account on Follow the steps and you will be ready to start contributing in no time! Now, let’s look at some of the key stats related to the contributions made to the Drupal project.

The project pipeline

According to Drupal Business Survey 2019,  the Drupal project pipeline has shown significant growth or stayed the same in 2019 as compared to last 2018. 

The win rates of Drupal projects have also remained the same. The future of Drupal looks moored in the coming years, based on the response of 2019. 

The survey also stated that out of the total 118 businesses that, 111 contribute to Drupal and 7 don’t. 


In total, the Drupal community worked on 3,474 different projects in 2019 compared to 3,229 projects within the period of 2017-2018 which is an 8% year over year shoot up!


Every contribution made to Drupal is valued, whether they're code contributions, or non-product and community-oriented contributions such as organizing events, giving talks etc.

The credit system has proven to be more accurate in conceding types of Open Source contribution and is both pragmatic and important.

The initial ideas for giving credits were proposed in 2014 by Dries Buytaert, the project lead and founder of Drupal. He wanted to start a page on that would show which organization contributed to Drupal and the number of times the contributions were being made. Credit is a very powerful motivator for individuals and organizations. 

Later, in the spring of 2015, Drupal added the credit feature for people to credit their work. The credit feature has played a very important role in increasing the scalability and development of Drupal. 

According to Dries Buytaert's report on’s contribution data  for 2018-19,'s credit system received contributions from 8,513 different individuals and 1,137 different organizations which shows a significant growth in comparison to the report of 2017-18.

The majority of work is done by a relatively small number of contributors. These contributors put a large amount of time and effort into developing Drupal and its projects. One of these contributors includes Gaurav Kapoor who is a Drupal Architect at OpenSense Labs.

Volunteer contributions proved to be very important to Drupal, even though there are almost four times as many purely sponsored credits as compared to Purely Volunteer credits. 

The community captured more number of non-product contributions because of the large jump in volunteer credits. Even though the ‘sponsored credits’ grew more in number in comparison to ‘volunteer credits’, the relative number of ‘volunteer credits’ seemed to make a jump!

Source: Dries Buytaert's blogDiversity and inclusion

Supporting diversity and inclusion within Drupal is supremely important for the health and success of the project. Drupal welcomes all kinds of contributors ranging from programmers to designers and writers to mentors.

The Drupal diversity and inclusion team tries to recruit teams from places where the people from diverse backgrounds collaborate. Drupal contributors have become more diverse but need more efforts to be put in for widespread reach of D&I principles among its members. And when a team has diverse members, it makes better products for more people! 

According to the data contributions that were recorded in’s contribution data for 2018-2019, only 8% were made by contributors who do not identify as males which is a 1% increase in comparison to last year. 

One of the reasons that Drupal suffers from a lack of diversity is that not everyone has an equal amount of free time to make contributions. Research shows that women still do more unpaid work in comparison to men, for example, household chores, child care etc. This makes it difficult for women to contribute on an unpaid basis. 

When geographic diversity was measured, it was observed that individual contributors were from six continents and 114 countries:

Contributions from Europe and North America have increased. Asia, South America and Africa together account for 6.3 billion out of 7.5 billion people in the world and hence, pose great opportunities for Drupal. 

Different ways to contribute to Drupal Coding Is The New Literacy

If you are the one who likes to fix issues, developing is for you! So many coders believe that coding should be open. Developers’ contributions can be in the form of both contributed modules/themes and patches to core. When you find a bug in the project, you'd want to have a look on the source and patch it yourself. 

When you contribute to an open source project like Drupal as a developer, you ensure that Drupal can do what the contributor needs to do in his next project.

The Drupal core issue queue contains a substantial amount of unresolved issues, and demands the assistance of more volunteers to address these issues deftly. 

Mentoring: Effective Way To Contribute

Every contribution holds value and mentoring is the most effective way to contribute. When you mentor as a contributor, you not only help the individual but also the entire Drupal community. 

Drupal core mentors inspire, enable, and encourage new core contributors by working on the core tools, process, and community for a hassle-free experience for the new contributors. 

And not just that, the gratitude you earn by mentoring someone is beyond everything! 

Interacting With The Community

When you join Drupal as a new contributor, you would like to interact with someone who shares the same interest as yours, someone who has experience in contribution. Drupal has a community of thousands of passionate individuals around the world. It also offers some tools that are used to keep in touch with them. There are support forums on where you can put your queries and get your doubts cleared by other members of the forum. Find like-minded individuals who are working on the same tasks as yours on Drupal Groups. It is an online space where hundreds of groups come together to plan projects and work on them and also to organise local meetups or discuss anything for that matter. The Drupal community is also very active on IRC and Slack.

Running Drupal Tests

There is so much more in open source than just coding. Testing is one of the ways to contribute and there are so many things to test for and so many ways to help in Drupal (like reviewing patches).. For helping Drupal with testing, you need to have a keen eye for detail or just a knack for breaking things. Good testing directly contributes to the stability of the platform and is a preeminent way for individuals of all backgrounds to make a valuable contribution to the project.

Translating Drupal to Your Language

People get involved in Drupal from around the world. Drupal supports many languages, and there is always a need for contributions in translation. If you are the one who knows multiple languages, you can contribute by helping to maintain Drupal core or contribute to module translations. All the translations are managed on the translation server. You can start contributing by logging in with your Drupal account and join the relevant language team. 

Designing and Usability

If you are into design and graphics, you can help with a lot of projects who need work in their logo designs, icons and other graphics that are visually appealing. Being a designer, you first need to find yourself a project whose goals you understand and relate to. A designer needs to focus and make sure that they understand users' needs. There is Drupal’s usability group where you can create, discuss and plan great Drupal UX designs

Making A Donation

There are so many people who want to contribute but don't have the time. So, if you want to say "thank you" to the folks who have put hard work into making Drupal what it is and ensure that Drupal's infrastructure stays healthy and strong, you can consider a monetary donation! Donations are also a part of the contributions that take Drupal forward in many ways. During the uncertain times, like the current Covid-19 pandemic, Dries Buytaert has pledged $100,000 in individual contributions to the Drupal Association. After a week of taking this pledge, 29 organizations of the Drupal community pledged another $100,000. Now, for every $1 you donate, Drupal gets $3. To donate to #DrupalCares visit the donation page of Drupal association.

Marketing Drupal

Marketers love the various marketing tools as they help them get better analytics and also effectively streamline their work benefits. Drupal provides easy integration with marketing automation tools which is a plus for marketers! Marketers can freely produce convincing and more powerful campaigns in their native languages. Drupal marketing group for the branding and marketing committee is open for all the marketers out there!

Organizing An Event

You can do your bit for Drupal by organizing events in your area. There are many types of Drupal events, starting from the colossal and comprehensive DrupalCons that are organized by the Drupal Association, to smaller local DrupalCamps and local Drupal Group meetings. DrupalCon unifies experts from around the world who create progressive digital experiences that include keynotes & sessions for leaders, developers, and end-users, summits & training industry-focused to elevate your skills. Drupical displays all the Drupal events and you can also check out local Drupal groups and stay updated on what events are taking place.


There are many benefits to contribution: from individuals gaining knowledge and expertise, to organisations building stronger more productive teams, to the broader open source community as a full. Drupal is continuously growing in government, higher education and the enterprise state.

Even the smallest of contributions count on Drupal. The feeling when you see your name appear on a project is beyond words. 
So, are you ready to leave your legacy? Ping us at to be a part of the growing number of Drupal contributors.

blog banner blog image Drupal Drupal 8 Drupal Contribution Open Source Open Source Community Open Source Contribution Blog Type Articles Is it a good read ? On

Jeff Geerling's Blog: 'Drupal 7 to 8 Migration' presentation from CMS Philly

Planet Drupal - Fri, 2020/05/01 - 4:55pm

I just finished delivering my CMS Philly How I am migrating from Drupal 7 to Drupal 8 presentation, which summarizes the first 100 days (1-2 hours per week) migrating this website from D7 to D8.

The slides are available from SlideShare:


Cheeky Monkey Media: Keep your customers! Drupal + eCommerce + You

Planet Drupal - Fri, 2020/05/01 - 11:30am
Keep your customers! Drupal + eCommerce + You treena Fri, 05/01/2020 - 09:30

Snapshot: eCommerce + Drupal

Every business can benefit from e-Commerce. As we are learning to accommodate the changing landscape of our businesses and how we connect with our customers, e-Commerce is a great way to start. Similar to our previous blog, ‘Let WordPress Woo You’, we have put together some important and essential information on a few Drupal commerce modules to help get you started.

Embracing the online experience will only benefit your business. By not leveraging the growing need and demand for this currently, very essential service, you may miss out on more than 50% of potential revenue.


Is Drupal the Right Match?

Drupal is not for every business and at Cheeky Monkey Media, we understand that. As a partnered agency with our clients, we work with you to make sure that the Content Management System (CMS) you are choosing is the right fit. 

Categories: Drupal - Static - Elasticsearch

Planet Drupal - Fri, 2020/05/01 - 2:00am

Static sites are the best. They are the most secure and fastest of sites. They are perfect for anonymous users, where you would want content editors to have a secure and hidden backend where they can administer the content - but have the content served elsewhere.

Having search on top of that can be a bit more challenging. There are different solutions for having a local search like lunr.js (and a Drupal module to integrate with it), but it’s quite limited. That is, it will create a local index where you could have some JS to look into it, but that is no match to full-blown search engines such as Elasticsearch.

In this blog post I will share a demo website we’ve built as a proof of concept for a much larger site. I’m not going to dwell on the advantages of static sites, instead I’m going to share the high-level concepts that guided us, along with some technical tips. While the specific details have nothing to do with Drupal - our client’s site is in Drupal, so it was convenient to build it around it. But you can really do it with any language.

Here is the demo repo, and that’s how it looks:


With static sites, deploying and reverting deploys is easy. It’s not much more than git push or git revert if something went wrong. But what about search? As we’ve mentioned, we want to keep using Elasticsearch for things like aggregations (a.k.a. facets), spell checks, etc. But how can we support, for example, a rollback in the deploy - making sure that search is always searching only through the content that exists in the deployed static site. Thankfully, Elasticsearch supports index cloning, so we could have something like this: