Fix private properties in API

parent 48c04159
v2.5
======
* BUG: private properties in API was not working properly
v2.4
======
......
......@@ -9,7 +9,7 @@ framework:
web_profiler:
toolbar: true
intercept_redirects: true
intercept_redirects: false
swiftmailer:
delivery_address: sebastian.castro@protonmail.com
......
......@@ -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()
;
}
......
......@@ -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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment