Completed
Push — master ( 94ddbb...e5219e )
by Jean-Christophe
04:25
created

ModelParser::__toString()   A

Complexity

Conditions 6
Paths 32

Size

Total Lines 26
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 19
CRAP Score 6.0045

Importance

Changes 0
Metric Value
eloc 19
dl 0
loc 26
ccs 19
cts 20
cp 0.95
rs 9.0111
c 0
b 0
f 0
cc 6
nc 32
nop 0
crap 6.0045
1
<?php
2
3
namespace Ubiquity\orm\parser;
4
5
use Ubiquity\utils\base\UArray;
6
7
class ModelParser {
8
	protected $global;
9
	protected $primaryKeys;
10
	protected $manytoOneMembers;
11
	protected $oneToManyMembers;
12
	protected $manyToManyMembers;
13
	protected $joinColumnMembers;
14
	protected $joinTableMembers;
15
	protected $nullableMembers=[ ];
16
	protected $notSerializableMembers=[ ];
17
	protected $fieldNames;
18
	protected $fieldTypes=[];
19
	protected $yuml;
20
21 1
	public function parse($modelClass) {
22 1
		$instance=new $modelClass();
23 1
		$this->primaryKeys=Reflexion::getKeyFields($instance);
24 1
		$this->oneToManyMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@oneToMany");
25 1
		$this->manytoOneMembers=Reflexion::getMembersNameWithAnnotation($modelClass, "@manyToOne");
26 1
		$this->manyToManyMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@manyToMany");
27 1
		$this->joinColumnMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@joinColumn");
28 1
		$this->joinTableMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@joinTable");
29 1
		$yuml=Reflexion::getAnnotationClass($modelClass, "@yuml");
30 1
		if(\sizeof($yuml)>0)
31
			$this->yuml=$yuml[0];
32 1
		$properties=Reflexion::getProperties($instance);
33 1
		foreach ( $properties as $property ) {
34 1
			$propName=$property->getName();
35 1
			$this->fieldNames[$propName]=Reflexion::getFieldName($modelClass, $propName);
36 1
			$nullable=Reflexion::isNullable($modelClass, $propName);
37 1
			$serializable=Reflexion::isSerializable($modelClass, $propName);
38 1
			if ($nullable)
39 1
				$this->nullableMembers[]=$propName;
40 1
			if (!$serializable)
41 1
				$this->notSerializableMembers[]=$propName;
42 1
			$type=Reflexion::getDbType($modelClass, $propName);
43 1
			if($type===false)
44 1
				$type="mixed";
45 1
			$this->fieldTypes[$propName]=$type;
46
		}
47 1
		$this->global["#tableName"]=Reflexion::getTableName($modelClass);
48 1
	}
49
50 1
	public function __toString() {
51 1
		$result=$this->global;
52 1
		$result["#primaryKeys"]=$this->primaryKeys;
53 1
		$result["#manyToOne"]=$this->manytoOneMembers;
54 1
		$result["#fieldNames"]=$this->fieldNames;
55 1
		$result["#fieldTypes"]=$this->fieldTypes;
56 1
		$result["#nullable"]=$this->nullableMembers;
57 1
		$result["#notSerializable"]=$this->notSerializableMembers;
58 1
		if(isset($this->yuml))
59
			$result["#yuml"]=$this->yuml->getPropertiesAndValues();
60 1
		foreach ( $this->oneToManyMembers as $member => $annotation ) {
61 1
			$result["#oneToMany"][$member]=$annotation->getPropertiesAndValues();
62
		}
63 1
		foreach ( $this->manyToManyMembers as $member => $annotation ) {
64 1
			$result["#manyToMany"][$member]=$annotation->getPropertiesAndValues();
65
		}
66
67 1
		foreach ( $this->joinTableMembers as $member => $annotation ) {
68 1
			$result["#joinTable"][$member]=$annotation->getPropertiesAndValues();
69
		}
70
71 1
		foreach ( $this->joinColumnMembers as $member => $annotation ) {
72 1
			$result["#joinColumn"][$member]=$annotation->getPropertiesAndValues();
73 1
			$result["#invertedJoinColumn"][$annotation->name]=[ "member" => $member,"className" =>$annotation->className ];
74
		}
75 1
		return "return " . UArray::asPhpArray($result, "array") . ";";
76
	}
77
}
78