Oshyn Home Page
  • expertise
    • Overview
    • Contact Us |
    • Latest work: www.miramax.com
  • solutions
    • Overview
    • Content Management
      • Common Issues
      • Choosing a CMS
      • Training
      • Drupal Development
      • Jahia Integration
      • Sitecore Consulting
      • Open Text Web Solutions RedDot CMS
      • EPiServer CMS Consulting
    • E-commerce
    • SOA
    • Portals & Collaboration
    • Web Strategy
    • Mobile Platforms
    • Social Media
    • Contact Us |
    • Latest work: www.miramax.com
  • work
    • Overview
    • Client Quotes
    • Contact Us |
    • Latest work: www.websense.com
  • resources
    • Overview
    • News & Events
    • Newsletters
    • Blog
    • White Papers
    • Success Stories
    • Press Kit
    • Contact Us |
    • Latest work: www.disneydvd.com
  • partners
    • Overview
    • Agency Partner Program
    • Technology Partners
    • Contact Us |
    • Latest work: www.nea.org
  • company
    • Overview
    • Contact
    • Careers
    • Leadership Team
    • News & Events
    • Social Responsibility
    • Contact Us |
    • Latest work: www.icon4x4.com
Enterprise Drupal: Ubercart eCommerce Addresses and Location Module
  • Tweet
Monday, March 01, 2010  /   Eric Aguayo Eric Aguayo
close

Eric Aguayo


Enterprise Drupal: Ubercart eCommerce Addresses and Location Module

In Drupal, the Location module is used to handle everything related to locations or addresses whether it is to associate locations with users or nodes. Ubercart ecommerce module, is used to handle website payments, and is widely used due to its ease of usability. The biggest business benefit is to provide an integration of both of these modules for a seamless ecommerce/payment processing experience.

The Ubercart module suite purpose is to provide a complete built-in solution to handle website payments and e-commerce solutions, which means that is probable that you not need to download any other plug-in module for Ubercart to handle a specific functionality. This solution might seem better for the Drupal user since the user might not have to install additional software to handle specific functionality as it might be provided one of the Ubercart built-in modules. However this represents some drawbacks, one of them is that if there is a bugfix on one of the Ubercart built-in modules we might need to wait until the next realease of the whole Ubercart module suite to get the module update and the other is that there might be some functionality that is being provided by other modules, such as the billing address. The Ubercart Drupal module has its own way to handle billing addresses, however there is a more specialized module to handle such things such as the Location module mentioned before.


Fortunately, Drupal flexibility through the hook system allows us to provide an integration between the Ubercart billing addresses and the location module by developing a custom module. Suppose that a client request is to give the users the ability to set the billing address (which is handled by Ubercart) as the same as the profile address (which is handled by the Location module). For this, we are going to include the location data attached to a node/user into the billing address of the recurring fees checkout page. First we need to understand some differences between ubercart and location module addresses storage. Ubercart store the province/state data by a province id called zone id which can be retrieved by the {uc_zones} table. The location module on the other hand retrieves the province/state data by returning the state code, which corresponds to the zone_code on the {uc_zones} table for Ubercart. Based on this, we write the following function to perform the conversion between the zone code to the zone id.

<?php
  
function uc_location_address_get_zone_id($zone_code)
  {
      
$query = 'SELECT zone_id FROM {uc_zones} WHERE zone_code = "%s"';
      
$result = db_query($query, $zone_code);
      
$zone_id = db_result($result);
      return 
$zone_id;
  }
?>



Something similar happens with the country where we can have the following function to perform the conversion. This is only necessary if we are using the country field for the billing address.

<?php
  
function uc_location_address_get_country_id($country_code)
  {
      
$country_code = strtoupper($country_code);
      
$query = 'SELECT country_id FROM {uc_countries} WHERE country_iso_code_2 = "%s"';
      
$result = db_query($query, $country_code);
      
$country_id = db_result($result);
      return 
$country_id;
  }
?>


Now, we need to include this data as part of the checkout form so we can display the data on the ubercart fields. We are going to include this information in hidden fields so they can be optionally included as the billing address information. We can do this through the Drupal hook_form_alter which can be implemented in a module called uc_location_address

<?php
  
/**
   * Implementation of hook_form_alter
   */
  
function uc_location_address_form_alter(&$form, $form_state, $form_id)
  {
      global 
$user;
      
// We want to execute the following code only when the checkout form is loaded
      
if ($form_id == 'uc_cart_checkout_form') {
          
// We add a javascript code to optionally include the user/node address
          // as part of the billing address
          
drupal_add_js(drupal_get_path('module', 'uc_location_address') .
 
'/uc_location_address.js');
          
          
// We load the node or user containing the address we want to display
          // in this case we are using a node that can be added through the content
          // profile module.
          // For a user object (usually loaded through user_load function),
          // locations are tipically retrieved from $account->location
          
$profile_node = node_load(array('uid' => $user->uid, 'type' => 'profile'));
          
          
// We add this information as part of the billing pane of checkout form.
          // It can be added directly to the fields but we are adding to different fields
          // so user can optionally choose to use the user address as billing addresses
          // which are not necessary the same
          
$form['panes']['billing']['profile_node']['street'] = array('#type' => 'hidden', '#value' => $profile_node->locations[0]['street'], );
          
$form['panes']['billing']['profile_node']['additional'] = array('#type' => 'hidden', '#value' => $profile_node->locations[0]['additional'], );
          
$form['panes']['billing']['profile_node']['city'] = array('#type' => 'hidden', '#value' => $profile_node->locations[0]['city'], );
          
$form['panes']['billing']['profile_node']['province'] = array('#type' => 'hidden', '#value' =>
uc_location_address_get_zone_id($profile_node->locations[0]['province']), );
          
$form['panes']['billing']['profile_node']['country'] = array('#type' => 'hidden', '#value' =>
uc_location_address_get_country_id($profile_node->locations[0]['country']), );
          
$form['panes']['billing']['profile_node']['postal_code'] = array('#type' => 'hidden', '#value' => $profile_node->locations[0]['postal_code'], );
          
          
// Finally, in our case we wanted to override the billing address select drop down
          // by a checkbox to indicate that we want the billing address to be the same address
          // as in profile information.
          // We also tie to a javascript function triggered on the onchage event.
          
$form['panes']['billing']['billing_address_select'] = array('#type' => 'checkbox', '#description' =>
t('Billing Address same as profile information'), '#attributes' =>
  array(
'onchange' => 'uc_location_address_select();'), );
      }
  }
?>


Finally we add some javascript code to the uc_location_address.js file to handle the dynamic fill of the fields.

function uc_location_address_select()
  {
      
// check if the option has been selected, if so copy all fields values
      
if ($("#edit-panes-billing-billing-address-select") . attr("checked") == true) {
          $(
"#edit-panes-billing-billing-street1") . val($("#edit-panes-billing-profile-node-street") . val());
          $(
"#edit-panes-billing-billing-street2") . val($("#edit-panes-billing-profile-node-additional") . val());
          $(
"#edit-panes-billing-billing-city") . val($("#edit-panes-billing-profile-node-city") . val());
          $(
"#edit-panes-billing-billing-zone") . val($("#edit-panes-billing-profile-node-province") . val());
          $(
"#edit-panes-billing-billing-country") . val($("#edit-panes-billing-profile-node-country") . val());
          $(
"#edit-panes-billing-billing-postal-code") . val($("#edit-panes-billing-profile-node-postal-code") . val());
          
// prevent the fields from being edited
          
$("#edit-panes-billing-billing-street1") . attr("disabled", true);
          $(
"#edit-panes-billing-billing-street2") . attr("disabled", true);
          $(
"#edit-panes-billing-billing-city") . attr("disabled", true);
          $(
"#edit-panes-billing-billing-zone") . attr("disabled", true);
          $(
"#edit-panes-billing-billing-country") . attr("disabled", true);
          $(
"#edit-panes-billing-billing-postal-code") . attr("disabled", true);
      } else {
          
// In case the option has been deselected, clear and enable the fields
          
$("#edit-panes-billing-billing-street1") . val("");
          $(
"#edit-panes-billing-billing-street2") . val("");
          $(
"#edit-panes-billing-billing-city") . val("");
          $(
"#edit-panes-billing-billing-zone") . val("");
          $(
"#edit-panes-billing-billing-country") . val("");
          $(
"#edit-panes-billing-billing-postal-code") . val("");
          $(
"#edit-panes-billing-billing-street1") . removeAttr("disabled");
          $(
"#edit-panes-billing-billing-street2") . removeAttr("disabled");
          $(
"#edit-panes-billing-billing-city") . removeAttr("disabled");
          $(
"#edit-panes-billing-billing-zone") . removeAttr("disabled");
          $(
"#edit-panes-billing-billing-country") . removeAttr("disabled");
          $(
"#edit-panes-billing-billing-postal-code") . removeAttr("disabled");
      }
  }


Conclusions and Recommendations


We can provide integration between contributed and core modules through the Drupal hook system without the need of hacking into the core functionality of the modules. It is important that contributed module developers leverage the functionallity of existing Drupal modules so the code and/or data duplication is reduced and extra effort in integrating solutions is avoided.

The code presented here provides a very specific functionality which can help to solve a very specific case but does not work as a general drupal module or provide a seamless integration between Ubercart addresses and Location module. However, I believe this can be the start of a more general module which can be further uploaded to the community. I have already filled a feature request on the issue queue of the Ubercart module http://drupal.org/node/520484 which stills active but hopefully some day a location integration module will be added to the Ubercart modules suite.
  • Share
  • Facebook    0
  • Twitter    0
Trackback Link
http://www.oshyn.com/BlogRetrieve.aspx?BlogID=1907&PostID=125042&A=Trackback
Trackbacks
Post has no trackbacks.

blog comments powered by Disqus

Pages: Previous Next

TwitterFacebookLinkedIn

Blog Authors

Christian Burne Christian Burne
question button image

 



Captcha Image

question button image
Subscribe Subscribe Subscribe Subscribe Subscribe
OTHER CATEGORIES
  • ALL

  • General

  • Web Content Management

  • Sitecore CMS

  • Open Text

  • Jahia

  • Drupal

  • EpiServer

  • SOA

  • Social Media and Mobile

  • Software Development

  • Visit Bloggers Profiles

RELATED POSTS
  • OpenText Management Server 10: Navigation Manager Design
  • OpenText Management Server and Delivery Server 10: Access Content Elements of Different Pages
  • 10 Reasons Why a CMS is Important to Your Business
  • Oshyn's Top 10 Favorite Posts from 2011
  • SaaS WCM TCO Comparisons are Premature
  • Using Sitecore WebControl to Customize Google Calendar Reminder Button
  • Oshyn's Review of the 2011 Gartner Magic Quadrant
  • Agile Project Management Using JIRA and Greenhopper
  • Content in OpenText Delivery Server & Moderation in Management Server
  • Storing Sitecore Media Assets - Database or File System

WHITE PAPERS
    ajax rotator

    Web Content Management, Social Media, Content: Three Kings for Your Website Web Content Management, Social Media, Content: Three Kings for Your Website (846 KB)
    Companies pursuing online marketing success, including Social Media, can increase the power of their online presence with right strategy and technology to maximize online visibility and engagement. Download this FREE white paper on the WCM, Social Media, and Content triad.

    Drupal Performance Tuning Drupal Performance Tuning (1213 KB)
    In this Free White Paper Oshyn evaluates Drupal Performance Tuning, sharing the results of testing response time and Requests Per Second (RPS) that a server can hold before the response rate becomes unacceptable. In this paper you will learn about optimizing performance of a website through changes to settings and the server.

    Enterprise Drupal: Social Media, Mobile, and Rich Media in your Website Enterprise Drupal: Social Media, Mobile, and Rich Media in your Website (1015 KB)
    In this free WCM white paper, Oshyn examines advanced Drupal capabilities: Multisite Environment, Access Control and Security, Enhanced User Profiles, Custom Breadcrumbs, Mobile Support, Podcasts, Advanced Multimedia, Locations and Maps, Internationalization and Locale based content, Events and Scheduled Tasks, Rules Actions and E-Commerce Solutions.

    Drupal Multilingual Drupal Multilingual (636 KB)
    There are several multilingual installation methods for Drupal. In this free white paper Oshyn evaluates and recommends several methods of using Drupal Open Source CMS to manage websites in multiple languages.

    Drupal Social Media Drupal Social Media (1297 KB)
    Looking for an Open Source CMS to for “Social Media Optimization” of your website? Download this free white paper, “Drupal and Social Media”, to learn about the extensive Social Media this Open Source CMS offers to create a dynamic and engaging website and online community.

    Drupal Multisite Options Drupal Multisite Options (427 KB)
    There are several multisite installation methods for Drupal. In this free white paper Oshyn evaluates and recommends several methods of using Drupal Open Source CMS to manage multiple sites.

    Open Source CMS: Is It Right for your Organization Open Source CMS: Is It Right for your Organization (496 KB)
    In this free white paper, “Open Source CMS: Is It Right for your Organization?” we share an in-depth look at the pros and cons of using Open Source Content Management Systems (CMS) or Open Source Web Content Management (WCM) platforms. Oshyn helps clients select CMS/WCM solutions based on the specific requirements of each client.

    Affiliate Content Sharing in a CMS/WCM World Affiliate Content Sharing in a CMS/WCM World (273 KB)
    The Content Editors at your company have created GREAT content! Now how do you share it? In this Free white paper learn several methods for using a Content Syndication tool to automatically repurpose content and how Content Sharing can generate business value.

    Sitecore and Social Media - An Interactive Web Content Management Platform Sitecore and Social Media - An Interactive Web Content Management Platform (898 KB)
    Social Media has revolutionized how people interact with business. In this white paper Oshyn’s Lead Sitecore Developer, Prasanth Nittala, discusses key points from the perspectives of marketing and Web development that make Sitecore a compelling choice for engaging in Social Media via your website. This Sitecore white paper draws from Oshyn’s expertise as a certified Sitecore partner, helping organizations understand the distinct capabilities offered by Sitecore CMS.

    The Business Case for Leveraging Open Text Web Solutions Delivery Manager The Business Case for Leveraging Open Text Web Solutions Delivery Manager (451 KB)
    This free white paper explores the evolving needs of small and medium size businesses and explains how the Open Text Web Solutions Delivery Manager (formerly RedDot LiveServer) can help businesses build their brand, reputation, and client base. This white paper examines strategies, key points and tips to leverage the features available in Open Text Web Solutions (RedDot CMS) to achieve an impactful user experience and to maximize visitor engagement through a reliable and powerful implementation.

    Open Text Best Practices: Part One Open Text Best Practices: Part One (763 KB)
    Authored by Oshyn Senior Consultant, Adaeze Okorie, this free CMS white paper draws from Oshyn’s vast experience as an Open Text Certified Partner, in helping organizations define strategies to meet business goals while implementing Open Text Web Solutions (RedDot CMS). Specifically in this free white paper Adaeze Okorie discusses strategies, key points and tips to leverage the features available in Open Text Web Solutions (RedDot CMS) to achieve an effective, reliable and robust implementation.

    Improving the ROI of Business Software: Service Oriented Architecture from a Business Perspective Improving the ROI of Business Software: Service Oriented Architecture from a Business Perspective (398 KB)
    Software selection and technology decision making should no longer be left to the IT department alone. By gaining an understanding of Service-Oriented Architecture, business people outside of the IT department will be better positioned to maximize the ROI of the company's technology platforms. Download this free white paper to learn more.

    Getting Over Social Media Marketing Paralysis for B2B Getting Over Social Media Marketing Paralysis for B2B (2254 KB)
    Many companies are well aware that Social Media has become critically important to engaging audiences and promoting online "presence" while some wonder how to approach their C-level executives and prove that it is not all hype. With so many ways to engage in Social Media, how can they get buy-in and begin execution with so many different venues and tools available? Staying on the sidelines and becoming a latecomer might make it more difficult to create a convincing "social" presence. Put the ove

    Performance Tuning Open Text Web Solutions Management Server and Delivery Server Performance Tuning Open Text Web Solutions Management Server and Delivery Server (235 KB)
    If you've made an investment in Open Text Web Solutions (formerly RedDot) Web Content Management products, you’ve undoubtedly experienced performance issues. While every CMS requires tuning, Open Text Web Solutions - RedDot is especially susceptible to mis-configuration and poor performance as the out-of-the-box installation comes untuned and ready for Development Environments only. In this FREE white paper we share performance tuning expertise as an Open Text Certified Partner that has optimize

    The Business Case for Leveraging Open Text Web Solutions Within Higher Education The Business Case for Leveraging Open Text Web Solutions Within Higher Education (430 KB)
    Academic institutions have a long reputation for being slower to adopt new technologies for their audiences. However, many schools are taking serious steps in improving the online experience they are providing. This white paper explores the unique needs of the higher education market, applying new tools & trends and specifically how the Open Text Web Solutions’ Delivery Manager (formerly known as RedDot LiveServer) can be leveraged to achieve those goals.

    SEO Best Practices within a Content Management System SEO Best Practices within a Content Management System (712 KB)
    In this free white paper, we share Search Engine Optimization (SEO) tips and best practices to follow when implementing a Content Management System (CMS). Certain features and functionality will help your content editors make website changes faster while minimizing the risk of human error. Download this free white paper to learn strategies to improve search engine rankings.

    Best Practices for Sitecore CMS Best Practices for Sitecore CMS (1121 KB)
    Sitecore CMS is an extensive Web Content Management (WCM) platform for the mid-market. It offers reduced IT expenditures, a streamlined content lifecycle, and a return of content control to the subject matter experts. The newest incarnation of Sitecore CMS version 6.0 is a mature product that incorporates standard social media components such as wikis, blogs, RSS syndication and “e-mail a friend” features.

    Optimizing SEO in your CMS (WCM) Optimizing SEO in your CMS (WCM) (3108 KB)
    Oshyn's Christian Burne spoke in depth about SEO in CMS at the Gilbane San Francisco Conference on June 3rd, 2009. Christian discussed the pressues of keyword competition and how the CMS can add tremendous power to climbing Google SERPs and other search engine rankings. The presentation was later part of a featured article on CMSWire. We've made the presentation available in PDF format. Download now to learn more about strategies for using your CMS to optimize SEO.

    The Best CMS for You: Tips on How to Select Your Next CMS The Best CMS for You: Tips on How to Select Your Next CMS (909 KB)
    As websites continue to grow in size, features and functionality, the visitors to these websites are also becoming more demanding and have higher expectations than ever before. Companies who committed valuable time and resources to web strategies just five years ago are finding they must re-evaluate and explore new options as their content, features and online offerings must keep pace with the constant and rapid movement in the digital marketplace. For many of these companies, there is a strong.

    Oshyn Sample Voluntary Product Accessibility Template (VPAT) Oshyn Sample Voluntary Product Accessibility Template (VPAT) (741 KB)
    Section 508 requires that when federal government and agencies procure, develop, and maintain or use electronic and information technology (EIT), they must ensure that it is accessible and in compliance with Section 508 standards developed by the Architectural and Transportation Barriers Compliance Board (Access Board). Oshyn understands these requirements and has delivered reports like these countless times.

    Sitecore CMS Implementation Best Practices Sitecore CMS Implementation Best Practices (481 KB)

    TwitterFacebookLinkedInAlltopFeatured in Alltop
    Oshyn, Inc.17785 Center Court Drive N Cerritos, CA 90703    1.888.483.1770 newbusiness@oshyn.com
    2012 Copyright Oshyn. All rights reserved.
    • View Mobile Version
    • Terms of Use
    • Privacy Policy
    • Contact Us