Planet Drupal

Subscribe to Planet Drupal feed
Drupal.org - aggregated feeds in category Planet Drupal
Updated: 19 min 4 sec ago

Acquia: Ultimate Guide to Drupal 8: Episode 3 - Site builder Improvements

Wed, 21/05/2014 - 13:33

Welcome to the third instalment of an 8-part blog series we're calling "The Ultimate Guide to Drupal 8." Whether you're a site builder, module or theme developer, or simply an end-user of a Drupal website, Drupal 8 has tons in store for you! This blog series will attempt to enumerate the major changes in Drupal 8. Successive posts will gradually get more technical, so feel free to skip to later parts (once they're published) if you're more on the geeky side.

Categories: Elsewhere

Code Enigma: Drupal 6 Performance Testing

Wed, 21/05/2014 - 12:46

We were recently asked to investigate poor performance on a Drupal 6 site. Memcache was enabled, but a siege test was still showing poor results.

Transactions: 145 hits Availability: 100.00 % Elapsed time: 525.34 secs Data transferred: 1.89 MB Response time: 17.08 secs Transaction rate: 0.28 trans/sec Throughput: 0.00 MB/sec Concurrency: 4.71 Successful transactions: 145 Failed transactions: 0 Longest transaction: 28.38 Shortest transaction: 13.03

We run New Relic for performance testing and the siege traffic gives it plenty to analyse.

The first thing we noticed in New Relic was that there were some slow hook_init functions being called. The worst performing of these was in the Password Policy module, covered at http://drupal.org/node/2008282. Fixing this didn't make a huge change to the performance though.

The site also runs CiviCRM and in the New Relic transactions, it showed that civicrm_invoke was taking a long time to process. Digging into the transaction details, we came across this:

The theme registry was being rebuilt on every page load. We checked to see if there were any theme settings that had been left enabled from development that were causing the theme rebuild, but found none.

Checking through the functions that appeared in the transaction log, the only reason for the theme registry to be rebuilt each time that we could come up with was that it was failing to be saved in the cache. The log shows that _theme_load_registry() is called, it checks memcache for the cached theme registry, but then rebuilds it.

function _theme_load_registry($theme, $base_theme = NULL, $theme_engine = NULL) { // Check the theme registry cache; if it exists, use it. $cache = cache_get("theme_registry:$theme->name", 'cache'); if (isset($cache->data)) { $registry = $cache->data; } else { // If not, build one and cache it. $registry = _theme_build_registry($theme, $base_theme, $theme_engine); _theme_save_registry($theme, $registry); } _theme_set_registry($registry); }

Checking all the logs failed to show any errors relating to memcache. For a quick check, we decided to try moving the cache table (where the theme registry is cached) out of memcache, back into the Drupal database. In settings.php, this was done by changing

$conf['memcache_bins'] = array( 'cache' => 'default', ...

to

$conf['memcache_bins'] = array( 'cache' => 'database', ...

Running the siege test again showed a marked improvement.

Transactions: 112 hits Availability: 100.00 % Elapsed time: 97.70 secs Data transferred: 1.46 MB Response time: 3.83 secs Transaction rate: 1.15 trans/sec Throughput: 0.01 MB/sec Concurrency: 4.39 Successful transactions: 112 Failed transactions: 0 Longest transaction: 5.92 Shortest transaction: 2.80

That seemed conclusive, but didn't help to understand why memcache was failing to store the theme registry. Further investigation led us to http://drupal.org/node/435694. Memcache will only store data up to 1M in size - not only that, but it fails silently, so nothing appears in the logs.

There are patches in http://drupal.org/node/435694 to add logging to capture these memcache failed saves and there's also a php snippet at http://gist.github.com/typhonius/8798894 to scan all the Drupal cache tables and highlight any objects over 1M in size.

If you're using memcache 1.4.2 or later, you can increase the 1M maximum object size, see https://code.google.com/p/memcached/wiki/ReleaseNotes142 for example, but increasing this too much may impact memcache's efficiency.

New Relic certainly made it much quicker for us to diagnose the underlying issue though and having the near instant feedback is great.

Related Service Areas: ConsultancyDevelopmentSupportTeaser: A scenario where memcache can actually impair performanceCategories: ConsultancyDevelopmentDrupal PlanetSupportPrimary Category: Consultancy
Categories: Elsewhere

Oliver Davies: git format-patch is your Friend

Wed, 21/05/2014 - 09:00
The Problem

As an active contributor to the Drupal project, I spend a lot of time working with other peoples’ modules and themes, and occassionally have to fix a bug or add some new functionality.

In the Drupal community, we use a patch based workflow where any changes that I make get exported to a file detailing the differences. The patch file (*.patch) is attached to an item in an issue queue on Drupal.org, applied by the maintainer to their local copy of the code and reviewed, and hopefully committed.

Categories: Elsewhere

Oliver Davies: git format-patch is your Friend

Wed, 21/05/2014 - 09:00
The Problem

As an active contributor to the Drupal project, I spend a lot of time working with other peoples’ modules and themes, and occassionally have to fix a bug or add some new functionality.

In the Drupal community, we use a patch based workflow where any changes that I make get exported to a file detailing the differences. The patch file (*.patch) is attached to an item in an issue queue on Drupal.org, applied by the maintainer to their local copy of the code and reviewed, and hopefully committed.

Categories: Elsewhere

Oliver Davies: git format-patch is your Friend

Wed, 21/05/2014 - 09:00
The ProblemAs an active contributor to the Drupal project, I spend a lot of time working with other peoples’ modules and themes, and occassionally have to fix a bug or add some new functionality.In the Drupal community, we use a patch based workflow where any changes that I make get exported to a file detailing the differences. The patch file (*.patch) is attached to an item in an issue queue on Drupal.org, applied by the maintainer to their local copy of the code and reviewed, and hopefully committed.
Categories: Elsewhere

Modules Unraveled: 109 Getting Rules Ported to Drupal 8 with Josef Dabernig, Klaus Purer and Wolfgang Ziegler - Modules Unraveled Podcast

Wed, 21/05/2014 - 07:00
Published: Wed, 05/21/14Download this episodeRules
  • For those new to Drupal, what is the Rules module?

    • Intro Rules: events, conditions, actions
    • Programming for site builders
    • Giving workflows into the hands of the site builders, workflow building blocks like Lego

    The Rules module allows site administrators to define conditionally executed actions based on occurring events (known as reactive or ECA rules).

Example use cases
Build flexible content publishing workflows changes
Send customized mails to notify your users about important updates
Create custom redirections, system messages, breadcrumbs, ...
Build an e-commerce store using Drupal Commerce
And many more…

Rules has fantastic integration with Drupal Core APIs and all structured data exposed using the Entity and Fields systems, over 350 other contributed modules specifically integrate with the Rules API by to provide their own custom events, conditions, actions or exposing custom data in a reusable way.

Use case: Automating processes
Rules serves the need for automating processes like comment moderation, customizable e-mail notifications or event-based calculations on social platforms. These are built by using generic tools like Flag, Organic groups and message module. More specific solutions like Privatemsg, Feeds, Activity, User point or Voting rules also tightly integrate into the system.

What is the Rules module, explain some use cases & tell us about the rules success story
http://d8rules.org/content/rules-success-story

Drupal 8
  • In the last episode, Crell mentioned that because of the advances in D8, there may not be a need for the Rules module. So, I told him that I would ask you guys for a response to that.
  • What Drupal 8 Stuff are you building upon?

Entity API
Out-of-the-box typed data support for all fields, i.e. including custom content entity types

Typed Data API

The Typed Data API was created to provide developers with a consistent way of interacting with data in different ways. Not only does the API allow you to interact with the actual data, it also provides means of fetching more information, or metadata, about the actual data.
The Typed Data API is a low level, generic and reusable object oriented API. One API that implements it is the Entity API - Drupal’s primary data model.

-> Unification of metadata systems of Drupal 7.

Conditions & Actions

We've got an Actions and Conditions API in core already, so one might think another huge part has been taken care off. Unfortunately, no - those APIs have been created/ported with other use cases in mind, so they do not cater for all the more advanced features Rules users are used to.

While I tried to make sure they fit Rules needs as far as possible when they were introduced/updated, they do not fit our needs yet and it might be impossible to make them fit without breaking those APIs. For Rules 8.x we plan to work on improving those APIs (from contrib) as needed first, so we can ensure they fit Rules' requirements.

Once we are sure everything works out we'll know what we have to adapt and whether improvements can be contributed to core.
Depending on how that works out, we'll see whether we can build up on the core Action and Conditions API or there will be Rules' variants of those APIs (again :(). For more details please see the related issues:

Rules 8.x Architecture
Rules 8.x Roadmap

Motivation behind Rules in Drupal 8

Features
http://d8rules.org/content/overview-rules-8x-features

Porting Rules to Drupal 8 will require a major refactoring of the framework. The Rules Core APIs & functionality will evolve and Drupal 8 rewrite opportunities will be taken into account.

Site building based on Drupal 8 core integration wins
Admin UI usability improvements
Simple Views Bulk operations in core

Reusable components
Plug-in based architecture & fully object-oriented code
Rules data selector for tokens, contexts and other use cases
Typed data widgets & formatters
Embeddable Rules UI components to integrate actions & conditions

Evolved developer experience
Unified DX based on Drupal 8 plug-in system
Symfony 2 event system integration
Deployable config via CMI

Funding, milestones, Corporate & crowdfunding - how will that work out?
http://test-d8rules.gotpantheon.com/content/funding-goal-project-milestones
- sponsorship by company
- crowd funding
- What happens if the funding does not succeed?

How & who
http://test-d8rules.gotpantheon.com/team
- fago, klausi, dasjo, nico

crowd funding is live now - drupalfund.us!!!

Who supports you already?
see http://d8rules.org/supporters

Why should we help now?

Questions from Twitter Episode Links: fago on drupal.orgfago on Twitterklausi on drupal.orgklausi on TwitterDasjo on drupal.orgDasjo on Twitterd8rules.orgDrupalFund.us Crowdfunding CampaignKlausi’s BlogBlog post about Supporting Rules in D8d8rules TeamTags: 
Categories: Elsewhere

Károly Négyesi: Drupal 8 security and me

Tue, 20/05/2014 - 23:11

Summary: if you are working on a core patch which smells like it might be security related please let me know and I will review.

Meanwhile, I am working on switching twig autoescape on. Help is warmly appreciated, please contact me.

Long story short, as I have tried (and mostly succeeded) in vacating the core queue I found myself in a trap: while I can overlook what I perceive as architecture shortfalls in Drupal 8, as long as I remain within the Drupal ecosystem I can't in a good conscience overlook the security holes and I can't leave the Drupal ecosystem without seriously compromising my fiscal situation. So I am doing what I can to make sure Drupal 8 is secure and completely leave performance, developer experience and such problems to others. I am also trying to help a little with documentation as long as it's not controversial and documentation rarely is.

Categories: Elsewhere

Janez Urevc: Drupal community, please meet Chandan Singh

Tue, 20/05/2014 - 22:49

Chandan is one of the Drupal's students that were accepted into Google Summer of code program this year. He wrote an introduction post to say hi and explain what he's working on.

Categories: Elsewhere

Freelock : Ask Freelock: Collaborative Editing in OpenAtrium and Drupal?

Tue, 20/05/2014 - 21:33

We've been getting several inquiries related to document management in Drupal, and occasionally about OpenAtrium, a Drupal distribution we've used as a base for several projects that needed strong group collaboration functionality.

Heerad asks:

How does OpenAtrium handle collaborative editing of documents?

Document Assemblydocument managementcontent managementOpenAtriumDrupalDrupal Planet
Categories: Elsewhere

Phase2: Our Top 10 DrupalCon Austin Session Picks!

Tue, 20/05/2014 - 20:08

It’s less than 2 weeks from DrupalCon Austin and we are pumped to check out this year’s awesome DrupalCon Austin session lineup. With so many sessions to choose from, it can be hard to pick which ones to attend, so planning your session strategy is essential. To help you decide, we’ve put together our top 10 DrupalCon Austin session picks below, we’ll see you there!

Monday 9:00-5:00PM:  Drupal Performance and Scalability with the Dream Team.

The dream team unites again to provide an epic performance and scaling training to kick off this year’s DrupalCon.  You’ll find our own DevOps guru, Steven Merrill among this infamous team and while this isn’t a DrupalCon session, it is definitely a training not to be missed. Try to grab a seat!

Tuesday 1:00-2:00PM: 30 Drupal 8 API Functions You Should Already Know, Rm: 18, 4th floor

You wont want to miss one of Phase2′s leading developers, Frederic Mitchell presenting a session on Drupal 8 API functions.  You can get a sneak peak of what his session will cover in his blogpost “Say Goodbye To menu_get_object().”

1:00-2:00PM: OpenShift & Drupal- A True Story of Open Source Collaboration, Rm 11,4th floor

Have you heard about using OpenShift Origin with Drupal? Get all the details and find out how to easily deploy Drupal sites on OpenShift Origin in this session with Steven Merrill and Diane Mueller.

3:45-4:45: Introducing The Drupal 8 Configuration System, Rm F, 4th Floor

Drupal 8 has a new configuration management system that provides a central place for modules to store configuration data, from simple static data (e.g., site name) to more complex business objects (e.g., field definitions and image styles). This session will outline how to work with the new configuration system from a site building perspective. Looks like a great D8 session, we can’t wait!

5:00-6:00PM: Train Wrecks, Ugly Babies- The Gory Details Part 2, Rm 16, 4th Floor

As a follow up to Susan Rust‘s previous session “Train Wrecks, Ugly-Baby..Meetings and other Client Calamities,” Susan further discusses project methodology and the importance of discovery and strategic planning.  We are a big fan of Susan and look forward to her session!

Wednesday 1:00-2:00: Introducing Panopoly and Drupal Distributions, Rm 17, 4th Floor

If you are interested in how Panopoly works and how it is used in Drupal distributions, be sure to catch David Snopek‘s session! David is a fantastic Open Atrium and Panopoly contrbutor and has a ton of knowledge under his belt about both distributions!

3:45-4:45PM: Successful Requirements Gathering, Rm 16, 4th floor

Jordan Hirsch is a senior digital strategist here at Phase2.  He is not only a professional improv actor, he also is an expert in requirements gathering for large complicated web projects.  Check out his session at DrupalCon and take a sneak peak at some of his requirements best practices in his blogpost about this topic.

3:45-4:45PM: Thinking Inside The Box, Inside The Box, Inside The Box,  Rm F, 4th floor

For all you frontend developers out there, be sure to catch Mason Wendell‘s session where he will be discussing how to leverage style prototypes as a frontend style guide technique.

Thursday: 10:45-11:45: Scaling Drupal For Higher-Ed Institutions, Rm 16, 4th Floor

For those interested in Drupal for higher ed, be sure to catch this session, we are really excited to attend this session with their incredible line up of representatives from Dartmouth College, Harvard University, Stanford University, and Yale University.

2:15-3:15PM: Drupal For Local Gov- How San Mateo raised the bar with OpenPublic, Rm 17, 4th floor

If you are interested in Drupal for public sector sites, you won’t want to miss this session.  Join Felicia Hayes of Phase2 and Beverly Thames from San Mateo County to talk about how San Mateo County leveraged Drupal and OpenPublic to create an engaging web experience. will present a session on the San Mateo project with Beverly Thames of San Mateo.

With all these interesting Drupal sessions to attend, make sure to pace yourself, take a break and visit us at the Phase2 booth (#101)! As always we’ve got some fun swag and activities planned at our booth, so be sure to schedule some time to come say hi!

Categories: Elsewhere

Phase2: Creating Custom Panels Layouts & Content Types

Tue, 20/05/2014 - 18:50

The Panels module provides a flexible and intuitive way to place content throughout your site. This blog post will show you how to use and customize some of the features in panels including layouts and content types.

Layouts

As it sounds, layouts allow users to choose where each piece of content on a given panel can be rendered. There are two different types of layouts. Builders allow users to create a custom layout inside the GUI via the layout Designer, while predefined layouts allow you to write the actual html to be used within your layout. This blog post will cover the latter option.

When creating a layout you can create one either inside your theme or within your module. For this example we will be creating a two-column layout using the theme implementation. In your theme create a folder named “layouts” and in your theme_name.info file add the following lines.

; Panel Layouts plugins[panels][layouts] = layouts

This line tells the theme to look for custom layouts within our layouts directory inside our theme. Inside of your Layout’s folder, create a folder called one_third_left and inside of that folder create three files, one_third_left.inc, one-third-left.tpl.php, one-third-left.css. Your directory structure should be as follows:

 

The .inc file controls the regions that are present as well as the theme and css to be used within the layout. Open the one_third_left.inc file and add the following lines.

<?php /** * Implements hook_panels_layouts() */ function theme_name_one_third_left_panels_layouts() { $items['one_third_left'] = array(     'title' => t('Theme Name: One Third Left'),     'category' => t('Theme Name'),     'icon' => 'one-third-left.png',     'theme' => 'one-third-left',     'css' => 'one-third-left.css',     'regions' => array(       'header' => t('Header'),       'content' => t('Content'),       'sidebar' => t('Sidebar'),     ),   ); return $items; }

This array defines all the needed items for a layout to appear. The title as it sounds, is the title of the panel we created. Category is used to group similar layouts together. When choosing a layout you first need to select the category and then the corresponding layouts will be shown. The icon is a visible representation to help users see what the layout looks like at a glance (The icon was omitted for this tutorial). The theme is the tpl file used to control the layout and html. Css controls the styling of the layout, it is also important to know that the css file is also used to control the layout shown inside the gui. Regions are used to define where content can be placed inside of the layout.

Open one-third-left.tpl.php and add the following lines.

<div <?php !empty($css_id) ? print 'id="' . $css_id . '"' : ''; ?>> <div class="columns">     <div class="header">       <?php print $content['header'];?>     </div>   </div>   <div class="medium-4 columns left-sidebar">     <?php print $content['sidebar'];?>   </div>   <div class="medium-8 columns">     <?php print $content['content'];?> </div> </div>

In this tpl example, we are creating a 2 column layout with a header. Notice the $content variable. Each of these corresponds to a region that we created inside of our .inc file. To add more regions simply add them to the .inc file and place them in the tpl. I will not cover the css in this tutorial but once cache is cleared you should now see your new layout available for use.

Content Types

Ctools content types are like blocks in the sense that they both provide an easy way to create pieces of content that can be placed throughout a site. Where content types excel is in the configuration. While blocks allow you to configure them by means of a form, those settings are global, so every instance of a block will have the same settings no matter where it is placed. Content Types on the other hand allow you to create one content type and have different settings applied. This portion of the tutorial will discuss how a ctools content type can be created.

First add ctools as a dependency in your module_name.info file.

dependencies[] = ctools

Create a folder named “plugins” inside of your module directory. Next add a folder named “content_types” inside of the newly created plugins directory. Then add the following lines to your module_name.module file.

<?php /* * Implements hook_ctools_plugin_directory(). */ function module_name_ctools_plugin_directory($owner, $plugin_type) { if ($owner == 'ctools' && $plugin_type == 'content_types') {    return 'plugins/content_types'; } }

This hook tells ctools where to look for its content types. In this example we will create a simple content type that displays the 5 newest published nodes and allows the user to choose whether or not the title is linkable.

Inside the content_type folder, create another folder called newest_node and inside that folder create a file called newest_nodes.inc. Add the following lines to the file.

<?php $plugin = array( 'title' => t('Newest Nodes'),   'description' => t('Display a list of the newest nodes'),   'single' => TRUE,   'render callback' => 'newest_nodes_content_type_render',   'defaults' => array(),   'edit form' => 'newest_nodes_edit_form',   'category' => array(t('My Module')), );

This array is used to define our settings for the content type. As it sounds, title is the title of the content type. Single is used to show that our content type has no subtypes. The render callback is the function that is used to generate the markup for our content type. Defaults is the default ctools context. In our case we do not have one. The edit form is the form function used to generate the content type settings. Finally category is used to group similar content types. To add the form add the following lines.

/** * Content type settings form. */ function newest_nodes_edit_form($form, &$form_state) {   $conf = $form_state['conf'];   $form['number'] = array( '#type' => 'select',     '#title' => t('Select the number of node to display'),     '#options' => array(5 => t('Five'), 10 => t('Ten'), 15 => t('Fifteen')),     '#required' => TRUE,     '#default_value' => isset($conf['number']) ? $conf['number'] : ''   );   $form['link'] = array(     '#type' => 'checkbox',     '#title' => t('Link title to node'),     '#default_value' => isset($conf['link']) ? $conf['link'] : '',   );   return $form; } /** * Content type submit handler. */ function newest_nodes_edit_form_submit($form, &$form_state) { foreach (array('number', 'link') as $key) {    $form_state['conf'][$key] = $form_state['values'][$key]; } }

This simple form let users decide how many nodes to display and whether or not a link should be displayed. Now lets proceed with adding the actual render function.

function newest_nodes_content_type_render($subtype, $conf, $args, $context) { $results = db_select('node', 'n')     ->fields('n', array('nid', 'title'))     ->condition('status', 1)     ->range(0, $conf['number'])     ->execute()     ->fetchAll();   $items = array();   foreach ($results as $result) { if (isset($conf['link'])) { $items[] = l($result->title, 'node/' . $result->nid); }     else { $items[] = $result->title;     } }   $block = new stdClass();   $block->title = t('Newest Nodes');   $block->content = theme('item_list', array('items' => $items));   return $block; }

This function does a simple db_select using the variables we set in our form to limit the number of items displayed and to also decide whether or not to display a link. Clear your cache and you should now see your newly created content type available along with the settings form.

 

Finally here is what my Content Type looks like once styled.

While my previous example is a bit on the simplistic side it does highlight the power of ctools layouts and content types. When used with the appropriate CSS responsive layouts can be created and easily changed per node type. For more information on the Panels Module, check out some of our other Phase2 thoughts.

Categories: Elsewhere

Cocomore: DrupalCamp Spain 2014

Tue, 20/05/2014 - 18:09

Last weekend three of us from Cocomore attended to DrupalCamp Spain 2014. This year it was held in the beautiful city of Valencia, at the East Coast of Spain, full of magnificent buildings and the land of Paella and Horchata. Because we know of the importance of these events, this Drupalcamp was sponsored by Cocomore.

read more

Categories: Elsewhere

DrupalCon Austin News: Community Summit - Contribute your expertise to build our Global Communities

Tue, 20/05/2014 - 17:32

Thousands of Drupalers will be covering in Austin with one goal in mind, to live and breathe Drupal. With the success of the DrupalCon Prague 2013 Community Summit, leaders are called to action again to discuss and sprint on important Drupal Community topics.

Categories: Elsewhere

Appnovation Technologies: The Current State of Drupal: An Infographic

Tue, 20/05/2014 - 17:30
Here are some current stats on Drupal in an inforgraphic. Drupal is an ever expanding CMS so these numbers have already become larger! However, this will give you some quick facts about our favourite CMS! var switchTo5x = false;stLight.options({"publisher":"dr-75626d0b-d9b4-2fdb-6d29-1a20f61d683"});
Categories: Elsewhere

Open Source Training: Add CSS Style to Drupal Views

Tue, 20/05/2014 - 17:04

This week one our OSTraining members was working with the Views module.

They were able to create views, but weren't sure how to improve their design.

In this tutorial, we're going to show you how to apply CSS to your views so you can add both color and width.

Categories: Elsewhere

Drupalize.Me: Drupal 8 is Responsive, But What Does That Mean?

Tue, 20/05/2014 - 16:49

Drupal 8's out-of-the-box mobile friendliness creates quite the buzz. "Mobile friendly," "responsive," "squishy" — all words to describe the behavior a site invokes on different devices or different screen sizes. Mobile friendly can also mean content first. From a big screen to a little screen, things look different. Images change sizes, menu items become drop-downs, columns are pushed around to locations that make sense with content being the supreme real-estate. So if Drupal is mobile friendly out of the box that must mean I am 100% good to go with all my websites using Drupal 8. We wish. Drupal 8 is coming along and looking pretty sweet, but it is still Drupal and not a magic unicorn. This blog post is not going to get into the nitty gritty of how responsive websites work, but we're going to take a closer look at how two new core modules can make it easier to build a responsive theme. 

Categories: Elsewhere

Acquia: Amitai Burstein: Zariz - Continuous Deployment for Content

Tue, 20/05/2014 - 15:05

I got the chance a while back to speak with Amitai Burstein, CTO of Gizra - a boutique development shop in Tel Aviv creating advanced web applications using Drupal, along with Node.js, Jekyll and other technologies. Amitai is the maintainer of key Drupal modules such as Organic Groups, Message and Entity Reference, and contributes to Drupal core. He showed off Gizra's intriguing solution to content deployment in Drupal in this jam's Drupal Camp session: Zariz. I was impressed! You might be, too.

Categories: Elsewhere

Drupal Association News: Improving Drupal.org support

Tue, 20/05/2014 - 13:32

Per the 2014 Leadership plan, one of the imperatives for the Drupal Association is making Drupal.org a great tool for the Drupal community, building Drupal adoptions and developer satisfaction. One very important part of a great tool is great user support. The speed and ease with which users can get help when they have a problem greatly affects overall experience.

As with many other things on Drupal.org, historically support has been provided by an amazing group of community volunteers with a little help from the Drupal Association staff. Recently the Drupal Association staff had to step in heavily during a few intense times, such as after the security incident last May, when we reset all user passwords. Association staff answered hundreds of support requests, 24 hours a day, over the week following the incident.

The site is growing and demand for support is growing as well. Luckily so is the Drupal Association’s tech team. As we get more bandwidth, we are planning to do more in terms of user support. Not just when there is a security incident, but on a daily basis.

What are all the channels where Drupal.org users can get support? There are some old and some new ones:

Issue queues

Issue queues, of course, are the main and most important channel. The ones our team members monitor on a constant basis are:

The first step for most of the issue queues is cleaning up the backlog. Recently we had our first issue queue clean up sprint. There were 675 issues in the Webmasters, 200 in the Content and 336 in the Infrastructure queue before the sprint. A group of 11 people — community members and staff — cleaned up about 300 issues total.

We still have lots though (398 in the Webmasters, 179 in the Content, 311 in the Infrastructure) and are planning to organize more sprints like that. The next one will likely take place during DrupalCon Austin.

We want to stress that community involvement is at the heart of the Drupal Project. Although we have increased the staff commitment to support, we do not intend or desire to displace the enthusiastic and productive volunteers who have put so much time and energy into supporting the community. We will continue to work closely with volunteers to ensure that we find the right balance of actions for each of us so that we support and enhance each others efforts.

ZenDesk

We first used ZenDesk last May, when lots of people were not able to log in and therefore were not able to open an issue about it. This continues to be a problem. Sometimes people lose access to their Drupal.org account, or they are not able to log in for other reasons. The only way for them to ask for help is create another account and open an issue.

To make this easier for people, we decided to keep the help@drupal.org email account and increase its use. Our plan is to use ZenDesk only for the cases when people cannot actually log in to the site. All the other requests will be forwarded to the issue queues.

IRC

There are a few IRC channels where staff members already hang out and provide support alongside community volunteers: #drupalorg, #drupal-infrastructure, #drupal-association.

Twitter

There are two Drupal.org related Twitter accounts @drupal_org and @drupal_infra, which are used to share various Drupal.org news and announcements. They are also used by the community to ask for tips and help related to Drupal.org.

Site contact form

We are planning to forward requests from the form to help@drupal.org. All requests, which are not related to people unable to log in will be forwarded to the issue queues.

If there anything else we’ve missed in terms of support channels, let us know!

Metrics

There are a few metrics we are tracking in the Drupal Association related to user support on Drupal.org. We are happy to report that last month average response time in Drupal.org-related issue queues went down from 56.65 hours to 16.82 hours! About 90% of issues received their first response within 48 hours after the issue was published. These are the results of a great work by the community volunteers (dddave, nevets, silverwing, WorldFallz, dman, and many more), Association staff and especially Lizz Trudeau (lizzjoy), who joined our team as a customer support coordinator exactly a month and a few weeks ago.

We already can see positive changes and are not going to stop. We’ll continue to streamline tools and processes, so that community volunteers together with the Drupal Association staff could provide better support for our users and improve these numbers even more.

Categories: Elsewhere

Janez Urevc: Drupal community, please meet Jayesh Solanki

Tue, 20/05/2014 - 12:49

Jayesh is one of the Drupal's students that were accepted into Google Summer of code program this year. He wrote an introduction post to say hi and explain what he's working on.

Categories: Elsewhere

TimOnWeb.com: Adding a custom extra field to entity / node display

Tue, 20/05/2014 - 10:23

I had a case recently, where I needed to add custom data to the node display and wanted this data to behave like a field, however the data itself didn't belong to a field. By "behaving like a field" I mean you can that field at node display settings and able to control it's visibility, label and weight by dragging and dropping that field.

So, as you may have undestood, hook_preprocess_node / node_view_alter approach alone wasn't enough.

Drupal Tags  drupal 7, drupal planet Read on about Adding a custom extra field to entity / node display
Categories: Elsewhere

Pages