class GroupByNumeric
Simple filter to handle greater than/less than filters.
Attributes
#[ViewsFilter("groupby_numeric")]
  Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements \Drupal\Component\Plugin\PluginInspectionInterface, \Drupal\Component\Plugin\DerivativeInspectionInterface- class \Drupal\Core\Plugin\PluginBase uses \Drupal\Core\DependencyInjection\AutowiredInstanceTrait, \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait extends \Drupal\Component\Plugin\PluginBase- class \Drupal\views\Plugin\views\PluginBase implements \Drupal\Core\Plugin\ContainerFactoryPluginInterface, \Drupal\views\Plugin\views\ViewsPluginInterface, \Drupal\Component\Plugin\DependentPluginInterface, \Drupal\Core\Security\TrustedCallbackInterface extends \Drupal\Core\Plugin\PluginBase- class \Drupal\views\Plugin\views\HandlerBase implements \Drupal\views\Plugin\views\ViewsHandlerInterface extends \Drupal\views\Plugin\views\PluginBase- class \Drupal\views\Plugin\views\filter\FilterPluginBase implements \Drupal\Core\Cache\CacheableDependencyInterface extends \Drupal\views\Plugin\views\HandlerBase- class \Drupal\views\Plugin\views\filter\NumericFilter implements \Drupal\views\Plugin\views\filter\FilterOperatorsInterface extends \Drupal\views\Plugin\views\filter\FilterPluginBase- class \Drupal\views\Plugin\views\filter\GroupByNumeric extends \Drupal\views\Plugin\views\filter\NumericFilter
 
 
- class \Drupal\views\Plugin\views\filter\NumericFilter implements \Drupal\views\Plugin\views\filter\FilterOperatorsInterface extends \Drupal\views\Plugin\views\filter\FilterPluginBase
 
- class \Drupal\views\Plugin\views\filter\FilterPluginBase implements \Drupal\Core\Cache\CacheableDependencyInterface extends \Drupal\views\Plugin\views\HandlerBase
 
- class \Drupal\views\Plugin\views\HandlerBase implements \Drupal\views\Plugin\views\ViewsHandlerInterface extends \Drupal\views\Plugin\views\PluginBase
 
- class \Drupal\views\Plugin\views\PluginBase implements \Drupal\Core\Plugin\ContainerFactoryPluginInterface, \Drupal\views\Plugin\views\ViewsPluginInterface, \Drupal\Component\Plugin\DependentPluginInterface, \Drupal\Core\Security\TrustedCallbackInterface extends \Drupal\Core\Plugin\PluginBase
 
- class \Drupal\Core\Plugin\PluginBase uses \Drupal\Core\DependencyInjection\AutowiredInstanceTrait, \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait extends \Drupal\Component\Plugin\PluginBase
Expanded class hierarchy of GroupByNumeric
Related topics
File
- 
              core/modules/ views/ src/ Plugin/ views/ filter/ GroupByNumeric.php, line 12 
Namespace
Drupal\views\Plugin\views\filterView source
class GroupByNumeric extends NumericFilter {
  
  /**
   * {@inheritdoc}
   */
  public function query() {
    $this->ensureMyTable();
    $field = $this->getField();
    $info = $this->operators();
    if (!empty($info[$this->operator]['method'])) {
      $this->{$info[$this->operator]['method']}($field);
    }
  }
  
  /**
   * {@inheritdoc}
   */
  protected function opBetween($field) {
    $placeholder_min = $this->placeholder();
    $placeholder_max = $this->placeholder();
    if ($this->operator == 'between') {
      $this->query
        ->addHavingExpression($this->options['group'], "{$field} >= {$placeholder_min}", [
        $placeholder_min => $this->value['min'],
      ]);
      $this->query
        ->addHavingExpression($this->options['group'], "{$field} <= {$placeholder_max}", [
        $placeholder_max => $this->value['max'],
      ]);
    }
    else {
      $this->query
        ->addHavingExpression($this->options['group'], "{$field} < {$placeholder_min} OR {$field} > {$placeholder_max}", [
        $placeholder_min => $this->value['min'],
        $placeholder_max => $this->value['max'],
      ]);
    }
  }
  
  /**
   * {@inheritdoc}
   */
  protected function opSimple($field) {
    $placeholder = $this->placeholder();
    $this->query
      ->addHavingExpression($this->options['group'], "{$field} {$this->operator} {$placeholder}", [
      $placeholder => $this->value['value'],
    ]);
  }
  
  /**
   * {@inheritdoc}
   */
  protected function opEmpty($field) {
    if ($this->operator == 'empty') {
      $operator = "IS NULL";
    }
    else {
      $operator = "IS NOT NULL";
    }
    $this->query
      ->addHavingExpression($this->options['group'], "{$field} {$operator}");
  }
  
  /**
   * {@inheritdoc}
   */
  public function adminLabel($short = FALSE) {
    return $this->getField(parent::adminLabel($short));
  }
  
  /**
   * {@inheritdoc}
   */
  public function canGroup() {
    return FALSE;
  }
}Members
| Title Sort descending | Deprecated | Modifiers | Object type | Summary | Overriden Title | Overrides | 
|---|---|---|---|---|---|---|
| AutowiredInstanceTrait::createInstanceAutowired | public static | function | Instantiates a new instance of the implementing class using autowiring. | |||
| DependencySerializationTrait::$_entityStorages | protected | property | An array of entity type IDs keyed by the property name of their storages. | |||
| DependencySerializationTrait::$_serviceIds | protected | property | An array of service IDs keyed by property name used for serialization. | |||
| DependencySerializationTrait::__sleep | public | function | 2 | |||
| DependencySerializationTrait::__wakeup | public | function | 2 | |||
| FilterPluginBase::$always_required | public | property | Disable the possibility to allow an exposed input to be optional. | |||
| FilterPluginBase::$group_info | public | property | Contains the information of the selected item in a grouped filter. | |||
| FilterPluginBase::$no_operator | public | property | Disable the possibility to use operators. | 1 | ||
| FilterPluginBase::$operator | public | property | Contains the operator which is used on the query. | |||
| FilterPluginBase::$tableAliases | public | property | Keyed array by alias of table relations. | |||
| FilterPluginBase::$value | public | property | The value. | |||
| FilterPluginBase::addGroupForm | public | function | Add a new group to the exposed filter groups. | |||
| FilterPluginBase::arrayFilterZero | protected static | function | Filter by no empty values, though allow the use of (string) "0". | |||
| FilterPluginBase::buildExposedFiltersGroupForm | protected | function | Build the form to let users create the group of exposed filters. | |||
| FilterPluginBase::buildExposedForm | public | function | Render our chunk of the exposed filter form when selecting. | Overrides HandlerBase::buildExposedForm | ||
| FilterPluginBase::buildGroupForm | public | function | Displays the Build Group form. | |||
| FilterPluginBase::buildGroupOptions | protected | function | Provide default options for exposed filters. | |||
| FilterPluginBase::buildGroupSubmit | protected | function | Save new group items, re-enumerates and remove groups marked to delete. | |||
| FilterPluginBase::buildGroupValidate | protected | function | Validate the build group options form. | |||
| FilterPluginBase::buildOptionsForm | public | function | Provide the basic form which calls through to subforms. | Overrides HandlerBase::buildOptionsForm | 2 | |
| FilterPluginBase::buildValueWrapper | protected | function | Builds wrapper for value and operator forms. | |||
| FilterPluginBase::canBuildGroup | protected | function | Determine if a filter can be converted into a group. | |||
| FilterPluginBase::canExpose | public | function | Determine if a filter can be exposed. | Overrides HandlerBase::canExpose | 5 | |
| FilterPluginBase::convertExposedInput | public | function | Transform the input from a grouped filter into a standard filter. | |||
| FilterPluginBase::exposedInfo | public | function | Tell the renderer about our exposed form. | Overrides HandlerBase::exposedInfo | ||
| FilterPluginBase::exposedTranslate | protected | function | Make some translations to a form item to make it more suitable to exposing. | |||
| FilterPluginBase::getCacheContexts | public | function | The cache contexts associated with this object. | Overrides CacheableDependencyInterface::getCacheContexts | 6 | |
| FilterPluginBase::getCacheMaxAge | public | function | The maximum age for which this object may be cached. | Overrides CacheableDependencyInterface::getCacheMaxAge | ||
| FilterPluginBase::getCacheTags | public | function | The cache tags associated with this object. | Overrides CacheableDependencyInterface::getCacheTags | 1 | |
| FilterPluginBase::groupForm | public | function | Builds a group form. | |||
| FilterPluginBase::groupMultipleExposedInput | public | function | Group multiple exposed input. | |||
| FilterPluginBase::hasValidGroupedValue | protected | function | Determines if the given grouped filter entry has a valid value. | 1 | ||
| FilterPluginBase::init | public | function | Overrides \Drupal\views\Plugin\views\HandlerBase::init(). | Overrides HandlerBase::init | 4 | |
| FilterPluginBase::isAGroup | public | function | Returns TRUE if the exposed filter works like a grouped filter. | Overrides HandlerBase::isAGroup | ||
| FilterPluginBase::multipleExposedInput | public | function | Multiple exposed input. | Overrides HandlerBase::multipleExposedInput | ||
| FilterPluginBase::operatorForm | protected | function | Options form subform for setting the operator. | 6 | ||
| FilterPluginBase::operatorSubmit | public | function | Perform any necessary changes to the form values prior to storage. | |||
| FilterPluginBase::operatorValidate | protected | function | Validate the operator form. | |||
| FilterPluginBase::prepareFilterSelectOptions | protected | function | Sanitizes the HTML select element's options. | |||
| FilterPluginBase::RESTRICTED_IDENTIFIERS | constant | A list of restricted identifiers. | ||||
| FilterPluginBase::showBuildGroupButton | protected | function | Shortcut to display the build_group/hide button. | |||
| FilterPluginBase::showBuildGroupForm | public | function | Shortcut to display the exposed options form. | |||
| FilterPluginBase::showExposeButton | public | function | Shortcut to display the expose/hide button. | Overrides HandlerBase::showExposeButton | ||
| FilterPluginBase::showOperatorForm | public | function | Shortcut to display the operator form. | |||
| FilterPluginBase::showValueForm | protected | function | Shortcut to display the value form. | |||
| FilterPluginBase::storeExposedInput | public | function | If set to remember exposed input in the session, store it there. | Overrides HandlerBase::storeExposedInput | ||
| FilterPluginBase::storeGroupInput | public | function | If set to remember exposed input in the session, store it there. | |||
| FilterPluginBase::submitOptionsForm | public | function | Simple submit handler. | Overrides PluginBase::submitOptionsForm | ||
| FilterPluginBase::trustedCallbacks | public static | function | Lists the trusted callbacks provided by the implementing class. | Overrides PluginBase::trustedCallbacks | ||
| FilterPluginBase::validate | public | function | Validate that the plugin is correct and can be saved. | Overrides HandlerBase::validate | 2 | |
| FilterPluginBase::validateExposeForm | public | function | Validate the options form. | Overrides HandlerBase::validateExposeForm | ||
| FilterPluginBase::validateIdentifier | protected | function | Validates a filter identifier. | |||
| FilterPluginBase::validateOptionsForm | public | function | Simple validate handler. | Overrides PluginBase::validateOptionsForm | 1 | |
| FilterPluginBase::valueSubmit | protected | function | Perform any necessary changes to the form values prior to storage. | 1 | ||
| FilterPluginBase::valueValidate | protected | function | Validate the options form. | 3 | ||
| GroupByNumeric::adminLabel | public | function | Return a string representing this handler's name in the UI. | Overrides HandlerBase::adminLabel | ||
| GroupByNumeric::canGroup | public | function | Can this filter be used in OR groups? | Overrides FilterPluginBase::canGroup | ||
| GroupByNumeric::opBetween | protected | function | Filters by operator between. | Overrides NumericFilter::opBetween | ||
| GroupByNumeric::opEmpty | protected | function | Adds a where clause for the operation, 'EMPTY'. | Overrides NumericFilter::opEmpty | ||
| GroupByNumeric::opSimple | protected | function | Filters by a simple operator. | Overrides NumericFilter::opSimple | ||
| GroupByNumeric::query | public | function | Add this filter to the query. | Overrides NumericFilter::query | ||
| HandlerBase::$field | public | property | With field you can override the realField if the real field is not set. | |||
| HandlerBase::$is_handler | public | property | Tracks whether the plugin is a handler. | |||
| HandlerBase::$moduleHandler | protected | property | The module handler. | 2 | ||
| HandlerBase::$query | public | property | Where the $query object will reside. | 7 | ||
| HandlerBase::$realField | public | property | The real field. | |||
| HandlerBase::$relationship | public | property | The relationship used for this field. | |||
| HandlerBase::$table | public | property | The table this handler is attached to. | |||
| HandlerBase::$tableAlias | public | property | The alias of the table of this handler which is used in the query. | |||
| HandlerBase::$viewsData | protected | property | The views data service. | |||
| HandlerBase::access | public | function | Check whether given user has access to this handler. | Overrides ViewsHandlerInterface::access | 3 | |
| HandlerBase::breakString | public static | function | Breaks x,y,z and x+y+z into an array. | Overrides ViewsHandlerInterface::breakString | ||
| HandlerBase::broken | public | function | Determines if the handler is considered 'broken'. | Overrides ViewsHandlerInterface::broken | ||
| HandlerBase::buildExtraOptionsForm | public | function | Provide a form for setting options. | 2 | ||
| HandlerBase::buildGroupByForm | public | function | Provide a form for aggregation settings. | 1 | ||
| HandlerBase::calculateDependencies | public | function | Calculates dependencies for the configured plugin. | Overrides PluginBase::calculateDependencies | 11 | |
| HandlerBase::caseTransform | protected | function | Transform a string by a certain method. | |||
| HandlerBase::defineExtraOptions | Deprecated | public | function | Provide defaults for the handler. | ||
| HandlerBase::displayExposedForm | public | function | Displays the Expose form. | |||
| HandlerBase::ensureMyTable | public | function | Ensures that the main table for this handler is in the query. | Overrides ViewsHandlerInterface::ensureMyTable | 2 | |
| HandlerBase::getDateField | public | function | Creates cross-database SQL dates. | 2 | ||
| HandlerBase::getDateFormat | public | function | Creates cross-database SQL date formatting. | 2 | ||
| HandlerBase::getEntityType | public | function | Determines the entity type used by this handler. | Overrides ViewsHandlerInterface::getEntityType | ||
| HandlerBase::getField | public | function | Shortcut to get a handler's raw field value. | Overrides ViewsHandlerInterface::getField | ||
| HandlerBase::getJoin | public | function | Get the join object that should be used for this handler. | Overrides ViewsHandlerInterface::getJoin | ||
| HandlerBase::getModuleHandler | protected | function | Gets the module handler. | |||
| HandlerBase::getTableJoin | public static | function | Fetches a handler to join one table to a primary table from the data cache. | Overrides ViewsHandlerInterface::getTableJoin | ||
| HandlerBase::getViewsData | protected | function | Gets views data service. | |||
| HandlerBase::hasExtraOptions | public | function | Determines if the handler has extra options. | 2 | ||
| HandlerBase::isExposed | public | function | Determine if this item is 'exposed'. | |||
| HandlerBase::placeholder | protected | function | Provides a unique placeholders for handlers. | |||
| HandlerBase::postExecute | public | function | Run after the view is executed, before the result is cached. | Overrides ViewsHandlerInterface::postExecute | ||
| HandlerBase::preQuery | public | function | Run before the view is built. | Overrides ViewsHandlerInterface::preQuery | 2 | |
| HandlerBase::sanitizeValue | public | function | Sanitize the value for output. | Overrides ViewsHandlerInterface::sanitizeValue | ||
| HandlerBase::setModuleHandler | public | function | Sets the module handler. | |||
| HandlerBase::setRelationship | public | function | Sets up any needed relationship. | Overrides ViewsHandlerInterface::setRelationship | ||
| HandlerBase::setViewsData | public | function | Sets the views data service. | |||
| HandlerBase::showExposeForm | public | function | Shortcut to display the exposed options form. | Overrides ViewsHandlerInterface::showExposeForm | ||
| HandlerBase::submitExposed | public | function | Submit the exposed handler form. | |||
| HandlerBase::submitExposeForm | public | function | Perform any necessary changes to the form exposes prior to storage. | |||
| HandlerBase::submitExtraOptionsForm | public | function | Perform any necessary changes to the form values prior to storage. | 1 | ||
| HandlerBase::submitFormCalculateOptions | public | function | Calculates options stored on the handler. | 1 | ||
| HandlerBase::submitGroupByForm | public | function | Perform any necessary changes to the form values prior to storage. | 1 | ||
| HandlerBase::submitTemporaryForm | public | function | Submits a temporary form. | |||
| HandlerBase::usesGroupBy | public | function | Provides the handler some group by. | 13 | ||
| HandlerBase::validateExposed | public | function | Validate the exposed handler form. | 5 | ||
| HandlerBase::validateExtraOptionsForm | public | function | Validate the options form. | 1 | ||
| HandlerBase::__construct | public | function | Constructs a Handler object. | Overrides PluginBase::__construct | 43 | |
| MessengerTrait::$messenger | protected | property | The messenger. | 25 | ||
| MessengerTrait::messenger | public | function | Gets the messenger. | 25 | ||
| MessengerTrait::setMessenger | public | function | Sets the messenger. | |||
| NumericFilter::$alwaysMultiple | protected | property | Exposed filter options. | Overrides FilterPluginBase::$alwaysMultiple | ||
| NumericFilter::acceptExposedInput | public | function | Do some minor translation of the exposed input. | Overrides FilterPluginBase::acceptExposedInput | 1 | |
| NumericFilter::adminSummary | public | function | Display the filter on the administrative summary. | Overrides FilterPluginBase::adminSummary | ||
| NumericFilter::buildExposeForm | public | function | Options form subform for exposed filter options. | Overrides FilterPluginBase::buildExposeForm | ||
| NumericFilter::defaultExposeOptions | public | function | Provide default options for exposed filters. | Overrides FilterPluginBase::defaultExposeOptions | ||
| NumericFilter::defineOptions | protected | function | Information about options for all kinds of purposes will be held here. | Overrides FilterPluginBase::defineOptions | 1 | |
| NumericFilter::operatorOptions | public | function | Provide a list of all the numeric operators. | Overrides FilterPluginBase::operatorOptions | ||
| NumericFilter::operators | public | function | Returns an array of operator information, keyed by operator ID. | Overrides FilterOperatorsInterface::operators | ||
| NumericFilter::operatorValues | protected | function | Gets the operators that have a given number of values. | |||
| NumericFilter::opNotRegex | protected | function | Filters by a negated regular expression. | |||
| NumericFilter::opRegex | protected | function | Filters by a regular expression. | |||
| NumericFilter::valueForm | protected | function | Provide a simple textfield for equality. | Overrides FilterPluginBase::valueForm | 1 | |
| PluginBase::$configuration | protected | property | Configuration information passed into the plugin. | 1 | ||
| PluginBase::$definition | public | property | Plugins' definition. | |||
| PluginBase::$displayHandler | public | property | The display object this plugin is for. | |||
| PluginBase::$options | public | property | Options for this plugin will be held here. | |||
| PluginBase::$pluginDefinition | protected | property | The plugin implementation definition. | 1 | ||
| PluginBase::$pluginId | protected | property | The plugin ID. | |||
| PluginBase::$position | public | property | The handler position. | |||
| PluginBase::$renderer | protected | property | Stores the render API renderer. | 3 | ||
| PluginBase::$usesOptions | protected | property | Denotes whether the plugin has an additional options form. | 8 | ||
| PluginBase::$view | public | property | The top object of a view. | 1 | ||
| PluginBase::create | public static | function | Instantiates a new instance of the implementing class using autowiring. | 163 | ||
| PluginBase::DERIVATIVE_SEPARATOR | constant | A string which is used to separate base plugin IDs from the derivative ID. | ||||
| PluginBase::destroy | public | function | Clears a plugin. | Overrides ViewsPluginInterface::destroy | 2 | |
| PluginBase::doFilterByDefinedOptions | protected | function | Do the work to filter out stored options depending on the defined options. | |||
| PluginBase::filterByDefinedOptions | public | function | Filter out stored options depending on the defined options. | Overrides ViewsPluginInterface::filterByDefinedOptions | ||
| PluginBase::getAvailableGlobalTokens | public | function | Returns an array of available token replacements. | Overrides ViewsPluginInterface::getAvailableGlobalTokens | ||
| PluginBase::getBaseId | public | function | Gets the base_plugin_id of the plugin instance. | Overrides DerivativeInspectionInterface::getBaseId | ||
| PluginBase::getDerivativeId | public | function | Gets the derivative_id of the plugin instance. | Overrides DerivativeInspectionInterface::getDerivativeId | ||
| PluginBase::getPluginDefinition | public | function | Gets the definition of the plugin implementation. | Overrides PluginInspectionInterface::getPluginDefinition | 2 | |
| PluginBase::getPluginId | public | function | Gets the plugin ID of the plugin instance. | Overrides PluginInspectionInterface::getPluginId | ||
| PluginBase::getProvider | public | function | Returns the plugin provider. | Overrides ViewsPluginInterface::getProvider | ||
| PluginBase::getRenderer | protected | function | Returns the render API renderer. | 1 | ||
| PluginBase::globalTokenForm | public | function | Adds elements for available core tokens to a form. | Overrides ViewsPluginInterface::globalTokenForm | ||
| PluginBase::globalTokenReplace | public | function | Returns a string with any core tokens replaced. | Overrides ViewsPluginInterface::globalTokenReplace | ||
| PluginBase::INCLUDE_ENTITY | constant | Include entity row languages when listing languages. | ||||
| PluginBase::INCLUDE_NEGOTIATED | constant | Include negotiated languages when listing languages. | ||||
| PluginBase::isConfigurable | Deprecated | public | function | Determines if the plugin is configurable. | ||
| PluginBase::listLanguages | protected | function | Makes an array of languages, optionally including special languages. | |||
| PluginBase::pluginTitle | public | function | Return the human readable name of the display. | Overrides ViewsPluginInterface::pluginTitle | ||
| PluginBase::preRenderAddFieldsetMarkup | public static | function | Moves form elements into fieldsets for presentation purposes. | Overrides ViewsPluginInterface::preRenderAddFieldsetMarkup | ||
| PluginBase::preRenderFlattenData | public static | function | Flattens the structure of form elements. | Overrides ViewsPluginInterface::preRenderFlattenData | ||
| PluginBase::queryLanguageSubstitutions | public static | function | Returns substitutions for Views queries for languages. | |||
| PluginBase::setOptionDefaults | protected | function | Fills up the options of the plugin with defaults. | |||
| PluginBase::summaryTitle | public | function | Returns the summary of the settings in the display. | Overrides ViewsPluginInterface::summaryTitle | 6 | |
| PluginBase::themeFunctions | public | function | Provide a full list of possible theme templates used by this style. | Overrides ViewsPluginInterface::themeFunctions | 1 | |
| PluginBase::unpackOptions | public | function | Unpacks options over our existing defaults. | Overrides ViewsPluginInterface::unpackOptions | ||
| PluginBase::usesOptions | public | function | Returns the usesOptions property. | Overrides ViewsPluginInterface::usesOptions | 8 | |
| PluginBase::viewsTokenReplace | protected | function | Replaces Views' tokens in a given string. | 1 | ||
| PluginBase::VIEWS_QUERY_LANGUAGE_SITE_DEFAULT | constant | Query string to indicate the site default language. | ||||
| StringTranslationTrait::$stringTranslation | protected | property | The string translation service. | 3 | ||
| StringTranslationTrait::formatPlural | protected | function | Formats a string containing a count of items. | |||
| StringTranslationTrait::getNumberOfPlurals | protected | function | Returns the number of plurals supported by a given language. | |||
| StringTranslationTrait::getStringTranslation | protected | function | Gets the string translation service. | |||
| StringTranslationTrait::setStringTranslation | public | function | Sets the string translation service to use. | 2 | ||
| StringTranslationTrait::t | protected | function | Translates a string to the current language or to a given language. | 1 | ||
| TrustedCallbackInterface::THROW_EXCEPTION | constant | Untrusted callbacks throw exceptions. | ||||
| TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION | constant | Untrusted callbacks trigger silenced E_USER_DEPRECATION errors. | 
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.
