Completed
Push — master ( 8aa0e6...89168a )
by Thomas
05:06
created

AbstractModelJsonResponderGenerator   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 11
c 2
b 0
f 0
lcom 1
cbo 6
dl 0
loc 61
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getRelationshipIncludes() 0 19 4
B getModelFields() 0 22 4
A getFieldsCode() 0 12 3
1
<?php
2
namespace keeko\tools\generator\responder;
3
4
use keeko\framework\utils\NameUtils;
5
use Propel\Generator\Model\Table;
6
7
class AbstractModelJsonResponderGenerator extends AbstractJsonResponderGenerator {
8
	
9
	use PayloadGeneratorTrait;
10
	
11
	protected function getRelationshipIncludes(Table $model, $root = '', $processed = []) {
12
		if (in_array($model->getOriginCommonName(), $processed)) {
13
			return [];
14
		}
15
		
16
		$relationships = $this->modelService->getRelationships($model);
17
		$includes = [];
18
	
19
		foreach ($relationships->getAll() as $rel) {
20
			$foreign = $rel->getForeign();
21
			$processed[] = $foreign->getOriginCommonName();
22
			
23
			$typeName = $rel->getRelatedTypeName();
24
			$includes[] = (!empty($root) ? $root . '.' : '') . $typeName;
25
			$includes = array_merge($includes, $this->getRelationshipIncludes($foreign, $typeName, $processed));
26
		}
27
	
28
		return $includes;
29
	}
30
	
31
	protected function getModelFields(Table $model, $root = '', $processed = []) {
32
		if (in_array($model->getOriginCommonName(), $processed)) {
33
			return [];
34
		}
35
		
36
		$typeName = NameUtils::dasherize($model->getOriginCommonName());
37
		$relationships = $this->modelService->getRelationships($model);
38
		$fields = [$typeName => $model];
39
40
		foreach ($relationships->getAll() as $rel) {
41
			$foreign = $rel->getForeign();
42
			$processed[] = $foreign->getOriginCommonName();
43
			
44
			$typeName = $rel->getRelatedTypeName();
45
			$name = (!empty($root) ? $root . '.' : '') . $typeName;
46
			
47
			$fields[$name] = $foreign;
48
			$fields = array_merge($fields, $this->getModelFields($foreign, $name, $processed));
49
		}
50
		
51
		return $fields;
52
	}
53
	
54
	protected function getFieldsCode(array $fields) {
55
		$code = '';
56
		foreach ($fields as $typeName => $field) {
57
			$code .= sprintf("\t'%s' => %s::getSerializer()->getFields(),\n", $typeName, $field->getPhpName());
58
		}
59
		
60
		if (strlen($code) > 0) {
61
			$code = substr($code, 0, -2);
62
		}
63
		
64
		return sprintf("[\n%s\n]", $code);
65
	}
66
	
67
}
68