Newsfeeds

Dblog Search

New Drupal Modules - 16 November 2017 - 4:48am

Allows text search in Dblog messages. Just enable and use, no need to install or configure additional third party components.

Requirements

Core DBlog module enabled.

Usage

Once the module is activated, you can use text search in standard dblog path (admin/reports/dblog).

Module searchs both description and variables of Dblog messages.

Categories: Drupal

Group control for forums

New Drupal Modules - 16 November 2017 - 4:36am

Enables group functionality for the forum module.

This is work in progress.

Categories: Drupal

Filter Configurations

New Drupal Modules - 16 November 2017 - 3:09am

Adds filtering capability to "admin/config" page.

Description:

The admin/config page doesn't have any option to search for specific configurations.

This module provides a search input in this page so that users can search/filter specific configurations by typing in the input box.

Categories: Drupal

GDPR Consent

New Drupal Modules - 16 November 2017 - 2:01am

Module that collects GDPR Data processing consent from logged-in users using the site.

Acquisition can be forced or recommended based on options selected.

Partially forked from Legal module.

Better description incoming.

Categories: Drupal

Mud and Water of Spintires:MudRunner - by Pavel Zagrebelnyy

Gamasutra.com Blogs - 16 November 2017 - 1:06am
Here we present technical details behind rendering of Mud and Water in Spintires:MudRunner, a driving simulation game, developed by Saber Interactive and published by Focus Home Interactive on Xbox One, PlayStation 4 and PC (Steam).
Categories: Game Theory & Design

Dropsolid: ngrok: testing payment gateways in Drupal commerce

Planet Drupal - 16 November 2017 - 12:15am
16 Nov Testing payment gateways in Drupal commerce: ngrok to the rescue Marek Drupal 8 Tech

Building commerce websites always means building integrations. Every time we work on project that is aimed at selling something (products, subscriptions, paid access, etc.), we have to choose a payment provider that will take care of our transactions.

Almost every payment provider out there gives us the ability to test their services using some sort of testing or sandbox environment. This is a nice chance to fully test the checkout funnel and avoid stressful situations when deploying the application to a live environment.

While setting up commerce checkout flow locally, you’ll probably run into one (or all) of the following hiccups:

  • Issues with setting up a payments provider account,
  • No ability to parse incoming webhooks,
  • Problems with redirecting your customers back to the website.


The reason is simple: you’re hidden behind your NAT/firewall, so there is no way to reach your website from any remote server. As a workaround, you could probably create a manual payment method (for example bank transfer) and use this to browse all steps of your checkout flow. But you'll have to admit: this won't solve your main problem. Alternatively, you could clone your project to a remote environment, but is this always necessary? There has to be a better way to save time and keep working locally whilst keeping the full ability to test and debug remote services. Let’s have a closer look at how to wrap it all together with Drupal 8, Commerce 2 and a small tool called ngrok. In this example, I will be using the Mollie payments platform - scroll down to find out more! (Additional info about how to use Mollie and Drupal together in this post)

 

Download and set up ngrok

Ngrok is a very simple command line tool that allows you to expose a local web server to the internet. It takes only a few moments to set it up and its variety of configuration options is quite impressive (see the corresponding documentation).
 

Create ngrok account and download library files

Three easy steps:

  1. Simply visit ngrok.io and create a new account: https://dashboard.ngrok.com/user/signup
  2. Download and unpack the ngrok binary: https://ngrok.com/download
  3. Install your authtoken. Your personal account comes with its own token, which is available for reference via this link: https://dashboard.ngrok.com/get-started

When you get your token, locate the ngrok file and run the following command:

# ./ngrok {command} {param_is_a_token_conaining_lot_of_strange_chars_like_3Adacx$$321!} ./ngrok authtoken 5RpgRe8UA4qFWXtZoZb5P_3KeqMMsh6BjYMtWnJpgJt
Tune up your virtual host

Tune up the configuration of virtual host with the website you want to test by adding the server alias. For example, your apache2 vhost, with URL http://ngork.local, should have a *.ngrok.io alias, so you conf file should start like this:

ServerName ngrok.local ServerAlias *.ngrok.local *.ngrok.io Run ngrok

The very basic usage to start a simple HTTP tunnel goes like this:

# ./ngrok {command} {local_hostname}:{port} ./ngrok http ngrok.local:80
  • http command says start an HTTP tunnel
  • local_hostname argument says forward tunnel to this hostname
  • and port argument says listen on that port

After running the command, you will see ngrok up and running:

That should do the trick for now: you should be able to visit your page at URL provided by ngrok. The unfortunate thing about a free account is that every time you start a new tunnel, it creates a new URL. You can visit the ngrok web interface at http://127.0.0.1:4040 to check the status, incoming requests, connections, headers and much more.

 

Set up Commerce 2 / Drupal 8

Our test project needs a basic setup, with the following commerce 2.x modules turned on:

  • Commerce Checkout
  • Commerce Order
  • Commerce Payment
  • Commerce Price
  • Commerce Product
  • Commerce Store
  • Commerce Cart - not really required, but helpful to easily jump through the UI
  • Mollie Payment

Configure basics - set up you default store, product type etc. at the end your checkout flow will contain following panes:

 

Set up a Mollie payment account

Log in to the Mollie dashboard and jump to the Website profiles page, where you can create a profile or edit an existing one. Under contact information, provide the URL that is generated by your running ngrok process. Mollie will use it to send you all the webhooks:

Next, expand the Live end Test API keys pane to find the credentials that you need to configure the payment method in commerce. Install the Mollie Payment module and navigate to the Payment UI ( /admin/commerce/config/payment-gateways). Next, fill out the new payment method form with all the required details:

 

Test it...

That’s it! You can start with testing your payments, add any product to your cart and run through the checkout. After reviewing your order, you will automatically get redirected to the payment page, select any method and submit your transaction. For payment providers where you can define a full return URL and not only the domain - which is not the case with Mollie -, you can add XDEBUG_SESSION_START={YOUR-IDEKEY}, and start a debug session, as if you were working  on a regular local environment.

With ngrok up and running and your Mollie profile properly configured, you will get back to your local website. In the following few minutes, your local project should be receiving a bunch of webhooks. Whilst you wait for them coming in, you can preview your transactions in the Dashboard.

 

Key takeaways

Ngrok is definitely a great time-saver. It provides a lot of useful features and helps to resolve a variety of problems that you’ll often encounter during local development. In this article, I just demonstrated one example of its usage. It’s good to keep in mind that ngrok allows you to do much more:

  • Demoing - with ngrok running on your machine, you can share your local project with your teammates and clients
  • Insecure/mixed content check - with ngrok you can access your project via https:// which allows you to check insecure content warnings (no SSL needed!)   
  • Analysis - using the dashboard that is located at http://localhost:4040, you can inspect all requests/responses
  • Secure connection - you can secure your tunnel with a password  
  • Receiving webhooks - finally, you’re able to receive all webhooks and respond to them
  • Developing headless Drupal applications - while working locally you can expose your endpoints to your teammates ( check our article about Drupal 8 and React )

 

Drupal 8 is a really powerful and API-ready framework. It works very well together with lots of external services. Considering this, in addition to the never-ending technological progress, this flexible situation forces us to leave our self-created comfort zone and “I only use one tool” mentality. There are plenty of options to learn more about and use external tools, APIs and services. This provides a lot of flexibility, but, on the other hand, also requires some adaptation, has a learning curve and requires focus at every single stage of product development.

As developers - who don’t like mistakes, especially when payment integrations and real money are involved - we can’t afford to miss a beat here. Checkout funnels are leads that convert into real sales. They provide crucial business value to our clients and have to be extremely reliable; every payment needs to come through successfully. Testing your payment services through ngrok will allow you to stay in close control of your project, reduce stress and track down any issues before you spin up your application. It doesn’t take much time to set up, but the payoff is tremendous.

 

 

As always, you can discover more Drupal secrets on our blog. Automatic quarterly updates? Subscribe to our newsletter!

Categories: Drupal

Character Class: Looking for Group

RPGNet - 16 November 2017 - 12:00am
Gaming with people you know.
Categories: Game Theory & Design

Brussels Calendar

New Drupal Modules - 15 November 2017 - 11:42pm

Based on Event Calendar Widget of Paul Navasard (https://codepen.io/peanav/full/ulkof).

Ones installed, add a Calendar Block and edit settings corresponding your requirements.

Functionalities:

  • Gets data from a view.
  • Can use javascript function as trigger or click to navigate to the node.
  • Only supports timestamp (created, etc.). Could be improved.

"No events" information is using the translation engine ("t()").

What could be added:

Categories: Drupal

Designing ‘Organic’ Difficulty: A Cognitive Neuropsychology Approach (1: Introduction)! - by Ashton Philip Kehnscherper

Gamasutra.com Blogs - 15 November 2017 - 10:27pm
Current difficulty systems often focus on fixed metric manipulation to appease players when it comes to difficulty, but through the use of a different cognitive neuropsychology lens, can a more 'organic' method to game design and difficulty be produced?
Categories: Game Theory & Design

Paykings

New Drupal Modules - 15 November 2017 - 7:43pm
Categories: Drupal

PreviousNext: Reusable style guide components using field formatters and twig embed

Planet Drupal - 15 November 2017 - 6:32pm
Share:

At PNX, style guide driven development is our bag. It’s what we love: building a living document that provides awesome reference for all our front end components. And Drupal 8, with its use of Twig, complements this methodology perfectly. The ability to create a single component, and then embed that component and its markup throughout a Drupal site in a variety of different ways without having to use any tricks or hacks is a thing of beauty.

by Jack Taranto / 16 November 2017 Create a component

For this example we are going to use the much loved collapsible/accordion element. It’s a good example of a rich component because it uses CSS, JS, and Twig to provide an element that’s going to be used everywhere throughout a website.

To surmise the component it’s made up of the following files:

collapsible.scss collapsible.widget.js collapsible.drupal.js collapsible.twig collapsible.svg

The .scss file will end up compiling to a .css file, but we will be using SASS here because it’s fun. The widget.js file is a jQuery UI Widget Factory plugin that gives us some niceties - like state. The drupal.js file is a wrapper that adds our accordion widget as a drupal.behavior. The svg file provides some pretty graphics, and finally the twig file is where the magic starts.

Let’s take a look at the twig file:

{{ attach_library('pnx_project_theme/collapsible') }} <section class="js-collapsible collapsible {{ modifier_class }}"> <h4 class="collapsible__title"> {% block title %} Collapsible {% endblock %} h4> <div class="collapsible__content"> {% block content %} <p>Curabitur blandit tempus porttitor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.p> {% endblock %} div> section>

This is a standard-ish BEM based component. It uses a js-* class to attach the widget functionality. We also have a {{ modifier_class }} variable, that can be used by kss-node to alter the default appearance of the collapsible (more on this later). There are two elements in this component title and content. They are expressed inside a twig block. What this means is we can take this twig file and embed it elsewhere. Because the component is structured this way, when it’s rendered in its default state by KSS we will have some default content, and the ability to show it's different appearances/styles using modifier_class.

Our twig file also uses the custom Drupal attach_library function which will bring in our components CSS and JS from the following theme.libraries.yml entry:

collapsible: css: component: src/components/collapsible/collapsible.css: {} js: src/components/collapsible/collapsible.widget.js : {} src/components/collapsible/collapsible.drupal.js : {} dependencies: - core/jquery - core/drupal - core/jquery.once - core/jquery.ui - core/jquery.ui.widget

This is a pretty meaty component so it’s got some hefty javascript requirements. Not a problem in the end as it’s all going to get minified and aggregated by Drupal Cores library system.

And there we have it - a rich javascript component. It’s the building block for all the cool stuff we are about to do.

Use it in a field template override

As it stands we can throw this component as-is into KSS which is nice (although we must add our css and js to KSS manually, attach_library() won’t help us there sadly - yet), but we want drupal to take advantage of our twig file. This is where twigs embed comes in. Embed in twig is a mixture of the often used include, and the occasionally used extend. It’s a super powerful piece of kit that lets us do all the things.

Well these things anyway: include our twig templates contents, add variables to it, and add HTML do it.

Because this is an accordion, it’s quite likely we’ll want some field data inside it. The simplest way to get this happening is with a clunky old field template override. As an example I’ll use field--body.html.twig:

{% for item in items %} {% embed '@pnx_project_theme/components/collapsible/collapsible.twig' %} {% block title %} {{ label }} {% endblock %} {% block content %} {{ item.content }} {% endblock %} {% endembed %} {% endfor %}

Here you can see the crux of what we are trying to achieve. The collapsible markup is specified in one place only, and other templates can include that base markup and then insert the content they need to use in the twig blocks. The beauty of this is any time this field is rendered on the page, all the markup, css and js will be included with it, and it all lives in our components directory. No longer are meaty pieces of markup left inside Drupal template directories - our template overrides are now embedding much richer components.

There is a trick above though, and it’s the glue that brings this together. See how we have a namespace in the embed path - all drupal themes/modules get a twig namespace automatically which is just @your_module_name or @your_theme_name - however it points to the theme or modules templates directory only. Because we are doing style guide driven development and we have given so much thought to creating a rich self-contained component our twig template lives in our components directory instead, so we need to use a custom twig namespace to point there. To do that, we use John Albins Component Libraries module. It lets us add a few lines to our theme.info.yml file so our themes namespace can see our component templates:

component-libraries: pnx_project_theme: paths: - src - templates

Now anything in /src or /templates inside our theme can be included with our namespace from any twig template in Drupal.

Use it in a field formatter

Now let’s get real because field template overrides are not the right way to do things. We were talking about making things DRY weren’t we?

Enter field formatters. At the simple end of this spectrum our formatter needs an accompanying hook_theme entry so the formatter can render to a twig template. We will need a module to give the field formatter somewhere to live.

Setup your module file structure as so:

src/Plugin/Field/FieldFormatter/CollapsibleFormatter.php templates/collapsible-formatter.html.twig pnx_project_module.module pnx_project_module.info.yml

Your formatter lives inside the src directory and looks like this:

<?php namespace Drupal\pnx_project_module\Plugin\Field\FieldFormatter; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Field\FormatterBase; use Drupal\Core\Form\FormStateInterface; /** * A field formatter for trimming and wrapping text. * * @FieldFormatter( * id = "collapsible_formatter", * label = @Translation("Collapsible"), * field_types = { * "text_long", * "text_with_summary", * } * ) */ class CollapsibleFormatter extends FormatterBase { /** * {@inheritdoc} */ public function viewElements(FieldItemListInterface $items, $langcode = NULL) { $elements = []; foreach ($items as $delta => $item) { $elements[$delta] = [ '#theme' => 'collapsible_formatter', '#title' => $items->getFieldDefinition()->getLabel(), '#content' => $item->value, '#style' => NULL, ]; } return $elements; } }

And the hook_theme function lives inside the .module file:

<?php /** * @file * Main module functions. */ /** * Implements hook_theme(). */ function pnx_project_module_theme($existing, $type, $theme, $path) { return [ 'collapsible_formatter' => [ 'variables' => [ 'title' => NULL, 'content' => NULL, 'style' => NULL, ], ], ]; }

Drupal magic is going to look for templates/collapsible-formatter.html.twig in our module directory automatically now. Our hook_theme template is going to end up looking pretty similar to our field template:

{% embed '@pnx_project_theme/components/collapsible/collapsible.twig' with { modifier_class: style } %} {% block title %} {{ title }} {% endblock %} {% block content %} {{ content }} {% endblock %} {% endembed %}

Now jump into the field display config of a text_long field, and you’ll be able to select the collapsible and it’s going to render our component markup combined with the field data perfectly, whilst attaching necessary CSS/JS.

Add settings to the field formatter

Let's take it a bit further. We are missing some configurability here. Our component has a modifier_class with a mini style (a cut down smaller version of the full accordion). You'll notice in the twig example above, we are using the with notation which works the same way for embed as it does for include to allow us to send an array of variables through to the parent template. In addition our hook_theme function has a style variable it can send through from the field formatter. Using field formatter settings we can make our field formatter far more useful to the site builders that are going to use it. Let's look at the full field formatter class after we add settings:

class CollapsibleFormatter extends FormatterBase { /** * {@inheritdoc} */ public function viewElements(FieldItemListInterface $items, $langcode = NULL) { $elements = []; foreach ($items as $delta => $item) { $elements[$delta] = [ '#theme' => 'collapsible_formatter', '#title' => !empty($this->getSetting('label')) ? $this->getSetting('label') : $items->getFieldDefinition()->getLabel(), '#content' => $item->value, '#style' => $this->getSetting('style'), ]; } return $elements; } /** * {@inheritdoc} */ public function settingsSummary() { $summary = []; if ($label = $this->getSetting('label')) { $summary[] = 'Label: ' . $label; } else { $summary[] = 'Label: Using field label'; } if (empty($this->getSetting('style'))) { $summary[] = 'Style: Normal'; } elseif ($this->getSetting('style') === 'collapsible--mini') { $summary[] = 'Style: Mini'; } return $summary; } /** * {@inheritdoc} */ public function settingsForm(array $form, FormStateInterface $form_state) { $form['label'] = [ '#title' => $this->t('Label'), '#type' => 'textfield', '#default_value' => $this->getSetting('label'), '#description' => t('Customise the label text, or use the field label if left empty.'), ]; $form['style'] = [ '#title' => t('Style'), '#type' => 'select', '#options' => [ '' => t('Normal'), 'collapsible--mini' => t('Mini'), ], '#description' => t('See Styleguide section 6.1 for a preview of styles.'), '#default_value' => $this->getSetting('style'), ]; return $form; } /** * {@inheritdoc} */ public static function defaultSettings() { return [ 'label' => '', 'style' => '', ]; } }

There's a few niceties there: It allows us to set a custom label (for the whole field), it automatically assigns the correct modifier_class, it links to the correct section in the style guide in the settings field description, and it adds a settings summary so site builders can see the current settings at a glance. These are all patterns you should repeat.

Let's sum up

We've created a rich interactive BEM component with its own template. The component has multiple styles and displays an interactive demo of itself using kss-node. We've combined its assets into a Drupal library and made the template - which lives inside the style guides component src folder - accessible to all of Drupal via the Component Libraries module. We've built a field formatter that allows us to configure the components appearance/style. Without having to replicate any HTML anywhere.

The component directory itself within the style guide will always be the canonical source for every version of the component that is rendered around our site.

Tagged Twig

Posted by Jack Taranto
Front end developer

Dated 16 November 2017

Add new comment
Categories: Drupal

DrupalEasy: DrupalEasy Podcast 198 - Dave Hall - Drupal Distributions and Puppies

Planet Drupal - 15 November 2017 - 4:53pm

Direct .mp3 file download.

Dave Hall (skwashd), Managing Director, Dave Hall Consulting joins Mike Anello to talk about the current state of Drupal distributions and what the future may hold.

Interview DrupalEasy News Sponsors
  • Drupal Aid - Drupal support and maintenance services. Get unlimited support, monthly maintenance, and unlimited small jobs starting at $99/mo.
  • WebEnabled.com - devPanel.
Follow us on Twitter Subscribe

Subscribe to our podcast on iTunes, Google Play or Miro. Listen to our podcast on Stitcher.

If you'd like to leave us a voicemail, call 321-396-2340. Please keep in mind that we might play your voicemail during one of our future podcasts. Feel free to call in with suggestions, rants, questions, or corrections. If you'd rather just send us an email, please use our contact page.

Categories: Drupal

Battlefront II, Overwatch under scrutiny by Belgian gambling regulator

Social/Online Games - Gamasutra - 15 November 2017 - 4:39pm

The Belgian Gaming Commission's general director has told local media outlet VTM that the outfit is investigating whether the loot crate systems in Battlefront II and Overwatch qualify as gambling. ...

Categories: Game Theory & Design

Battlefront II dev: 'It's up to us to make sure that grind is fun and not overwhelming'

Social/Online Games - Gamasutra - 15 November 2017 - 4:10pm

"Crates can be a fun addition as long as you don't feel forced to engage with them in order to progress," a Battlefront II dev wrote on Reddit. "That's where the issue is with our game right now." ...

Categories: Game Theory & Design

Fantasy Flight Games Previews Quests in Legacy of Dragonholt

Tabletop Gaming News - 15 November 2017 - 3:00pm
So, there’s been some discussion about what, exactly, Legacy of Dragonholt. It’s not quite an RPG. It’s not quite a board game. It’s sort of in its own category. As such, you might wonder, “so, what do you do in the game?” Well, in this preview Fantasy Flight shows off what quests are like in […]
Categories: Game Theory & Design

Virtual reality training may be as effective as regular therapy after stroke

Virtual Reality - Science Daily - 15 November 2017 - 2:56pm
Using virtual reality therapy to improve arm and hand movement after a stroke is equally as effective as regular therapy, according to a study.
Categories: Virtual Reality

Tomb of Annihilation Set For Dice Masters Now Available

Tabletop Gaming News - 15 November 2017 - 2:00pm
Seems we’ve got a couple Dungeons & Dragons releases today that aren’t actually Dungeons & Dragons releases. In this case, it’s the Tomb of Annihilation set for Dice Masters. Want to get your dice-rolling on without your full group there? Now you certainly can, as you take on undead horrors (or control them, if you […]
Categories: Game Theory & Design

Valve is using Steam player data to power Counter-Strike: GO matchmaking

Social/Online Games - Gamasutra - 15 November 2017 - 1:13pm

The new system considers information from both a player's time in Counter-Strike and general behavior on Steam before placing them in matches. ...

Categories: Game Theory & Design

All Out War: Battleground Minis Game Up On Kickstarter

Tabletop Gaming News - 15 November 2017 - 1:00pm
You’ve got tabletop minis games. You’ve also got real-time strategy games. But what if you got your minis game into your real-time strategy game and your real-time strategy game into your minis game? You’d have All Out War: Battleground. If you’re a fan of original Warcraft and you’re a fan of Fantasy Miniatures Games, this […]
Categories: Game Theory & Design

Fantasy Flight Games Posts New A Game of Thrones Catan: Brotherhood of the Watch Preview

Tabletop Gaming News - 15 November 2017 - 12:00pm
Most of us have played Settlers of Catan. It might have been a while, but you might remember how scoring works. You want to build settlements and cities, build long roads, collect soldiers, that sort of thing. But how will scoring work in the upcoming A Game of Thrones Catan: Brotherhood of the Watch from […]
Categories: Game Theory & Design

Pages

Subscribe to As If Productions aggregator