diff --git a/modules/product_reference/commerce_product_reference.info b/modules/product_reference/commerce_product_reference.info index cf3f6b4..c50086f 100644 --- a/modules/product_reference/commerce_product_reference.info +++ b/modules/product_reference/commerce_product_reference.info @@ -10,6 +10,8 @@ dependencies[] = options core = 7.x ; Views handlers +files[] = includes/views/handlers/commerce_product_reference_handler_filter_is_product_display.inc +files[] = includes/views/handlers/commerce_product_reference_handler_filter_product_display_node_type.inc files[] = includes/views/handlers/commerce_product_reference_handler_filter_product_line_item_type.inc ; Simple tests diff --git a/modules/product_reference/includes/views/commerce_product_reference.views.inc b/modules/product_reference/includes/views/commerce_product_reference.views.inc index ac6de80..545448f 100644 --- a/modules/product_reference/includes/views/commerce_product_reference.views.inc +++ b/modules/product_reference/includes/views/commerce_product_reference.views.inc @@ -49,6 +49,24 @@ function commerce_product_reference_field_views_data($field) { * Implements hook_views_data_alter(). */ function commerce_product_reference_views_data_alter(&$data) { + // Add the node filter that filters by node types with product reference fields. + $data['node']['is_product_display'] = array( + 'title' => t('Is Product Display'), + 'help' => t('Whether or not the content is one of product displays.'), + 'real field' => 'type', + 'filter' => array( + 'handler' => 'commerce_product_reference_handler_filter_is_product_display', + ), + ); + // Add the node filter that filters by node types with product reference fields. + $data['node']['product_display_node_type'] = array( + 'title' => t('Product Display Content Type'), + 'help' => t('The Product Display Content Type.'), + 'real field' => 'type', + 'filter' => array( + 'handler' => 'commerce_product_reference_handler_filter_product_display_node_type', + ), + ); // Add the line item filter for filtering by line items of a product line item // type (based on $line_item_type['product']). $data['commerce_line_item']['product_line_item_type'] = array( diff --git a/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_is_product_display.inc b/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_is_product_display.inc new file mode 100644 index 0000000..672350c --- /dev/null +++ b/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_is_product_display.inc @@ -0,0 +1,55 @@ +operator == 'in' ? t('Yes') : t('No'); + } + + function operators() { + $operators = array( + 'in' => array( + 'title' => t('Is Product Display'), + 'short' => t('in'), + 'short_single' => t('='), + 'method' => 'op_simple', + 'values' => 1, + ), + 'not in' => array( + 'title' => t('Is not Product Display'), + 'short' => t('not in'), + 'short_single' => t('<>'), + 'method' => 'op_simple', + 'values' => 1, + ), + ); + + return $operators; + } + + function op_simple() { + if (empty($this->value)) { + $this->value = array_keys(commerce_product_reference_node_types()); + } + $this->ensure_my_table(); + + $this->query->add_where($this->options['group'], "$this->table_alias.$this->real_field", array_values($this->value), $this->operator); + } + + function ensure_table($table, $relashionship) { + return 'node'; + } + + function value_form(&$form, &$form_state) { + $form['value'] = array(); + } +} diff --git a/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_product_display_node_type.inc b/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_product_display_node_type.inc new file mode 100644 index 0000000..d3705ac --- /dev/null +++ b/modules/product_reference/includes/views/handlers/commerce_product_reference_handler_filter_product_display_node_type.inc @@ -0,0 +1,21 @@ +value_options)) { + $this->value_title = t('Product Displays Content types'); + $types = commerce_product_reference_node_types(); + $options = array(); + foreach ($types as $type => $info) { + $options[$type] = t($info->name); + } + asort($options); + $this->value_options = $options; + } + } +}