Drupal

InterWorks Drupal Blog: Auditing a Drupal Core Install

Drupal planet - Gio, 2012-05-17 23:21
  • Determine current version of Drupal being used
  • Downloading a clean Drupal Core
  • Running an initial diff (show the difference) between the two
  • Run a detailed diff on

read more

Categorie: Drupal

DrupalCon Munich: Community sets sights on DrupalCon Europe

Drupal planet - Gio, 2012-05-17 23:01

With the passing of the call for papers deadline last week DrupalCon Munich is now a hot topic. Witnessing a fever pitched last minute rush, we have well over 300 session proposals. It is now the role of the track chairs to evaluate submissions using the new selection process. You are encouraged to use comments to indicate sessions you would particularly like to see featured. Final conference program and pre-conference trainings will be announced May 29th via this web site.

This week Neil Kent, Events Director at Drupal Association, was in Munich to meet with conference suppliers, finalise plans at the venue and members of the local organising community team. We are pleased to confirm he has secured a limited number of double rooms at an exclusive DrupalCon rate at The Westin Grand Hotel. Following the successful forumla at DrupalCon Chicago, we are particularly excited to provide attendees exclusive use of the majority of the facilities in the Westin Grand Hotel, home of the conference. Drupalers will have the freedom to meet, code, socialise anywhere, anytime, any way they please.

Florian Loretan, Community Representative, was recently interviewed by both Lullabot and Modsunravelled podcasts. He explains the conference theme "Open Up! Connecting Systems and People" and describes how it will shape the conference. 

If you can't wait until August, the next warmup event to DrupalCon Europe is Drupal Dev Days, Barcelona. From our local team Miro DietikerJoão VenturaFlorian LoretanDaniel NoldeAndreas Sahle and Ralf Hendel will all be attending. Be sure to look them up to find out more about what we have in store for devops track and core conversations. For the more adventurous Drupal Camping is coming to Allersee, Germany. In the meantime why not sample some of the fabulous attractions Munich has to offer on our Pinterest board

The DrupalCon Global Team has seen several appointments in recent weeks. Kris Bytaert, one of instigators of the devops movement, is now devops track chair. Kris recently defined his vision of how devops at Munich. Rick Nashleanas becomes the first Global Content Manager, his latest blog post he discusses the value global chairs will contribute. Karyn Cassio has been appointed Global Community Track Chair, and blogs about how she hopes to encourage people to Come for the Software, Stay for the Community.

Tickets are selling fast. Following the success of Denver, we are confident the DrupalCon Munich will be a sell out. Go buy your tickets! Book a room at the Drupal Hotel!

Finally, if you have any questions relating to DrupalCon Munich our support team can be reached via our contact form in German or English.

Categorie: Drupal

Drupal Watchdog: Building a Mobile Version Of Your Website With Panels

Drupal planet - Gio, 2012-05-17 20:55


Panels variants can easily be used to create a mobile version of your website. If you’re already using Panels, you need one module: Mobile Tools (http://drupal.org/project/mobile_tools). It contains a plug-in for Panels, making it easy to create a specific variant for mobile.

First, create your normal page layout using Panels. Then, create a second variant and when you add content (or in the content settings), choose "Mobile" for your build mode.

It’s as easy as that!

Author Lynette Miles

Lynette Miles is the co-author of Drupal Building Blocks, and has worked in the tech industry for her entire professional career. She became involved with Drupal in 2006, and participates in the documentation team as well as coordinating the Views bug squad.

Categorie: Drupal

David Corbacho: Drupal with Twig templates

Drupal planet - Gio, 2012-05-17 20:46

It's not a secret that Drupal 8 most likely will have in core the option of using Twig templating system.

The discussion about it happened quite fast between March-April 2012. See this issue: [meta] New theme system, where Dries commented: "I just wanted to let everyone know that I'm in support of rethinking the theme system. I'm also comfortable that the team will come up with a good solution."

Why to use a template system when PHP can be already be used as a template system?

Reason to use a template system is mainly to separate the presentation from business logic. When you use PHP as template system you are giving too much power to the presentation layer. So it's easy that things get messy mixing code and layout, and even worse: having security issues in custom themes.

John Albin stood up in Denver and said "We hand themers a loaded gun and tell them to hammer in a nail with it. Oh, and be careful"

So a template engine enforces a clean separation, using a tag-based syntax, so no PHP knowledge is needed and improves reusability of templates.
Web designers with non-programming background are the ones who most will appreciate this separation. And also preventing they do not to shoot themselves in the foot, compromising the security of your web site.

If you are not sold still, read these two articles and comments discussion of the convenience of a template engine that is not PHP:

Templating Engines in PHP, and the follow up. By Fabien, main developer of Symphony and Twig.

Twig

Twig is quite powerful, supporting macros, i18n, extensions, template inheritance, etc. From a developer point of view, Twig is that complex that almost in the line of "what's the point of learning such a complex templating language when we have PHP?"

But from a designer point of view it's more about "I have complete control to do literally anything with the content without having to bother the programmer at all".

Pros
  • The main benefit of bringing Twig to Drupal will be security. The rest of pros/cons are not so important as providing a default secure HTML output.
  • Powerful, expressive template language with easy syntax and very cool features
  • It's widely supported among IDEs (Eclipse, PHPStorm, etc).
  • Not NIH syndrome in Drupal community: It will bring Symphony and Drupal communities closer, since we are sharing more and more components
  • Re-use in JavaScript? There is a github repo at least that provides Twig in JavaScript .
Possible Cons
  • A little steeper learning curve for Drupal.
  • (Just wondering) How tightly coupled is Twig with Symphony?
  • Performance and memory could be an issue (See http://www.phpcomparison.net ), although the bottenecks of your website probably are in other places.
  • (Just wondering) Headaches about versioning? If Twig is evolving constantly, how Drupal 8 core will handle it when development gets frozen.
Drupal and Twig

Some implementation details are in this post Drupal 8 Theme System Sprint. (Jacine, chx, and John Albin)

* chx's sandbox: Drupal 8 with twig

For Drupal 7 we have some also these two experimental modules

* ReneB's sandbox Twig for Drupal (Twig implemented as a theme engine)
* smokris' Twig template engine (Twig implemented as an input filter)

See also

ReneB presentation slides: Twig for Drupal @ Frontendunited Amsterdam 2012

Note: When googling about Twig, notice that most of articles, benchmarks, etc are based on old versions of Twig.
Twig has evolved a lot in the last months.

Categorie: Drupal

Drupalpress, Drupal in the Health Sciences Library at UVA: Rule Scheduling and Emailing Views According to CCK date fields

Drupal planet - Gio, 2012-05-17 19:24

Sometimes Drupal opens up a big can of whoop-up process on ya, and Rules Scheduler is one of those gems.  Rule Scheduler allows you to use rule triggers to schedule rule sets.

Use Case:Ever want to send an email the day before a scheduled event?  We use CCK Sign-up and wanted to send an email to users one week before an event, as well as the day of.  We also needed to send teachers views of the roster of students

Here’s the 2 minute mojo on it http://www.youtube.com/watch?v=55HwOzFHoB8 and it just highlights the mistakes I was making.

The recipe came out of Drupal documentaiton, and these two tutorials got me 90% of the way:

working with scheduled rules

And I thought I was home free, however I ran in to a pretty stupid problem that took me a minute to understand = all the identifiers need to have tokens in them with unique values or else they overwrite themselves in the database.

Solution? Easy = add some tokens – [node:nid] worked for me

The nicely scheduled rules

Another fun feature in this project was revisiting one of my favorite modules: Rules Views Integration.  The cool thing about scheduling a rendered view in a rule set is that the rule gets rendered at the last minute and so you can schedule (in our case) a class roster to go out and it’ll have the most up to date information possible at the time of sending.

NB: I also ran in to a problem where cron wasn’t sending my emails initially.  I have no idea why it was stuck, however Ultimate Cron has been a good friend of late and unlocking and running the tab got it back on track = I haven’t seen it stall in a few weeks now.

Ultimate Cron unlock and run run run

 

Something else I haven’t gotten into yet, however, is the use of the Rules Scheduler Views.   Something tells me there is some magic to be had in there, used correctly.  At this point however I’m just using the off-the-shelf defaults.   I know of no Views Bulk Operations for scheduled rules, so perhaps the default info is all there is to know.  In any case, it’s an elegant solution to working with drupal’s cron functions.

Categorie: Drupal

Patrick J Waters: Recent Project: Converting the BMJ (British Medical Journal) to Drupal

Drupal planet - Gio, 2012-05-17 18:57

Recently I had the privilege of being part of a team that converted the BMJ (British Medical Journal) to Drupal. The BMJ (British Medical Journal) is one of the world’s top five international peer reviewed medical journals with more than 1.5 million unique visitors and 6.8 million page views per month.You can read the about the project and it's success at http://drupal.org/node/1557636

Categorie: Drupal

Pronovix: Drupal Government Days Brussels videos online

Drupal planet - Gio, 2012-05-17 18:04
17 MayDrupal Government Days Brussels videos online

It seems like a lot is moving in Drupal for government, after Drupal got serious momentum when the White house launched their Drupal site the Drupal Government Days in Washington DC on 18 May, 2012, will be the third dedicated Drupal Government event.

Read more
Categorie: Drupal

Mediacurrent: "Shun" Your Clients to Serve Them Better

Drupal planet - Gio, 2012-05-17 17:58

With something as simple as the post title, I've already broken one of the rules I'll be setting forth here—that of expectation setting. This is not a post about ignoring your clients or putting them aside or picking only the right clients and shunning the rest. This real subject of this post is the '-tion' (pronounced shun) suffix at the end of the three key thoughts: communicaTION, expectaTION and execuTION.

Categorie: Drupal

Phase2 Technology: Office of the New York Attorney General Finds Great Fit with OpenPublic: An Interview with New Amsterdam Ideas

Drupal planet - Gio, 2012-05-17 16:43
When you're building a web site for a government agency, the importance of finding the right tool for the job can mean the difference between a simple web site and a true solution. For the team at New Amsterdam Ideas, OpenPublic was the right tool for the job of revamping the site of New York Attorney General Eric T. Schneiderman. I sat down with Andrew Hoppin and Sheldon Rampton from
New Amsterdam Ideas to learn more about their experience building with OpenPublic.
Categorie: Drupal

Clemens Tolboom: A pinch of Symfony for D8MI?

Drupal planet - Gio, 2012-05-17 16:09

One of the goals of Drupal 8 Multilingual Inititive is to refactor Gettext file handling by a component. The first effort was Make gettext .po generation its own abstracted functionality by Gábor Hojtsy, Sutharsan, fubhy, sun and clemens.tolboom

While I (clemens.tolboom) was working on that issue I skimmed over the Translation component delivered by Symfony to see whether we could match their architecture (why reinvent components?) or even take over their components.

Progressing further and discussing progress with Gábor Hojtsy and sun on #drupal-i18nsun suggested to create a new issue trying to use the Symfony Translation component and see what happens with Let Symfony Translation component handle language messages.

This lead me into a new world of GLP versus MIT, php development, git squash, github pull requests etc.

Here are some experiences from my pull requests for Symfony (click closed button to see all.)

Experiences Licenses and the copy paste cat

My initial D8MI related pull request Drupal gettext was a bummer as I added a slightly changed and objectified copy-paste version of some parts of gettext.inc forgetting GPL does not allow loosening the license into a MIT version.

git squash et al

By having a pull request the receiving party wants a clean commit. But as a developer you commit every new feature into a local commit to make cherry-picking possible. For this to work you need to squash all commits into the commit belonging to the pull request.

Thanks to stloyd pointed me to Using Git Rebase to Squash Commits explained a great deal to me and http://symfony.com/doc/master/contributing/code/patches.html

Should we go using Symfony Translation component

The Symfony Trans2drupal pull request is developed based on the patch for Drupal Let Symfony Translation component handle language messages. That introduces a brittle dependency as it is not committed. It is not actively commented too. So that's not comforting.

The flip side is we can drop a lot of code and focus on our Drupal code when the pull request lands. In writing the code I learned new ways of coding (more PHP less Drupal) which is nice.

Image taken from http://www.mjdinteractive.com/mjd-blog/2012/04/drupal-8-to-utilize-symfo...

Categorie: Drupal

Drupal Watchdog: Responsive Web Design: Look Great On Any Device

Drupal planet - Gio, 2012-05-17 00:17

It’s 2011, and the world is going mobile. People don't just use their desktop computer or laptop anymore to visit the sites you build. They're coming at you with smartphones, tablets, TV screens— and who knows what they’ll bring next year? With all this device-switching going on, one of the questions that site builders ask themselves is, how can we keep catering to all these different devices? The good news: There is a way. It’s called responsive webdesign.

In this article, we briefly lay out what responsive webdesign is, and, more importantly, how you can use it in your Drupal projects today.

What is responsive web design?

In his 2010 article on 'A List Apart', Ethan Marcotte coined the term "responsive webdesign," referring to responsive architecture. If architects can design rooms that change according to the number of people inside them, why can't web designers build web pages that adapt to the people who view them?

As you may have guessed from the name, responsive web design is all about, yes, responding to the site user's device specifics. Does the device have a wide or narrow screen? How is the user holding the device? What OS is powering the device? All these questions determine how the user experiences your website. With responsive webdesign, you can accommodate all these possible differences.

Using a combination of CSS3 media queries (which query the device's capabilities to determine the proper stylesheets to load), a flexible grid acting as the site’s foundation, and images that change according to the screen resolution, responsive webdesign allows you to work in a so called "device agnostic" way. It doesn’t matter whether the user has the latest tablet, or an early-adapter smartphone: if your design is responsive, it can adapt to the user. Think of it as a fluid (vs fixed) webdesign on heavy steroids.

Author Bruno De Bondt & Kristof Orts

Bruno De Bondt has been theming and developing Drupal sites since 2005. He is the technical lead at DeWereldMorgen.be, a popular independent news website in Belgium. He has also worked as a Drupal developer and themer for Krismon, one of the main Drupal shops in Europe. Working with them, he has built several media, non profit and advocacy websites. Bruno currently lives in Vancouver, Canada. You can reach him on Drupal.org or Twitter as brunodbo or on http://brunodbo.be.

Kristof Orts loves the web and specializes in user experience and usability. He's also a team player, for big projects he likes to work with partners that have the same knowledge and passion as he does. Some keywords Kristof uses every day: CSS3, HTML5, JS, flexible layouts, responsive and mobile design. He also loves to speak about these things at conferences.

Categorie: Drupal

Friendly Drupal: 15 modules to improve your Drupal administration and content management experience (D6 & D7) - part II

Drupal planet - Mer, 2012-05-16 21:16

A continuation of the useful administration modules list started in Part I.

Devel

Used extensively by the developers, devel module can also be very helpful to the site administrators. One of its more popular features is automatic content generation (such as users and nodes) - including media files! Another nice feature is switching between users (for example, to test access permissions). It also integrates well with the admin menu module mentioned in the first part of the article.

To use Devel on Drupal 6, go to admin/generate and choose the type of items to generate (the modules comes with taxonomy, content and users, other modules add more types of content). The module can also delete the existing items (for examples, nodes by type).

Related stories: 

If you liked it this story, you might like the following:

15 modules to improve your Drupal administration and content management experience (D6 & D7) - part IRedirect 403 to User Login (r4032login module).Custom contact form with conditional fields using webform and webform conditionalDrush Site Aliases and Interactive ShellInstall Drupal 7 site with Drush

read more

Categorie: Drupal

Drupalize.Me: Getting Started with Calendar

Drupal planet - Mer, 2012-05-16 15:00

In this chapter we will get a calendar up and running on our demo site. We will cover the necessary modules, how to install them, as well as basic site configurations. We'll also show how simple it is to get a calendar on your site using a views template, and then give a tour of some calendar features.

Resources  Modules Needed: 9m Publication date  May 16, 2012 - 9:00am Rules trigger for changing creation date on a scheduled publication.  No
Categorie: Drupal

Drupalize.Me: Calendar Series Overview

Drupal planet - Mer, 2012-05-16 15:00

In this series we focus on building calendars with Drupal. We'll be covering topics such as basic configuration for fields and views, using calendar templates, creating blocks and different ways of displaying the calendar, along with customizing the look and feel.

This video assumes that you understand the basics of content, fields, and Views in Drupal. If you need a refresher on these topics, or want to find out more about using the Date module, here are some other tutorial series to review:

2m Publication date  May 16, 2012 - 9:00am Rules trigger for changing creation date on a scheduled publication.  No

read more

Categorie: Drupal

WANTED: Drupal Developer

drupal - Mer, 2012-05-16 10:07

Eastvantage has an exceptional opportunity for a driven, technically savvy team-player who has a strong desire to become a real guru. We are at the cutting-edge of developments in this ever-changing landscape and are now set on Drupal. When you join our team, you'll be directly working with our Europe and US based clients.

If your skill set includes expertise with Drupal and PHP you possess the aptitude to learn the necessary skills to become a Drupal expert, keep reading!

DRUPAL DEVELOPER
National Capital Reg - The Fort, Taguig City

Primary Duties and Responsibilities include:
Create new Drupal modules, blocks, views from scratch or tweaking
Work in a team with agile tools
Configure servers and hosting
Stay current on Drupal, web design, web development, analytics, website optimization and trends through publications, blogs, forums, and self-discovery.

What you need:
Expert knowledge of Drupal, in particular the modules CCK, Panels, Views, Node Queue, Image Cache, Display Suite, Ubercart
Fluency in English (spoken and written) is a must.

Job Qualification:
You are interested in and active within the Drupal community
Self-starter with "can-do" attitude, strong work ethics, time and project management skills
Experience working in a virtual team environment
Ability to adapt to a constantly changing environment
Excellent command of the English language, both oral and written.

Our offer:
A challenging role in a fast growing international team
An opportunity to show your initiative and grow with us
A no-nonsense culture and direct interaction with our clients
Prime offices located in Fort Bonifacio Global City, Taguig
A competitive remuneration package and Manila working hours.

All inquiries: recruitment@eastvantage.com
Website: www.eastvantage.com

Categorie: Drupal

Modules Unraveled: 020 Steven Jones and The Aegir Project - Modules Unraveled Podcast

Drupal planet - Mer, 2012-05-16 07:00

This week I talk with Steven Jones of the Aegir Project.

Here are some of the questions I asked him
  • I’ve only heard of Aegir, but never actually used it. What exactly is it?
  • How did you get started with Aegir?
  • What kinds of things can Aegir do other than site install?
  • How does Aegir integrate with Git?
  • What sort of people is Aegir appropriate for?
  • How does Aegir compare to other tools like Pantheon or Acquia’s dev cloud?
  • What about tools like Puppet or Capistrano?
  • How can people get help?
  • What’s the future of Aegir?
Questions from Twitter
  • @TimeRaider: What are the plans for 7.x release and new Drush support?
  • @tgroff: What should distributions do to ensure Aegir compatibility?
Submitted on Wed, 05/16/2012 - 00:00
Categorie: Drupal

Matt Farina: Drupal 7.14 API Compatibility Breaking Change

Drupal planet - Mer, 2012-05-16 02:30

Minor Drupal versions are usually for bug fixes, security updates, and the occasional new feature that doesn't break backwards compatibility. Compatibility changes are reserved for major Drupal releases. There are exceptions such as Drupal 6.2. It was such a big deal there is an update documentation page just for this release. When Drupal 7.14 made an API breaking change without providing documentation or notification to module developers I was quite surprised. The lack of detail made it difficult to track down the changes when I had a broken codebase. Here are the details so others can, hopefully, have an easier time if they run into this problem.

Continue Reading »

Categorie: Drupal

Matt Grasmick: Connecting Facebook with Drupal, the easy way: Part 2

Drupal planet - Mar, 2012-05-15 23:18

In Part 1: Connecting Facebook with Drupal, the easy way I extolled the wonders of Facebook OAuth and showed off its excellent API with an example of how to map facebook user data to Drupal user objects.

For part 2, I'm going to show you another side of the API. But before we get started, I'd like to give a quick shout-out to Nathan Haug (@quicksketch), author of Facebook OAuth. I'm about to take a lot of text directly from the Nate's well-written README.txt, so don't be confused by the liberally-applied quotation marks.

Writing custom Facebook OAuth Actions

"The Facebook OAuth module provides an API for executing queries against Facebook's vast store of user data." How does this translate into user experience (UX)? In extreme layman's terms, Facebook Oauth allows you to create custom buttons that, when clicked, will 1) grab some good facebook data, and 2) let Drupal interact with it. Sounds like fun, right?

Here are a few examples of things that you could do:

  • Create a post to facebook wall link on certain node types
  • Import a list of a user's facebook friends and expose it to Views (whoa!)
  • Import a user's facebook pictures and ... expose them to the Media module!? (that would be cool)

Hopefully you're starting to see how great this can be! Best of all, you can accomplish all of this without learning Facebook's Javascript SDK! Nate has streamlined the process of asking for facebook permissions, obtaining access tokens, etc. You just need to make a few Drupal hooks and you're off!

A simple example

To create a custom Facebook Oauth action, you'll need to drop a bit of code into a custom module. We'll start by telling Facebook Oauth that we have a new action that it should be aware of. This is done with hook_fboauth_actions().
/** * Implements hook_fboauth_actions(). */ function mymodule_fboauth_actions() { // Give each action a unique key, such as "mymodule_photo_import" for a photo // import. This function should begin with the name of your module. $actions['mymodule_photo_import'] = array( // Give you action a human-readable name. This will be used when showing // the user a link to start this action. 'title' => t('Import my Facebook photos'),   // Specify the name of your callback function that contains the import. 'callback' => 'mymodule_fboauth_action_photo_import',   // Specify permissions you need to do this action. See the Facebook API for // a list: http://developers.facebook.com/docs/authentication/permissions/ 'permissions' => array( 'user_photos', // Gets access to a user's photos. ),   // Optionally specify a file that contains your callback function. If you // put your callback function in the .module file, this is unnecessary. // 'file' => 'mymodule.inc',   // Optionally define a theme function for printing out your link (not // including the "theme_" prefix). If you use this option, you must register // this function in hook_theme(). If you don't use this option, the link // will be output with the theme_fboauth_action() function or the automatic // suggestion theme_fboauth_action__[action_name](). // 'theme' => 'mymodule_fboauth_action', ); return $actions; }

Next, you'll need to actually create the mymodule_fboauth_action_photo_import() function specified in the above hook. Until now, we've engaged in what Jeff Eaton might refer to as "Wishful Programming," meaning that we make calls to functions that we wish existed. Let's make this function a reality.
/** * Facebook OAuth action callback; Import a user's Facebook photos. */ function mymodule_fboauth_action_photo_import($app_id, $access_token) { // Query against the Facebook Graph API. See the Facebook API for a list of // commands: http://developers.facebook.com/docs/reference/api/ $result = fboauth_graph_query('me/photos', $access_token); foreach ($result['data'] as $photo) { // Do whatever you like with the photos! }   // Optionally set a completion or error message. drupal_set_message(t('Import complete!'));   // Optionally return a path to which the user will be redirected. If not set // the path in the $_REQUEST['destination'] variable will be used. If there // is no path at all specified, the user will be redirected to the homepage. return 'mymodule/import-complete'; }

"Now to get the user to actually execute this action, you need to link to Facebook so that the user can grant the necessary access. You can do this with the utility function fboauth_action_display(). Our example action was keyed as "mymodule_photo_import", so we would print the link like this:"
 print fboauth_action_display('mymodule_photo_import');

"Now when the user clicks on the output link, they will have the option of granting access to the requested information. If they approve, your callback function will be executed."

What's going on behind the scenes?

Before I go too much further, it may be good for us to go over exactly how Facebook Oauth is doing its magic. The README.txt does a great job of explaining this:

..in order to use this API it is important to understand the basic concepts of OAuth. In short, the user (and only the user) is capable of granting your site access to query information
against Facebook. The user is also only able to do this on Facebook.com, so any requests to query against Facebook must first redirect the user to Facebook where they can grant access. The full workflow looks like this:

  1. The user clicks on a link (such as the Facebook Connect button) that sends the user to Facebook. If the link is requesting permissions that the user has not yet granted, the user is prompted to allow access. After the user has granted access, or if the user granted access previously, the user is redirected back to your site.
  2. When the user is redirected back to your site, Facebook sends along an access "code". Your site then takes this access code and does a server-side request to Facebook's API servers. Facebook's servers return an access "token" to your server. This token is valid for a short amount of time and allows you to access the information to which the user granted you access.
  3. Your site can now execute queries against the user's Facebook information while the token is valid. Because this token only lasts a short amount of (about 6 hours usually), it's safest to always request access from Facebook before every data import session (by having the user click the link), which will renew the existing token or generate a new one.

Whew! Let it me said this really does happen behind the scenes. If the user has already granted the necessary permissions, they don't even see the redirect. Now let's dive back into the code.

Calling your custom actions programmatically

You may be tempted to ask, "But Matt, what if I don't want to require the user to click a button? Can I just fire my facebook action programmatically?" I'm glad you asked, because yes, you can! There's a fairly simple way to accomplish this.

// Extract the link from a given fboauth action. $fb_link = fboauth_action_link_properties('my_custom_action');   // Extract the request url from a given fboauth action link, including the query parameters. $fb_query_url = url($fb_link['href'], array('absolute' => TRUE, 'query' => $fb_link['query']));   // Redirect user to facebook for authorization. drupal_goto($fb_query_url);

When might you want to do use this method? I had two use cases for this approach:

  • Creating a menu callback that will execute an action.
  • Creating a $form['submit'][] handler that will execute an action.
Pushing data rather than pulling it

Facebook also offers a rich API for sending data back to Facebook. How can we utilize those features? It's not actually that hard. Let's take a look at how we can accomplish this by leveraging some of Facebook Oauth's built-in ability to communicate with Facebook.

The following snippet uses Facebook's Graph API to post to a user's Facebook wall.

function mymodule_fboauth_action_post_to_wall($app_id, $access_token) { // Build the data array that we'd like to post to facebook. // See https://developers.facebook.com/docs/reference/api/user/#posts for valid array keys. $query = array( 'link' => $awesome_node, 'picture' => url(drupal_get_path('theme', 'my_theme') . '/images/logo.png', array('absolute' => TRUE)), 'name' => t('@name loves Drupal', array('@name' => $user->name)), 'caption' => t('ZOMG'), 'description' => t('This message was endorsed by Grasmash'), 'app_id' => variable_get('fboauth_id', ''), );   $response = fboauth_graph_query('me/feed', $access_token, $query, 'POST'); if (isset($response->id)) { drupal_set_message(t("You have posted to your facebook wall. That must have been hard. Take a break. Have drink. You're done.")); } else { watchdog('mymodule', 'Error executing fboauth action: @error', array('@error' => (isset($reponse->error) ? $response->error : t('Something went horribly wrong')))); drupal_set_message(t("Oops! We couldn't post to your facebook wall. Try clicking harder.")); }   // Optionally redirect user. return '<front>'; }

The Encore

The possibilities don't stop there! Facebook OAuth also provides:

  • alter hooks to modify default actions
  • save and pre-save hooks for facebook registrations
  • the ability to hook into the deauthorization process

How might that help you? Well, I used these hooks to integrate Facebook OAuth with the Invite module, such that Drupal can send invites via facebook and then react to fulfilled (facebook) invitations. I'm sure you'll think of great ways to use it too.

That's all folks! I hope these quick posts have been helpful for you. If you liked the article, mention me on twitter or /msg me on IRC — madmatter23.

7.x, drupal, facebook, oauth, fb, fboauth
Categorie: Drupal

Mediacurrent: Webinar: A Drush Aliases Primer

Drupal planet - Mar, 2012-05-15 21:45

A drush site alias file allows you to streamline advanced drush commands and make running them against both local and remote sites a breeze. With a properly configured alias file and an SSH key you can run frequently used commands that have complex options, with a concise easily remembered "alias" on any site. This will help you be far more productive and you will find yourself using drush itself far more often.

Categorie: Drupal

Acquia: File import improvements for Migrate 2.4

Drupal planet - Mar, 2012-05-15 20:56

The Migrate module is the leading tool for migrating data from an external application into Drupal. Migrate has been used to bring many world class sites onto Drupal, including The Economist, Martha Stewart and thousands more. The main theme of the upcoming Migrate 2.4 release is improved file handling on Drupal 7.

Categorie: Drupal

SaperFare srl, via chiantigiana per strada 14/A 50023 - Impruneta (FI) P.I e C.F 05199410480