diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f3eb9800c964a4c66260e62082ce4cc3bf817ad..dce8b7d225d80854d736c2b839e9e2c78695e43b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +v2.5 +====== +* BUG: private properties in API was not working properly + v2.4 ====== diff --git a/app/config/config_dev.yml b/app/config/config_dev.yml index 6d9e05a26f227c27cbb6636576e8282efc3b3cc3..cec5e81a17d0041c8849a92d25b9b9944387d28a 100755 --- a/app/config/config_dev.yml +++ b/app/config/config_dev.yml @@ -9,7 +9,7 @@ framework: web_profiler: toolbar: true - intercept_redirects: true + intercept_redirects: false swiftmailer: delivery_address: sebastian.castro@protonmail.com diff --git a/src/Biopen/CoreBundle/Admin/ConfigurationAPIAdmin.php b/src/Biopen/CoreBundle/Admin/ConfigurationAPIAdmin.php index dbd593650d4e953470f5c4de62503922d7856637..b6d5a9774dbf6a9029dd84d723395072b8a63465 100755 --- a/src/Biopen/CoreBundle/Admin/ConfigurationAPIAdmin.php +++ b/src/Biopen/CoreBundle/Admin/ConfigurationAPIAdmin.php @@ -24,14 +24,19 @@ class ConfigurationAPIAdmin extends ConfigurationAbstractAdmin $dm = $this->getConfigurationPool()->getContainer()->get('doctrine_mongodb'); $apiProperties = $dm->getRepository('BiopenGeoDirectoryBundle:Element')->findAllCustomProperties(); + $apiPropertiesChanged = []; + foreach ($apiProperties as $key => $value) { + $apiPropertiesChanged[$value] = $value; + } + $formMapper ->with("Configuration", ["description" => "<div class='iframe-container'><iframe height='200' sandbox='allow-same-origin allow-scripts' src='https://video.colibris-outilslibres.org/videos/embed/aa05a654-a5d6-472a-bb12-108e0f6ce18e' frameborder='0' allowfullscreen></iframe></div>"]) - ->add('api.protectPublicApiWithToken', 'checkbox', array('label' => "Protéger l'api publique pour récupérer les élément avec des jetons utilisateurs (i.e. besoin de créer un compte pour utiliser l'api publique)", 'required' => false)) - ->add('api.internalApiAuthorizedDomains', 'text', array('label' => "Liste des domaines externe qui utiliseront l'API interne. Mettez * si vous voulez que n'importe quel domaine puisse y avoir accès. Cette option est nécessaire si vous voulez afficher vos données avec GoGoCartoJs mais sur un autre serveur.", 'required' => false)) - ->add('api.publicApiPrivateProperties', 'choice', array("choices" => $apiProperties, 'label' => "Liste des champs que vous ne voulez pas partager dans l'api publique", 'required' => false, 'multiple' => true)) + ->add('api.protectPublicApiWithToken', 'checkbox', array('label' => "Protéger l'api publique pour récupérer les élément avec des jetons utilisateurs (i.e. besoin de créer un compte pour utiliser l'api publique)", 'required' => false)) + ->add('api.internalApiAuthorizedDomains', 'text', array('label' => "Liste des domaines externe qui utiliseront l'API interne. Mettez * si vous voulez que n'importe quel domaine puisse y avoir accès. Cette option est nécessaire si vous voulez afficher vos données avec GoGoCartoJs mais sur un autre serveur.", 'required' => false)) + ->add('api.publicApiPrivateProperties', 'choice', array("choices" => $apiPropertiesChanged, 'label' => "Liste des champs que vous ne voulez pas partager dans l'api publique", 'required' => false, 'multiple' => true)) ->end() ->with("Liste des apis disponibles") - ->add('apilist', 'text', array('mapped' => false, 'label' => false, 'required' => false, 'attr' => ['class' => 'gogo-api-list'])) + ->add('apilist', 'text', array('mapped' => false, 'label' => false, 'required' => false, 'attr' => ['class' => 'gogo-api-list'])) ->end() ; } diff --git a/src/Biopen/GeoDirectoryBundle/EventListener/ElementJsonGenerator.php b/src/Biopen/GeoDirectoryBundle/EventListener/ElementJsonGenerator.php index 359b452b0bdca69069fb91125247fd8cdd905697..624e313bef90dccb4eeee7d079dc03c1384d853c 100644 --- a/src/Biopen/GeoDirectoryBundle/EventListener/ElementJsonGenerator.php +++ b/src/Biopen/GeoDirectoryBundle/EventListener/ElementJsonGenerator.php @@ -56,6 +56,7 @@ class ElementJsonGenerator if (!$element->getGeo()) { return; } $config = $this->getConfig($dm); $options = $this->getOptions($dm); + $privateProps = $config->getApi()->getPublicApiPrivateProperties(); // -------------------- FULL JSON ---------------- @@ -106,8 +107,10 @@ class ElementJsonGenerator // SPECIFIC DATA $baseJson .= $this->encodeArrayObjectToJson("stamps", $element->getStamps()); - $baseJson .= $this->encodeArrayObjectToJson("images", $element->getImages()); - $baseJson .= $this->encodeArrayObjectToJson("files", $element->getFiles()); + $imagesJson = $this->encodeArrayObjectToJson("images", $element->getImages()); + $filesJson = $this->encodeArrayObjectToJson("files", $element->getFiles()); + if (!in_array('images', $privateProps)) $baseJson .= $imagesJson; + if (!in_array('files', $privateProps)) $baseJson .= $filesJson; $baseJson = rtrim($baseJson, ','); // MODIFIED ELEMENT (for pending modification) @@ -128,6 +131,8 @@ class ElementJsonGenerator foreach ($element->getPrivateData() as $key => $value) { $privateJson .= '"'. $key .'": ' . json_encode($value) . ','; } + if (in_array('images', $privateProps)) $privateJson .= $imagesJson; + if (in_array('files', $privateProps)) $privateJson .= $filesJson; $privateJson = rtrim($privateJson, ','); $privateJson .= '}'; $element->setPrivateJson($privateJson);