diff --git a/migrations/upgrades/schemas/20190426156200_set_nullable_value_field_settings_table.php b/migrations/upgrades/schemas/20190426156200_set_nullable_value_field_settings_table.php new file mode 100644 index 0000000000..1397b92022 --- /dev/null +++ b/migrations/upgrades/schemas/20190426156200_set_nullable_value_field_settings_table.php @@ -0,0 +1,15 @@ +table('directus_settings'); + + $table->changeColumn('value', 'text', [ + 'null' => true + ]); + } +} diff --git a/src/endpoints/Settings.php b/src/endpoints/Settings.php index c40f3d1d8f..9f9caec084 100644 --- a/src/endpoints/Settings.php +++ b/src/endpoints/Settings.php @@ -83,7 +83,7 @@ public function all(Request $request, Response $response) * */ foreach($fieldData['data'] as $key => $value){ - switch ($value['interface']) { + switch ($value['type']) { case 'file': $result = array_search($value['field'], array_column($responseData['data'], 'key')); if($result){ @@ -95,7 +95,7 @@ public function all(Request $request, Response $response) } } break; - case 'tags': + case 'array': $inputData['value'] = !empty($responseData['data'][$result]['value']) ? $responseData['data'][$result]['value'] : null; break; } @@ -153,13 +153,21 @@ public function getInterfaceBasedInput($request,$setting) $inputData = $request->getParsedBody(); foreach($fieldData['data'] as $key => $value){ if($value['field'] == $setting){ - switch ($value['interface']) { - case 'file': - $inputData['value'] = isset($inputData['value']['id']) ? $inputData['value']['id'] : $inputData['value']; - break; - case 'tags': - $inputData['value'] = is_array($inputData['value']) ? implode(",",$inputData['value']) : $inputData['value']; - break; + if($inputData['value'] != null){ + switch ($value['type']) { + case 'file': + $inputData['value'] = isset($inputData['value']['id']) ? $inputData['value']['id'] : $inputData['value']; + break; + case 'array': + $inputData['value'] = is_array($inputData['value']) ? implode(",",$inputData['value']) : $inputData['value']; + break; + case 'json': + $inputData['value'] = json_encode($inputData['value']); + break; + } + }else{ + // To convert blank string in null + $inputData['value'] = null; } } } @@ -174,8 +182,6 @@ public function getInterfaceBasedInput($request,$setting) */ public function update(Request $request, Response $response) { - $this->validateRequestPayload($request); - $payload = $request->getParsedBody(); $id = $request->getAttribute('id'); @@ -199,6 +205,7 @@ public function update(Request $request, Response $response) * Get the interface based input * */ + $inputData = $this->getInterfaceBasedInput($request,$serviceData['data']['key']); $responseData = $service->update( $request->getAttribute('id'),