Completed
Push — master ( af6f2f...54d848 )
by Jean-Christophe
01:36
created

UbiquityMyAdminViewer   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 0
Metric Value
wmc 11
c 0
b 0
f 0
lcom 1
cbo 5
dl 0
loc 62
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
D getForm() 0 42 10
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 object $instance
33
	 * @return DataForm
34
	 */
35
	public function getForm($instance){
36
		$form=$this->jquery->semantic()->dataForm("frmEdit", $instance);
37
		$className=\get_class($instance);
38
		$form->setFields($this->controller->getAdminData()->getFormFieldNames($className));
39
		$form->setSubmitParams("Admin/update", "#table-details");
40
		$fieldTypes=OrmUtils::getFieldTypes($className);
41
		foreach ($fieldTypes as $property=>$type){
42
			switch ($type){
43
				case "boolean":
44
					$form->fieldAsCheckbox($property);
45
					break;
46
				case "int":
47
					$form->fieldAsInput($property,["inputType"=>"number"]);
48
					break;
49
			}
50
		}
51
		$relations = OrmUtils::getFieldsInRelations($className);
52
		foreach ($relations as $member){
53
			if(OrmUtils::getAnnotationInfoMember($className, "#manyToOne",$member)!==false){
54
				$joinColumn=OrmUtils::getAnnotationInfoMember($className, "#joinColumn", $member);
55
				if($joinColumn){
56
					$fkObject=Reflexion::getMemberValue($instance, $member);
57
					$fkClass=$joinColumn["className"];
58
					$fkId=OrmUtils::getFirstKey($fkClass);
59
					$fkIdGetter="get".\ucfirst($fkId);
60
					if(\method_exists($fkObject, "__toString") && \method_exists($fkObject, $fkIdGetter)){
61
						$fkField=$joinColumn["name"];
62
63
						$fkValue=OrmUtils::getFirstKeyValue($fkObject);
64
						if(!Reflexion::setMemberValue($instance, $fkField, $fkValue)){
65
							$instance->$fkField=OrmUtils::getFirstKeyValue($fkObject);
66
							$form->addField($fkField);
67
						}
68
						$form->fieldAsDropDown($fkField,JArray::modelArray(DAO::getAll($fkClass),$fkIdGetter,"__toString"));
69
						$form->setCaption($fkField, \ucfirst($member));
70
					}
71
				}
72
			}
73
		}
74
75
		return $form;
76
	}
77
}