- fixed user settings database #9 - added dynamic user preferences #9 - added form to edit user preferences #9 - removed user language #7
57 lines
1.8 KiB
PHP
57 lines
1.8 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Kimai package.
|
|
*
|
|
* (c) Kevin Papst <kevin@kevinpapst.de>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace App\Doctrine;
|
|
|
|
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
|
|
use Doctrine\Common\EventSubscriber;
|
|
|
|
/**
|
|
* Adds a prefix to every doctrine entity AKA database table
|
|
*
|
|
* @author Kevin Papst <kevin@kevinpapst.de>
|
|
*/
|
|
class TablePrefixSubscriber implements EventSubscriber
|
|
{
|
|
protected $prefix = '';
|
|
|
|
public function __construct($prefix)
|
|
{
|
|
$this->prefix = (string) $prefix;
|
|
}
|
|
|
|
public function getSubscribedEvents()
|
|
{
|
|
return array('loadClassMetadata');
|
|
}
|
|
|
|
public function loadClassMetadata(LoadClassMetadataEventArgs $args)
|
|
{
|
|
$classMetadata = $args->getClassMetadata();
|
|
if ($classMetadata->isInheritanceTypeSingleTable() && !$classMetadata->isRootEntity()) {
|
|
// if we are in an inheritance hierarchy, only apply this once
|
|
return;
|
|
}
|
|
|
|
$classMetadata->setPrimaryTable(['name' => $this->prefix . $classMetadata->getTableName()]);
|
|
|
|
foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
|
|
if ($mapping['type'] == \Doctrine\ORM\Mapping\ClassMetadataInfo::MANY_TO_MANY
|
|
// Check if "joinTable" exists:
|
|
// it can be null if this field is the reverse side of a ManyToMany relationship
|
|
&& array_key_exists('name', $classMetadata->associationMappings[$fieldName]['joinTable']) ) {
|
|
$mappedTableName = $classMetadata->associationMappings[$fieldName]['joinTable']['name'];
|
|
$classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName;
|
|
}
|
|
}
|
|
}
|
|
}
|