![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/framework/View/Asset/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Framework\View\Asset; /** * List of page assets that combines into groups ones having the same properties * * @api * @since 100.0.2 */ class GroupedCollection extends Collection { /**#@+ * Special properties, enforced to be grouped by */ const PROPERTY_CONTENT_TYPE = 'content_type'; const PROPERTY_CAN_MERGE = 'can_merge'; /**#@-*/ /**#@-*/ protected $propertyFactory; /** * Property Groups * * @var PropertyGroup[] */ protected $groups = []; /** * Constructor * * @param PropertyGroupFactory $propertyFactory */ public function __construct(PropertyGroupFactory $propertyFactory) { $this->propertyFactory = $propertyFactory; } /** * Add an instance, identified by a unique identifier, to the list and to the corresponding group * * @param string $identifier * @param AssetInterface $asset * @param array $properties * @return void */ public function add($identifier, AssetInterface $asset, array $properties = []) { parent::add($identifier, $asset); $properties = $this->getFilteredProperties($asset, $properties); $this->getGroupFor($properties)->add($identifier, $asset); } /** * @param string $identifier * @param AssetInterface $asset * @param string $key * @return void */ public function insert($identifier, AssetInterface $asset, $key) { parent::insert($identifier, $asset, $key); $properties = $this->getFilteredProperties($asset); $this->getGroupFor($properties)->insert($identifier, $asset, $key); } /** * @param AssetInterface $asset * @param array $properties * @return array */ public function getFilteredProperties(AssetInterface $asset, $properties = []) { $properties = array_filter($properties); $properties[self::PROPERTY_CONTENT_TYPE] = $asset->getContentType(); $properties[self::PROPERTY_CAN_MERGE] = $asset instanceof MergeableInterface; return $properties; } /** * Retrieve existing or new group matching the properties * * @param array $properties * @return PropertyGroup */ private function getGroupFor(array $properties) { /** @var $existingGroup PropertyGroup */ foreach ($this->groups as $existingGroup) { if ($existingGroup->getProperties() == $properties) { return $existingGroup; } } /** @var $newGroup PropertyGroup */ $newGroup = $this->propertyFactory->create(['properties' => $properties]); $this->groups[] = $newGroup; return $newGroup; } /** * Remove an instance from the list and from the corresponding group * * @param string $identifier * @return void */ public function remove($identifier) { parent::remove($identifier); /** @var PropertyGroup $group */ foreach ($this->groups as $group) { if ($group->has($identifier)) { $group->remove($identifier); return; } } } /** * Retrieve groups, containing assets that have the same properties * * @return PropertyGroup[] */ public function getGroups() { return $this->groups; } /** * Get asset group by content type * * @param string $contentType * @return bool|PropertyGroup */ public function getGroupByContentType($contentType) { foreach ($this->groups as $group) { if ($group->getProperty(self::PROPERTY_CONTENT_TYPE) == $contentType) { return $group; } } return false; } }