<?php
namespace Drupal\bb2b_order\Plugin\views\filter;
use Drupal\Core\Form\FormStateInterface;
use Drupal\views\Plugin\views\filter\FilterPluginBase;
/**
* Filter products by stock status.
*
* @ingroup views_filter_handlers
*
* @ViewsFilter("stock_status")
*/
class StockStatus extends FilterPluginBase {
/**
* {@inheritDoc}
*/
public function acceptExposedInput($input) {
return TRUE;
}
/**
* {@inheritDoc}
*/
public function buildExposedForm(&$form, FormStateInterface $form_state) {
if (empty($this->options['exposed'])) {
return;
}
$identifier = $this->options['expose']['identifier'];
$exposed_input = $this->view->getExposedInput();
$options = [
NULL => t('Show all products'),
'only_available' => t('Show only available products'),
];
$form[$identifier] = [
'#type' => 'select',
'#title' => t('Stock status'),
'#options' => $options,
'#default_value' => $exposed_input,
];
return $form;
}
/**
* {@inheritDoc}
*/
public function query() {
/** @var \Drupal\views\Plugin\views\query\Sql $query */
$query = $this->query;
$stock_status = $this->view->getExposedInput();
if (isset($stock_status['stock_status']) && $stock_status['stock_status'] === 'only_available') {
$query->addWhereExpression($this->options['group'], "commerce_product_field_data.stock > 0");
}
}
}