TEN7 Blog's Drupal Posts: Case Study: Animal Humane Society

Planet Drupal - 7 August 2019 - 8:34am
Website Refresh: The Only Thing Missing is a Purring Sound

The Animal Humane Society (AHS), in Minneapolis, Minnesota is the leading animal welfare organization in the Upper Midwest, helping 25,000 dogs, cats and critters in need find loving homes each year, while providing a vast array of services to the community, from low-cost spay and neuter services to dog training to rescuing animals from neglectful and abusive situations. 

Categories: Drupal

Discoverability - A 'Hot or Not?' Genre Guide - by Simon Carless Blogs - 7 August 2019 - 8:32am
Let’s say you’ve put $20,000 into your game, or $200,000 dollars, or $2 million dollars. And you still want your money - or your investors’ money - back. You should probably look at how crowded that genre/game feature is.
Categories: Game Theory & Design

Commerce Slimpay

New Drupal Modules - 7 August 2019 - 8:05am

This project integrates Slimpay into the Drupal Commerce payment and checkout systems using hapiclient-php library.

It currently supports electronic signature with mandate generation :

  • paymentScheme : SEPA.DIRECT_DEBIT.CORE
  • Iframe mode : Embedded
  • Single Slimpay entity account
Categories: Drupal

Learning Asymmetrical Game Design From JoJo's Bizarre Adventure - by Josh Bycer Blogs - 7 August 2019 - 7:37am
Asymmetrical design can be tough to figure out for any game genre, but today's post looks at lessons you can take from a very unexpected source.
Categories: Game Theory & Design

Drupal Association blog: Being an At-Large Board Member for the Drupal Association - What Does That Mean?

Planet Drupal - 7 August 2019 - 7:30am

We now know the list of candidates that form the election for the next At-Large Drupal Association Board member. Voting is now open until 16 August, 2019 and everyone who has used their account in the last year is eligible to vote. You do not need to have a Drupal Association Membership.

Cast your vote

Ryan speaking to Drupal Camp London about prioritizing giving back in Drupal. - photo Paul Johnson

To help everyone understand how an At-Large Director serves the Drupal community, we asked Ryan Szrama, currently serving as one of two community-elected board members, to share about his experience in the role.

I was elected to the board in 2017. While it would be my first time serving on a non-profit board, my personal and professional goals were closely aligned with the mission of the Drupal Association. I was happy to serve in whatever capacity would best advance that mission: uniting a global open source community to build, secure, and promote Drupal.

You'd been a contributor to the project for over 10 years by that point. How do you think your experience in the community shaped your time on the board?

Indeed! I'd been developing Ubercart since 2006 and Drupal Commerce since 2010. I had more Drupal development experience than most folks, helping me understand just how important the Association's leadership of DrupalCon and are to our development efforts. The year before joining the board, I also transitioned into a business leadership role, acquiring Commerce Guys in its split from This exposed me to a whole new set of concerns related to financial management, marketing, sponsorship, etc. that Drupal company owners encounter in their business with the Association.

While the Association is led day-to-day by an Executive Director (Megan Sanicki when I joined, now Heather Rocker), the board is responsible for setting the strategic vision of the organization and managing its affairs through various committees. Most of our board meetings involve reports on things like finances, business performance, staff and recruitment, etc., but we often have strategic topics to discuss - especially at our two annual retreats. My experience as a long-time contributor turned business owner gave me confidence to speak to such topics as improvements, DrupalCon programming, community governance, and more.

What's the Association up to lately? Are there any key initiatives you expect an incoming board member may be able to join?

There's so much going on that it's hard to know where to focus my answer!

The Drupal Association has seen a lot of changes recently impact the business of the business itself. We welcomed a new Executive Director and are beginning to see the impact of her leadership. We've revised our financial reporting, allowing us to more clearly monitor our financial health, and we've streamlined sales, immediately helping us sell sponsorships for DrupalCon Minneapolis more effectively. Additionally, we've launched and continue to develop the Drupal Steward product in partnership with the Security team. This is part of a very important initiative to diversify our revenue for the sake of the Drupal Association's long term health.

From a community growth standpoint, we continue to follow-up on various governance related tasks and initiatives. We're working with Drupal leaders around the world to help launch and support more local Drupal associations. We continue to refine the DrupalCon program and planning process to attract a more diverse audience and create opportunities for a more diverse group of contributors and speakers. The retooling of to integrate GitLab for project is moving forward, lowering the barrier to entry for new project contributors.

Any one of these activities would benefit from additional consideration, insight, and participation by our new board member.

What’s the best part about being on the board?

One of the best things for me is getting to see firsthand just how much the staff at the Drupal Association do to help the community, maintaining the infrastructure that enables our daily, international collaboration. I've long known folks on the development team like Neil Drumm, but I didn't realize just how much time he and other team members have devoted to empowering the entire community until I got a closer look.

I'm also continually inspired by the other board members. Our interactions have helped expand my understanding of Drupal's impact and potential. I've obviously been a fan of the project for many years now, but my time on the board has given me even greater motivation to keep contributing and ensure more people can for years to come.

Thank you, Ryan! Hopefully folks reading this are similarly inspired to keep contributing to Drupal. Our current election is one way everyone can play a part, so I'd encourage you to head over to the nominations page, read up on the motivations and interests of our nominees, ask questions while you can, and…

Cast your vote!

Categories: Drupal

Avoiding Helplessness – The Worst Feeling in Games - by Caleb Compton Blogs - 7 August 2019 - 7:29am
Nobody likes feeling powerless, especially in video games. If your game makes players feel this way they will often simply put it down and play something else instead. This article looks at some common causes, and potential solutions, to this problem.
Categories: Game Theory & Design

The Psychological Perspective on Game Design - by Starloop Studios Blogs - 7 August 2019 - 7:28am
Psychology plays an important part in understanding good game design. When looking to understand user psychology to design better product experiences, one of the richest sources of knowledge exists within the game design world.
Categories: Game Theory & Design

The AI of Hitman (2016) - by Tommy Thompson Blogs - 7 August 2019 - 7:27am
One of the most complex simulations in AAA games, IO Interactive's Hitman titles are laced with AI systems that helped bring their fictional worlds to life.
Categories: Game Theory & Design

Embed view block

New Drupal Modules - 7 August 2019 - 6:51am

It is not support pass argument to views block in Drupal 8. This module make it possible.

This module allow you embed a view through a block. It allow you pass some argument to the view.
It is very usefull when use Layout builder module.

Categories: Drupal

Drudesk: Drupal 9 is coming: your website needs a plan

Planet Drupal - 7 August 2019 - 5:21am

Lately, you can often hear that Drupal 9 is coming. Drupal 8.7 was released in May and Drupal 8.8 is planned for December 2019. At the same time, D9 is becoming more and more hotly discussed topic in the Drupal world. 

Categories: Drupal

inline image token

New Drupal Modules - 7 August 2019 - 2:37am

Add token support for inline images and files upload directory.

After install this module, you could set the inline image upload directory from




There is patch to Drupal core:

Categories: Drupal

HTTP Status Dogs

New Drupal Modules - 7 August 2019 - 2:07am

This Drupal 8 module will replace all your error responses with HTTP Status Dogs!

This is a Drupal 8 module that replaces all HTML error responses (like 403 and 404 pages, etc.) with images from HTTP Status Dogs. I expect it to become more popular than Views.

Categories: Drupal

Troy’s Crock Pot: A Quest Will Do Just Knightly

Gnome Stew - 7 August 2019 - 1:02am

Attribution — Qsimple, Flickr, This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

I confess: I’ve often thought that in both professional adventure design and for GMs bringing a game to their home table — too much hand-wringing and navel gazing has accompanied the presentation of “adventure hooks.”

Why is your character going on an adventure? It is a responsibility that, strangely,  both published adventures and most rule sets hoist upon the GM. 

Why is it up to the GM to dangle an enticement in front of the players? Why must the GM be the one who concocts the motivations that will snare the players’ interest?

Provide the adventure? Yes, the GM does that. Provide the “hook”? Uh-uh.

I’ve heard that “adventure hooks” are akin to a film or stage director providing a motivation to an actor for a given scene.

In my experience, however, most directors provide but an outline, sketching in broadest terms their perspective on a given scene. But they still rely on the cast members themselves to develop their assigned character. A studious actor usually finds their own motivation, rather than relying on someone else to interpret things. 

Should such a task befall a GM, then I say, let that hook be a quest. Now and forever, from this point forward. If any player comes to the table needing a “hook”, then I say: make it a quest.

“Ah, Lady Aethelflaed, no one but you and your friends are suited for this task. Please, go forth, and see that it is done. For the glory of our kingdom and our god.”

If a player can’t get jazzed about embarking on a quest — then why on earth have we gathered at this table, character sheets in hand?  Our time might be better spent playing Parcheesi. 

Come ready to play. Be willing to let imagination take hold. Be the hero — do the deed — return with the treasure.

By all means, feel free to negotiate with the quest giver. Suggest a quest of your own to the GM. Even better. There comes a time when players are ready to move on from their quest-giver, especially if it is a king. (Kings expect to be obeyed, and admittedly, the imbalance of that interpersonal dynamic may wear thin after a while.)  That’s understood. And such initiative should be rewarded.

But none of these players need “adventure hooks.” They are engaged. They are part of the conversation. 

Now, I get it. Novice players may need to be instructed. But honestly, most new players don’t need help with “adventure hooks.”  They probably need help deciphering their character sheet or understanding when it is “their turn.” But are they lacking zeal for adventure?  Hardly.  

So, go forth! And don’t forget to close the dungeon door on your way out. 

Categories: Game Theory & Design

Responsive Image Alternatives

New Drupal Modules - 6 August 2019 - 10:42pm

Have you ever had a use case when working with images or responsive media that you wanted to upload an image for Desktop and maybe an alternative image for Mobile (a portrait size for example)
Sure you want to use Responsive Image module and scale/crop the images to each breakpoint, but what if you need to crop your Mobile image differently than your Desktop (choose a different focal point).

Categories: Drupal

Tint connector

New Drupal Modules - 6 August 2019 - 9:33pm

TINT connector
The TINT module integrates the TINT social media feed service with Drupal.

TINT is a service that integrates all of your brand's social media posts in
one beautiful stream, perfect for embedding on your website.

Install & set up the TINT Connector Drupal module, as described below.


1) Download the module and place it with other contributed modules
(e.g. modules/contrib).

2) Enable the Tint connector module on the Modules list page.

Categories: Drupal

Agaric Collective: Tips for writing Drupal migrations and understanding their workflow

Planet Drupal - 6 August 2019 - 7:00pm

We have presented several examples as part of this migration blog post series. They started very simple and have been increasing in complexity. Until now, we have been rather optimistic. Get the sample code, install any module dependency, enable the module that defines the migration, and execute it assuming everything works on the first try. But Drupal migrations often involve a bit of trial and error. At the very least, it is an iterative process. Today we are going to talk about what happens after import and rollback operations, how to recover from a failed migration, and some tips for writing definition files.

Importing and rolling back migrations

When working on a migration project, it is common to write many migration definition files. Even if you were to have only one, it is very likely that your destination will require many field mappings. Running an import operation to get the data into Drupal is the first step. With so many moving parts, it is easy not to get the expected results on the first try. When that happens, you can run a rollback operation. This instructs the system to revert anything that was introduced when then migration was initially imported. After rolling back, you can make changes to the migration definition file and rebuild Drupal’s cache for the system to pick up your changes. Finally, you can do another import operation. Repeat this process until you get the results you expect. The following code snippet shows a basic Drupal migration workflow:

# 1) Run the migration. $ drush migrate:import udm_subfields # 2) Rollback migration because the expected results were not obtained. $ drush migrate:rollback udm_subfields # 3) Change the migration definition file. # 4) Rebuild caches for changes to be picked up. $ drush cache:rebuild # 5) Run the migration again $ drush migrate:import udm_subfields

The example above assumes you are using Drush to run the migration commands. Specifically, the commands provided by Migrate Run or Migrate Tools. You pick one or the other, but not both as the commands provided for two modules are the same. If you were to have both enabled, they will conflict with each other and fail.
Another thing to note is that the example uses Drush 9. There were major refactorings between versions 8 and 9 which included changes to the name of the commands. Finally, udm_subfields is the id of the migration to run. You can find the full code in this article.

Tip: You can use Drush command aliases to write shorter commands. Type drush [command-name] --help for a list of the available aliases.

Technical note: To pick up changes to the definition file, you need to rebuild Drupal’s caches. This is the procedure to follow when creating the YAML files using Migrate API core features and placing them under the migrations directory. It is also possible to define migrations as configuration entities using the Migrate Plus module. In those cases, the YAML files follow a different naming convention and are placed under the config/install directory. For picking up changes, in this case, you need to sync the YAML definition using configuration management workflows. This will be covered in a future entry.

Stopping and resetting migrations

Sometimes, you do not get the expected results due to an oversight in setting a value. On other occasions, fatal PHP errors can occur when running the migration. The Migrate API might not be able to recover from such errors. For example, using a non-existent PHP function with the callback plugin. Give it a try by modifying the example in this article. When these errors happen, the migration is left in a state where no import or rollback operations could be performed.

You can check the state of any migration by running the drush migrate:status command. Ideally, you want them in Idle state. When something fails during import or rollback, you would get the Importing or Rolling back states. To get the migration back to Idle, you stop the migration and reset its status. The following snippet shows how to do it:

# 1) Run the migration. $ drush migrate:import udm_process_intro # 2) Some non recoverable error occurs. Check the status of the migration. $ drush migrate:status udm_process_intro # 3) Stop the migration. $ drush migrate:stop udm_process_intro # 4) Reset the status to idle. $ drush migrate:reset-status udm_process_intro # 5) Rebuild caches for changes to be picked up. $ drush cache:rebuild # 6) Rollback migration because the expexted results were not obtained. $ drush migrate:rollback udm_process_intro # 7) Change the migration definition file. # 8) Rebuild caches for changes to be picked up. $ drush cache:rebuild # 9) Run the migration again. $ drush migrate:import udm_process_intro

Tip: The errors thrown by the Migrate API might not provide enough information to determine what went wrong. An excellent way to familiarize yourselves with the possible errors is by intentionally braking working migrations. In the example repository of this series, there are many migrations you can modify. Try anything that comes to mind: not leaving a space after a colon (:) in a key-value assignment; not using proper indentation; using wrong subfield names; using invalid values in property assignments; etc. You might be surprised by how Migrate API deals with such errors. Also, note that many other Drupal APIs are involved. For example, you might get a YAML file parse error, or an Entity API save error. When you have seen an error before, it is usually faster to identify the cause and fix it in the future.

What happens when you rollback a Drupal migration?

In an ideal scenario, when a migration is rolled back, it cleans after itself. That means, it removes any entity that was created during the import operation: nodes, taxonomy terms, files, etc. Unfortunately, that is not always the case. It is very important to understand this when planning and executing migrations. For example, you might not want to leave taxonomy terms or files that are no longer in use. Whether any dependent entity is removed or not has to do with how plugins or entities work.

For example, when using the file_import or image_import plugins provided by Migrate File, the created files and images are not removed from the system upon rollback. When using the entity_generate plugin from Migrate Plus, the create entity also remains in the system after a rollback operation.

In the next blog post, we are going to start talking about migration dependencies. What happens with dependent migrations (e.g., files and paragraphs) when the migration for host entity (e.g., node) is rolled back? In this case, the Migrate API will perform an entity delete operation on the node. When this happens, referenced files are kept in the system, but paragraphs are automatically deleted. For the curious, this behavior for paragraphs is actually determined by its module dependency: Entity Reference Revisions. We will talk more about paragraphs migrations in future blog posts.

The moral of the story is that the behavior migration system might be affected by other Drupal APIs. And in the case of rollback operations, make sure to read the documentation or test manually to find out when migrations clean after themselves and when they do not.

Note: The focus of this section was content entity migrations. The general idea can be applied to configuration entities or any custom target of the ETL process.

Re-import or update migrations

We just mentioned that Migrate API issues an entity delete action when rolling back a migration. This has another important side effect. Entity IDs (nid, uid, tid, fid, etc.) are going to change every time you rollback an import again. Depending on auto generated IDs is generally not a good idea. But keep it in mind in case your workflow might be affected. For example, if you are running migrations in a content staging environment, references to the migrated entities can break if their IDs change. Also, if you were to manually update the migrated entities to clean up edge cases, those changes would be lost if you rollback and import again. Finally, keep in mind test data might remain in the system, as described in the previous section, which could find its way to production environments.

An alternative to rolling back a migration is to not execute this operation at all. Instead, you run an import operation again using the update flag. This tells the system that in addition to migrating unprocessed items from the source, you also want to update items that were previously imported using their current values. To do this, the Migrate API relies on source identifiers and map tables. You might want to consider this option when your source changes overtime, when you have a large number of records to import, or when you want to execute the same migration many times on a schedule.

Note: On import operations, the Migrate API issues an entity save action.

Tips for writing Drupal migrations

When working on migration projects, you might end up with many migration definition files. They can set dependencies on each other. Each file might contain a significant number of field mappings. There are many things you can do to make Drupal migrations more straightforward. For example, practicing with different migration scenarios and studying working examples. As a reference to help you in the process of migrating into Drupal, consider these tips:

  • Start from an existing migration. Look for an example online that does something close to what you need and modify it to your requirements.
  • Pay close attention to the syntax of the YAML file. An extraneous space or wrong indentation level can break the whole migration.
  • Read the documentation to know which source, process, and destination plugins are available. One might exist already that does exactly what you need.
  • Make sure to read the documentation for the specific plugins you are using. Many times a plugin offer optional configurations. Understand the tools at your disposal and find creative ways to combine them.
  • Look for contributed modules that might offer more plugins or upgrade paths from previous versions of Drupal. The Migrate ecosystem is vibrant, and lots of people are contributing to it.
  • When writing the migration pipeline, map one field at a time. Problems are easier to isolate if there is only one thing that could break at a time.
  • When mapping a field, work on one subfield at a time if possible. Some field types like images and addresses offer many subfields. Again, try to isolate errors by introducing individual changes each time.
  • Commit to your code repository any and every change that produces right results. That way, you can go back in time and recover a partially working migration.
  • Learn about debugging migrations. We will talk about this topic in a future blog post.
  • See help from the community. Migrate maintainers and enthusiasts are very active and responsive in the #migrate channel of Drupal slack.
  • If you feel stuck, take a break from the computer and come back to it later. Resting can do wonders in finding solutions to hard problems.

What did you learn in today’s blog post? Did you know what happens upon importing and rolling back a migration? Did you know that in some cases, data might remain in the system even after rollback operations? Do you have a use case for running migrations with the update flag? Do you have any other advice on writing migrations? Please share your answers in the comments. Also, I would be grateful if you shared this blog post with your colleagues.

This blog post series, cross-posted at as well as here on, is made possible thanks to these generous sponsors. Contact Understand Drupal if your organization would like to support this documentation project, whether the migration series or other topics.

Read more and discuss at

Categories: Drupal

GotoWebinar Sync

New Drupal Modules - 6 August 2019 - 5:09pm

This module integrates with the GotoWebinar API to sync webinars to your Drupal website.

Content Type setup

You will need a content type that will be used to sync the webinar data from GotoWebinar to your Drupal site. This content type will need some required fields.

Categories: Drupal

Take-Two CEO Strauss Zelnick 'feels good' about Google Stadia's release

Social/Online Games - Gamasutra - 6 August 2019 - 2:16pm

Take-Two boss Strauss Zelnick is optimistic about Stadia, though he notes that how the platform will fare with players remains to be seen. ...

Categories: Game Theory & Design

Hook 42: Down the Headless Rabbit Hole At Decoupled Days

Planet Drupal - 6 August 2019 - 12:49pm
Down the Headless Rabbit Hole At Decoupled Days Lindsey Gemmill Tue, 08/06/2019 - 19:49
Categories: Drupal

Psyonix is removing paid, randomized loot boxes from Rocket League this year

Social/Online Games - Gamasutra - 6 August 2019 - 12:27pm

Exactly what form that change will take is up in the air, but Psyonix explains that the system will somewhat resemble one implemented by Epic Games in Fortnite Save the World earlier this year. ...

Categories: Game Theory & Design


Subscribe to As If Productions aggregator