public static function update($typeName, $desc, $fields, $formbuilderStructure = false) { if (!is_array($fields) || empty($fields)) { if (json_decode($fields) != null) { $fields = json_decode($fields); $fields = self::objectToArray($fields); } else { throw new Exception('Cannot modify fields in: ' . $typeName); } } $typesTable = new K_Tree_Types_Model(); $typesTable->update(array('type_desc' => $desc, 'type_fields' => serialize($formbuilderStructure), 'type_modified' => time()), '`type_name` = "' . $typeName . '"'); $query = new K_Db_Query(); $columns = $query->q('SHOW COLUMNS FROM `type_' . $typeName . '`'); $rightFields = array(); $usedFields = array(0 => 'type_' . $typeName . '_id'); $i = 0; foreach ($fields as $fieldId => $field) { if ($field['type'] == 'submit' || $field['type'] == 'reset') { continue; } $rightFields[$i] = 'type_' . $typeName . '_' . $field['values']['name']; $rightFieldParams[$i] = $field; $i++; } $idExists = false; foreach ($columns as $key => $column) { $columns[$key] = $column->toArray(); if (!in_array($columns[$key]['Field'], $rightFields) && $columns[$key]['Field'] != 'type_' . $typeName . '_id' && $columns[$key]['Field'] != 'type_' . $typeName . '_pid') { $query->q('ALTER TABLE `type_' . $typeName . '` DROP `' . $columns[$key]['Field'] . '`'); } else { $usedFields[] = $columns[$key]['Field']; } if ($columns[$key]['Field'] == 'type_' . $typeName . '_id') { $idExists = true; } } if (!$idExists) { $query->q('ALTER TABLE `type_' . $typeName . '` ADD `type_' . $typeName . '_id` INT UNSIGNED NOT NULL FIRST'); } foreach ($rightFields as $key => $value) { if (!in_array($value, $usedFields)) { $usedFieldsValues = $usedFields; echo $qui = 'ALTER TABLE `type_' . $typeName . '` ADD `' . $value . '` ' . self::setType($rightFieldParams[$key]['type'], $rightFieldParams[$key]['vlds']) . ' NOT NULL AFTER `' . end($usedFieldsValues) . '`'; $query->q($qui); $usedFields[] = 'type_' . $typeName . '_' . $value; } } return true; }