Passed
Push — master ( ba7917...6c027d )
by Jean-Christophe
06:26
created

OrmUtils::isNotNullOrNullAccepted()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 3

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 3
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 3
nc 3
nop 3
crap 3
1
<?php
2
3
namespace Ubiquity\orm;
4
5
use Ubiquity\orm\parser\Reflexion;
6
use Ubiquity\cache\CacheManager;
7
use Ubiquity\utils\base\UString;
8
use Ubiquity\utils\base\UArray;
9
use Ubiquity\controllers\rest\ResponseFormatter;
10
use Ubiquity\orm\traits\OrmUtilsRelationsTrait;
11
use Ubiquity\orm\traits\OrmUtilsFieldsTrait;
12
13
/**
14
 * Object/relational mapping utilities
15
 *
16
 * @author jc
17
 * @version 1.0.3
18
 */
19
class OrmUtils {
20
21
	use OrmUtilsFieldsTrait,OrmUtilsRelationsTrait;
22
	private static $modelsMetadatas;
23
24 51
	public static function getModelMetadata($className) {
25 51
		if (! isset ( self::$modelsMetadatas [$className] )) {
26 15
			self::$modelsMetadatas [$className] = CacheManager::getOrmModelCache ( $className );
27
		}
28 51
		return self::$modelsMetadatas [$className];
29
	}
30
31 4
	public static function isSerializable($class, $member) {
32 4
		return ! self::_is ( $class, $member, "#notSerializable" );
33
	}
34
35 3
	public static function isNullable($class, $member) {
36 3
		return self::_is ( $class, $member, "#nullable" );
37
	}
38
39 4
	protected static function _is($class, $member, $like) {
40 4
		$ret = self::getAnnotationInfo ( $class, $like );
41 4
		if ($ret !== false) {
42 4
			return \array_search ( $member, $ret ) !== false;
43
		}
44
		return false;
45
	}
46
47 4
	public static function getFieldName($class, $member) {
48 4
		$ret = self::getAnnotationInfo ( $class, "#fieldNames" );
49 4
		if ($ret === false || ! isset ( $ret [$member] )) {
50
			return $member;
51
		}
52 4
		return $ret [$member];
53
	}
54
55 36
	public static function getTableName($class) {
56 36
		if (isset ( self::getModelMetadata ( $class ) ["#tableName"] ))
57 36
			return self::getModelMetadata ( $class ) ["#tableName"];
58
	}
59
60 5
	public static function getKeyFieldsAndValues($instance) {
61 5
		$class = get_class ( $instance );
62 5
		$kf = self::getAnnotationInfo ( $class, "#primaryKeys" );
63 5
		return self::getFieldsAndValues_ ( $instance, $kf );
64
	}
65
66 5
	public static function getFieldsAndValues_($instance, $members) {
67 5
		$ret = [ ];
68 5
		foreach ( $members as $member ) {
69 5
			$v = Reflexion::getMemberValue ( $instance, $member );
70 5
			$ret [$member] = $v;
71
		}
72 5
		return $ret;
73
	}
74
75
	public static function getKeyPropsAndValues_($instance, $props) {
76
		$ret = [ ];
77
		foreach ( $props as $prop ) {
78
			$v = Reflexion::getPropValue ( $instance, $prop );
79
			$ret [$prop->getName ()] = $v;
80
		}
81
		return $ret;
82
	}
83
84 2
	public static function getMembers($className) {
85 2
		$fieldNames = self::getAnnotationInfo ( $className, "#fieldNames" );
86 2
		if ($fieldNames !== false)
87 2
			return \array_keys ( $fieldNames );
88
		return [ ];
89
	}
90
91
	public static function getMembersAndValues($instance, $members = NULL) {
92
		$ret = array ();
93
		$className = get_class ( $instance );
94
		if (is_null ( $members ))
95
			$members = self::getMembers ( $className );
96
		foreach ( $members as $member ) {
97
			if (self::isSerializable ( $className, $member )) {
98
				$v = Reflexion::getMemberValue ( $instance, $member );
99
				if (self::isNotNullOrNullAccepted ( $v, $className, $member )) {
100
					$name = self::getFieldName ( $className, $member );
101
					$ret [$name] = $v;
102
				}
103
			}
104
		}
105
		return $ret;
106
	}
107
108 4
	public static function isNotNullOrNullAccepted($v, $className, $member) {
109 4
		$notNull = UString::isNotNull ( $v );
110 4
		return ($notNull) || (! $notNull && self::isNullable ( $className, $member ));
111
	}
112
113 27
	public static function getFirstKeyValue($instance) {
114 27
		$prop = OrmUtils::getFirstPropKey ( get_class ( $instance ) );
115 27
		return Reflexion::getPropValue ( $instance, $prop );
116
	}
117
118
	public static function getFirstKeyValue_($instance, $members) {
119
		$fkv = self::getFieldsAndValues_ ( $instance, $members );
120
		return \current ( $fkv );
121
	}
122
123
	public static function getKeyValues($instance) {
124
		$fkv = self::getKeyFieldsAndValues ( $instance );
125
		return implode ( "_", $fkv );
126
	}
127
128 43
	public static function getPropKeyValues($instance, $props) {
129 43
		$values = [ ];
130 43
		foreach ( $props as $prop ) {
131 43
			$values [] = Reflexion::getPropValue ( $instance, $prop );
132
		}
133 43
		return implode ( "_", $values );
134
	}
135
136
	public static function getMembersWithAnnotation($class, $annotation) {
137
		if (isset ( self::getModelMetadata ( $class ) [$annotation] ))
138
			return self::getModelMetadata ( $class ) [$annotation];
139
		return [ ];
140
	}
141
142
	/**
143
	 *
144
	 * @param object $instance
145
	 * @param string $memberKey
146
	 * @param array $array
147
	 * @return boolean
148
	 */
149
	public static function exists($instance, $memberKey, $array) {
150
		$accessor = "get" . ucfirst ( $memberKey );
151
		if (method_exists ( $instance, $accessor )) {
152
			foreach ( $array as $value ) {
153
				if ($value->$accessor () == $instance->$accessor ())
154
					return true;
155
			}
156
		}
157
		return false;
158
	}
159
160 45
	public static function getAnnotationInfo($class, $keyAnnotation) {
161 45
		$metas = self::getModelMetadata ( $class );
162 45
		if (isset ( $metas [$keyAnnotation] ))
163 45
			return $metas [$keyAnnotation];
164 12
		return false;
165
	}
166
167 30
	public static function getAnnotationInfoMember($class, $keyAnnotation, $member) {
168 30
		$info = self::getAnnotationInfo ( $class, $keyAnnotation );
169 30
		if ($info !== false) {
170 30
			if (UArray::isAssociative ( $info )) {
171 30
				if (isset ( $info [$member] )) {
172 30
					return $info [$member];
173
				}
174
			} else {
175 1
				if (\array_search ( $member, $info ) !== false) {
176 1
					return $member;
177
				}
178
			}
179
		}
180
		return false;
181
	}
182
183 4
	public static function setFieldToMemberNames(&$fields, $relFields) {
184 4
		foreach ( $fields as $index => $field ) {
185 4
			if (isset ( $relFields [$field] )) {
186 1
				$fields [$index] = $relFields [$field];
187
			}
188
		}
189 4
	}
190
191 1
	public static function objectAsJSON($instance) {
192 1
		$formatter = new ResponseFormatter ();
193 1
		$datas = $formatter->cleanRestObject ( $instance );
194 1
		return $formatter->format ( [ "pk" => self::getFirstKeyValue ( $instance ),"object" => $datas ] );
195
	}
196
197
	public static function getTransformers($class) {
198
		if (isset ( self::getModelMetadata ( $class ) ["#transformers"] ))
199
			return self::getModelMetadata ( $class ) ["#transformers"];
200
	}
201
202
	public static function getAccessors($class) {
203
		if (isset ( self::getModelMetadata ( $class ) ["#accessors"] ))
204
			return self::getModelMetadata ( $class ) ["#accessors"];
205
	}
206
}
207