/** * @param $name * @param string $value */ public function setPropertyName($name, $value = '') { //$this->_properties[$name] = self::isJson($value) ? json_decode($value) : $value; $this->_properties[$name] = $value; if ($this->scenario == 'update' && $this->_properties[$name] == '') { $frameworkDataCriteria = new CDbCriteria(); $frameworkDataCriteria->select = 'id, frameworkId, frameworkFieldId, value'; $frameworkDataCriteria->condition = 'frameworkId=' . Yii::app()->session['surDesign']['id']; $fieldId = self::getFieldId($name); $frameworkDataCriteria->addCondition('frameworkFieldId=' . $fieldId); $rsFrameworkData = FrameworkFieldData::model()->findAll($frameworkDataCriteria); //print_r($rsFrameworkData); die; foreach ($rsFrameworkData as $propertyData) { if ($propertyData->frameworkFieldId == $fieldId) { if (count($rsFrameworkData) == 1) { $this->_properties[$name] = $propertyData->value; } else { $this->_properties[$name][] = $propertyData->value; } $this->_propertyDataMap[$propertyData->id] = $fieldId; if (self::isJson($propertyData->value)) { $this->_properties[$name] = json_decode($propertyData->value); } } } } }
/** * @param $fieldId * @param $dForm * @return string */ private function generateGridElements($fieldId, &$dForm) { //$model = new DynamicFormDetails('insert', 'frameworkFieldData'); // get grid fields $gridFieldsCriteria = new CDbCriteria(); $gridFieldsCriteria->condition = 'parentId=' . $fieldId; $gridFieldsCriteria->order = '`order` ASC'; $gridFieldsNames = []; $labels = []; $properties = []; $rules = []; $inputs = ''; if ($dForm->getScenario() == 'insert') { $gridFields = FrameworkFields::model()->findAll($gridFieldsCriteria); $inputs .= '<tr class="copy' . $fieldId . '">'; foreach ($gridFields as $field) { //$el = new CFormInputElement() $attribute = $field->inputName . '_' . $field->id; $dForm->setpropertyName($attribute); // continue; //$model->setAttribute($attribute, $field->inputName); // $dForm->_dynamicLabels[$attribute] = isset($field->label) ? // $field->label : $dForm->generateAttributeLabel($field->inputName); $labels[$attribute] = isset($field->label) ? $field->label : $dForm->generateAttributeLabel($field->inputName); $validation = $field->required ? 'required' : 'safe'; $rules[] = [$attribute, $validation]; $i = 0; //print_r($dForm); die; $inputs .= '<td>'; switch ($field->inputType) { case 'text': $inputs .= CHtml::activeTextField($dForm, "[{$i}]{$attribute}"); $inputs .= CHtml::error($dForm, "[{$i}]{$attribute}"); break; case 'dropdownlist': $options = []; if ($field->multiple) { $options['multiple'] = true; } $inputs .= CHtml::activeDropDownList($dForm, "[{$i}]{$attribute}", Options::model()->getContextFieldOptions($field->id), $options); $inputs .= CHtml::error($dForm, "[{$i}]{$attribute}"); break; } $inputs .= '</td>'; //$elements['elements'][] = '</td>'; } $inputs .= '<td></td></tr>'; } else { // get id's of fields that belong to the grid //$gridFieldsCriteria->select = 'id'; $childFields = ModelToArray::convertModelToArray(FrameworkFields::model()->with('data')->findAll($gridFieldsCriteria)); // ['frameworkFields' => 'id, inputName, label, inputType, required, multiple']); //print_r($childFields); die; $gridFieldsIds = array_map(function ($item) { return $item['id']; }, $childFields); // get grid data $fieldDataCriteria = new CDbCriteria(); $fieldDataCriteria->condition = 'frameworkId=' . Yii::app()->session['surDesign']['id']; $fieldDataCriteria->addInCondition('frameworkFieldId', $gridFieldsIds); $gridFields = FrameworkFieldData::model()->findAll($fieldDataCriteria); if (empty($gridFields)) { $dForm->setScenario('insert'); //print_r($dForm); die; return self::generateGridElements($fieldId, $dForm); } $dFormGrid = []; foreach ($childFields as $child) { $elementId = $child['inputName'] . '_' . $child['id']; $gridFieldsNames[$child['id']] = $elementId; $gridParams[$elementId]['id'] = $child['id']; $labels[$elementId] = $child['label']; $gridParams[$elementId]['inputType'] = $child['inputType']; $gridParams[$elementId]['required'] = $child['required']; $gridParams[$elementId]['multiple'] = $child['multiple']; } //$dFormGrid[$k] = new DForm(); foreach ($childFields as $child) { if (isset($child['data'][0])) { foreach ($child['data'] as $key => $data) { if (!isset($dFormGrid[$key])) { $dFormGrid[$key] = new DForm(); } $elementId = $child['inputName'] . '_' . $child['id']; foreach ($gridFieldsNames as $gridElement) { if (empty($dFormGrid[$key]->attributes[$gridElement])) { //echo "new $key $gridElement \n"; //print_r($dFormGrid[$key]); // $dFormGrid[$key]->setPropertyName($gridElement); } //var_dump($dFormGrid[$key]->$gridElement); } $dFormGrid[$key]->{$elementId} = $data['value']; if (DForm::isJson($data['value'])) { $dFormGrid[$key]->{$elementId} = json_decode($data['value']); } } } } $copyClass = ''; foreach ($dFormGrid as $key => $gridItems) { $inputs .= '<tr class="copy' . $fieldId . ' ' . $copyClass . '">'; foreach ($gridItems->attributeNames() as $attr) { //var_dump($gridItems[$attr]); die; $inputs .= '<td>'; switch ($gridParams[$attr]['inputType']) { case 'text': $inputs .= CHtml::activeTextField($gridItems, "[{$key}]{$attr}"); $inputs .= CHtml::error($gridItems, "[{$key}]{$attr}"); break; case 'dropdownlist': $options = []; if ($gridParams[$attr]['multiple']) { $options['multiple'] = true; } $inputs .= CHtml::activeDropDownList($gridItems, "[{$key}]{$attr}", Options::model()->getContextFieldOptions($gridParams[$attr]['id']), $options); $inputs .= CHtml::error($gridItems, "[{$key}]{$attr}"); break; } $inputs .= '</td>'; } $inputs .= '<td><a class="remove ui-icon ui-icon-trash" href="#"' . ' onclick="$(this).parent().parent().remove(); return false">remove</a></td></tr>'; $copyClass = 'copy1'; } //echo $inputs; die; } //var_dump($data, $cols); die('lklk'); //die; $dForm->setRules($rules); $dForm->setAttributeLabels($labels); //print_r(array_values($labels)); $tableHeader = '<th>' . implode('</th><th>', array_values($labels)); $table = '<table class="jgTabular"><thead><tr>' . $tableHeader . '<th></th></tr></thead>'; $table .= '<tbody>' . $inputs . '</tbody>'; $table .= '</table>'; $table .= CHtml::htmlButton('<span class="ui-icon ui-icon-plusthick"></span>Add new row', ['id' => 'copyLink-' . $fieldId, 'rel' => '.copy' . $fieldId]); // if($fieldId == 37) { // print_r($table); //die('pop'); // } return $table; }