@@ -7985,6 +7985,107 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
79857985 }
79867986}
79877987
7988+ // file: src/Tqdev/PhpCrudApi/Middleware/JsonMiddleware.php
7989+ namespace Tqdev \PhpCrudApi \Middleware {
7990+
7991+ use Psr \Http \Message \ResponseInterface ;
7992+ use Psr \Http \Message \ServerRequestInterface ;
7993+ use Psr \Http \Server \RequestHandlerInterface ;
7994+ use Tqdev \PhpCrudApi \Middleware \Base \Middleware ;
7995+ use Tqdev \PhpCrudApi \RequestUtils ;
7996+ use Tqdev \PhpCrudApi \ResponseFactory ;
7997+
7998+ class JsonMiddleware extends Middleware
7999+ {
8000+ private function convertJsonRequestValue ($ value ) /*: object */
8001+ {
8002+ if (is_array ($ value ) || is_object ($ value )) {
8003+ $ value = json_encode ($ value ,JSON_UNESCAPED_UNICODE );
8004+ }
8005+ return $ value ;
8006+ }
8007+
8008+ private function convertJsonRequest ($ object , array $ columnNames ) /*: object */
8009+ {
8010+ if (is_array ($ object )) {
8011+ foreach ($ object as $ i => $ obj ) {
8012+ foreach ($ obj as $ k => $ v ) {
8013+ if (in_array ('all ' , $ columnNames ) || in_array ($ k , $ columnNames )) {
8014+ $ object [$ i ]->$ k = $ this ->convertJsonRequestValue ($ v );
8015+ }
8016+ }
8017+ }
8018+ } else if (is_object ($ object )) {
8019+ foreach ($ object as $ k => $ v ) {
8020+ if (in_array ('all ' , $ columnNames ) || in_array ($ k , $ columnNames )) {
8021+ $ object ->$ k = $ this ->convertJsonRequestValue ($ v );
8022+ }
8023+ }
8024+ }
8025+ return $ object ;
8026+ }
8027+
8028+ private function convertJsonResponseValue (string $ value ) /*: object */
8029+ {
8030+ if (strlen ($ value ) > 0 && in_array ($ value [0 ],['[ ' ,'{ ' ])) {
8031+ $ parsed = json_decode ($ value );
8032+ if (json_last_error () == JSON_ERROR_NONE ) {
8033+ $ value = $ parsed ;
8034+ }
8035+ }
8036+ return $ value ;
8037+ }
8038+
8039+ private function convertJsonResponse ($ object , array $ columnNames ) /*: object */
8040+ {
8041+ if (is_array ($ object )) {
8042+ foreach ($ object as $ k => $ v ) {
8043+ $ object [$ k ] = $ this ->convertJsonResponse ($ v , $ columnNames );
8044+ }
8045+ } else if (is_object ($ object )) {
8046+ foreach ($ object as $ k => $ v ) {
8047+ if (in_array ('all ' , $ columnNames ) || in_array ($ k , $ columnNames )) {
8048+ $ object ->$ k = $ this ->convertJsonResponse ($ v , $ columnNames );
8049+ }
8050+ }
8051+ } else if (is_string ($ object )) {
8052+ $ object = $ this ->convertJsonResponseValue ($ object );
8053+ }
8054+ return $ object ;
8055+ }
8056+
8057+ public function process (ServerRequestInterface $ request , RequestHandlerInterface $ next ): ResponseInterface
8058+ {
8059+ $ operation = RequestUtils::getOperation ($ request );
8060+ $ controllerPath = RequestUtils::getPathSegment ($ request , 1 );
8061+ $ tableName = RequestUtils::getPathSegment ($ request , 2 );
8062+
8063+ $ controllerPaths = $ this ->getArrayProperty ('controllers ' , 'records,geojson ' );
8064+ $ tableNames = $ this ->getArrayProperty ('tables ' , 'all ' );
8065+ $ columnNames = $ this ->getArrayProperty ('columns ' , 'all ' );
8066+ if (
8067+ (in_array ('all ' , $ controllerPaths ) || in_array ($ controllerPath , $ controllerPaths )) &&
8068+ (in_array ('all ' , $ tableNames ) || in_array ($ tableName , $ tableNames ))
8069+ ) {
8070+ if (in_array ($ operation , ['create ' , 'update ' ])) {
8071+ $ records = $ request ->getParsedBody ();
8072+ $ records = $ this ->convertJsonRequest ($ records ,$ columnNames );
8073+ $ request = $ request ->withParsedBody ($ records );
8074+ }
8075+ $ response = $ next ->handle ($ request );
8076+ if (in_array ($ operation , ['read ' , 'list ' ])) {
8077+ $ records = json_decode ($ response ->getBody ()->getContents ());
8078+ $ records = $ this ->convertJsonResponse ($ records , $ columnNames );
8079+ $ response = ResponseFactory::fromObject ($ response ->getStatusCode (), $ records );
8080+ }
8081+ } else {
8082+ $ response = $ next ->handle ($ request );
8083+ }
8084+ return $ response ;
8085+ }
8086+ }
8087+ }
8088+
79888089// file: src/Tqdev/PhpCrudApi/Middleware/JwtAuthMiddleware.php
79898090namespace Tqdev \PhpCrudApi \Middleware {
79908091
@@ -11008,6 +11109,7 @@ private function setHabtmValues(ReflectedTable $t1, ReflectedTable $t2, array &$
1100811109 use Tqdev \PhpCrudApi \Middleware \FirewallMiddleware ;
1100911110 use Tqdev \PhpCrudApi \Middleware \IpAddressMiddleware ;
1101011111 use Tqdev \PhpCrudApi \Middleware \JoinLimitsMiddleware ;
11112+ use Tqdev \PhpCrudApi \Middleware \JsonMiddleware ;
1101111113 use Tqdev \PhpCrudApi \Middleware \JwtAuthMiddleware ;
1101211114 use Tqdev \PhpCrudApi \Middleware \MultiTenancyMiddleware ;
1101311115 use Tqdev \PhpCrudApi \Middleware \PageLimitsMiddleware ;
@@ -11098,7 +11200,10 @@ public function __construct(Config $config)
1109811200 case 'xml ' :
1109911201 new XmlMiddleware ($ router , $ responder , $ properties , $ reflection );
1110011202 break ;
11101- }
11203+ case 'json ' :
11204+ new JsonMiddleware ($ router , $ responder , $ properties );
11205+ break ;
11206+ }
1110211207 }
1110311208 foreach ($ config ->getControllers () as $ controller ) {
1110411209 switch ($ controller ) {
0 commit comments