Completed
Push — master ( 54d848...8545cb )
by Jean-Christophe
01:24
created

UbiquityMyAdminViewer::manyToOneField()   B

Complexity

Conditions 5
Paths 4

Size

Total Lines 19
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 19
rs 8.8571
c 0
b 0
f 0
cc 5
eloc 15
nc 4
nop 4
1
<?php
2
3
namespace micro\controllers\admin;
4
5
use Ajax\JsUtils;
6
use Ajax\semantic\widgets\dataform\DataForm;
7
use micro\orm\OrmUtils;
8
use Ajax\service\JArray;
9
use micro\orm\DAO;
10
use micro\orm\parser\Reflexion;
11
12
/**
13
 * @author jc
14
 *
15
 */
16
class UbiquityMyAdminViewer {
17
	/**
18
	 * @var JsUtils
19
	 */
20
	private $jquery;
21
22
	/**
23
	 * @var UbiquityMyAdminBaseController
24
	 */
25
	private $controller;
26
	public function __construct(UbiquityMyAdminBaseController $controller){
27
		$this->jquery=$controller->jquery;
28
		$this->controller=$controller;
29
	}
30
31
	/**
32
	 * @param string $identifier
33
	 * @param object $instance
34
	 * @return DataForm
35
	 */
36
	public function getForm($identifier,$instance){
37
		$form=$this->jquery->semantic()->dataForm($identifier, $instance);
38
		$className=\get_class($instance);
39
		$form->setFields($this->controller->getAdminData()->getFormFieldNames($className));
40
		$form->setSubmitParams("Admin/update", "#table-details");
41
		$fieldTypes=OrmUtils::getFieldTypes($className);
42
		foreach ($fieldTypes as $property=>$type){
43
			switch ($type){
44
				case "boolean":
45
					$form->fieldAsCheckbox($property);
46
					break;
47
				case "int":
48
					$form->fieldAsInput($property,["inputType"=>"number"]);
49
					break;
50
			}
51
		}
52
		$relations = OrmUtils::getFieldsInRelations($className);
53
		foreach ($relations as $member){
54
			if(OrmUtils::getAnnotationInfoMember($className, "#manyToOne",$member)!==false){
55
				$this->manyToOneField($form, $member, $className, $instance);
56
			}
57
		}
58
59
		return $form;
60
	}
61
62
	protected function manyToOneField(DataForm $form,$member,$className,$instance){
63
		$joinColumn=OrmUtils::getAnnotationInfoMember($className, "#joinColumn", $member);
64
		if($joinColumn){
65
			$fkObject=Reflexion::getMemberValue($instance, $member);
66
			$fkClass=$joinColumn["className"];
67
			$fkId=OrmUtils::getFirstKey($fkClass);
68
			$fkIdGetter="get".\ucfirst($fkId);
69
			if(\method_exists($fkObject, "__toString") && \method_exists($fkObject, $fkIdGetter)){
70
				$fkField=$joinColumn["name"];
71
				$fkValue=OrmUtils::getFirstKeyValue($fkObject);
72
				if(!Reflexion::setMemberValue($instance, $fkField, $fkValue)){
73
					$instance->{$fkField}=OrmUtils::getFirstKeyValue($fkObject);
74
					$form->addField($fkField);
75
				}
76
				$form->fieldAsDropDown($fkField,JArray::modelArray(DAO::getAll($fkClass),$fkIdGetter,"__toString"));
77
				$form->setCaption($fkField, \ucfirst($member));
78
			}
79
		}
80
	}
81
}
82