MOON
Server: Apache
System: Linux nserver.cafsindia.com 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: cafsindia (1002)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: /home/cafsindia/help.cafsindia.com/vendor/uvdesk/extension-framework/Utils/PackageCollection.php
<?php

namespace Webkul\UVDesk\ExtensionFrameworkBundle\Utils;

use Symfony\Component\DependencyInjection\ContainerInterface;
use Webkul\UVDesk\ExtensionFrameworkBundle\Definition\MappingResource;
use Webkul\UVDesk\ExtensionFrameworkBundle\Definition\Package\PackageMetadata;
use Webkul\UVDesk\ExtensionFrameworkBundle\Definition\Package\PackageInterface;

class PackageCollection
{
	private $packages = [];
	private $qualifiedPackageNames = [];
	private $packagesByBaseNamespace = [];
	private $packagesByQualifiedName = [];
	private $packagesByQualifiedVendorName = [];

	private $isOrganized = false;

	public function __construct(ContainerInterface $container, MappingResource $mappingResource)
	{
		$this->container = $container;
		$this->mappingResource = $mappingResource;
	}

	public function organizeCollection()
	{
		if ($this->isOrganized) {
			return;
		}

		// Organize packages by vendors, maintain bi-directional reference between package name & classpath.
		$packages = $this->mappingResource->getPackages();

		foreach ($packages as $id => $attributes) {
			// @TODO: Support tags to modify the package
			$qualifiedName = $attributes['metadata']['name'];
			list($vendorName, $packageName) = explode('/', $qualifiedName);
			
			// Derive base namespace where the package lives
			$baseNamespace = substr($id, 0, strrpos($id, '\\'));
			
			$this->packages[$id] = $this->container->get($id);
			$this->qualifiedPackageNames[$id] = $qualifiedName;
			$this->packagesByBaseNamespace[$baseNamespace] = $id;
			$this->packagesByQualifiedName[$qualifiedName] = $id;
			$this->packagesByQualifiedVendorName[$vendorName][$packageName] = $id;
		}

		$this->isOrganized = true;
	}

	public function getQualifiedPackageReference($class) : ?string
	{
		$iterations = [];

		foreach (explode('\\', $class) as $index => $section) {
			if ($index == 0) {
				$iterations[$index] = $section;
				continue;
			}

			$iterations[$index] = $iterations[$index - 1] . '\\' . $section;
		}

		$iterations = array_reverse($iterations);

		foreach ($iterations as $namespace) {
			if (isset($this->packagesByBaseNamespace[$namespace])) {
				return $this->packagesByBaseNamespace[$namespace];
			}
		}

		return null;
	}

	public function getPackageQualifiedName($id) : ?string
	{
		return $this->qualifiedPackageNames[$id] ?? null;
	}

	public function getPackageReferenceByQualifiedName($name) : ?string
	{
		return $this->packagesByQualifiedName[$name] ?? null;
	}

	public function getCollection()
	{
		return array_values($this->packages);
	}

	public function getPackageByAttributes($vendor, $package)
	{
		$orgpackages = [];
		$packages = $this->mappingResource->getPackages();

		foreach ($packages as $id => $attributes) {
			$orgpackages[$attributes['metadata']['name']] = $id;
		}

		dump($vendor, $package);
		dump($packages);
		dump($orgpackages);

		die;

		// dump($this->packageCollection->getPackageByAttributes($vendor, $package));
		// dump($this->mappingResource);
		// die;
	}
}