Пример #1
0
 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;
 }