<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Ui\DataProvider;
use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
use Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface;
// phpcs:disable Magento2.Classes.AbstractApi
/**
* @inheritdoc
*
* @api
* @since 100.0.2
*/
abstract class AbstractDataProvider implements DataProviderInterface, \Countable
{
/**
* Data Provider name
*
* @var string
*/
protected $name;
/**
* Data Provider Primary Identifier name
*
* @var string
*/
protected $primaryFieldName;
/**
* Data Provider Request Parameter Identifier name
*
* @var string
*/
protected $requestFieldName;
/**
* @var array
*/
protected $meta = [];
/**
* Provider configuration data
*
* @var array
*/
protected $data = [];
/**
* @var AbstractCollection
*/
protected $collection;
/**
* @param string $name
* @param string $primaryFieldName
* @param string $requestFieldName
* @param array $meta
* @param array $data
*/
public function __construct(
$name,
$primaryFieldName,
$requestFieldName,
array $meta = [],
array $data = []
) {
$this->name = $name;
$this->primaryFieldName = $primaryFieldName;
$this->requestFieldName = $requestFieldName;
$this->meta = $meta;
$this->data = $data;
}
/**
* Return collection
*
* @return AbstractCollection
*/
public function getCollection()
{
return $this->collection;
}
/**
* Get Data Provider name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Get primary field name
*
* @return string
*/
public function getPrimaryFieldName()
{
return $this->primaryFieldName;
}
/**
* Get field name in request
*
* @return string
*/
public function getRequestFieldName()
{
return $this->requestFieldName;
}
/**
* Return Meta
*
* @return array
*/
public function getMeta()
{
return $this->meta;
}
/**
* Get field Set meta info
*
* @param string $fieldSetName
* @return array
*/
public function getFieldSetMetaInfo($fieldSetName)
{
return $this->meta[$fieldSetName] ?? [];
}
/**
* Return fields meta info
*
* @param string $fieldSetName
* @return array
*/
public function getFieldsMetaInfo($fieldSetName)
{
return $this->meta[$fieldSetName]['children'] ?? [];
}
/**
* Return field meta info
*
* @param string $fieldSetName
* @param string $fieldName
* @return array
*/
public function getFieldMetaInfo($fieldSetName, $fieldName)
{
return $this->meta[$fieldSetName]['children'][$fieldName] ?? [];
}
/**
* @inheritdoc
*/
public function addFilter(\Magento\Framework\Api\Filter $filter)
{
// @phpstan-ignore-next-line as adding return statement cause of backward compatibility issue
$this->getCollection()->addFieldToFilter(
$filter->getField(),
[$filter->getConditionType() => $filter->getValue()]
);
}
/**
* Returns search criteria
*
* @return null
*/
public function getSearchCriteria()
{
//TODO: Technical dept, should be implemented as part of SearchAPI support for Catalog Grids
return null;
}
/**
* Returns SearchResult
*
* @return \Magento\Framework\Api\Search\SearchResultInterface
*/
public function getSearchResult()
{
//TODO: Technical dept, should be implemented as part of SearchAPI support for Catalog Grids
return $this->getCollection();
}
/**
* Add field to select
*
* @param string|array $field
* @param string|null $alias
* @return void
*/
public function addField($field, $alias = null)
{
$this->getCollection()->addFieldToSelect($field, $alias);
}
/**
* Alias for self::setOrder()
*
* @param string $field
* @param string $direction
* @return void
*/
public function addOrder($field, $direction)
{
$this->getCollection()->addOrder($field, $direction);
}
/**
* Set Query limit
*
* @param int $offset
* @param int $size
* @return void
*/
public function setLimit($offset, $size)
{
$this->getCollection()->setPageSize($size);
$this->getCollection()->setCurPage($offset);
}
/**
* Removes field from select
*
* @param string|null $field
* @param bool $isAlias Alias identifier
* @return void
*/
public function removeField($field, $isAlias = false)
{
$this->getCollection()->removeFieldFromSelect($field, $isAlias);
}
/**
* Removes all fields from select
*
* @return void
*/
public function removeAllFields()
{
$this->getCollection()->removeAllFieldsFromSelect();
}
/**
* Get data
*
* @return array
*/
public function getData()
{
return $this->getCollection()->toArray();
}
/**
* Retrieve count of loaded items
*
* @return int
*/
#[\ReturnTypeWillChange]
public function count()
{
return $this->getCollection()->count();
}
/**
* Get config data
*
* @return mixed
*/
public function getConfigData()
{
return $this->data['config'] ?? [];
}
/**
* Set data
*
* @param mixed $config
* @return void
*/
public function setConfigData($config)
{
$this->data['config'] = $config;
}
/**
* Retrieve all ids from collection
*
* @return int[]
* @since 101.0.0
*/
public function getAllIds()
{
return $this->getCollection()->getAllIds();
}
}
|