Files
Chamilo/vendor/gedmo/doctrine-extensions/lib/Gedmo/Mapping/Driver/File.php
2025-04-10 12:24:57 +02:00

133 lines
3.3 KiB
PHP

<?php
namespace Gedmo\Mapping\Driver;
use Doctrine\Common\Persistence\Mapping\Driver\FileDriver;
use Doctrine\Common\Persistence\Mapping\Driver\FileLocator;
use Doctrine\ORM\Mapping\Driver\AbstractFileDriver;
use Gedmo\Mapping\Driver;
use Gedmo\Exception\InvalidMappingException;
/**
* The mapping FileDriver abstract class, defines the
* metadata extraction function common among
* all drivers used on these extensions by file based
* drivers.
*
* @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
*/
abstract class File implements Driver
{
/**
* @var FileLocator
*/
protected $locator;
/**
* File extension, must be set in child class
* @var string
*/
protected $_extension;
/**
* original driver if it is available
*/
protected $_originalDriver = null;
public function setLocator(FileLocator $locator)
{
$this->locator = $locator;
}
/**
* Set the paths for file lookup
*
* @param array $paths
*
* @return void
*/
public function setPaths($paths)
{
$this->_paths = (array) $paths;
}
/**
* Set the file extension
*
* @param string $extension
*
* @return void
*/
public function setExtension($extension)
{
$this->_extension = $extension;
}
/**
* Loads a mapping file with the given name and returns a map
* from class/entity names to their corresponding elements.
*
* @param string $file The mapping file to load.
*
* @return array
*/
abstract protected function _loadMappingFile($file);
/**
* Tries to get a mapping for a given class
*
* @param string $className
*
* @return null|array|object
*/
protected function _getMapping($className)
{
//try loading mapping from original driver first
$mapping = null;
if (!is_null($this->_originalDriver)) {
if ($this->_originalDriver instanceof FileDriver || $this->_originalDriver instanceof AbstractFileDriver) {
$mapping = $this->_originalDriver->getElement($className);
}
}
//if no mapping found try to load mapping file again
if (is_null($mapping)) {
$yaml = $this->_loadMappingFile($this->locator->findMappingFile($className));
$mapping = $yaml[$className];
}
return $mapping;
}
/**
* Passes in the mapping read by original driver
*
* @param object $driver
*
* @return void
*/
public function setOriginalDriver($driver)
{
$this->_originalDriver = $driver;
}
/**
* Try to find out related class name out of mapping
*
* @param $metadata - the mapped class metadata
* @param $name - the related object class name
* @return string - related class name or empty string if does not exist
*/
protected function getRelatedClassName($metadata, $name)
{
if (class_exists($name) || interface_exists($name)) {
return $name;
}
$refl = $metadata->getReflectionClass();
$ns = $refl->getNamespaceName();
$className = $ns . '\\' . $name;
return class_exists($className) ? $className : '';
}
}