original_string: 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;
      }
code: 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;
      }
code_tokens: 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 ; }
docstring: Add Value Sort To Collection Select
  
  @param \Magento\Eav\Model\Entity\Collection\AbstractCollection $collection
  @param string $dir direction
  @return AbstractSource
docstring_tokens: Add Value Sort To Collection Select