Completed
Push — master ( 37d0d3...61d24d )
by Jean-Christophe
01:28
created

Model::isAssociation()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
rs 9.2
c 0
b 0
f 0
cc 4
eloc 6
nc 3
nop 0
1
<?php
2
3
namespace micro\orm\creator;
4
5
class Model {
6
	private $members;
7
	private $name;
8
	private $namespace;
9
10
	public function __construct($name, $namespace="models") {
11
		$this->name=\ucfirst($name);
12
		$this->members=array ();
13
		$this->namespace=$namespace;
14
	}
15
16
	public function addMember(Member $member) {
17
		$this->members[$member->getName()]=$member;
18
		return $this;
19
	}
20
21
	public function addManyToOne($member, $name, $className, $nullable=false) {
22
		if (\array_key_exists($member, $this->members) === false) {
23
			$this->addMember(new Member($member));
24
			$this->removeMember($name);
25
		}
26
		$this->members[$member]->addManyToOne($name, $className, $nullable);
27
	}
28
29
	public function removeMember($memberName) {
30
		if ($this->members[$memberName]->isPrimary() === false)
31
			unset($this->members[$memberName]);
32
	}
33
34
	public function addOneToMany($member, $mappedBy, $className) {
35
		if (\array_key_exists($member, $this->members) === false) {
36
			$this->addMember(new Member($member));
37
		}
38
		$this->members[$member]->addOneToMany($mappedBy, $className);
39
	}
40
41
	public function addManyToMany($member, $targetEntity, $inversedBy, $joinTable, $joinColumns=[], $inverseJoinColumns=[]) {
42
		if (\array_key_exists($member, $this->members) === false) {
43
			$this->addMember(new Member($member));
44
		}
45
		$this->members[$member]->addManyToMany($targetEntity, $inversedBy, $joinTable, $joinColumns, $inverseJoinColumns);
46
	}
47
48
	public function __toString() {
49
		$result="<?php\n";
50
		if ($this->namespace !== "" && $this->namespace !== null) {
51
			$result.="namespace " . $this->namespace . ";\n";
52
		}
53
		$result.="class " . ucfirst($this->name) . "{";
54
		$members=$this->members;
55
		\array_walk($members, function ($item) {
56
			return $item . "";
57
		});
58
		$result.=implode("", $members);
59
		foreach ( $members as $member ) {
60
			$result.=$member->getGetter();
61
			$result.=$member->getSetter();
62
		}
63
		$result.=$this->getToString();
64
		$result.="\n}";
65
		return $result;
66
	}
67
68
	public function getName() {
69
		$namespace="";
70
		if ($this->namespace !== "" && $this->namespace !== null)
71
			$namespace=$this->namespace . '\\';
72
		return $namespace . $this->name;
73
	}
74
75
	public function getSimpleName() {
76
		return $this->name;
77
	}
78
79
	public function isAssociation() {
80
		$count=0;
81
		foreach ( $this->members as $member ) {
82
			if ($member->isManyToOne() === true || $member->isPrimary() === true) {
83
				$count++;
84
			}
85
		}
86
		return $count == \sizeof($this->members);
87
	}
88
89
	public function getPrimaryKey() {
90
		foreach ( $this->members as $member ) {
91
			if ($member->isPrimary() === true) {
92
				return $member;
93
			}
94
		}
95
		return null;
96
	}
97
98
	public function getDefaultFk() {
99
		return "id" . $this->name;
100
	}
101
102
	public function getManyToOneMembers() {
103
		$result=array ();
104
		foreach ( $this->members as $member ) {
105
			if ($member->isManyToOne() === true) {
106
				$result[]=$member;
107
			}
108
		}
109
		return $result;
110
	}
111
112
	private function getToStringField(){
113
		$result=null;
114
		foreach ( $this->members as $member ) {
115
			if ($member->hasAnnotations()===false) {
116
				$result=$member->getName();
117
			}
118
		}
119
		return $result;
120
	}
121
122
	public function getToString(){
123
		$field=$this->getToStringField();
124
		if(isset($field))
125
			$corps='$this->' . $field;
126
		else
127
			$corps='\"'.$this->name.'@\"'.'.\spl_object_hash($this)';
128
		$result="\n\t public function __toString(){\n";
129
		$result.="\t\t" . 'return '.$corps. ";\n";
130
		$result.="\t}\n";
131
		return $result;
132
	}
133
}
134