Commit 2cef4687 authored by François Agneray's avatar François Agneray

Merge branch 'develop' into 'master'

Develop

See merge request !40
parents aa55b379 758ee1e0
AMQP_HOST=amqp_host
\ No newline at end of file
......@@ -14,4 +14,5 @@ cache
.project
.settings
.phpunit*
anis_v3.sqlite
\ No newline at end of file
anis_v3.sqlite
.env
\ No newline at end of file
......@@ -4,10 +4,13 @@ stages:
- metrics-deploy
- install
- test
- sonar
- build
- deploy
variables:
VERSION: "3.0"
SONARQUBE_URL: https://sonarqube.lam.fr
METRICS_IMAGE: portus.lam.fr/anis/anis-server-metrics
CONTAINER_IMAGE: portus.lam.fr/anis/anis-server
......@@ -58,7 +61,7 @@ install:
image: jakzal/phpqa
stage: install
script:
- composer install
- composer install --ignore-platform-reqs
cache:
paths:
- vendor
......@@ -71,10 +74,24 @@ phpunit:
image: jakzal/phpqa
stage: test
script:
- phpdbg -qrr ./vendor/bin/phpunit --bootstrap ./tests/bootstrap.php --whitelist src --coverage-text --colors=never ./tests
- phpdbg -qrr ./vendor/bin/phpunit --bootstrap ./tests/bootstrap.php --whitelist src --coverage-clover ./coverage/clover.xml --log-junit ./coverage/junit-logfile.xml --colors=never ./tests
cache:
paths:
- vendor
- coverage
policy: pull-push
only:
refs:
- develop
sonar_scanner:
image: portus.lam.fr/ci-tools/sonar-scanner:latest
stage: sonar
script:
- sonar-scanner -Dsonar.projectKey=anis-server -Dsonar.sources=src -Dsonar.projectVersion=$VERSION -Dsonar.host.url=$SONARQUBE_URL -Dsonar.login=$SONAR_TOKEN -Dsonar.php.tests.reportPath=./coverage/junit-logfile.xml -Dsonar.php.coverage.reportPaths=./coverage/clover.xml
cache:
paths:
- coverage
policy: pull
only:
refs:
......
FROM php:7.2-apache
FROM php:7.3-apache
# Install modules
RUN apt-get update \
......
AstroNomical Information System - Server API
Copyright @ François Agneray & Chrystel Moreau
Copyright: François Agneray & Chrystel Moreau 2012 - 2019
Address: Centre de donneeS Astrophysique de Marseille (CeSAM)
Laboratoire d'Astrophysique de Marseille
Ple de l'Etoile, site de Chteau-Gombert
38, rue Frdric Joliot-Curie
13388 Marseille cedex 13 France
CNRS U.M.R 7326
ANIS Server API is governed by the CeCILL license under French law and
abiding by the rules of distribution of free software. You can use,
......
UID := $(shell id -u)
GID := $(shell id -g)
UID := $(id -u)
GID := $(id -g)
list:
@echo ""
@echo "Useful targets:"
@echo ""
@echo " install > install php composer dependancies"
@echo " up > build php image and start anis-v3-server containers for dev only (php + mailer)"
@echo " start > start anis-v3-server containers"
@echo " restart > restart anis-v3-server containers"
@echo " stop > stop and kill running anis-v3-server containers"
@echo " log > display anis-v3-server containers logs"
@echo " debug > shell into php anis-v3-server container"
@echo " phpunit > run php unit test suite"
@echo " phpcs > run php code sniffer test suite"
@echo " init-db > generate a new metadata database (anis-v3-server containers running needed)"
@echo " validate-db > validate the doctrine mapping entity files (anis-v3-server containers running needed)"
@echo " install > install php composer dependancies"
@echo " up > build php image and start anis-server containers for dev only (php + mailer)"
@echo " start > start anis-server containers"
@echo " restart > restart anis-server containers"
@echo " stop > stop and kill running anis-server containers"
@echo " logs > display anis-server containers logs"
@echo " shell > shell into php anis-server container"
@echo " phpunit > run php unit test suite"
@echo " phpcs > run php code sniffer test suite"
@echo " anis-init > generate a new anis admin database and a default metamodel database (anis-server containers running needed)"
@echo " dev-init > add metadata datasets for devlopment purpose"
@echo " remove-pgdata > remove the metadata database"
@echo " gen-key > generate a new encryption key that you can use to encrypt data (see anis server config file)"
@echo ""
install:
@docker run --init -it --rm --user $(UID):$(GID) \
-e COMPOSER_CACHE_DIR=/dev/null \
-v $(CURDIR):/project \
-w /project jakzal/phpqa composer install
-w /project jakzal/phpqa composer install --ignore-platform-reqs
up:
@docker-compose up --build -d
......@@ -36,11 +38,11 @@ stop:
@docker-compose kill
@docker-compose rm -v --force
log:
logs:
@docker-compose logs -f -t
debug:
@docker-compose run php bash
shell:
@docker-compose exec php bash
phpunit:
@docker run --init -it --rm --user $(UID):$(GID) \
......@@ -51,10 +53,16 @@ phpunit:
phpcs:
@docker run --init -it --rm --user $(UID):$(GID) \
-v $(CURDIR):/project \
-w /project jakzal/phpqa phpcs --standard=PSR2 --extensions=php -n --colors src
-w /project jakzal/phpqa phpcs --standard=PSR2 --extensions=php --colors src tests
init-db:
@docker-compose run php ./vendor/bin/doctrine orm:schema-tool:create
anis-init:
@docker-compose exec php sh ./conf-dev/anis_init.sh
validate-db:
@docker-compose run php ./vendor/bin/doctrine orm:validate-schema
\ No newline at end of file
dev-init:
@docker-compose exec php sh ./conf-dev/dev-init.sh
remove-pgdata:
@docker volume rm anis-server_pgdata
gen-key:
@docker-compose exec php php ./conf-dev/generate_encryption_key.php
\ No newline at end of file
# ANIS V3 SERVER
# Anis Server
## Introduction
AstroNomical Information System est un outil web générique qui vise à faciliter
la mise à disposition de données (Astrophysiques), accessible depuis
une base de données, à une communauté de scientifiques.
AstroNomical Information System is a generic web tool that aims to facilitate the provision of data (Astrophysics), accessible from a database, for the scientific community.
ANIS-V3-SERVER est un composant de ANIS-V3 qui permet de piloter une ou plusieurs
bases de données liées à des projets en astronomie uniquement via des URLS.
This software allows you to control one or more databases related to astronomical projects and allows access to datasets via URLs.
ANIS permet de rechercher et visualiser des données à partir de formulaires de
recherche générés automatiquement par l'application. Le scientifique à la
possibilité de visualiser ces données sous la forme d'un tableau HTML interactif,
il à également la possibilité de visualiser des données issues d'images
astronomiques, de spectres ou de fichier FITS.
Anis is protected by the `CeCILL` licence (see LICENCE file at the software root).
## Auteurs
## Authors
Here is the list of people involved in the development:
* `François Agneray` : Laboratoire d'Astrophysique de Marseille (CNRS)
* `Chrystel Moreau` : Laboratoire d'Astrophysique de Marseille (CNRS)
* `Tifenn Guillas` : Laboratoire d'Astrophysique de Marseille (CNRS)
# Guide d'installation
## Dépendances
Cette application requiert les dépendances suivantes pour fonctionner:
"slim/slim": "^3.8",
"doctrine/orm": "^2.5"
"monolog/monolog": "^1.23",
"lcobucci/jwt": "^3.2",
"swiftmailer/swiftmailer": "^6.0"
Ces dépendances sont installées via le logiciel `composer.phar` et le fichier de
configuration `composer.json` disponible à la racine de l'application.
## Dépendances : installation
Pour lancer l'installation des dépendances, il faut utiliser la commande suivante
à la racine du projet ANIS :
> php composer.phar install
`Composer.phar` va utiliser automatique le fichier `composer.json` pour télécharger
les dépendances et les placer dans le dossier `vendor` à la racine du projet.
## Base de données metamodel : création de la base
Une instance ANIS nécessite une base de données de `metamodel` pour fonctionner.
Commencer par créer une base de données vierge avec un utilisateur en mode lecture
écriture pouvant s'y connecter.
## Base de données metamodel : fichier de configuration
La configuration pour la connexion à la base de données `metamodel` se trouve dans
le fichier `settings.php` dans le dossier `app` du projet.
Le fichier `settings.php` contient un tableau de clé => valeur. Les options de
connexion se trouvent dnas la partie settings => metadata => connection_options.
Mettez les options de connexion correspondant à la base de données `metamodel`
vierge préalablement créée.
## Base de données metamodel: génération des tables
# Installation guide
Pour générer les tables de la la base de données `metamodel` qui correspondent aux
fichier `Entity` (voir la doc `Doctrine2` pour plus d'information), il faut utiliser
l'utilitaire en ligne de commande fournit par `Doctrine 2` disponible dans le dossier `vendor` :
## Prerequisites
> ./vendor/bin/doctrine
Before to start to install the anis-server you must make sure that you have the following commands installed on your computer:
Doctrine 2 permet de valider le schéma qui correpond aux fichiers `entity` :
1. `make`
2. `docker`
3. `docker-compose`
> ./vendor/bin/doctrine orm:validate-schema
You also need an Internet connection to download packages and dependancies.
Si le schéma est valide, Doctrine 2 permet de générer automatiquement la base de données :
## List of commands
> ./vendor/bin/doctrine orm:schema-tool:create
## Lancement de l'application en mode docker :
Vous pouvez lancer l'application en mode docker gràce au fichier docker-compose.yml se trouvant à la racine du projet.
Pour ce faire vous devez avoir installé docker et docker-compose sur votre machine puis lancer la commande suivante :
> make build
> make start
Le container une fois lancé va rédiriger l'application su le port 8080 de votre machine. Rendez-vous sur l'URL http://localhost:8080 de votre machine pour vous assurez que l'application fonctionne.
## Liens
* `Slim` : [http://www.slimframework.com/](http://www.slimframework.com/)
* `Doctrine 2` : [https://www.doctrine-project.org/](https://www.doctrine-project.org/)
* `Swiftmailer` : [https://swiftmailer.symfony.com/](https://swiftmailer.symfony.com/)
* `Monolog` : [https://seldaek.github.io/monolog/](https://seldaek.github.io/monolog/)
* `Composer` : [https://getcomposer.org/](https://getcomposer.org/)
* `PHP-FIG` : [http://www.php-fig.org/](http://www.php-fig.org/)
* `PHP-Unit` : [http://phpunit.de/](http://phpunit.de/)
* `GIT` : [http://git-scm.com/](http://git-scm.com/)
The `Makefile` at the root of the project provides a list of commands available to manage the application in a development mode.
## Répertoires
To see the list of commands just open a terminal in the root of the project and type:
* `config`: Répèrtoire qui contient le fichier de configuration nécéssaire pour l'utilitaire doctrine en ligne de commande
* `documentation`: Contient le MCD de la base de données metamodel ainsi que la documentation des URL disponibles
* `public`: Racine du serveur web
* `src`: Code source de l'application
* `test`: Tests de l'application avec `phpunit`
* `vendor`: Dépendances de l'application
> make
## Fichiers clés
**Warning**: The `docker-compose.yml` and the` Makefile` commands must be used only for development or testing but no in production mode.
* `public/index.php`: Fichier de démarrage de l'application
* `src/settings.php`: Configuration de l'application
* `src/dependencies.php`: Configuration des services disponibles dans Pimple
* `src/middleware.php`: Configuration des middlewares
* `src/routes.php`: Configuration des routes de l'application (URL)
## Dependancies installation
# Guide d'utilisation des URLS
To start installing dependancies, use the following command at the software root:
# Vérification du service
> make install
* [/](documentation/api/root.md) => `GET`
The `Composer.phar` software will be downloaded and it will automatically use the `composer.json` and `composer.lock` files to download all the dependancies and save them to the `vendor` directory at the root of the application.
# Login
After that anis-server can work!
Création d'un nouvel utilisateur :
- [/register](documentation/api/register.md) => `POST`
- [/activate-account](documentation/api/activate-account.md) => `GET`
## Start anis-server
Connexion et récupération d'un jeton d'authentification
- [/login](documentation/api/login.md) => `POST`
Anis server has been developed to be used with docker containers. If you open the `docker-compose.yml` file you can see all containers needed for the **development or test configuration** of anis server.
Changement de mot de passe
- [/new-password](documentation/api/new-password.md) => `POST`
- [/change-password](documentation/change-password.md) => `POST`
`Makefile` provides a command to build install and run all the containers that you need for a fresh installation of anis-server software:
# Pilotage de la base metamodel
> make up
La base de données metamodel se pilote via une API REST et fonctionne avec les
méthodes `GET`, `POST`, `PUT` et `DELETE`
**Note:** This command use `docker-compose` to work. These operations may take a few minutes as it is necessary to download docker images
* `GET`: Récupération d'un ou plusieurs enregistrements
* `POST`: Ajout d'un enregistrement
* `PUT`: Modification d'un enregistrement
* `DELETE`: Suppression d'un enregistrement
If you want to list all anis stack containers running:
Voici la liste des URLS et méthodes disponibles:
> docker-compose ps
* Information sur les bases de données métiers {name} = nom de la base et {tname} = nom de la table:
- [/metadata/database](documentation/api/database-list.md) => `GET`, `POST`
- [/metadata/database/{name}](documentation/api/database.md) => `GET`, `PUT`, `DELETE`
- [/metadata/database/{name}/table](documentation/api/tables-available.md) => `GET`
And if you want to print anis stack logs:
* Information sur les projets {name} = nom du projet:
- [/metadata/project](documentation/api/project-list.md) => `GET`, `POST`
- [/metadata/project/{name}](documentation/api/project.md) => `GET`, `PUT`, `DELETE`
* Information sur les jeux de données {name} = nom du dataset:
- [/metadata/dataset](documentation/api/dataset-list.md) => `GET`, `POST`
- [/metadata/dataset/{name}](documentation/api/dataset.md) => `GET`, `PUT`, `DELETE`
- [/metadata/dataset/{name}/file](documentation/api/file-list.md) => `GET`, `POST` (fichiers associés au jeux de données)
- /metadata/dataset/{name}/attribute => `GET`, `PUT` (attributs associés au jeux de données)
- /metadata/dataset/{name}/attribute/option => `GET`
> make logs
* Information sur un fichier d'un jeu de données {id} = identifiant du fichier
- [/metadata/file/{id}](documentation/api/file.md) => `GET`, `PUT`, `DELETE`
## Databases installation
* Information sur une categorie {id} = identifiant de la catégorie
- [/metadata/category](documentation/api/category-list.md) => `GET`, `POST`
- [/metadata/cayegory/{id}](documentation/api/category.md) => `GET`, `PUT`, `DELETE`
* Information sur les groupes d'utilisateur {name} = nom du groupe
- [/metadata/group](documentation/api/group-list.md) => `GET`, `POST`
- [/metadata/group/{id}](documentation/api/group.md) => `GET`, `PUT`, `DELETE`
* Information sur les utilisateurs {login} = login de l'utilisateur
- [/metadata/user](documentation/api/user-list.md) => `GET`, `POST`
- [/metadata/user/{login}](documentation/api/user.md) => `GET`, `PUT`, `DELETE`
Anis server need at least two databases to work:
# Effectuer une recherche dans un dataset
1. An admin database to store users and the list of available metamodel databases.
2. A default metamodel database to store information about business databases, projects and datasets availables.
* URL d'interrogation: /search
* Le paramètre `d` est obligatoire est doit contenir le nom du dataset à interroger
Our `Makefile` provides a command to generate these two databases:
## Recherche par `critères`
> make anis-init
* `c`: Le paramètre `c` est un tableau qui contient la liste des critères de
recherche
* Un critère de recherche doit contenir trois paramètres séparés par le caractère `-`
- Le premier paramètre contient l'`id` de l'attribut sur lequel le critère s'applique
- Le deuxième paramètre contient le type de critère sous la forme de deux lettres
- Le troisième paramètre contient les information nécessaires pour la création du critère
* Exemple: c[]=78-bw-102.49334|102.49540
## Datasets for beginning to use
## Liste des `critères` de recherche disponible
Our `Makefile` also provides a command to add a business database and configure datasets into the default metamodel database to beginning to test or develop the anis-server. To install the test datasets type:
* Between (`bw`) :
1. Le troisième paramètre doit contenir les `valeurs` séparés par le caractère `|`
2. Exemple: 78-bw-`102.49334|102.49540`
> make dev-init
* Date range (`dr`) paramètres :
1. Le troisième paramètre doit contenir les `dates` séparés par le caractère `|`
## Anis server is now ready to use
* Field (`fd`) paramètres :
1. Le troisième paramètre doit contenir l'`opérateur` et la `valeur` séparés par le caractère `|`
Open a browser and go => [http://localhost:8080/](http://localhost:8080/)
* Combobox (`co`) paramètres :
1. TODO
Few examples:
* Radio (`ra`) paramètre :
1. TODO
* To list all datasets available in the default instance => [http://localhost:8080/metadata/default/dataset](http://localhost:8080/metadata/default/dataset)
* To print all data for the obs_cat dataset with column 1, 2 and 3 => [http://localhost:8080/search/default/data/obs_cat?a=1;2;3](http://localhost:8080/search/default/data/obs_cat?a=1;2;3)
* To print only 3 obs_cat data (search by id) => [http://localhost:8080/search/default/data/obs_cat?a=1;2;3&c=1::in::104600094|104600095|104600108](http://localhost:8080/search/default/data/obs_cat?a=1;2;3&c=1::in::104600094|104600095|104600108)
* Datalist (`dl`) paramètre :
1. TODO
# More about Anis-Server
* Select (`se`) paramètre :
1. TODO
First of all, you will find the user manual at the root of the project: [MANUAL.md](MANUAL.md)
* Checkbox (`ch`) paramètre :
1. TODO
## Software directories
## Recherche par `cone-search`
* `conf-dev`: Configuration files used by make commands and docker-compose to work
* `public`: Web server root (index.php)
* `src`: Source code of Anis Server
* `test`: Anis Unit Tests `phpunit`
* Fonction de recherche spatiale
* Paramètres du `cone-search` :
1. `RA`: Ascension droite en degré
2. `DE`: Déclinaison en degré
3. `SR`: Rayon du `cone-search` en arc seconde
## Key files
## Affichage des `colonnes de sortie`
* `public/index.php`: Bootstrap file for starting application (file used by an http web server like nginx or apache)
* `src/settings.php`: Anis server configuration file
* `src/routes.php`: Anis server configured routes (list all availables URL)
* Le choix d'affichage des colonnes de sortie s'applique à tous les types de recherche
* `a`: Le paramètre `a` doit contenir une liste d'identifiants d'attribut séparés par un `|`
* Exemple: `a`=1|2|5|8
## Technologies
## `Ordre` d'affichage des enregistrements
You can see here just a few direct links about softwares or dependancies used by anis-team for the devlopment of anis-server:
* Par défaut les enregistrements sont triés par l'attribut contenant le search_flag `ID`
* Si l'utilisateur veut un ordre d'affichage précis il doit utiliser le paramètre `o` avec
comme valeur l'identifiant d'attribut souhaité ainsi que le sens
* `a` pour ascendant et `d` pour descendant
* Exemple: `o=5-a`
## Choix du `format` de sortie
* Le choix du format de sortie s'applique également à tous les types de recherche
* `f`: Le paramètre `f` doit contenir un format de sortie disponible (`json`,`csv`,`ascii`)
* Si le format `json` est sélectionné les paramètres de pagination sont obligatoires :
- `p[s]`: Contient le nombre d'objets par page
- `p[c]`: Contient le numéro de la page courante
# Guide développeur
# phpunit
* Permet d'éffectuer des tests unitaires sur le code source
> ./vendor/bin/phpunit --bootstrap ./test/bootstrap.php --colors ./test
# phpdoc
* Permet de fabriquer la documentation à partir des sources PHP
`$ php phpDocumentor.phar -d app/ -t ./build/api --ignore *library/*,*tests/*,*utils/*,*build/*,*js/*,*drupal/*,*bin/*`
# phpcpd
* Permet de détecter les copier coller (duplication) dans le code source
`$ ./vendor/bin/phpcpd app/`
# phploc
* Permet de mesurer la taille et d'analyser la structure du code source d'un projet PHP
`$ ./vendor/bin/phploc --progress app/`
# PHP_CodeSniffer
* Permet de valider le code à la norme de codage PSR-2
`$ ./vendor/bin/phpcs --report=full --standard=PSR2 --extensions=php --ignore=*library/*,*tests/*,*utils/*,*build/*,*js/*,*drupal/*,*bin/* ./app`
# PhpMetrics
* Donne des informations statistiques sur un projet PHP
`$ ./vendor/bin/phpmetrics --report-html=./build/phpmetrics.html app/
`
# PHP Mess Detector
* Permet d'évaluer la qualité de code source PHP
`$ ./vendor/bin/phpmd ./app html cleancode,codesize,controversial,design,naming,unusedcode --reportfile ./build/pmd.html --exclude *library/*,*tests/*,*utils/*,*build/*,*js/*,*drupal/*,*bin/*`
* `Slim` : [http://www.slimframework.com/](http://www.slimframework.com/)
* `Doctrine 2` : [https://www.doctrine-project.org/](https://www.doctrine-project.org/)
* `Swiftmailer` : [https://swiftmailer.symfony.com/](https://swiftmailer.symfony.com/)
* `Monolog` : [https://seldaek.github.io/monolog/](https://seldaek.github.io/monolog/)
* `Composer` : [https://getcomposer.org/](https://getcomposer.org/)
* `PHP-FIG` : [http://www.php-fig.org/](http://www.php-fig.org/)
* `PHP-Unit` : [http://phpunit.de/](http://phpunit.de/)
* `Docker` : [https://www.docker.com/](https://www.docker.com/)
* `GIT` : [http://git-scm.com/](http://git-scm.com/)
* `CeCILL`: [http://www.cecill.info/index.en.html](http://www.cecill.info/index.en.html)
\ No newline at end of file
3.0.0
\ No newline at end of file
3.0.3
\ No newline at end of file
This diff is collapsed.
......@@ -3,20 +3,20 @@
require 'vendor/autoload.php';
$settings = require './src/settings.php';
$metadata = $settings['settings']['metadata'];
$adminDb = $settings['settings']['admin_db'];
$c = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration($metadata['entity_path'], $metadata['dev_mode']);
$c->setProxyDir(getcwd() . '/' . $metadata['path_proxy']);
if ($metadata['dev_mode']) {
$c->setAutoGenerateProxyClasses(true);
$c = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration(array('src/Entity/Admin'), $adminDb['dev_mode']);
$c->setProxyDir(getcwd() . '/' . $adminDb['path_proxy']);
if ($adminDb['dev_mode']) {
$c->setAutoGenerateProxyClasses(true);
} else {
$c->setAutoGenerateProxyClasses(false);
$c->setAutoGenerateProxyClasses(false);
}
$em = \Doctrine\ORM\EntityManager::create($metadata['connection_options'], $c);
$em = \Doctrine\ORM\EntityManager::create($adminDb['connection_options'], $c);
$helpers = new Symfony\Component\Console\Helper\HelperSet(array(
'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em)
'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em)
));
return \Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet($em);
This diff is collapsed.
FROM php:7.2-apache
FROM php:7.3-apache
# Install modules
RUN apt-get update \
&& apt-get install -y zlib1g zlib1g-dev libpq-dev libpq5 libzip-dev zip unzip \
&& docker-php-ext-install pgsql pdo_pgsql zip
&& docker-php-ext-install pgsql pdo_pgsql zip bcmath
# Install pecl modules
RUN pecl install xdebug \
......
#!/bin/sh
set -e
# Create the anis admin database (only tables)
./vendor/bin/doctrine orm:schema-tool:create
# Add the first anis superuser
curl -d '{"email":"admin@anis.fr","password":"admin"}' -H "Content-Type: application/json" -X POST http://localhost/login/register
curl -d '{"adminsi":true,"superuser":true,"activated":true}' -H "Content-Type: application/json" -X PUT http://localhost/admin/user/admin@anis.fr
# Add settings for admin inteface
curl -d '{"name":"search_flag","label":"Search flag"}' -H "Content-Type: application/json" -X POST http://localhost/admin/settings/select
curl -d '{"name":"search_type","label":"Search Type"}' -H "Content-Type: application/json" -X POST http://localhost/admin/settings/select
curl -d '{"name":"operator","label":"Operator"}' -H "Content-Type: application/json" -X POST http://localhost/admin/settings/select
curl -d '{"name":"renderer","label":"Renderer"}' -H "Content-Type: application/json" -X POST http://localhost/admin/settings/select
curl -d '{"name":"renderer_detail","label":"Renderer detail"}' -H "Content-Type: application/json" -X POST http://localhost/admin/settings/select
curl -d '{"label":"ID","value":"ID","display":10,"