Commit e490566e authored by Elena Grassi's avatar Elena Grassi
Browse files

Merge branch 'wgn_dev_wms' into crucchi

parents 82382017 cd66a13e
#Firstlife Client
# Firstlife Client
Here you will find generic information on how to use gulp to develop locally and deploy the client with
its different _domains_. Inside the doc directory there are more detailed files to document
specific functionalities, how to generate a _new_ domain (aka instance/verticalizzazione) and a global
scheme of the services the webapp uses and of its controllers/directives/factories.
#### istruzioni installazione:
comando 1 - hai bisogno d’installare sass sul server (autocompilazione css e fogli di stile)
......@@ -41,7 +43,7 @@ comando 2 - prima del serve (puoi usare anche ionic serve -—lab) sass dovrebbe
// per deployare il dev e non il master branch
- gulp sass
// serve per ricreare i file css una volta effettuate le modifiche sul file sass
// serve per ricreare i file css una volta effettuate le modifiche sul file sass / farlo due volte che non fa male
#### Altri comandi gulp utili per lo sviluppo ed il deploy di qualsiasi branch senza nessun override dei config
......@@ -49,10 +51,11 @@ comando 2 - prima del serve (puoi usare anche ionic serve -—lab) sass dovrebbe
// per configurare nomedominio senza fare override di nessuna delle sue voci di configurazione, col config
// di base alcuni endpoint sono modificati
- gulp deploy-this-branch --domain=nomedominio
- sudo gulp deploy-this-branch --domain=nomedominio
// per fare deploy di nomedominio a partire dal branch in cui ci si trova ora su git, il deploy
// di base si sposta su master o dev e fa un pull automaticamente
// segna nella home dell'utente che l'ha lanciato il commit che e` stato deployato in un file domain_name.txt
// sudo per problemi di permessi relativi a webserver1/2
## Istruzioni e comandi per la creazione di un dominio/verticalizzazione
......@@ -69,8 +72,10 @@ comando 2 - prima del serve (puoi usare anche ionic serve -—lab) sass dovrebbe
- is_login_required : importa l'accesso diretto alla mappa se = false altrimenti va alla landing
- hideTimePicker : nasconde il timepicker per entità specifiche
- startUnitYear: per partire con l'intero anno selezionato come filtro temporale (se true) invece che sulla giornata odierna
- tot parametri relativi al sostituire i post con le entita` di tipo rating, utili per aggiungere contenuti configurabili e con una logica di aggregazione sulla singola Thing implementata nel backend - vedere unicarto.json e maps4all.json come esempi
- virtualMarkers: lista di entita` che sono da considerarsi virtuali (non aggiungibili dagli utenti, non hanno figli o fanno parte di iniziative, usate per i dati "importati" da OSM in WGN)
- tot parametri relativi al sostituire i post con le entita` di tipo rating, utili per aggiungere contenuti configurabili e con una logica di aggregazione sulla singola Thing implementata nel backend - vedere doc/ratings.md
- searchNearby: se diverso da 0 propone all'utente la lista delle entità di tipo Place che si trovano entro quel numero di metri da quella
che vuole aggiungere
- virtualMarkers: lista di entita` che sono da considerarsi virtuali (non aggiungibili dagli utenti, non hanno figli o fanno parte di iniziative, usate per i dati "importati" da OSM in WGN)
**custom_tags** : si utilizza per impostare tag personalizzati nelle wizard delle entità.
---
......@@ -129,15 +134,6 @@ For more help use ```ionic --help``` or visit the Ionic docs: http://ionicframew
4. ionic build ios.
Deleting ios.json helps to force it to recompile the plugins.
##Scaffold e files
**flmap.js** file contains some methods about map, zoom control and tiles loading and edit mode
**ratings.js** directive managing ratings, completely inherited from posts.js, like the corresponding factory RatingFact - these are used
only for domains with a non empty object in config.behaviour.postIsRating. Probably a good refactoring could make the code more DRY.
### To prepare the apk to upload to Google Play (see: http://ionicframework.com/docs/guide/publishing.html)
#### 1)
```
......
# Expanding posts: ratings
Posts can be "replaced" by second level entities representing _ratings_ (numeric inputs or single choice from
a set of possibilities). These two kinds of ratings are right now configurable with a certain number of fields of the domain json - the backend
implements an aggregating logic for ratings referred to the same first level entity (i.e. average for numeric ratings, n. of single choices
and total choices done for categorical ratings).
Used in Piuma (maps4all) and unicarto for now.
All the json fields that we describe here are found in the behaviour section.
## How to setup a domain with ratings
In its behaviour json section use:
```
"postIsRating": {
RATING_TYPES
},
```
instead of the default:
```
"postIsRating": {},
```
What one writes in RATING_TYPES determines which ratings are setup for this domain and their specific configurations.
### Implemented types of ratings
The basic types are defined in `defaults.json` and can be configured in the `postIsRating` section,
in the following we will define these basic types and how to configure them.
#### Dropdown
```
"PRICE": {
"label": "Valore della spesa",
"value": "",
"values": ["1-5€","5-10€","10-20€","20-50€","50-100€"],
"type":"DROPDOWN",
"for": ["FL_FOOD_BUY","FL_FOOD_EAT"]
},
```
The type field defines the type, for is an array of the entities keys for which we want to have this rating (it is possible
to configure different ratings for first level entities, but this "logic" is inforced only here and not in the backend).
Value defines the default starting value of the dropdown and values its list of possibilities.
The labels are unused right now (they are there for backend compatibility purposes), to ease i18n in the templates we translate their
key using the custom_labels system, i.e.:
```
"custom_labels":{
"it": {
"PRICE": "Valore della spesa",
},
"en": {
"PRICE": "Total expense"
}
```
Dropdown summaries are shown in entities details as pie charts or in textual form.
#### Slider
```
"NOISE": {
"label":"Noise level",
"value":2,
"type":"RANGE",
"for": ["FL_PLACES"],
"icon_left": "ion-volume-low",
"icon_right": "ion-volume-high"
},
```
Here we have the same fields as for dropdown (without the list of possible values) and in addition the two
ionicons to be displayed at the two ends of the slider.
By default range has a basic configuration in `default.json' with a minimum value of 1 and a maximum of 5, but this can
be changed. The limit right now is that all ranges for a given domain will have the same min/max.
***Caution*** 0 as a minimum value has caused issues with the backend/the slider directive that we are using, there could
be notes about it in git commits.
```
"RANGE": {
"min": 1,
"max": 5
},
```
Slider summaries are shown in entities details as not-changeable sliders.
#### Stars
Stars work like the `RANGE` type, their key is `5STARS` and by default they are from 1 to 5, 0 is not possible here as a value.
Aggregated data for first level entities can show also "half stars". The configuration of stars rating is the same as for
`RANGE` but they do not have a `icon_left/icon_right` field.
Stars summaries are shown in entities details as not-changeable stars.
## Other config options regarding ratings
Here we list the default configuration for ratings that can be altered
for specific domains:
- `"startWithOpenedRating": false,` this parameter can be set to true to bring the user directly back
to the details of newly added entity with a new rating ready to be compiled (at the end of the
add a new entity wizard)
- `"allowMultipleRatings": false,` set to true if the same user can add multiple ratings to the same entity
- `"noPhotoRatings": false,` set to true if alongside the ratings you want to offer users the possibility to add a photo
- `"noEditDeleteMenu": false,` set to true if you want to remove the edit and delete voices from the single rating menu - this
was used mainly during development when certain features were not ready in the backend
- `"noEditMenu": false,` set to true if you want to remove the edit voice from the single rating menu
- `"anonymousRatings": false,` set to true if you want to avoid displaying the user name that added specific ratings
- `"startWithCollapsedRating": false,`, set to true if you want the interface to show all the ratings when opening
entities details, by default both the aggregated information and the single ratings are collapsed.
*TODO*: make more button-like the div that expands/collapses the ratings in `templates/thing/card.html` and in ratings templates.
- `"ratingsAltPlaceholders": {},` use this option to specify different headings for different rating types. By default the content of the
label ```CREATE_POST``` will be shown for all of them.
For example:
```
"ratingsAltPlaceholders": {
"FL_FOOD_BUY": "POSTEDITOR_PLACEHOLDER_BUY"
},
```
Will use the POSTEDITOR_PLACEHOLDER_BUY label only for the FL_FOOD_BUY (entity type key specific for unicarto domain) related ratings.
## Minimal code guide
The general structure of the code has been borrowed by the post code, therefore there is a `rating` directory for the templates, a directive `ratings.js`
and a factory called `RatingFact.js` - probably the directive could have been developed in a more DRY fashion avoiding a bit of code duplication but due to
time constraints we opted to KISS completely.
There are other templates and directive with small code additions to manage ratings, mainly `modal.js` to show the aggregated ratings.
Also the tab management in the modal with entities details has been simply changed to have a "Ratings" tab instead of a "Posts" one - this
behaviour is triggered using the config option `behaviour.postIsRating`.
Main issues faced during development, probably these notes are not useful for someone who knows well AngularJS:
- implementing `startWithOpenedRating` required a new app state to be defined in `EditorCtrl.js`, basically the information that we
finished adding a new Entity has to fall back up to the status management in `MapCtrl.js` to reach the modal containing entities details
and the tabs with ratings
- all templates have a switch to manage separately the three kind of ratings
- to adapt the objects with ratings, that we derive directly from the config, to the backend, some "adapter" methods were written in `RatingFact.js`
- some checks were added in `modal.js` to display the summarized ratings not only considering the config file but if the entity in question effectively has some ratings
Use the Ctrl-F, Luke! With Love.
This could be a good place to start refactoring code, especially if more complex ratings would be needed.
\ No newline at end of file
##Scaffold and files
**flmap.js** file contains some methods about map, zoom control and tiles loading and edit mode
**ratings.js** directive managing ratings, completely inherited from posts.js, like the corresponding factory RatingFact - these are used
only for domains with a non empty object in config.behaviour.postIsRating. Probably a good refactoring could make the code more DRY.
...
## Git branches
Note that after having added the possibility to deploy a single domain not using master, and also to annote which commit of master has been deployed,
from a certain point on (around May 2018) we have some files on webserver1 (or 2 if the deployment was performed there) telling with the SHA of the commit that was last deployed for a given domain, i.e.:
```
[root@webserver1 firstlife]# cat /root/maps4all.txt
a0e8c8a29b63467a9a3bc50d3b923a63073509f2
```
- autocompleteTag
- biennale: branch used for new domain daspazioaluogo, that can show a youtube video for an entity, **still unmerged**
- cocitytag
- crucchi: right now deployed on dev.wegovnow.eu (firstlife domain `wegovnow`) - needs some minimal tests on other domains without any _virtual marker_ before being merged with master. Waiting for the OTM integration to merge&deploy on the three pilot sites (input is needed from other WGN partners on this point, Claudio/OTM are waiting for some last tweaks), **still unmerged**
- dev
- markerLocator: old branch that has been merged and can be removed, bouncing/pulsating around markers when "locate on map" is clicked
- master: the main branch, ideally after development and testing has ended all branches should be merged here and a `golive` gulp
task could be used to have all domains in sync, in practice this has not been done during 2018
- nearby: old branch that has been merged and can be removed, adds a config to get a list of nearby Things when a new marker
is added and suggest them to the user to avoid duplicates
- new_tileserver: branch used to test locally FL client with our new internal tileserver, now used by all the wegovnow domains
- piuma: branch used for the main ratings development, has been merged with master
- printmap: old branch used to add a config adding a button to be able to download a jpg with the map and its markers
- regeneration: old branch used for new domain regeneration, has been merged with master
- removing_timeline: old branch used to add a config to hide completely the timeline, has been merged with master
- rollback
- staging
- tagsAutocomplete
- timeline_mods: branch used to experiment new interfaces and mods to the timeline
- unesco: old branch used for new domain unesco, **still unmerged**, last checks are ongoing
- unicarto: old branch used for new domain unicarto, has been merged with master
- virtualotm: branch used to experiment about virtual markers from OTM
- wall
\ No newline at end of file
# FirstLife external services
Other than the backend itself the client uses many services:
- tileserver for basic cartography in the form of raster maps (png)
- tileserver for area informations in the form of pbf
- a geocoder to obtain lat/lon from addresses
- a reverse geocoder to do the opposite
- slack to report warnings and other things (**partially not working**)
## Maps tileserver
It can be easily configured using the map section of the config json.
We can hook the client with tileservers serving png files receiving their tile coords (`x/y/z`) as parameters.
Right now we are using mapbox (linked to an account that will incur in payments depending on the n. of monthly requests) for some
domains and an internal tileserver based on OSM data for others (i.e. WGN). mapbox can have different styles, we use another tileserver
in certain cases to have a dark theme for insert mode.
## Areas tileserver
This is an internal tileserver that serves areas (i.e. city blocks, buildings, neighborhoods) - these areas
are shown in insert mode - depending on the zoom the added markers will be linked to different areas.
## Geocoders
A geocoder is needed to offer a search by address in the search bar.
In the past we used mapzen but after the end of their service we switched to opencage - the used geocoder can be configured from the config json,
alongside certain parameters of their API and the areas where to look for addresses (certain km around a configurable point right now).
Opencage in its free tier offers 2500 request per day - a notification to slack has been set up to tell us when this limit is reached, but right now if this would happen the address based search would simply stop to work - this has not appened but not all domains use OpenCage right now (maps4all, regeneration, cocity, all WGN ones, daspazioaluogo certainly use it).
We are working on an internal geocoder (using Pelias) and probably will switch to use it, at least for all domains based in Italy.
## Reverse Geocoders
This is used to attach an address to the lat/lon of newly added makers.
We use nominatim for all domains right now.
## Slack
Slack is used to report errors of clients and geocoder issues on a given channel (`#logs`). Also failures of the png tileserver are logged there, to monitor our internal one.
Channels used when users click on the buttons to notify a content or become the owner of an entity should be probably fixed, they could have died when the slack channel codes changed (but I am not sure - they should also send a mail somewhere?)
\ No newline at end of file
......@@ -1258,7 +1258,8 @@
"is_login_required": false,
"hideTimePicker": ["FL_PLACES"],
"removeTimeLine": true,
"aroundYears": 20
"aroundYears": 20,
"searchNearby": 50
},
"map": {
"tile_edit": "https://api.mapbox.com/styles/v1/drp0ll0/cizl1thgs000u2ro17h1cv4y2/tiles/256/{z}/{x}/{y}@2x?access_token=pk.eyJ1IjoiZHJwMGxsMCIsImEiOiI4bUpPVm9JIn0.NCRmAUzSfQ_fT3A86d9RvQ",
......
......@@ -1378,11 +1378,27 @@
}
},
"map": {
"tile_view": "https://api.mapbox.com/styles/v1/drp0ll0/cizl1thgs000u2ro17h1cv4y2/tiles/256/{z}/{x}/{y}@2x?access_token=pk.eyJ1IjoiZHJwMGxsMCIsImEiOiI4bUpPVm9JIn0.NCRmAUzSfQ_fT3A86d9RvQ",
"tile_view_attribution": "<a target='_blank' href='http://mapbox.com/'>©Mapbox</a> | OpenStreetMap contributors",
"tile_edit": "https://api.mapbox.com/styles/v1/drp0ll0/cizl1sb0l000t2ro16uptawtf/tiles/256/{z}/{x}/{y}@2x?access_token=pk.eyJ1IjoiZHJwMGxsMCIsImEiOiI4bUpPVm9JIn0.NCRmAUzSfQ_fT3A86d9RvQ",
"tile_edit_attribution": "<a target='_blank' href='http://mapbox.com/'>©Mapbox</a> | OpenStreetMap contributors",
"tile_vector": "https://tiles.firstlife.org/tile/{z}/{x}/{y}",
"tile_view" : {
"url": "https://api.mapbox.com/styles/v1/drp0ll0/cizl1thgs000u2ro17h1cv4y2/tiles/256/{z}/{x}/{y}@2x?access_token=pk.eyJ1IjoiZHJwMGxsMCIsImEiOiI4bUpPVm9JIn0.NCRmAUzSfQ_fT3A86d9RvQ",
"name": "view",
"type": "xyz",
"visible": true,
"layerOptions": {
"attribution": "<a target='_blank' href='http://mapbox.com/'>©Mapbox</a> | OpenStreetMap contributors",
"keepBuffer": 0
}
},
"tile_edit" : {
"url": "https://api.mapbox.com/styles/v1/drp0ll0/cizl1sb0l000t2ro16uptawtf/tiles/256/{z}/{x}/{y}@2x?access_token=pk.eyJ1IjoiZHJwMGxsMCIsImEiOiI4bUpPVm9JIn0.NCRmAUzSfQ_fT3A86d9RvQ",
"name": "edit",
"type": "xyz",
"visible": false,
"layerOptions": {
"attribution": "<a target='_blank' href='http://mapbox.com/'>©Mapbox</a> | OpenStreetMap contributors",
"keepBuffer": 0
}
},
"map_default_lat": 45.070312,
"map_default_lng": 7.686856,
"map_autocenter": false,
......
......@@ -625,8 +625,27 @@
"aroundYears": 20
},
"map": {
"tile_edit": "https://api.mapbox.com/styles/v1/drp0ll0/cizl1thgs000u2ro17h1cv4y2/tiles/256/{z}/{x}/{y}@2x?access_token=pk.eyJ1IjoiZHJwMGxsMCIsImEiOiI4bUpPVm9JIn0.NCRmAUzSfQ_fT3A86d9RvQ",
"tile_edit_attribution": "<a target='_blank' href='http://mapbox.com/'>©Mapbox</a> | OpenStreetMap contributors",
"tile_view": {
"type": "wms",
"url": "http://geomap.reteunitaria.piemonte.it/ws/siccms/coto-01/wmsg01/wms_sicc01_dati_di_base?",
"name": "view",
"layerOptions": {
"layers": "DatiDiBase",
"format": "image/png",
"transparent": true,
"attribution": "Ufficio Cartografia Numerica del Comune di Torino"
}
},
"tile_edit" : {
"url": "https://api.mapbox.com/styles/v1/drp0ll0/cizl1thgs000u2ro17h1cv4y2/tiles/256/{z}/{x}/{y}@2x?access_token=pk.eyJ1IjoiZHJwMGxsMCIsImEiOiI4bUpPVm9JIn0.NCRmAUzSfQ_fT3A86d9RvQ",
"name": "edit",
"type": "xyz",
"visible": false,
"layerOptions": {
"attribution": "<a target='_blank' href='http://mapbox.com/'>©Mapbox</a> | OpenStreetMap contributors",
"keepBuffer": 0
}
},
"print": true,
"zoom_create": 19,
"max_zoom": 19
......
......@@ -4,10 +4,6 @@
"app_name" : "UniCarTO",
"domain_name" : "unicarto",
"domain_id" : 31,
"api_base_domain": "api.fldev.di.unito.it/",
"authentication": {
"auth_base_domain": "https://secure.fldev.di.unito.it/"
},
"ssl": true,
"read_domains":false,
"design":{
......@@ -317,21 +313,21 @@
"postIsRating": {
"PRICE": {
"label": "Valore della spesa",
"value": "1-5€",
"value": "",
"values": ["1-5€","5-10€","10-20€","20-50€","50-100€"],
"type":"DROPDOWN",
"for": ["FL_FOOD_BUY","FL_FOOD_EAT"]
},
"MEAL": {
"label": "Pasto",
"value": "Colazione",
"value": "",
"values": ["Colazione","Pranzo","Cena","Spuntino"],
"type":"DROPDOWN",
"for": ["FL_FOOD_CONSUME","FL_FOOD_EAT"]
},
"WHERE": {
"label": "Luogo di consumo",
"value": "Consumato nel locale",
"value": "",
"values": ["Consumato nel locale","Ricevuto a casa da piattaforma di Food Delivery","A portar via"],
"type":"DROPDOWN",
"for": ["FL_FOOD_EAT"]
......@@ -371,7 +367,8 @@
"TEXT_PLACEHOLDER": "Cosa vuoi raccontare?",
"PRICE": "Valore della spesa",
"MEAL": "Pasto",
"WHERE": "Luogo di consumo"
"WHERE": "Luogo di consumo",
"EMPTY_DROPDOWN": "Seleziona un valore"
},
"en": {
"CONTRIBUTE_DATE": "Added at",
......@@ -396,7 +393,8 @@
"TEXT_PLACEHOLDER": "What do you want to add?",
"PRICE": "Total expense",
"MEAL": "Meal",
"WHERE": "Eating place"
"WHERE": "Eating place",
"EMPTY_DROPDOWN": "Select a value"
}
}
}
......
......@@ -1053,11 +1053,30 @@
"map_default_lng" : 7.686856,
"zoom_level" : 16,
"cluster_limit": 18,
"max_zoom": 18,
"tile_view" : "http://devtiles.firstlife.org/styles/klokantech-basic/{z}/{x}/{y}.png",
"tile_view_attribution": "Tiles and Data by <a href='http://openmaptiles.org/' rel='nofollow'>© OpenMapTiles</a> and <a href='http://openstreetmap.org'>OpenStreetMap Contributors</a>, under <a href='http://www.openstreetmap.org/copyright'>ODbL</a>.",
"tile_edit" : "http://devtiles.firstlife.org/styles/klokantech-basic/{z}/{x}/{y}.png",
"tile_edit_attribution": "Tiles and Data by <a href='http://openmaptiles.org/' rel='nofollow'>© OpenMapTiles</a> and <a href='http://openstreetmap.org'>OpenStreetMap Contributors</a>, under <a href='http://www.openstreetmap.org/copyright'>ODbL</a>."
"max_zoom": 20,
"tile_view": {
"type": "wms",
"url": "http://geomap.reteunitaria.piemonte.it/ws/siccms/coto-01/wmsg01/wms_sicc01_dati_di_base?",
"name": "view",
"layerOptions": {
"layers": "DatiDiBase",
"format": "image/png",
"transparent": true,
"attribution": "Ufficio Cartografia Numerica del Comune di Torino"
}
},
"tile_edit": {
"type": "wms",
"url": "http://geomap.reteunitaria.piemonte.it/ws/siccms/coto-01/wmsg01/wms_sicc01_dati_di_base?",
"name": "edit",
"visible": false,
"layerOptions": {
"layers": "DatiDiBase",
"format": "image/png",
"transparent": true,
"attribution": "Ufficio Cartografia Numerica del Comune di Torino"
}
}
},
"behaviour":{
"is_login_required" : false,
......
......@@ -4,9 +4,6 @@
"domain_name": "wegovnow-sandona",
"domain_id": 25,
"ssl": true,
"read_domains": [
21
],
"authentication": {
"auth_server": "uwum_auth_sandona",
"auth_server_name": "UWUM_SANDONA",
......@@ -533,29 +530,24 @@
"zoom_level": 14,
"cluster_limit": 18,
"max_zoom": 18,
"tile_view": "https://c.tile.openstreetmap.org/{z}/{x}/{y}.png",
"tile_view_attribution": "Tiles and Data by <a href='http://openstreetmap.org'>OpenStreetMap</a>, under <a href='http://www.openstreetmap.org/copyright'>ODbL</a>.",
"tile_edit": "http://b.tile.stamen.com/toner/{z}/{x}/{y}.png",
"tile_edit_attribution": "Map tiles by <a href='http://stamen.com'>Stamen Design</a>, under <a href='http://creativecommons.org/licenses/by/3.0'>CC BY 3.0</a>. Data by <a href='http://openstreetmap.org'>OpenStreetMap</a>, under <a href='http://www.openstreetmap.org/copyright'>ODbL</a>."
"tile_view" : "http://devtiles.firstlife.org/styles/klokantech-basic/{z}/{x}/{y}.png",
"tile_view_attribution": "Data by <a href='http://openstreetmap.org'>OpenStreetMap</a>, under <a href='http://www.openstreetmap.org/copyright'>ODbL</a>. <a target='_blank' href='https://sandona.liquidfeedback.net/static/wegovnow/sandona/privacy.pdf'>Privacy Statement</a> and <a target='_blank' href='https://sandona.liquidfeedback.net/static/wegovnow/sandona/terms_of_use.pdf'>TOU</a>.",
"tile_edit" : "http://devtiles.firstlife.org/styles/klokantech-basic/{z}/{x}/{y}.png",
"tile_edit_attribution": "Data by <a href='http://openstreetmap.org'>OpenStreetMap</a>, under <a href='http://www.openstreetmap.org/copyright'>ODbL</a>. <a target='_blank' href='https://sandona.liquidfeedback.net/static/wegovnow/sandona/privacy.pdf'>Privacy Statement</a> and <a target='_blank' href='https://sandona.liquidfeedback.net/static/wegovnow/sandona/terms_of_use.pdf'>TOU</a>."
},
"behaviour": {
"is_login_required": false,
"searchNearby": 50
},
"navigator": {
"search": {
"geocoding": "https://search.mapzen.com/v1/search",
"geocoding": "https://api.opencagedata.com/geocode/v1/json",
"params": {
"api_key": "search-ZDnkvxb",
"focus.point.lat": 45.633576,
"focus.point.lon": 12.566082,
"boundary.country": "IT",
"boundary.circle.lat": 45.633576,
"boundary.circle.lon": 12.566082,
"boundary.circle.radius": 3
},
"search_key": "text",
"name": "name"
"key": "7434f69c593544cb871f9aeacbd7ac66",
"bounds": "12.497634887695314,45.606832441359316,12.624149322509767,45.6655259803245",
"countrycode": "IT"
}
}
},
"behaviour": {
"is_login_required": false
}
}
}
\ No newline at end of file
{
"myConfig": {
"app_name": "WeGovNow!",
"domain_name": "wegovnow",
"domain_name": "wegovnow-southwark",
"domain_id": 27,
"ssl": true,
"read_domains": false,
......@@ -148,7 +148,7 @@
"types": {
"categories": [
{
"category_space": 29,
"category_space": 64,
"name": "Categories",
"slug": "categories",
"description": "Categories",
......@@ -159,81 +159,88 @@
"color_index": 6,
"categories": [
{
"id": -510,
"name": "Culture and Arts",
"description": "Culture and Arts",
"id": 1241,
"name": "Culture, Arts and Heritage",
"description": "Culture, Arts and Heritage",
"category_index": 1,
"icon_name": "ion-paintbrush"
},
{
"id": -511,
"id": 1242,
"name": "Education and Training",
"description": "Education and Training",
"category_index": 2,
"icon_name": "ion-university"
},
{
"id": -512,
"id": 1243,
"name": "Social Activities",
"description": "Social Activities",
"category_index": 3,
"icon_name": "ion-android-people"
},
{
"id": -513,
"id": 1244,
"name": "Sports",
"description": "Sports",
"category_index": 4,
"icon_name": "ion-ios-football"
},
{
"id": -514,
"name": "Food and Provisions",
"description": "Food and Provisions",
"id": 1245,
"name": "Food and Drink",
"description": "Food and Drink",
"category_index": 5,
"icon_name": "ion-android-restaurant"
},
{
"id": -515,
"name": "Free Time",
"description": "Free Time",
"id": 1246,
"name": "Retail",
"description": "Retail",
"category_index": 6,
"icon_name": "ion-chatbubbles"
"icon_name": "ion-bag"
},
{
"id": -516,
"name": "Public Offices",
"description": "Public Offices",
"id": 1247,