Completed
Push — master ( 372674...240a5e )
by Jean-Christophe
01:57
created

OrmUtils::getJoinColumnName()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
cc 2
eloc 7
nc 2
nop 2
1
<?php
2
namespace micro\orm;
3
4
/**
5
 * Utilitaires de mappage Objet/relationnel
6
 * @author jc
7
 * @version 1.0.0.3
8
 * @package orm
9
 */
10
class OrmUtils{
11
	public static function isSerializable($class,$member){
12
		if (Reflexion::getAnnotationMember($class,$member,"@transient")!==false || Reflexion::getAnnotationMember($class,$member,"@manyToOne")!==false ||
13
				Reflexion::getAnnotationMember($class,$member,"@manyToMany")!==false || Reflexion::getAnnotationMember($class,$member,"@oneToMany")!==false)
14
			return false;
15
		else
16
			return true;
17
	}
18
19
	public static function isNullable($class,$member){
20
		$ret=Reflexion::getAnnotationMember($class,$member,"@column");
21
		if (!$ret)
22
			return false;
23
		else
24
			return $ret->nullable;
25
	}
26
27
	public static function getFieldName($class,$member){
28
		$ret=Reflexion::getAnnotationMember($class, $member, "@column");
29
		if($ret===false)
30
			$ret=$member;
31
		else
32
			$ret=$ret->name;
33
		return $ret;
34
	}
35
36
	public static function getTableName($class){
37
		$ret=Reflexion::getAnnotationClass($class, "@table");
38
		if(\sizeof($ret)==0)
39
			$ret=$class;
40
		else{
41
			$ret=$ret[0]->name;
42
		}
43
		return $ret;
44
	}
45
46
	public static function getKeyFieldsAndValues($instance){
47
		$kf=Reflexion::getMembersWithAnnotation(get_class($instance), "@id");
48
		return Reflexion::getPropertiesAndValues($instance,$kf);
49
	}
50
51
	public static function getFirstKey($class){
52
		$kf=Reflexion::getMembersWithAnnotation($class, "@id");
53
		if(sizeof($kf)>0)
54
			return $kf[0]->getName();
55
	}
56
57
	public static function getFirstKeyValue($instance){
58
		$fkv=self::getKeyFieldsAndValues($instance);
59
		return reset($fkv);
60
	}
61
62
	/**
63
	 * @param object $instance
64
	 * @return mixed[]
65
	 */
66
	public static function getManyToOneMembersAndValues($instance){
67
		$ret=array();
68
		$class=get_class($instance);
69
		$members=Reflexion::getMembersWithAnnotation($class, "@manyToOne");
70
		foreach ($members as $member){
71
			$memberAccessor="get".ucfirst($member->getName());
72
			if(method_exists($instance,$memberAccessor)){
73
				$memberInstance=$instance->$memberAccessor();
74
				if(isset($memberInstance)){
75
					$keyValues=self::getKeyFieldsAndValues($memberInstance);
76
					if(sizeof($keyValues)>0){
77
						$fkName=self::getJoinColumnName($class, $member->getName());
78
						$ret[$fkName]=reset($keyValues);
79
					}
80
				}
81
			}
82
		}
83
		return $ret;
84
	}
85
86
87
88
	/**
89
	 * @param object $instance
90
	 * @param string $memberKey
91
	 * @param array $array
92
	 * @return boolean
93
	 */
94
	public static function exists($instance,$memberKey,$array){
95
		$accessor="get".ucfirst($memberKey);
96
		if(method_exists($instance, $accessor)){
97
			if($array!==null){
98
				foreach ($array as $value){
99
					if($value->$accessor()==$instance->$accessor())
100
						return true;
101
				}
102
			}
103
		}
104
		return false;
105
	}
106
107
	public static function getJoinColumnName($class,$member){
108
		$annot=Reflexion::getAnnotationMember($class, $member, "@joinColumn");
109
		if($annot!==false){
110
			$fkName=$annot->name;
111
		}else{
112
			$fkName="id".ucfirst(self::getTableName(ucfirst($member)));
113
		}
114
		return $fkName;
115
	}
116
117
	public static function isMemberInManyToOne($class,$array,$member){
118
		foreach ($array as $memberMTO){
119
			$annot=Reflexion::getAnnotationMember($class, $memberMTO->getName(), "@joinColumn");
120
			if($annot!==false && $annot->name==$member)
121
				return true;
122
		}
123
		return false;
124
	}
125
}
126