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: 44:
45: class FormView extends RecordView {
46:
47: public $htmlOptions = array (
48: 'class' => ''
49: );
50:
51: 52: 53: 54:
55: public $form;
56:
57: 58: 59: 60:
61: public $JSClass = 'FormView';
62:
63: 64: 65: 66:
67: public $quickCreateModels = array();
68:
69: 70: 71: 72: 73: 74:
75: public $idArray;
76:
77: 78: 79: 80:
81: public $defaultsByRelatedModelType = array();
82:
83: 84: 85: 86: 87:
88: public $suppressQuickCreate = false;
89:
90: 91: 92: 93:
94: private $_quickCreateButtonTypes = array();
95:
96: public function init() {
97: parent::init();
98:
99: $this->quickCreateModels = array_flip (
100: QuickCreateRelationshipBehavior::getModelsWhichSupportQuickCreate());
101: }
102:
103: public function run () {
104:
105:
106: if (!empty($this->form)) {
107: parent::run();
108: return;
109: }
110:
111: $this->form = $this->beginWidget('CActiveForm', array(
112: 'id' => $this->modelName . '-form',
113: 'enableAjaxValidation' => false,
114: ));
115:
116: parent::run ();
117:
118: echo X2Html::tag('div', array(
119: 'class' => 'row buttons save-button-row'
120: ));
121:
122: $text = $this->model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Save');
123: echo X2Html::submitButton ($text, array(
124: 'class' => 'x2-button',
125: 'id' => 'save-button',
126: 'tabindex' => 24
127: ));
128: echo '</div>';
129: $this->endWidget();
130: }
131:
132: public function getJSClassParams() {
133: return array_merge(parent::getJSClassParams(), array(
134: 'quickCreate' => array (
135: 'urls' => QuickCreateRelationshipBehavior::getCreateUrlsForModels(
136: $this->_quickCreateButtonTypes),
137: 'tooltips' => QuickCreateRelationshipBehavior::getDialogTooltipsForModels(
138: $this->_quickCreateButtonTypes, get_class($this->model)),
139: 'dialogTitles' => QuickCreateRelationshipBehavior::getDialogTitlesForModels(
140: $this->_quickCreateButtonTypes),
141: 'defaults' => $this->defaultsByRelatedModelType
142: ),
143: 'translations' => array (
144: 'title' => Yii::t('app', 'Discard unsaved changes?'),
145: 'message' =>
146: Yii::t('app', 'You have unsaved changes to this record. Discard changes?'),
147: 'cancel' => Yii::t('app', 'Cancel'),
148: 'confirm' => Yii::t('app', 'Yes'),
149: )
150: ));
151: }
152:
153: public function getPackages () {
154: $packages = array_merge(parent::getPackages(), array(
155: 'RecordEditCss' => array (
156: 'baseUrl' => Yii::app()->theme->baseUrl,
157: 'css' => array (
158: 'css/recordEdit.css'
159: )
160: ),
161: 'FormViewJS' => array (
162: 'baseUrl' => Yii::app()->baseUrl,
163: 'js' => array (
164: 'js/recordView/FormView.js'
165: ),
166: 'depends' => array ('RecordViewJS')
167: )
168: ));
169:
170: if(!$this->suppressQuickCreate) {
171: $packages = array_merge($packages, array(
172: 'RelationshipJS' => array (
173: 'baseUrl' => Yii::app()->baseUrl,
174: 'js' => array (
175: 'js/Relationships.js'
176: ),
177: 'depends' => array ('X2Widget')
178: )
179: ));
180: }
181:
182: return $packages;
183: }
184:
185: public function getMainOptions () {
186: return array (
187: 'class' => 'x2-layout form-view',
188: 'id' => $this->namespace . 'form-view',
189: );
190: }
191:
192: public function renderMain () {
193: $html = X2Html::openTag('div', $this->getMainOptions());
194:
195: $html .= $this->form->errorSummary ($this->model);
196:
197: $html .= $this->renderSections ();
198:
199: $html .= '</div>';
200: return $html;
201: }
202:
203:
204: public function renderAttribute ($item, Fields $field) {
205: $fieldName = preg_replace('/^formItem_/u', '', $item['name']);
206:
207: $html = X2Html::openTag('div', array(
208: 'class' => "formInputBox"
209: ));
210:
211: if (isset($this->idArray)) {
212: $html .= X2Model::renderMergeInput ($this->modelName, $this->idArray, $field);
213: } else if (isset($this->specialFields[$fieldName])) {
214: $html .= $this->specialFields[$fieldName];
215: } else {
216: $html .= $this->model->renderInput($fieldName, array(
217: 'tabindex' => $item['tabindex'],
218: 'disabled' => $item['readOnly'],
219: 'style' => $item['height'],
220: 'id' => $this->namespace.X2Html::resolveId ($this->model, $fieldName),
221: ));
222: }
223:
224: $html .= '</div>';
225:
226: $html .= $this->renderExtra($field);
227:
228: return $html;
229: }
230:
231: 232: 233:
234: public function ($field) {
235: $html = '';
236: if ($field->type === 'link' && !$this->suppressQuickCreate &&
237: isset($this->quickCreateModels[$field->linkType])) {
238: $html .= X2Html::tag ('span', array (
239: 'class' => "quick-create-button create-$field->linkType"
240: ), '+');
241:
242: $this->_quickCreateButtonTypes[] = $field->linkType;
243: }
244:
245: if (!empty($field->description)) {
246: $html .= X2Html::hint($field->description);
247: }
248:
249: return $html;
250: }
251:
252: public function getLayoutData() {
253: $attributes = array(
254: 'model' => ucfirst($this->modelName),
255: 'defaultForm' => 1,
256: 'scenario' => $this->scenario
257: );
258:
259: $layout = FormLayout::model()->findByAttributes($attributes);
260:
261: return CJSON::decode($layout->layout);
262: }
263:
264: public function renderLabel ($field) {
265: return CHtml::activeLabelEx ($this->model, $field->fieldName);
266: }
267: }
268:
269: ?>
270: