Document
Comments:
[log in] or [register] to leave a comment for this document.
Go to:
all documents
Document
commerce_customer_profile_reference
22-Apr-2013 [219]
• This field shows a drop down in the format of profile_id:User userid
Source of the drop down name format:
/**
* Implements hook_options_list().
*/
function commerce_customer_options_list($field) {
$options = array();
// Loop through all customer matches.
foreach (commerce_customer_match_customer_profiles($field) as $profile_id => $data) {
// Add them to the options list in optgroups by customer profile type.
$name = check_plain(commerce_customer_profile_type_get_name($data['type']));
$options[$name][$profile_id] =
t('@profile: User @user', array('@profile' => $profile_id, '@user' => $data['uid']));
}
// Simplify the options list if only one optgroup exists.
if (count($options) == 1) {
$options = reset($options);
}
return $options;
}
Trace:
commerce_customer.module around line 759, sets commerce_customer_profile_property_info_callback
/**
* Implements hook_field_info().
*/
function commerce_customer_field_info() {
return array(
'commerce_customer_profile_reference' => array(
'label' => t('Customer profile reference'),
'description' => t('This field stores the ID of a related customer profile as an integer value.'),
'settings' => array('profile_type' => 'billing'),
'instance_settings' => array(),
'default_widget' => 'options_select',
'default_formatter' => 'commerce_customer_profile_reference_display',
'property_type' => 'commerce_customer_profile',
'property_callbacks' => array('commerce_customer_profile_property_info_callback'),
),
);
}
which runs from commerce_customer.module line 949.
/**
* Callback to alter the property info of the reference field.
*
* @see commerce_customer_field_info().
*/
function commerce_customer_profile_property_info_callback(&$info, $entity_type, $field, $instance, $field_type) {
$property = &$info[$entity_type]['bundles'][$instance['bundle']]['properties'][$field['field_name']];
$property['options list'] = 'entity_metadata_field_options_list';
}
which sets 'options list':
$property['options list'] = 'entity_metadata_field_options_list';
which is a system callback in contributions/entity/modules/callbacks.inc'
function entity_metadata_field_options_list($name, $info) {
$field_property_info = $info;
if (is_numeric($name) && isset($info['parent'])) {
// The options list is to be returned for a single item of a multiple field.
$field_property_info = $info['parent']->info();
$name = $field_property_info['name'];
}
if (($field = field_info_field($name)) && isset($field_property_info['parent'])) {
// Retrieve the wrapped entity holding the field.
$wrapper = $field_property_info['parent'];
try {
$entity = $wrapper->value();
}
catch (EntityMetadataWrapperException $e) {
// No data available.
$entity = NULL;
}
$instance = $wrapper->getBundle() ? field_info_instance($wrapper->type(), $name, $wrapper->getBundle()) : NULL;
return (array) module_invoke($field['module'], 'options_list', $field, $instance, $wrapper->type(), $entity);
}
}
which calls hook_options_list, but only to the field's single module.
'commerce_customer_profile_reference' as a string is found in:
in commecre_customer.checkout_pane.inc see line 22 in commerce_customer_profile_pane_settings_form, identified as 'Checkout pane callback: returns the customer profile pane's settings form'.
11 references in commerce_customer.module.
see in particular:
line 756:
/**
* Implements hook_field_info().
*/
function commerce_customer_field_info() {
line 871:
/**
* Implements hook_field_formatter_view().
*/
function commerce_customer_field_formatter_view(
$entity_type, $entity, $field, $instance, $langcode, $items, $display) {
see line 1165 ff:
/**
* Callback to alter the property info of the reference field.
*
* @see commerce_customer_field_info().
*/
function commerce_customer_profile_property_info_callback(
&$info, $entity_type, $field, $instance, $field_type) {
and
/**
* Fetches an array of all customer profiles matching the given parameters.
*
* This info is used in various places (allowed values, autocomplete results,
* input validation...). Some of them only need the profile_ids, others
* profile_id + titles, others yet profile_id + titles + rendered row (for
* display in widgets).
*
* The array we return contains all the potentially needed information,
* and lets calling functions use the parts they actually need.
*
* @param $field
* The field description.
* @param $ids
* Optional product ids to lookup.
* @param $limit
* If non-zero, limit the size of the result set.
*
* @return
* An array of valid profiles in the form:
* array(
* profile_id => array(
* 'uid' => The user ID,
* 'rendered' => The text to display in widgets (can be HTML)
* ),
* ...
* )
*/
function commerce_customer_match_customer_profiles($field, $ids = array(), $limit = 50) {
$results = &drupal_static(__FUNCTION__, array());
// Create unique id for static cache.
$cid = implode(':', array(
$field['field_name'],
implode('-', $ids),
$limit,
));
if (!isset($results[$cid])) {
$matches = _commerce_customer_match_customer_profiles_standard($field, $ids, $limit);
// Store the results.
$results[$cid] = !empty($matches) ? $matches : array();
}
return $results[$cid];
}