Passed
Push — master ( 692e25...3de2b2 )
by Jean-Christophe
01:30
created

OrmUtilsFieldsTrait::getFirstPropKey()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 5
nc 2
nop 1
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Ubiquity\orm\traits;
4
5
trait OrmUtilsFieldsTrait {
6
	abstract public static function getAnnotationInfo($class, $keyAnnotation);
7
	abstract public static function getAnnotationInfoMember($class, $keyAnnotation, $member);
8
	protected static $fieldNames=[];
9
	protected static $propFirstKeys=[];
10
	protected static $propKeys=[];
11
	protected static $accessors=[];
12
	
13
	public static function getFieldTypes($className) {
14
		$fieldTypes=self::getAnnotationInfo($className, "#fieldTypes");
15
		if ($fieldTypes !== false){
16
			return $fieldTypes;
17
		}
18
		return [ ];
19
	}
20
	
21
	public static function getFieldType($className,$field){
22
		$types= self::getFieldTypes($className);
23
		if(isset($types[$field])){
24
			return $types[$field];
25
		}
26
		return "int";
27
	}
28
	
29
	public static function getKeyFields($instance) {
30
		if(!\is_string($instance)){
31
			$instance=\get_class($instance);
32
		}
33
		return self::getAnnotationInfo($instance, "#primaryKeys");
34
	}
35
	
36
	public static function getFirstKey($class) {
37
		$kf=self::getAnnotationInfo($class, "#primaryKeys");
38
		return \current($kf);
39
	}
40
	
41
	public static function getFirstPropKey($class) {
42
		if(isset(self::$propFirstKeys[$class])){
43
			return self::$propFirstKeys[$class];
44
		}
45
		$prop=new \ReflectionProperty($class, current(self::getAnnotationInfo($class, "#primaryKeys")));
46
		$prop->setAccessible(true);
47
		return self::$propFirstKeys[$class]=$prop;
48
	}
49
	
50
	public static function getPropKeys($class){
51
		if(isset(self::$propKeys[$class])){
52
			return self::$propKeys[$class];
53
		}
54
		$result=[];
55
		$pkMembers=self::getAnnotationInfo($class, "#primaryKeys");
56
		foreach ($pkMembers as $member){
57
			$prop=new \ReflectionProperty($class, $member);
58
			$prop->setAccessible(true);
59
			$result[]=$prop;
60
		}
61
		return self::$propKeys[$class]=$result;
62
	}
63
	
64
	public static function getAccessors($class,$members){
65
		if(isset(self::$accessors[$class])){
66
			return self::$accessors[$class];
67
		}
68
		$result=[];
69
		foreach ($members as $member=>$fieldNotUsed){
70
			$accesseur="set" . ucfirst($member);
71
			if (method_exists($class, $accesseur)) {
72
				$result[$member]=$accesseur;
73
			}
74
		}
75
		return self::$accessors[$class]=$result;
76
		//return $result;
77
	}
78
	
79
	public static function getAllFields($class){
80
		return \array_keys(self::getAnnotationInfo($class, "#fieldNames"));
81
	}
82
	
83
	
84
	public static function getFieldNames($model){
85
		if(isset(self::$fieldNames[$model])){
86
			return self::$fieldNames[$model];
87
		}
88
		$fields=self::getAnnotationInfo($model, "#fieldNames");
89
		$result=[];
90
		$serializables=self::getSerializableFields($model);
91
		foreach ($fields as $member=>$field){
92
			if(\array_search($member, $serializables)!==false)
93
				$result[$field]=$member;
94
		}
95
		return self::$fieldNames[$model]=$result;
96
	}
97
	
98
	public static function getSerializableFields($class) {
99
		$notSerializable=self::getAnnotationInfo($class, "#notSerializable");
100
		$fieldNames=\array_keys(self::getAnnotationInfo($class, "#fieldNames"));
101
		return \array_diff($fieldNames, $notSerializable);
102
	}
103
	
104
	public static function getFormAllFields($class){
105
		$result=self::getSerializableFields($class);
106
		if ($manyToOne=self::getAnnotationInfo($class, "#manyToOne")) {
107
			foreach ($manyToOne as $member){
108
				$joinColumn = self::getAnnotationInfoMember ( $class, "#joinColumn", $member );
109
				$result[]=$joinColumn["name"];
110
			}
111
		}
112
		if ($manyToMany=self::getAnnotationInfo($class, "#manyToMany")) {
113
			$manyToMany=array_keys($manyToMany);
114
			foreach ($manyToMany as $member){
115
				$result[]=$member . "Ids";
116
			}
117
		}
118
		return $result;
119
	}
120
}
121
122