Passed
Push — master ( 247cd1...e8de25 )
by Jean-Christophe
01:32
created

DAORelationsTrait::_getIncludedNext()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 1
nc 4
nop 2
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Ubiquity\orm\traits;
4
5
use Ubiquity\orm\OrmUtils;
6
use Ubiquity\orm\parser\ManyToManyParser;
7
use Ubiquity\orm\parser\ConditionParser;
8
9
/**
10
 * @author jc
11
 * @property \Ubiquity\db\Database $db
12
 */
13
trait DAORelationsTrait {
14
	abstract protected static function _getAll($className, ConditionParser $conditionParser, $included=true,$useCache=NULL);
15
	
16
	private static function generateManyToManyParser(ManyToManyParser $parser,&$myPkValues){
17
		$sql=$parser->generateConcatSQL();
18
		$result=self::$db->prepareAndFetchAll($sql,$parser->getWhereValues());
19
		$condition=$parser->getParserWhereMask(" ?");
20
		$cParser=new ConditionParser();		
21
		foreach ($result as $row){
22
			$values=explode(",", $row["_concat"]);
23
			$myPkValues[$row["_field"]]=$values;
24
			$cParser->addParts($condition, $values);
25
		}
26
		$cParser->compileParts();
27
		return $cParser;
28
	}
29
	
30
	private static function _getIncludedNext($included,$member){
31
		return (isset($included[$member]))?(is_bool($included[$member])?$included[$member]:[$included[$member]]):false;
32
	}
33
	
34
	private static function getManyToManyFromArrayIds($relationObjects, $ids){
35
		$ret=[];
36
		foreach ( $relationObjects as $targetEntityInstance ) {
37
			$id=OrmUtils::getFirstKeyValue($targetEntityInstance);
38
			if (array_search($id, $ids)!==false) {
39
				array_push($ret, $targetEntityInstance);
40
			}
41
		}
42
		return $ret;
43
	}
44
	
45
	protected static function getIncludedForStep($included){
46
		if(is_bool($included)){
47
			return $included;
48
		}
49
		$ret=[];
50
		if(is_array($included)){
51
			foreach ($included as &$includedMember){
52
				if(is_array($includedMember)){
53
					foreach ($includedMember as $iMember){
54
						self::parseEncludeMember($ret, $iMember);
55
					}
56
				}else{
57
					self::parseEncludeMember($ret, $includedMember);
58
				}
59
			}
60
		}
61
		return $ret;
62
	}
63
	
64
	private static function parseEncludeMember(&$ret,$includedMember){
65
		$array=explode(".", $includedMember);
66
		$member=array_shift($array);
67
		if(sizeof($array)>0){
68
			$newValue=implode(".", $array);
69
			if($newValue==='*'){
70
				$newValue=true;
71
			}
72
			if(isset($ret[$member])){
73
				if(!is_array($ret[$member])){
74
					$ret[$member]=[$ret[$member]];
75
				}
76
				$ret[$member][]=$newValue;
77
			}else{
78
				$ret[$member]=$newValue;
79
			}
80
		}else{
81
			if(isset($member) && ""!=$member){
82
				$ret[$member]=false;
83
			}else{
84
				return;
85
			}
86
		}
87
	}
88
	
89
	private static function getInvertedJoinColumns($included,&$invertedJoinColumns){
90
		foreach ($invertedJoinColumns as $column=>&$annot){
91
			$member=$annot["member"];
92
			if(isset($included[$member])===false){
93
				unset($invertedJoinColumns[$column]);
94
			}
95
		}
96
	}
97
	
98
	private static function getToManyFields($included,&$toManyFields){
99
		foreach ($toManyFields as $member=>$annotNotUsed){
100
			if(isset($included[$member])===false){
101
				unset($toManyFields[$member]);
102
			}
103
		}
104
	}
105
	
106
	protected static function _initRelationFields($included,$metaDatas,&$invertedJoinColumns,&$oneToManyFields,&$manyToManyFields){
107
		if (isset($metaDatas["#invertedJoinColumn"])){
108
			$invertedJoinColumns=$metaDatas["#invertedJoinColumn"];
109
		}
110
		if (isset($metaDatas["#oneToMany"])) {
111
			$oneToManyFields=$metaDatas["#oneToMany"];
112
		}
113
		if (isset($metaDatas["#manyToMany"])) {
114
			$manyToManyFields=$metaDatas["#manyToMany"];
115
		}
116
		if(is_array($included)){
117
			if(isset($invertedJoinColumns)){
118
				self::getInvertedJoinColumns($included, $invertedJoinColumns);
119
			}
120
			if(isset($oneToManyFields)){
121
				self::getToManyFields($included, $oneToManyFields);
122
			}
123
			if(isset($manyToManyFields)){
124
				self::getToManyFields($included, $manyToManyFields);
125
			}
126
		}
127
	}
128
}
129