1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
36:
37: 38: 39: 40: 41:
42:
43: class X2StaticFieldsBehavior extends CBehavior {
44:
45: public $fields;
46:
47:
48:
49: public $translationCategory;
50:
51: private $_fields;
52:
53: public function attach ($owner) {
54: parent::attach ($owner);
55: foreach ($this->fields as $field) {
56: $this->_fields[$field['fieldName']] = Yii::createComponent (array_merge (array (
57: 'class' => 'X2StaticField',
58: 'translationCategory' => $this->translationCategory,
59: 'owner' => $this->owner
60: ), $field));
61: }
62: $this->owner->setFormatter ('application.components.formatters.FieldFormatter');
63: }
64:
65: public function getField ($fieldName) {
66: return $this->_fields[$fieldName];
67: }
68:
69: public function renderInput($fieldName, $htmlOptions = array()) {
70: $field = $this->getField($fieldName);
71:
72: if (!$field) return;
73:
74: if (isset ($this->inputRenderer) && $this->inputRenderer instanceof FieldInputRenderer) {
75:
76: if ($input = $this->inputRenderer->renderInput ($field, $htmlOptions)) {
77: return $input;
78: }
79: }
80:
81: return X2Model::renderModelInput($this->owner, $field, $htmlOptions);
82:
83: }
84:
85: }
86:
87: 88: 89: 90:
91: class X2StaticDropdown extends CComponent {
92:
93: private $_options;
94: public function getOptions () {
95: if (is_callable ($this->_options)) {
96: $fn = $this->_options;
97: return $fn ();
98: } else {
99: return $this->_options;
100: }
101: }
102:
103: public function setOptions ($options) {
104: $this->_options = $options;
105: }
106: }
107:
108: 109: 110:
111: class X2StaticField extends CComponent{
112:
113: public $translationCategory;
114: public $type;
115: public $fieldName;
116: public $owner;
117: public $required;
118: public $includeEmpty = true;
119:
120: public function __construct () {
121: $this->attachBehaviors ($this->behaviors ());
122: }
123:
124: private $_linkType;
125: public function getLinkType () {
126: return $this->_linkType;
127: }
128:
129: private $_attributeLabel;
130: public function getAttributeLabel () {
131: if ($this->translationCategory) {
132: return Yii::t($this->translationCategory, $this->_attributeLabel);
133: } else {
134: return $this->_attributeLabel;
135: }
136: }
137:
138: public function setAttributeLabel ($attributeLabel) {
139: $this->_attributeLabel = $attributeLabel;
140: }
141:
142: public function setLinkType ($linkType) {
143: if (is_callable ($linkType)) {
144: $this->_linkType = Yii::createComponent (array (
145: 'class' => 'X2StaticDropdown',
146: 'options' => $linkType
147: ));
148: } else {
149: $this->_linkType = $linkType;
150: }
151: }
152:
153: public function behaviors () {
154: return array (
155: 'CommonFieldsBehavior' => array (
156: 'class' => 'application.components.behaviors.CommonFieldsBehavior',
157: )
158: );
159: }
160:
161: public function valueIsLink () {
162: static $linkTypes = null;
163: if (!$linkTypes)
164: $linkTypes = array_flip (array (
165: 'link', 'updatedBy', 'createdBy', 'url', 'phone', 'email', 'assignment'));
166: return isset ($linkTypes[$this->type]);
167: }
168:
169: public function getDropdownOptions () {
170: if ($this->linkType instanceof X2StaticDropdown) {
171: return array (
172: 'options' => $this->linkType->options,
173: 'multi' => false
174: );
175: } else {
176: return Dropdowns::getItems($this->linkType, null, true);
177: }
178: }
179:
180: public function getDropdownValue ($fieldValue) {
181: if ($this->linkType instanceof X2StaticDropdown) {
182: $options = $this->linkType->options;
183: $fieldName = $this->fieldName;
184: $value = $fieldValue;
185: return isset ($options[$value]) ? $options[$value] : null;
186: } else {
187: return X2Model::model('Dropdowns')->getDropdownValue($this->linkType, $this->fieldName);
188: }
189: }
190: }
191:
192: ?>
193: