Site Environments

New Drupal Modules - 21 January 2019 - 5:12am

This module is helpful for developers. Many times it needs to restrict code
to be functional on development site only or staging site only. This can be
achieved with this module. So once configured you can make your code to run on
any of the environment you want to restrict on - Development, Staging or Production(Live).


Categories: Drupal

PHP Powerpoint

New Drupal Modules - 21 January 2019 - 3:59am
Categories: Drupal


New Drupal Modules - 21 January 2019 - 3:41am

This is the Drupal 8 version of the Blind Carbon Copy module.

Categories: Drupal

Watchdog Mailer

New Drupal Modules - 21 January 2019 - 2:29am

This module allows you to send warnings and more serious errors in the error log via email to a specified address. Optionally, every PHP entry can be sent, since this is definitely a problem on the site.

Categories: Drupal

The Assassin - The Sanguinity Hot Technique Tree

New RPG Product Reviews - 21 January 2019 - 1:17am
Publisher: Interjection Games
Rating: 5
An review

This expansion for the Assassin base class clocks in at 6 pages, 1 page front cover, 1 page SRD, leaving us with 4 pages of content, so let’s take a look!

Assassins with the sanguinity tree gain the blood pool feature upon taking the first sanguinity technique. This pool begins play with 0 points, and has a maximum capacity of thrice the assassin’s class level. Whenever a creature within 60 ft. takes damage from an ongoing bleed effect, the assassin gains 1 blood point for each point of damage taken. This pool resets upon resting.

Unless I have miscounted, the pdf contains 15 different techniques, with 2 of them being passive: Off the Top, available as soon as second level, adds + 1 bleed damage to the first weapon attack executed each round, with 7th level and every 6 levels thereafter increasing that by +1. Bleed damage from this ability stacks with itself, and the ability notes a Heal DC to quench the bleeding. The second passive would be blood sense, which nets you blindsense 60 ft., but only for the purpose of detecting creatures suffering from bleed damage and objects they’re interacting with.

As far as active techniques are concerned, we have e.g. “Bleed the Self” which has a presence required of 0 to 3 and nets a +1 presence change. The ability is a standard action or may be executed as a part of a full-attack action. The technique basically adds bleed that deals 1 ability score damage to an ability score that is randomly chosen each round. Interesting. Blood tithe decreases presence by 1 and requires presence 1 – 4; once more, it’s executed as an attack, providing a +2 bonus to Strength and Constitution that increases by a further +1 at 7th and 13th level. This buff ends when the target has not bled for one round or died. Upon executing this technique, you must spend blood points of up to class level, and the effect otherwise lasts for 3 + blood points spent rounds. This technique has an escalation option that modifies presence required and presence change, but if you opt for this iteration, you also penalize the target of your attack, essentially leeching the ability boosts.

Bolster the Blood allows you to expend blood points to enhance a target within 30 ft., providing temporary hit points that last for a round. Due to being activated as an immediate action, it also clarifies interaction with technique per round cap. Bolster the Self is the self-only version of this one, but interestingly, it’s NOT a prerequisite for bolster the blood. Cauterize causes fire damage to a bleeding target at presence change 1, and while there is no save, this does end any ongoing bleed damage of the target. Yes, ability bleed is properly codified. Crimson Font has a range of 60 ft. and targets any number of creatures – the ability inflicts 1d3 +1 piercing damage per class level, divided however you wish among the targets within 60 ft., with a Fortitude-save to halve damage. At -4 presence change, it requires some setting up, though. For each point of piercing damage you inflict, you also inflict a bleed damage…which makes this a great combo-finisher.

Enfeebling strike is easier to set up: At just a presence change of -1, enfeebling strike temporarily penalizes Strength of the target hit by 1d6, +1 per two assassin class levels, with 1 being minimum. Fortitude save halves, and the duration of the penalty is governed by the amount of blood points expended. Exsanguinate the Self nets a -4 presence change, and thus must be considered a combo finisher of sorts. You expend any number of blood points, up to class level, and inflict one point of random ability bleed damage for each blood point expended, to be distributed among any number of targets within 60 ft. A single creature can’t take more ability bleed than half the number of blood points expended, which helps make this avoid being a dragon-slayer. Fort-save negates.

Make it flow is a swift action with a 60 ft. range, and causes 1 point of bleed damage, which, at 0 presence change still makes for a good kick-off. Puncturing blow changes the weapon’s base damage die to bleeding damage instead, at presence change +1. It lasts for 2 rounds, and increases twice at higher levels. Transfusion has a -1 presence change and lets you touch a creature. Expend up to assassin level blood points, then roll d8 for every blood point. The target regains hit points equal to the amount rolled, and the assassin takes a penalty to maximum hit points equal to 1/4th of the rolled amount, rounded down. This reduction ceases after resting. Transruption, which, like Transfusion, is a presence change -1, lets you bind two creatures together. Whenever one of the bound creatures takes damage of the three physical damage types, then half that damage is siphoned off to the second target. When a bound creature takes bleed damage, the second creature does take the full bleed damage as well, but unlike the physical damage dispersion, this propagation of bleed damage may be resisted with a Fortitude save. Duration is governed by blood points expended. Finally, vermillion blade, at -2 presence change, is a melee touch attack with an empty hand. On a hit, you draw a fully formed blade of blood from the target. The weapon begins at +1, and increases its potency at higher levels, allowing for the use of some weapon special abilities.

There are 3 different feats included in the pdf: Blood Focus increases the maximum amount of blood points you can expend on a technique by +1. Bloodbonder Adept nets you 2/day an additional immediate action for bolster the self or bolster the blood, provided you did not perform them already this round. Odd regarding verbiage here: Does this mean that you lose an additional round worth of swift actions in the aftermath? If not, then why not simply allow for the use of these techniques sans requiring an action or building on free actions, with the appropriate not-your-turn-caveat? Anyhow, Transfuser, the final feat, nets you a transfusion pool with points equal to your assassin level. This pool acts basically as a buffer for transfusion, allowing you to expend its points instead of accepting the maximum hit point reduction that the transfusion technique usually requires. Nice one.

Editing and formatting are very good on a formal and rules-language level, juggling complex and intriguing concepts. Layout adheres to Interjection games’ no-frills two-column b/w-standard, and the pdf has no bookmarks, but needs none at this length.

Bradley Crouch’s sanguinity tech tree is pretty cool – a blood-themed warrior angle for the assassin class? Heck yeah, why not. The concepts are varied and interesting, and there are some cool tricks here that reminded me of one of my own designs. The finishers are deadly, the minor healing welcome, and many of the attacks have neat visuals as well. All in all, an inexpensive, fun expansion well worth owning, though one that could use a sequel to build on it. The concept and theme are strong, and I couldn’t help but feel like there is more waiting in the wings here. My final verdict will clock in at 5 stars. Definitely recommended for assassin-fans!

Endzeitgeist out.
Categories: Game Theory & Design

Fuzzy Thinking: More Strange Weapons

RPGNet - 21 January 2019 - 12:00am
Fuzzy pikes.
Categories: Game Theory & Design

Lullabot: Behind the Screens with Tom Sliker

Planet Drupal - 21 January 2019 - 12:00am
Tom Sliker started Broadstreet Consulting more than a decade ago, and has made Drupal a family affair. We dragged Tom out of the South Carolina swamps and into DrupalCamp Atlanta to get the scoop. How does Tom service more than 30 clients on a monthly basis with just a staff of five people? His turn-key Aegir platform, that's how! Join the conversation at
Categories: Drupal

Mark Shropshire: Announcing the 2019 Charlotte Drupal Drive-in!

Planet Drupal - 20 January 2019 - 7:52pm

After three successful Charlotte Drupal Drive-in events in 2014, 2015, and 2018, the Charlotte Drupal User Group (CharDUG) is bringing it back on March 2nd, 2019. The format of the event is unconference style, allowing for a relaxed atmosphere where beginner and seasoned Drupalers alike are able discuss their projects, ideas, and ask questions.

Whether you want to discuss your projects with others, have an impromptu talk you would like to give, or a polished slide-deck presentation, you will be given the chance to pitch your idea(s). Once the pitches are made, every attendee will get to vote on the ones they find most interesting. This setup makes the event informal, the schedule fluid, and the topics dynamic. Most of all we have a lot of fun!

While Drupal is the focus, we will also welcome talks on other topics!

Suggested topics ideas:
  • Drupal 8 experimental modules and future of Drupal 9
  • React, React Native, GatsbyJS, and other JavaScript technologies
  • Decoupled Drupal
  • Contributing to open source
  • SEO and Marketing
  • Development tools (IDEs, text editors, Drush, Composer, terminal, etc.)
  • DevOps, deployments, continuous integration, etc.
  • QA and automated testing
  • Show and tell your web or application project
  • Your idea goes here!

Bring a talk idea or just come and hangout! This year’s event will be at Charlotte North Carolina’s awesome Hygge Coworking at Camp North End. Thanks to our sponsors, we will have door prizes, beverages, and snacks provided free of charge! Did I tell you the event is free? Yep, it is!

Register for the March 3rd Charlotte Drupal Drive-in today! Hope to see you there!

Thank you to our fine sponsors!

If you want to learn more about the origins of the Charlotte Drupal Drive-in and what others think of past events, check out the links below!

Blog Category: 
Categories: Drupal

Video Game Deep Cuts: NASA Slime-d Me With A BadCupid

Social/Online Games - Gamasutra - 20 January 2019 - 7:44pm

This week's highlights include a look at NASA's new commissions in the video game space, the crunch-free development of Slime Rancher, and a very offkilter procedurally generated dating game, among other things. ...

Categories: Game Theory & Design

OpenSense Labs: Heading towards change - Upgrading or Upcycling?

Planet Drupal - 20 January 2019 - 7:25pm
Heading towards change - Upgrading or Upcycling? Vasundhra Mon, 01/21/2019 - 08:55

You’ve been living in a house for a while now and you are still fond of that place. But its no longer exactly what you need, and you are dreading for a change. 

You think of rearranging and modifying a few things. Maybe paint the room walls in vibrant colors or set up brand new furniture. And voila, it feels like home once again. 

A similar situation can be analyzed with the websites also. 

Websites are redesigned to keep up with the online trends. Sometimes it is done merely because the owners learn over time that the site design is not ideal for their purpose.

Coming back to the redesigning, people face scenarios where their house gets really old and is on the verge of collapsing. These type of situations demands them to move on to the next one exactly like the way a website owner does when he/she witnesses an end of its life cycle.

So what are these things? Is there a term for it? Is it a process? and what are the methods involved in it? 

Let’s see what exactly the terms are.

Introducing Upcycling and Upgrading 

It is true that a full rebuilt of a website is time-consuming and an expensive task just like a full rebuilt of the house is. In such situations you are only left with two options - either modify it to necessary changes or hop onto a completely new site.

If you choose the option which simply involves a refreshing appearance of the site or modifications in some parts then Upcycling is the hero for you.

To reuse the existing materials and create a product of higher value or quality than the original object or materials is termed as upcycling. 

In technical terms, Upcycling is an incremental approach to relaunch an existing website that is done to keep up with online trends, or maybe because of technical debt, or the reason where you have a well-established website and you have no plans of reconstructing it as a whole.  

Another option is to bring a website to cutting edge technology that is done for optimal results and an increase in revenues and profits. In other words Upgrading. 

Comparing Upgrading and Upcycling    Upgrading Upcycling When to do it? Can be performed when you start witnessing the end of a life cycle. Can be performed at any stage of an existing project Why to do it? Because the website contains bugs and is prone to hackers. To give the website a new appearance and improve the user experience. Rate of Investment You can see your investment as quickly as possible  The ongoing maintenance and upkeep are where you start to see your investment.  Performance Performance measurement takes several months and can be achieved with the help of different metrics Can be measured with the help of conversion rate and other metrics.  How to do it? Add more content, create multiple landing pages, go mobile friendly Allow to innovate and bring newer design versions for the relaunch of the whole site. When to do it?


If you have low cash but have time and some creativity in your mind you can reclaim almost anything and repurpose it. In other words, any website can be repurposed or redesigned at any stage of an existing project with existing website infrastructure. 

For a well-established web system that has been operational for several years, and doesn’t want to spend time and money to do a full rebuild, upcycling is for you. This brings improvement in editorial experience, user experience, front-end etc. 

Upcycling is also adopted due to the reason of investments. Implementation of investments is quick and easy.


Computers and other electronics cannot be upcycled after they have come to an end of their life cycle, they must be upgraded to keep up with the technological advancements. Similar is the case with the websites. Websites are upgraded when it lacks functionality and speed, search engine fails to detect it or when it fails to meet lasting impressions. Upgrading a website is like a do-over of your brand.

Upgrading a brand new websites kills an enormous amount of time and leaves an organization with immense cost.

The reason why it faces such issues is evident, it is started from scratch and therefore requires deep research and analytics.

Why to do it?


Websites owner have plenty of reasons to transform their website. It might be due to the reason where they want a fresh appearance of their website, or because of the technical debt, or simply because they want to improve their user experience. 

Upcycling is the answer for all.

Though upcycling might de-prioritize the motto of “Big Bang Launch”, it meets one primary goal which is to reduce time to market for big website improvement.


Is your website prone to hackers and bugs? Is it preventing website visitors to find their way to your website’s content? - then it is time for you to upgrade it. Upgrading your website includes four main factors: Design, Marketing, Usability and Time. 

Design: It is the appearance of your website that reflects the business message which you are trying to portray. The design represents the collection of things like mobile responsiveness, compatibility with the browser, image resolutions

Marketing: Once the website design is done and the content is established, it is the time to promote it. Marketing involves all the SEO updates, measurement of effectiveness and a call-to-action (A button or link that is placed on a website to drive prospective customers to become leads by completing action on your landing page)

Usability: It is the term which describes the ease with which a particular website or a project is used. Usability helps in decreasing bounce rates and contributes to the performance. 

Time: A fresh website is a perfect way to save the admin’s time. This directly affects the customer service also. 

Rate Of Investment (ROI)


ROI or rate of investment in Upcycling depends on the two factors sequentially:

  • The cost and
  • The results of a website. 

Cost is termed as the price of the website, which varies widely depending upon the budget and funds of the organization. Generally, the price of the website relates to the total time taken to create it. Factors such as project management, design, programming, team, content, CMS etc determines the cost of a website. 

Whereas the result also contributes to being an important factor in the whole journey of ROI. The website ROI may literally be negative if the site doesn’t produce the desired results which in return gives a loss in the cost. Factors affecting ROI are the cost of creating and maintaining the website, traffic, conversion rate, website lifespan etc.

When both these things, cost, and the result going overboard (and done right) it can generate so much demand that you would witness a steep increase in the website conversions. The ongoing maintenance and upkeep are where you would start to see your investment. 


Once you have taken a leap and invested in the reconstruction of your organization’s website it’s time to begin the calculation concerning ROI. While it is difficult to predict the precise ROI for a brand new website, it would definitely result in a host of benefits.

Benefits that might include an uptick in search engine ranking and a steady generation in the interest of potential buyers and customers. Though there are no dry methods to measure the ROI, there are different ways to track the success and determine whether you are meeting your goals or not.

Tracking the web activities, Monitoring search engines and calculating cost are some of the unique ways to do it. 



Website owners who walk down the path of redesigning a website would agree with the fact that there’s a single most important metric that determines the success of a website: i.e Conversion Rate 

A conversion rate is the percentage of visitors to a website that completes the desired goal for the total number of visitors.

A high conversion rate is an indication of successful marketing and web design. It means people want what you are offering and that they are able to understand it. The whole point of redesigning a website is to improve the performance of it. 

Apart from conversion rate, there are certain other metrics which when optimized well would lead to better conversions and performance of your site. Metrics like:

  • Number of session per user
  • Pages per session 
  • Less bounce rate 
  • Per clicks around your website 


Let's assume that your organization has a great unique idea, you also proved that the demand of this must have “new product” you are selling is going to rock the market. You launched a beautiful website, and you wait for the rise in the performance graph.

Crickets. No traffic.

No traffic means no money and now you are in a dilemma that how would you mend it? Thus to improve it 4 important factors are required.

Backlinks: Backlinks are the incoming hyperlinks from one web page to another website that transfer equity to a website. Backlinks are the most significant factor that determines a site’s search ranking. The link-building strategy should be started as early as possible because it can take months for Google to update a rank. 

Content is the king: Google wants to see that your website should be dynamic and active for it to rank. Having a blog section on your website would do the task. You have to publish content frequently to give your customer a reason to return back.

Keywords: New websites have a hard time competing for top keywords, thus it is best to start with long-tail keywords. Keywords would allow you to attract the targeted audience who are looking for exactly that thing which you might be selling. 

How to do it using Drupal?


The Auraria Library main website is a great example of how upcycling can be achieved with the help of Drupal. The website was powered by Drupal 6, and it was beginning to see its end life. They needed an infrastructural upgrade with the highest priority. In 2016 a project team was established to kick off the journey of revamping the website. 6 months later the website was redesigned with a cloud-based, mobile friendly and localized ready content management system - Drupal 8.

Drupal 8 was chosen due to the fact that the organization enjoyed its scalability, flexibility and rapid availability with impressive community-driven service. Therefore, when a decision was to be made to select the CMS platform, they chose Drupal as their own. 

Thus by keeping longevity in mind, a swift change from Drupal 6 to Drupal 8 ( skipping Drupal 7) was made. 

Due to urgent migration, the project team implemented 80/20 law to break down the development objective into multiple releases. By doing so it not only enabled the possibility of a short first development cycle and helped in launching the website within six months but also bought them with the time to wait for highly contributed D8 modules to mature. 

User experience, increase in ROI, responsive designs, brand engagement, infrastructure improvement, and on-time delivery were the key objectives of the whole project. 


Upgrading a website using Drupal involves several steps. First, you need to define the source site (make sure core modules like Migrate, Migrate Drupal, Migrate Drupal UI are enabled), then you need to review the pre-upgrade analysis. The upgrade of Drupal 7 to Drupal 8 should be done so that Drupal 8 site is empty. There might be a chance that conflicting IDs are detected, a warning about the conflicting IDs will be shown.

This warning can be dealt with two ways. One is where you ignore it and lose your data and the other one is where you abort it and take an alternative approach.

Now is the time for the upgrade. Depending upon the size and type of content the upgrade accordingly takes the time. 

Why Choose Upcycling Over Upgrading?

Now that you have read all the points and came to this section, a slight idea would be twirling around your mind on what is best for your website.

To give you a clear vision, let’s put it in simpler and accurate words.

To upgrade is to break something down and create a new product from the base material. This might sound great for consumer goods and other relatable things, but not always great for a website. Upgrading is a good choice for organizations that have the time and the money to invest in the whole construction, and also if they are starting to witness its end. For the well-established websites: not a good choice. 

The goal of upcycling is to add value without degrading the product. It is the concept of creating something new out of something old with as little effort as possible. Upcycling is the right choice for all the Drupal-based websites as it uses the features of Drupal 8 in a way that increases the conversions of the website. 

Upcycling and Decoupling 

If a website has a couple of complex backends logic that the website owner doesn't wish to rebuild but is eager to relaunch the frontend, upcycling is the solution. Relaunching the frontend as a decoupled site with Drupal themes and then integrate it with the backend makes more sense. 

Whereas if the backend really needs a major push, but you want to keep the existing frontend without the need of reconstructing it, upcycling could work for that too, after the backend is decoupled. 

Decoupling your entire architecture will enable the website to upcycle individual parts and bring great value to all the end users. It would highly contribute to things like

Infrastructure: Gets the most out of the existing content and website composition. 

User Experience: Improves user experience, design, and front-end without the need of waiting for any launch.

Investment: You are able to witness your investment as soon as possible. 

In the Nutshell

At the end of the day, we want our website to flourish in terms of performance and make improvements to reach the desired bars. 

Upcycling is like a blessing for all the website owners. At Opensense Labs, we help our clients with the transition of their website. Our services not only provides with splendid modifications but also takes care of all your needs and demands. Ping us at 

blog banner blog image Drupal Drupal 8 Upgrading Upcycling Rate of investment Performance Decoupled Drupal Website redesign Blog Type Articles Is it a good read ? On
Categories: Drupal

Spinning Code: Drupal 8 Batch Services

Planet Drupal - 20 January 2019 - 1:04pm

For this month’s South Carolina Drupal User Group I gave a talk about creating Batch Services in Drupal 8. As a quick side note we are trying to include video conference access to all our meetings so please feel free to join us even if you cannot come in person.

Since Drupal 8 was first released I have been frustrated by the fact that Drupal 8 batch jobs were basically untouched from previous versions. There is nothing strictly wrong with that approach, but it has never felt right to me particularly when doing things in a batch job that I might also want to do in another context – that really should be a service and I should write those core jobs first. After several frustrating experiences trying to find a solution I like, I finally created a module that provides an abstract class that can be used to create a service that handles this problem just more elegantly. The project also includes an example module to provide a sample service.

Some of the text in the slides got cut off by the Zoom video window, so I uploaded them to SlideShare as well:

Quick Batch Overview

If you are new to Drupal batches there are lots of articles around that go into details of traditional implementations, so this will be a super quick overview.

To define a batch you generate an array in a particular format – typically as part of a form submit process – and pass that array to batch_set(). The array defines some basic messages, a list of operations, a function to call when the batch is finished, and optionally a few other details. The minimal array would be something like:

<?php // Setup final batch array. $batch = [ 'title' => 'Page title', 'init_message' => 'Openning message', 'operations' => [], 'finished' => '\some\class\namespace\and\name::finishedBatch', ];

The interesting part should be in that operations array, which is a list of tasks to be run, but getting all your functions setup and the batch array generated can often be its own project.

Each operation is a function that implements callback_batch_operation(), and the data to feed that function. The callbacks are just functions that have a final parameter that is an array reference typically called $context. The function can either perform all the needed work on the provided parameters, or perform part of that work and update the $context['sandbox']['finished'] value to be a number between 0 and 1. Once finished reaches 1 (or isn’t set at the end of the function) batch declares that task complete and moves on to the next one in the queue. Once all tasks are complete it calls the function provided as the finished value of the array that defined the batch.

The finish function implements callback_batch_finish() which means it accepts three parameters: $success, $results, and $operations: $success is true when all tasks completed without error; $results is an array of data you can feed into the $context array during processing; $operations is your operations list again.

Those functions are all expected to be static methods on classes or, more commonly, a function defined in a procedural code block imported from a separate file (which can be provided in the batch array).

My replacement batch service

It’s those blocks of procedural code and classes of nothing but static methods that bug me so much. Admittedly the batch system is convenient and works well enough to handle major tasks for lots of modules. But in Drupal 8 we have a whole suite of services and plugins that are designed to be run in specific contexts that batch does not provide by default. While we can access the Drupal service container and get the objects we need the batch code always feels clunky and out of place within a well structured module or project. What’s more I have often created batches that benefit from having the key tasks be functions of a service not just specific to the batch process.

So after several attempts to force batches and services to play nice together I finally created this module to force a marriage. Even though there are places which required a bit of compromise, but I think I have most of that contained in the abstract class so I don’t have to worry about it on a regular basis. That makes my final code with complex logic and processing far cleaner and easier to maintain.

The Batch Service Interface module provides an interface an an abstract class that implements parts of it: abstract class AbstractBatchService implements BatchServiceInterface. The developer extending that class only needs to define a service that handles generating a list of operations that call local methods of the service and the finish batch function (also as a local method). Nearly everything else is handled by the parent class.

The implementation I provided in the example submodule ends up four simple methods. Even in more complex jobs all the real work could be contained in a method that is isolated from the oddities of batch processing.

<?php namespace Drupal\batch_example; use Drupal\node\Entity\Node; use Drupal\batch_service_interface\AbstractBatchService; /** * Class ExampleBatchService logs the name of nodes with id provided on form. */ class ExampleBatchService extends AbstractBatchService { /** * Must be set in child classes to be the service name so the service can * bootstrap itself. * * @var string */ protected static $serviceName = 'batch_example.example_batch'; /** * Data from the form as needed. */ public function generateBatchJob($data) { $ops = []; for ($i = 0; $i < $data['message_count']; $i++ ) { $ops[] = [ 'logMessage' => ['MessageIndex' => $i + 1], ]; } return $this->prepBatchArray($this->t('Logging Messages'), $this->t('Starting Batch Processing'), $ops); } public function logMessage($data, &amp;$context) { $this->logger->info($this->getRandomMessage()); if (!isset($context['results']['message_count'])) { $context['results']['message_count'] = 0; } $context['results']['message_count']++; } public function doFinishBatch($success, $results, $operations) { drupal_set_message($this->t('Logged %count quotes', ['%count' => $results['message_count']])); } public function getRandomMessage() { $messages = [ // list of messages to select from ]; return $messages[array_rand($messages)]; } }

There is the oddity that you have to tell the service its own name so it can bootstrap itself. If there is a way around that I’d love to know it. But really one have one line of code that’s a bit strange, everything else is now fairly clear call and response.

One of the nice upsides to this solution is you could write tests for the service that look and feel just like any other services tests. The methods could all be called once, and you are not trying to run tests against a procedural code block or a class that is nothing but static methods.

I would love to hear ideas about ways I could make this solution stronger. So please drop me a comment or send me a patch.

Related core efforts

There is an effort to try to do similar things in core, but they look like they have some distance left to travel. Obviously once that work is complete it is likely to be better than what I have created, but in the meantime my service allows for a new level of abstraction without waiting for core’s updates to be complete.

Categories: Drupal

Kaltura Video Block

New Drupal Modules - 20 January 2019 - 9:05am

This module provides a code to embed kaltura video as a block into drupal site.

Categories: Drupal

Video Game Deep Cuts: NASA Slime-d Me With A BadCupid - by Simon Carless Blogs - 20 January 2019 - 7:27am
This week's highlights include a look at NASA's new commissions in the video game space, the crunch-free development of Slime Rancher, and a very offkilter procedurally generated dating game, among other things.
Categories: Game Theory & Design online checks

New Drupal Modules - 20 January 2019 - 5:27am

Решение для ФЗ-54.
Интеграция с онлайн чеками (подробное описание позже)

Categories: Drupal

Collect To Entities

New Drupal Modules - 20 January 2019 - 1:40am

This module processes the e-mails collected by Inmail Collect. An incoming part of a customer service can be created with this module. It is important to note that this module only generates the content, does not perform any permission management with the generated content. Recommended and related modules:


Categories: Drupal

OSTraining: How to Create a Voting System in Drupal 8

Planet Drupal - 19 January 2019 - 10:40pm

One of OSTraining’s customers asked how to implement content voting on their site. 

In Drupal 7, the popular choice was the Fivestar module, but that's still not ready for Drupal 8.

In this tutorial, I'll show you how to use the Votingapi Widgets module in Drupal 8. This module makes use of a “Rating” field, which you can customize and insert into your content.

Categories: Drupal

OSTraining: How to Create CSS and Javascript Animations in Drupal 8

Planet Drupal - 19 January 2019 - 10:14pm

There are multiple JavaScript and CSS libraries on the internet. They allow you to animate parts of your site and make them look more attractive.

The Animations module makes it easy to include animations on your Drupal site. 

There's a full list of the animations on the module page, but they include such wonderfully named animations as swing, tada, wobble, jello, bounceIn, bounceOut, fadeIn, rollOut, zoomIn, slideInRight and more.

In this tutorial, I'll show how to install and use the required libraries and the Animations module..

Categories: Drupal

OSTraining: How to Create a Contact Form in Drupal 8

Planet Drupal - 19 January 2019 - 10:06pm

One of OSTraining’s members asked how to create a following web form with the Webform module:

  • The site has four regions to be contacted: NE, SE, NW, and SW.
  • Each region will have their own contact person/team.
  • The user must be able to select one or more of the regions to contact at the same time, using checkboxes.
  • All the submittions must be BCC-ed to the main administrator.
  • If needed, the site owner should be able to add one or more email recipients for each region.

In this tutorial, you will learn how to meet these user requirements using the Webform module.

Categories: Drupal

OSTraining: Videos to Get you Started with Drupal Development

Planet Drupal - 19 January 2019 - 9:54pm
How do I get started with Drupal development?

That's a common question we get from people who join OSTraining for the first time. They want to know about the skills they will need, and what kind of classes they should take.

In this guide, I'll give you an overview to help you get started with Drupal development.

Categories: Drupal


Subscribe to As If Productions aggregator