Drupal Commerce Order Owner Autocomplete with E-mail Address
Category:
When creating an order as an admin in Drupal Commerce, we can specify the user that owns the order if we know their user name. This works well in most cases, but to be able to search by the user's e-mail address would be helpful too. I've had a few requests from clients for this feature. So without further ado, let's ado it!
/** * Implements hook_menu(). */ function my_module_menu() { $items = array(); $items['my_module/commerce/order-owner/autocomplete'] = array( 'page callback' => 'my_module_commerce_order_owner_autocomplete', 'access arguments' => array('configure order settings'), 'type' => MENU_CALLBACK ); return $items; } /** * Implements hook_form_FORM_ID_alter(). */ function my_module_form_commerce_order_ui_order_form_alter(&$form, &$form_state, $form_id) { // Attach our custom autocomplete to the order owner name input so we can // search by e-mail address. $form['user']['name']['#autocomplete_path'] = 'my_module/commerce/order-owner/autocomplete'; } /** * Queries results for the commerce order owner autocomplete. */ function my_module_commerce_order_owner_autocomplete($string) { $matches = array(); $query = db_select('users', 'u'); $query ->fields('u', array('uid', 'name', 'mail')) ->condition(db_or() ->condition("u.mail", '%' . db_like($string) . '%', 'LIKE') ->condition("u.name", '%' . db_like($string) . '%', 'LIKE') ) ->condition('u.uid', 0, '<>') ->range(0, 10); $results = $query->execute(); foreach ($results as $row) { $key = "$row->name"; $matches[$key] = "$row->name - $row->mail ($row->uid)"; } drupal_json_output($matches); }
Comments
pat (not verified)
Fri, 10/10/2014 - 15:04
Permalink
this is definitely useful..
this is definitely useful.. im surprised there isnt a module for this already???
tyler
Fri, 10/10/2014 - 15:27
Permalink
Indeed, I almost mustered up
Indeed, I almost mustered up enough energy to make it into a contrib module. Seems a bit "light" for a full blown project though, maybe it could become a feature in Commerce via an Issue and a Patch(es). We shall see, cheers!