| Current Path : /home/rtorresani/www/vendor/magento/module-catalog/Model/Product/Attribute/Source/ |
| Current File : //home/rtorresani/www/vendor/magento/module-catalog/Model/Product/Attribute/Source/Status.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Catalog\Model\Product\Attribute\Source;
use Magento\Eav\Model\Entity\Attribute\Source\AbstractSource;
use Magento\Eav\Model\Entity\Attribute\Source\SourceInterface;
use Magento\Framework\Data\OptionSourceInterface;
/**
* Product status functionality model
*
* @api
* @since 100.0.2
*/
class Status extends AbstractSource implements SourceInterface, OptionSourceInterface
{
/**#@+
* Product Status values
*/
const STATUS_ENABLED = 1;
const STATUS_DISABLED = 2;
/**#@-*/
/**
* Retrieve Visible Status Ids
*
* @return int[]
*/
public function getVisibleStatusIds()
{
return [self::STATUS_ENABLED];
}
/**
* Retrieve Saleable Status Ids, default Product Enable status
*
* @return int[]
*/
public function getSaleableStatusIds()
{
return [self::STATUS_ENABLED];
}
/**
* Retrieve option array
*
* @return string[]
* phpcs:disable Magento2.Functions.StaticFunction
*/
public static function getOptionArray()
{
return [self::STATUS_ENABLED => __('Enabled'), self::STATUS_DISABLED => __('Disabled')];
}
/**
* Retrieve option array with empty value
*
* @return string[]
*/
public function getAllOptions()
{
$result = [];
foreach (self::getOptionArray() as $index => $value) {
$result[] = ['value' => $index, 'label' => $value];
}
return $result;
}
/**
* Retrieve option text by option value
*
* @param string $optionId
* @return string
*/
public function getOptionText($optionId)
{
$options = self::getOptionArray();
return $options[$optionId] ?? null;
}
/**
* Add Value Sort To Collection Select
*
* @param \Magento\Eav\Model\Entity\Collection\AbstractCollection $collection
* @param string $dir direction
* @return AbstractSource
*/
public function addValueSortToCollection($collection, $dir = 'asc')
{
$attributeCode = $this->getAttribute()->getAttributeCode();
$attributeId = $this->getAttribute()->getId();
$attributeTable = $this->getAttribute()->getBackend()->getTable();
$linkField = $this->getAttribute()->getEntity()->getLinkField();
if ($this->getAttribute()->isScopeGlobal()) {
$tableName = $attributeCode . '_t';
$collection->getSelect()->joinLeft(
[$tableName => $attributeTable],
"e.{$linkField}={$tableName}.{$linkField}" .
" AND {$tableName}.attribute_id='{$attributeId}'" .
" AND {$tableName}.store_id='0'",
[]
);
$valueExpr = $tableName . '.value';
} else {
$valueTable1 = $attributeCode . '_t1';
$valueTable2 = $attributeCode . '_t2';
$collection->getSelect()->joinLeft(
[$valueTable1 => $attributeTable],
"e.{$linkField}={$valueTable1}.{$linkField}" .
" AND {$valueTable1}.attribute_id='{$attributeId}'" .
" AND {$valueTable1}.store_id='0'",
[]
)->joinLeft(
[$valueTable2 => $attributeTable],
"e.{$linkField}={$valueTable2}.{$linkField}" .
" AND {$valueTable2}.attribute_id='{$attributeId}'" .
" AND {$valueTable2}.store_id='{$collection->getStoreId()}'",
[]
);
$valueExpr = $collection->getConnection()->getCheckSql(
$valueTable2 . '.value_id > 0',
$valueTable2 . '.value',
$valueTable1 . '.value'
);
}
$collection->getSelect()->order($valueExpr . ' ' . $dir);
return $this;
}
}