26 Jul 2016

feedDrupal.org aggregator

Drupal core announcements: Highlights of issues you can still help with for Drupal 8.2.0-beta1

There is about a week left before Drupal 8.2 goes into beta! That means we will switch to figuring out any issues with changes in the new version instead of making new changes. For core development that means new features and API additions will move up to 8.3. I asked initiative leaders of both proposed and active initiatives for key things that could use help in the remaining time.

API-first initiative

Allowing user registrations via the REST API only needs some more tests for which examples can be found elsewhere in core. Also, although it may sound a bit scary, REST requests without X-CSRF-Token header: unhelpful response significantly hinders DX, should receive a 401 response is actually a nice approachable novice issue to get involved with.

Ongoing, check out the proposed initiative roadmap and attend the API-first meetings every third Monday of every month 5pm GMT at in Google Hangouts.

Media initiative

An amazing feature is in the works to Improve the UX of Quick Editing images and could use some frontend reviews. Help is also welcome to get HTML 5 video and audio playback functionality directly from file field formatters as well as to get camera capture functionality on image fields.

Larger media management goals in core are still to be defined. The team is meeting on that on July 27th. Follow @DrupalMedia on Twitter. Public meeting times are 2pm UTC every Wednesday on #drupal-media on IRC.

Migrate initiative

Help on any of the issues tagged Migrate critical are welcome, especially Refactoring EntityFile to use process plugins instead which blocks several other issues.

Ongoing, check out the list of issues categorized in migrate's master spreadsheet, and follow @MigrateDrupal on Twitter. Public meeting times are alternating 1pm GMT Thursday and 1am GMT Friday every other week on Google Hangouts.

Workflow initiative

Content moderation module is proposed for core based on the existing improvements achieved by the initiative to expand revision handling for content. Helping with unblocking that issue is very welcome.

Other top issues are Allow removing a module's content entities prior to module uninstallation, Add archived base field to revisionable entities, and Upgrade path between revisionable / non-revisionable entities.

Ongoing, check out the high-level roadmap at https://www.drupal.org/node/2721129, and follow @drupaldeploy on Twitter. Public meeting times to be defined.


For a complete list of meeting times and places (links to Google Hangouts where needed), see the Drupal 8 core calendar.

26 Jul 2016 9:19pm GMT

InternetDevels: Drupal Composer template and Phing as Drupal developer tools

Drupal Composer template and Phing as Drupal developer tools

A detailed blog post by our Drupal developer about using
Drupal Composer template and Phing. It is written from
the point of view of the latest Drupal version - Drupal 8.

Read more

26 Jul 2016 1:05pm GMT

Mediacurrent: How to Convince your Client Slideshows are Bad

why slideshows are bad design and 6 alternative options

In my previous blog post, I talked about six design alternatives to avoid slideshows. The response to that blog post was great - who knew there were so many kindred spirits who dislike slideshows? From the feedback I received, the number one question was why are slideshows so bad in the first place? Hopefully this companion blog post will give you that deeper understanding of some reasons not to use a slideshow and maybe help convince your next client that slideshows are a thing of the past.

26 Jul 2016 12:53pm GMT

OSTraining: Access Readme Files in Drupal 8

Access Readme Files in Drupal 8

In this tutorial we will add a module that makes site maintainers' lives easier.

With Drupal 8 setups you are encouraged to use composer, DrupalConsole and Drush because this is a faster and more effective way of adding components to your site. However, you can't access the readme file directly to read information about the module.

We will show you how to use the README module to access readme files directly from the Drupal 8 admin area.

26 Jul 2016 10:42am GMT

Arpit Jalan: GSOC 2016- Developing tests for Image Properties feature of Google Vision module- Week 8

TL;DR In the past two weeks I had worked on using the Image Properties feature offered by the Google Cloud Vision API to group the image files together on the basis of the dominant color components filling them. In addition, I had also worked on detecting the image files and filling the Alternate Text field based on the results of Label/Landmark/Logo/Optical Character Detection, based on the demand of the end user. This week, I have worked on and developed tests to ensure that the similar images are grouped in accordance to the Image Properties feature of the Vision API.


At present, the Google Vision API module supports the Label Detection feature to be used as taxonomy terms, the Safe Search Detection feature to avoid displaying any explicit contents or violence and the User Emotion detection to detect the emotions of the users in their profile pictures and notify them about it.


I had worked on grouping the images on the basis of the dominant color component(Red, Green or Blue) which they are comprised of. I got the code reviewed by my mentors, and they approved it with minor suggestions on injecting the constructors wherever possible.
Following their suggestions, I injected the Connection object instead of accessing the database via \Drupal::database().


After making changes as per the suggestions, I started developing simple web tests for this feature, to ensure that the similar images gets displayed under the SImilarContents tab. It requires the creation of new taxonomy vocabulary and adding an entity reference field to the image file entity. After the creation of the new Vocabulary and addition of the new field to the image file, I created the image files using the images available in the simpletests. The images can be accessed through drupalGetTestFiles(). The first test ensures that if the Vocabulary named 'Dominant Color' is selected, the similar images gets displayed under the file/{file_id}/similarcontent link.


The grouping, however, requires call to the Google Cloud Vision API, thus inducing dependency on the API key. To remove the dependency, I mocked the function in the test module, returning the custom data to implement the grouping.


To cover the negative aspect, i.e. the case when the Dominant Color option is not selected, I have developed another test which creates a demo vocabulary to simply store the labels, instead of the dominant color component. In this case, the file/{file_id}/similarcontent link displays the message "No items found".

I have posted the patch covering the suggestions and tests on the issue queue to be reviewed by my mentors. Once they review it, I would work on it further, if required.

26 Jul 2016 9:59am GMT

Web Omelette: Drupal 7 ctools content_type plugin with multiple subtypes

The content_type ctools plugin is the most used type of ctools plugin in Drupal 7. It allows us to quickly build complex (and configurable) components that can be used in the Panels interface. They are quick to set up, the easiest start being the definition of the $plugin array and the implementation of the plugin render function in a .inc file. Have you ever wondered though what the $subtype parameter of this render function is and what it serves?

Most of the time our content_type plugins only have one type so the $subtype argument is the same name as the plugin (and file name). However, it's possible to have multiple subtypes that have slight (but critical) differences while sharing common functionalities. Not many people are familiar with that. Intrigued? Let's see how they work.

When content_type plugins are being processed (loaded, prepared for use and cached), ctools asks them whether there are any subtypes it would like to define or they are single. By default the latter is true but in order to define variations we can either populate an array of subtype definitions in the main $plugin array or implement a function with a specific naming convention: module_name_plugin_name_content_type_content_types. This callback then needs to return the plugin information for all the subtypes of this plugin.

But since it's easier to show than explain, let's take a look at an example. Imagine you need a simple content_type plugin that outputs data which depends on a certain ctools context. You can define your plugin as such:

$plugin = array(
  'title' => t('My plugin'),
  'description' => t('My plugin description'),
  'category' => t('My category'),
  'required context' => new ctools_context_required(t('Node'), 'node'),
);

This is a simple example of a plugin that depends on the Node context. But what if you want it to depend on the Node context OR the current User context? In other words, it should work on the node_view page manager template or the user_view one. Or whatever page these contexts are on but nowhere else.

Instead of required context you could use 'all contexts' => true. But this would then pass in to your render function all the available contexts. And this is neither elegant nor a statement of dependency on one of those two contexts. In other words, it will be available on all page manager pages but maybe won't do anything on most and it's up to the render function to handle extra logic for checking the contexts.

This is where plugin subtypes come to help out. Since your render function does the exact same regardless of context (or very similar), you can have a subtype for each. So let's see how that's done.

First, we simplify the main plugin array:

$plugin = array(
  'title' => t('My plugin'),
  'description' => t('My plugin description'),
  'category' => t('My category'),
);

Then we implement the function that returns the subtypes (following this naming convention):

function my_module_my_plugin_content_type_content_types() {
  return array(
    'node' => array(
      'title' => 'My plugin for nodes',
      'required context' => new ctools_context_required(t('Node'), 'node'),
    ),
    'user' => array(
      'title' => 'My plugin for users',
      'required context' => new ctools_context_required(t('User'), 'user'),
    ),
  );
}

The subtype machine name is the key in the array and the rest is regular plugin definition as we are used to. In our case we define two, each for their respective dependencies. And with this in place we achieve a number of things.

First, we can add the My plugin for nodes content_type plugin whenever the Node context is available and the My plugin for users when the User context is present. They cannot be used in other cases. Second, we ensure that whatever context is passed to the render function is either a Node or a User (nothing else). This can come in really handy when your context is custom and wraps an object that implements a common interface. Third, the $subtype argument to the render function now will be either node or user which is helpful to maybe slightly fork the functionality depending on the subtype.

Clear the caches and give it a go. Let me know how it works out.

26 Jul 2016 7:05am GMT

Talha Paracha: GSoC'16 – Pubkey Encrypt – Week 9 Report

I started the week by testing Field Encrypt module with my project Pubkey Encrypt. So Pubkey Encrypt provides support for encrypting data with users login credentials by generating Encryption Profiles. And Field Encrypt provides support to encrypt field values using any specified Encryption Profile. In this way, both these modules are expected to work together in harmony. I tested much and both the modules seemed to be getting along perfectly fine with each other.

26 Jul 2016 12:00am GMT

25 Jul 2016

feedDrupal.org aggregator

Cocomore: Down with scattering loss! Reaching the right people with clever and creative targeting

A very specific target group generally costs more and has by definition a lower reach. But with exact targeting, customers feel understood by brands, which increases the probability of success in marketing. We demonstrate, which campaigns offer creative approaches that only really take off with clever targeting.

25 Jul 2016 10:00pm GMT

Appnovation Technologies: 3 Appnovator Sessions Accepted for DrupalCon Dublin

DrupalCon Dublin is right around the corner and we're proud to say that 3 sessions submitted by Appnovators have been accepted!

25 Jul 2016 5:52pm GMT

myDropWizard.com: If you're not selling support and maintenance plans to your clients, YOU'RE DOING IT WRONG!

Just finished a big project for client? Awesome!

Did you selling them a support and maintenance plan for their new site?

No? Well, I'm sorry to tell you: YOU'RE DOING IT WRONG!

But you wouldn't be the only one!

The vast majority of Drupal shops and freelancers build sites and move on without offering a support and maintenance plan, figuring if the client has any problems they can just bill them for it at their hourly rate.

However, you're missing out on several advantages - read more to find out what they are!

25 Jul 2016 5:02pm GMT

Drupal Association News: Membership campaign recap

Thank you on a neon signThank you, to everyone who participated in our 2016 certificate campaign. We sent a personalized certificate to everyone who joined or renewed their Association membership. We also asked members to help boost our outreach by encouraging others to join or renew. These contributions matter. The funds you helped raise support the Association's work, and your goodwill inspires us. Whether you became a member for the first-time, renewed, or took the time to share, you made the campaign a success.

Success feels great

From May 1 - June 30, 335 people became new members and 476 members renewed. For comparison, those numbers were 233 and 378 during that period last year. This campaign brought our total membership to 3,670 individuals and organizations. That's a 12% increase over this time last year (from 3,290). Our certificate goal was to deliver 675 by the end of the campaign. But you helped us crush it. We delivered 854, exceeding that goal by 27%.

Lessons learned

This year, we created a landing page on assoc.drupal.org and promoted it via blog post, social media, and newsletters. One month into the campaign, we launched a new banner on drupal.org, and sent an email to members, asking for help sharing the campaign. From the attribution provided by members on the sign-up form, most learned about membership via drupal.org or through a community member/organization. Therefore, the banner/landing page and direct message to our members was more effective than using our social media channels and newsletters.

About campaign components

Last year, we used social sharing, a blog post, and newsletters. We also added new content to our existing membership and contribution pages. We didn't create a landing page. The results? There were 885 tracked pageviews of the campaign-related blog post (during the campaign period) and we delivered 611 certificates.

This year, we did a little more to test whether a banner on drupal.org could make a difference. It definitely did.

We launched with a blog post on May 2, but this time we added a landing page. When the campaign ended, we'd had 1,025 tracked pageviews on the blog post (a 15.8% increase from last year). However, we didn't see a jump in membership sales (296 total) or much traffic to the landing page. On June 1, we added a banner to some drupal.org pages. That's when it got interesting.

Traffic came from drupal.org, not assoc.drupal.org

The landing page we launched in May had 16,768 tracked pageviews during the full campaign period, but 98% of them (16,410) came after the banner was launched on drupal.org. June had 517 membership sales, and 50% of those were new members (up from 34% new members in June 2015).

This screenshot shows traffic to the landing page before and after the banner launch.

google analytics shows traffic spike and sustained high level after launch of banner

Digging deeper into the data, we looked at what members wrote when asked how they found out about membership. New members told us it was via drupal.org (54.8%) or thanks to a community member (19.3%). These percentages were even higher than when looking at total members from the campaign period. If we want to increase overall membership, having the landing page and banner combination is the way to go.

pie chart shows 44.6% of members from campaign period report drupal.org, 16.4% report a community member, and 18.% report DrupalCon as source

pie chart shows 54.8% of new members from campaign period report drupal.org, 19.3% report a community member, and 10.7% report DrupalCon as source

Compared to the 2015 campaign's data, there were 123% more responses driven by evangelism, and 108% more mentions of drupal.org as the start of a member's user journey.

You love selfies as much as we do

Thanks for getting in front of the camera! It came as no surprise that so many of you responded to our call for selfies. Our community is full of caring members who love to share. Not only did this make for a fun time, but it helped show the people behind Drupal.

What's next?

A note about content: regrettably, we showed the same banner to all visitors, and its language caused some confusion about what members could do to help. We'll be mindful of that for future editions.

In the meantime, you can still help continue the momentum of this campaign. Reach out to us. Tell us why you're a member. Share why you're a member of the Drupal Association when you renew your membership-or anytime, really. No matter where you share, you help us help the community, and we all make a difference for each other and for Drupal.

Personal blog tags:
Membership

25 Jul 2016 3:59pm GMT

Annertech: 5 Annertech sessions accepted for DrupalCon Dublin!

5 Annertech sessions accepted for DrupalCon Dublin!

Yesterday all the accepted sessions for DrupalCon Dublin were announced, and we are delighted to report that 5 of our 8 session proposals were accepted! With Acquia being the only company receiving more acceptances, we are extremely proud of our achievement.

25 Jul 2016 2:43pm GMT

Appnovation Technologies: Redesign with Drupal 8 In Mind

More often than not with nearly all the projects I work on with Appnovation, we're tasked with some degree of updating, redesigning and modernizing an existing web presence, the target result being something new and shiny.

25 Jul 2016 10:01am GMT

Drop Guard: News time: Dashboard, Composer, Jira support

Our existing users may have already noticed a few changes and improvements in Drop Guard. However, not everything is visible enough, so we decided to make a short list with the recent updates.

Composer support

Drop Guard is now capable of managing your composer.json and composer.lock files, in the same fashion as you would do it normally via CLI.

When executing the update task, Drop Guard modifies the composer.json to accommodate the recommended module or core version and runs "composer update" command to keep the composer.lock in sync. Both files get pushed to the repository, and the only thing you need to take care about is running "composer install" to receive the updated packages.

Drop Guard
Drupal Planet

25 Jul 2016 7:00am GMT

24 Jul 2016

feedDrupal.org aggregator

Torchbox: Contributing to Drupal (DrupalCamp Bristol 2016 Sprint)

Yesterday, I attended DrupalCamp Bristol's sprint day which took place at Torchbox's new Bristol offices. More than 15 people attended the event, including seasoned contributors Lewis Nyman and Emma Karayiannis.

24 Jul 2016 11:00pm GMT

DrupalEasy: DrupalEasy Podcast 182 - Almost Live From Drupal GovCon 2016

Direct .mp3 file download.

Mike interviews Gregg Marshall, Enzo Garcia, and Daniel Schiavone live from Drupal GovCon 2016! Gregg discusses his new book, Enzo talks about his upcoming community keynote and the upcoming DrupalCamp Costa Rica, and Daniel previews Baltimore DrupalCamp and discusses preparations for Baltimore DrupalCon 2017.

DrupalEasy News

Sponsors

Follow us on Twitter

Intro Music

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.

24 Jul 2016 1:51pm GMT