403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/yandex.market/lib/export/param/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/yandex.market/lib/export/param/repository.php
<?php
namespace Yandex\Market\Export\Param;

use Yandex\Market\Reference\Storage;

class Repository
{
    public static function loadCollection(Storage\Model $parent, array $queryParams)
    {
        $queryParams['order'] = [ 'PARENT_ID' => 'asc', 'ID' => 'ASC' ];
        $queryParams['filter'] = array_diff_key($queryParams['filter'], [
            '=PARENT_ID' => true,
        ]);

        $flatCollection = Collection::load($parent, $queryParams);
        $flatCollection->initChildren();
        $flatCollection->preloadReference();

        return self::makeCollectionTree($flatCollection);
    }

    private static function makeCollectionTree(Collection $flatCollection)
    {
        $valueTreeMap = [];
        $result = new Collection;

        /** @var Model $param */
        foreach ($flatCollection as $param)
        {
            $valueId = (int)$param->getId();
            $parentId = (int)$param->getField('PARENT_ID');
            $parentLevel = $result;

            if (empty($parentId)) // is root
            {
                $parentTree = [];
            }
            else
            {
                if (!isset($valueTreeMap[$parentId])) { continue; }

                $parentTree = $valueTreeMap[$parentId];
            }

            foreach ($parentTree as $parentId)
            {
                /** @var Model $child */
                $child = $parentLevel->getItemById($parentId);

                if ($child === null)
                {
                    $parentLevel = null;
                    break;
                }

                $parentLevel = $child->initChildren();
            }

            if ($parentLevel === null) { continue; }

            $param->setParentCollection($parentLevel);
            $parentLevel->addItem($param);

            $selfTree = $parentTree;
            $selfTree[] = $valueId;

            $valueTreeMap[$valueId] = $selfTree;
        }

        return $result;
    }
    
	/* optimized load for reference PARAM */
	public static function loadByReference($entityType, $primaries, $isCopy = false)
	{
		if (empty($primaries)) { return []; }

		// load rows

		$query = Table::getList([
			'filter' => [ '=ENTITY_TYPE' => $entityType, '=ENTITY_ID' => $primaries ],
			'order' => [ 'PARENT_ID' => 'asc', 'ID' => 'asc' ],
		]);

		$rows = $query->fetchAll();

		if (empty($rows)) { return []; }

		$ids = array_column($rows, 'ID');
		$rows = array_combine($ids, $rows);

		// load external

		$externalDataList = Table::loadExternalReference($ids, [ 'PARAM_VALUE' ], $isCopy);

		foreach ($externalDataList as $id => $externalData)
		{
			$rows[$id] += $externalData;
		}

		// group by parent

		$parentValues = [];

		foreach ($rows as $row)
		{
			$parentId = $row['ENTITY_ID'];

			if (!isset($parentValues[$parentId]))
			{
				$parentValues[$parentId] = [
					'PARAM' => [],
				];
			}

			$parentValues[$parentId]['PARAM'][] = $row;
		}

		// convert to tree

		foreach ($parentValues as &$parentValue)
		{
			$parentValue['PARAM'] = self::toTree($parentValue['PARAM']);

			if ($isCopy)
			{
				$parentValue['PARAM'] = self::clearCopy($parentValue['PARAM']);
			}
		}
		unset($parentValue);

		return $parentValues;
	}

	private static function toTree(array $paramRows)
	{
		$valueTreeMap = [];
		$result = [];

		foreach ($paramRows as $paramRow)
		{
			$valueId = (int)$paramRow['ID'];
			$parentLevel = &$result;

			if (empty($paramRow['PARENT_ID'])) // is root
			{
				$parentTree = [];
			}
			else
			{
				if (!isset($valueTreeMap[$paramRow['PARENT_ID']])) { continue; }

				$parentTree = $valueTreeMap[$paramRow['PARENT_ID']];
			}

			foreach ($parentTree as $parentId)
			{
				if (!isset($parentLevel[$parentId]))
				{
					$parentLevel = null;
					break;
				}

				if (!isset($parentLevel[$parentId]['CHILDREN']))
				{
					$parentLevel[$parentId]['CHILDREN'] = [];
				}

				$parentLevel = &$parentLevel[$parentId]['CHILDREN'];
			}

			if ($parentLevel === null) { continue; }

			$parentLevel[$valueId] = $paramRow;

			$selfTree = $parentTree;
			$selfTree[] = $valueId;

			$valueTreeMap[$valueId] = $selfTree;

			unset($parentLevel);
		}

		return $result;
	}

	private static function clearCopy(array $paramRows)
	{
		foreach ($paramRows as &$paramRow)
		{
			if (!empty($paramRow['CHILDREN']))
			{
				$paramRow['CHILDREN'] = self::clearCopy($paramRow['CHILDREN']);
			}

			$paramRow = array_diff_key($paramRow, [
				'ENTITY_ID' => true,
				'ID' => true,
				'PARENT_ID' => true,
			]);
		}
		unset($paramRow);

		return $paramRows;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit