Skip to content

Commit e7f438d

Browse files
Merge pull request #30 from laravel-doctrine/extensions-support
V1.2 - Extensions support
2 parents d166b08 + 5004a59 commit e7f438d

File tree

122 files changed

+8511
-512
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

122 files changed

+8511
-512
lines changed

composer.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@
3232
"mockery/mockery": "~0.9",
3333
"beberlei/DoctrineExtensions": "~1.0",
3434
"zf1/zend-date": "~1.12",
35-
"nesbot/carbon": "*"
35+
"nesbot/carbon": "*",
36+
"gedmo/doctrine-extensions": "^2.4"
3637
},
3738
"autoload": {
3839
"psr-4": {
39-
"LaravelDoctrine\\Fluent\\": "src/"
40+
"LaravelDoctrine\\Fluent\\": "src/",
41+
"Gedmo\\": "lib/"
4042
}
4143
},
4244
"autoload-dev": {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Gedmo\Blameable\Mapping\Driver;
4+
5+
use Gedmo\FluentExtension;
6+
7+
class Fluent extends FluentExtension
8+
{
9+
const EXTENSION_NAME = 'Blameable';
10+
11+
/**
12+
* @return string
13+
*/
14+
protected function getExtensionName()
15+
{
16+
return self::EXTENSION_NAME;
17+
}
18+
}

lib/FluentExtension.php

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
<?php
2+
3+
namespace Gedmo;
4+
5+
use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver;
6+
use Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain;
7+
use Gedmo\Mapping\Driver;
8+
use LaravelDoctrine\Fluent\Extensions\ExtensibleClassMetadata;
9+
use LaravelDoctrine\Fluent\FluentDriver;
10+
11+
abstract class FluentExtension implements Driver
12+
{
13+
/**
14+
* @var FluentDriver
15+
*/
16+
protected $originalDriver;
17+
18+
/**
19+
* @return string
20+
*/
21+
abstract protected function getExtensionName();
22+
23+
/**
24+
* Read extended metadata configuration for
25+
* a single mapped class
26+
*
27+
* @param ExtensibleClassMetadata $meta
28+
* @param array $config
29+
*
30+
* @return void
31+
*/
32+
public function readExtendedMetadata($meta, array &$config)
33+
{
34+
if (! $meta instanceof ExtensibleClassMetadata) {
35+
return;
36+
}
37+
38+
$config = array_merge_recursive($config, $meta->getExtension(
39+
$this->getExtensionName()
40+
));
41+
}
42+
43+
/**
44+
* Make sure the original driver is Fluent.
45+
*
46+
* @param MappingDriver $driver
47+
* @return void
48+
*/
49+
public function setOriginalDriver($driver)
50+
{
51+
$this->originalDriver = $this->extractFluentDriver($driver);
52+
}
53+
54+
/**
55+
* @param MappingDriver $driver
56+
*
57+
* @return FluentDriver
58+
*/
59+
private function extractFluentDriver(MappingDriver $driver)
60+
{
61+
if ($driver instanceof FluentDriver) {
62+
return $driver;
63+
}
64+
65+
if ($driver instanceof MappingDriverChain) {
66+
$default = $driver->getDefaultDriver();
67+
if ($default instanceof FluentDriver) {
68+
return $default;
69+
}
70+
71+
foreach ($driver->getDrivers() as $namespace => $driver) {
72+
if ($driver instanceof FluentDriver) {
73+
return $driver;
74+
}
75+
}
76+
}
77+
78+
throw new \UnexpectedValueException("Fluent driver not found in the driver chain.");
79+
}
80+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Gedmo\IpTraceable\Mapping\Driver;
4+
5+
use Gedmo\FluentExtension;
6+
7+
class Fluent extends FluentExtension
8+
{
9+
const EXTENSION_NAME = 'IpTraceable';
10+
11+
/**
12+
* @return string
13+
*/
14+
protected function getExtensionName()
15+
{
16+
return self::EXTENSION_NAME;
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Gedmo\Loggable\Mapping\Driver;
4+
5+
use Gedmo\FluentExtension;
6+
7+
class Fluent extends FluentExtension
8+
{
9+
const EXTENSION_NAME = 'Loggable';
10+
11+
/**
12+
* @return string
13+
*/
14+
protected function getExtensionName()
15+
{
16+
return self::EXTENSION_NAME;
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Gedmo\Sluggable\Mapping\Driver;
4+
5+
use Gedmo\FluentExtension;
6+
7+
class Fluent extends FluentExtension
8+
{
9+
const EXTENSION_NAME = 'Sluggable';
10+
11+
/**
12+
* @return string
13+
*/
14+
protected function getExtensionName()
15+
{
16+
return self::EXTENSION_NAME;
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Gedmo\SoftDeleteable\Mapping\Driver;
4+
5+
use Gedmo\FluentExtension;
6+
7+
class Fluent extends FluentExtension
8+
{
9+
const EXTENSION_NAME = 'softDeleteable';
10+
11+
/**
12+
* @return string
13+
*/
14+
protected function getExtensionName()
15+
{
16+
return self::EXTENSION_NAME;
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Gedmo\Sortable\Mapping\Driver;
4+
5+
use Gedmo\FluentExtension;
6+
7+
class Fluent extends FluentExtension
8+
{
9+
const EXTENSION_NAME = 'Sortable';
10+
11+
/**
12+
* @return string
13+
*/
14+
protected function getExtensionName()
15+
{
16+
return self::EXTENSION_NAME;
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Gedmo\Timestampable\Mapping\Driver;
4+
5+
use Gedmo\FluentExtension;
6+
7+
class Fluent extends FluentExtension
8+
{
9+
const EXTENSION_NAME = 'Timestampable';
10+
11+
/**
12+
* @return string
13+
*/
14+
protected function getExtensionName()
15+
{
16+
return self::EXTENSION_NAME;
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Gedmo\Translatable\Mapping\Driver;
4+
5+
use Gedmo\FluentExtension;
6+
7+
class Fluent extends FluentExtension
8+
{
9+
const EXTENSION_NAME = 'Translatable';
10+
11+
/**
12+
* @return string
13+
*/
14+
protected function getExtensionName()
15+
{
16+
return self::EXTENSION_NAME;
17+
}
18+
}

0 commit comments

Comments
 (0)