Test Failed
Pull Request — master (#97)
by Gildonei
03:38
created

TransformersManager::getTransformerClass()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 5
ccs 0
cts 4
cp 0
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 1
crap 6
1
<?php
2
3
namespace Ubiquity\contents\transformation;
4
5
use Ubiquity\cache\CacheManager;
6
use Ubiquity\contents\transformation\transformers\DateTime;
7
use Ubiquity\contents\transformation\transformers\FirstUpperCase;
8
use Ubiquity\contents\transformation\transformers\LowerCase;
9
use Ubiquity\contents\transformation\transformers\Md5;
10
use Ubiquity\contents\transformation\transformers\Password;
11
use Ubiquity\contents\transformation\transformers\UpperCase;
12
use Ubiquity\orm\DAO;
13
use Ubiquity\orm\OrmUtils;
14
use Ubiquity\utils\base\UArray;
15
16
/**
17
 * Transform objects after loading
18
 *
19
 * Ubiquity\contents\transformation\transformers$TransformersManager
20
 * This class is part of Ubiquity
21
 *
22
 * @author jcheron <[email protected]>
23
 * @version 1.0.1
24
 *
25
 */
26
class TransformersManager {
27
	const TRANSFORMER_TYPES = [ 'transform' => TransformerInterface::class,'toView' => TransformerViewInterface::class,'toForm' => TransformerFormInterface::class ];
28
	/**
29
	 *
30
	 * @var array|mixed
31
	 */
32
	private static $transformers = [ 'md5' => Md5::class,'datetime' => DateTime::class,'upper' => UpperCase::class,'firstUpper' => FirstUpperCase::class,'lower' => LowerCase::class,'password' => Password::class ];
33
	private static $key = "contents/transformers";
34
35
	/**
36
	 * Do not use at runtime !
37
	 */
38 19
	public static function start() {
39 19
		$transformers = [ ];
40 19
		if (CacheManager::$cache->exists ( self::$key )) {
41
			$transformers = CacheManager::$cache->fetch ( self::$key );
42
		}
43 19
		self::$transformers = array_merge ( self::$transformers, $transformers );
44 19
	}
45
46 4
	public static function startProd($op = null) {
47 4
		DAO::$useTransformers = true;
48 4
		DAO::$transformerOp = $op ?? 'transform';
49 4
	}
50
51
	/**
52
	 * Do not used at runtime !
53
	 *
54
	 * @param string $transformer
55
	 * @param string $classname
56
	 */
57
	public static function registerClass($transformer, $classname) {
58
		self::$transformers [$transformer] = $classname;
59
	}
60
61
	/**
62
	 * Do not used at runtime !
63
	 *
64
	 * @param string $transformer
65
	 * @param string $classname
66
	 */
67
	public static function registerClassAndSave($transformer, $classname) {
68
		self::start ();
69
		self::registerClass ( $transformer, $classname );
70
		self::store ();
71
	}
72
73
	/**
74
	 * Do not used at runtime !
75
	 *
76
	 * @param array $transformersAndClasses
77
	 */
78
	public static function registerClasses($transformersAndClasses) {
79
		foreach ( $transformersAndClasses as $transformer => $class ) {
80
			self::registerClass ( $transformer, $class );
81
		}
82
	}
83
84
	/**
85
	 * Do not used at runtime !
86
	 *
87
	 * @param array $transformersAndClasses
88
	 */
89
	public static function registerClassesAndSave($transformersAndClasses) {
90
		self::start ();
91
		foreach ( $transformersAndClasses as $transformer => $class ) {
92
			self::registerClass ( $transformer, $class );
93
		}
94
		self::store ();
95
	}
96
97
	public static function getTransformerClass($transformer) {
98
		if (isset ( self::$transformers [$transformer] )) {
99
			return self::$transformers [$transformer];
100
		}
101
		return null;
102
	}
103
104 1
	public static function transform($instance, $member, $transform = 'transform') {
105 1
		$getter = 'get' . $member;
106 1
		if (method_exists ( $instance, $getter )) {
107 1
			return self::applyTransformer ( $instance, $member, $instance->{$getter} (), $transform );
108
		}
109
		return null;
110
	}
111
112 1
	public static function applyTransformer($instance, $member, $value, $transform = 'transform') {
113 1
		$class = get_class ( $instance );
114 1
		$metas = OrmUtils::getModelMetadata ( $class );
115 1
		if (isset ( $metas ['#transformers'] [$transform] [$member] )) {
116 1
			$transformer = $metas ['#transformers'] [$transform] [$member];
117 1
			return $transformer::$transform ( $value );
118
		}
119
		return $value;
120
	}
121
122 1
	public static function transformInstance($instance, $transform = 'transform') {
123 1
		$class = get_class ( $instance );
124 1
		$metas = OrmUtils::getModelMetadata ( $class );
125 1
		$transformers = $metas ['#transformers'] [$transform] ?? [ ];
126 1
		foreach ( $transformers as $member => $transformer ) {
127 1
			$getter = 'get' . ucfirst ( $member );
128 1
			$setter = 'set' . ucfirst ( $member );
129 1
			if (method_exists ( $instance, $getter )) {
130 1
				$value = $transformer::$transform ( $instance->{$getter} () );
131 1
				if (method_exists ( $instance, $setter )) {
132 1
					$instance->{$setter} ( $value );
133
				}
134 1
				$instance->_rest [$member] = $value;
135
			}
136
		}
137 1
	}
138
139
	public static function store() {
140
		CacheManager::$cache->store ( self::$key, "return " . UArray::asPhpArray ( self::$transformers, 'array' ) . ';' );
141
	}
142
}
143
144