From 828b817aca0a402d59699aae27458530973cfae8 Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Thu, 2 Jun 2016 14:14:11 +0200 Subject: [PATCH] Append widgets metadata from mapconfig --- lib/cartodb/controllers/map.js | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/lib/cartodb/controllers/map.js b/lib/cartodb/controllers/map.js index 32459059..aafbfea4 100644 --- a/lib/cartodb/controllers/map.js +++ b/lib/cartodb/controllers/map.js @@ -168,8 +168,6 @@ MapController.prototype.create = function(req, res, prepareConfigFn) { if (err) { self.sendError(req, res, err, 'ANONYMOUS LAYERGROUP'); } else { - addWidgetsUrl(req.context.user, layergroup); - res.set('X-Layergroup-Id', layergroup.layergroupid); self.send(req, res, layergroup, 200); } @@ -228,8 +226,7 @@ MapController.prototype.instantiateTemplate = function(req, res, prepareParamsFn var templateHash = self.templateMaps.fingerPrint(mapConfigProvider.template).substring(0, 8); layergroup.layergroupid = cdbuser + '@' + templateHash + '@' + layergroup.layergroupid; - addWidgetsUrl(cdbuser, layergroup); - addDataviewsUrls(cdbuser, layergroup, mapConfig.obj()); + addDataviewsAndWidgetsUrls(cdbuser, layergroup, mapConfig.obj()); addAnalysesMetadata(cdbuser, layergroup, mapConfigProvider.analysesResults); res.set('X-Layergroup-Id', layergroup.layergroupid); @@ -305,9 +302,7 @@ MapController.prototype.afterLayergroupCreate = function(req, res, mapconfig, an layergroup.layergroupid = layergroup.layergroupid + ':' + result.getLastUpdatedAt(); layergroup.last_updated = new Date(result.getLastUpdatedAt()).toISOString(); - // TODO this should take into account several URL patterns - addWidgetsUrl(username, layergroup); - addDataviewsUrls(username, layergroup, mapconfig.obj()); + addDataviewsAndWidgetsUrls(username, layergroup, mapconfig.obj()); addAnalysesMetadata(username, layergroup, analysesResults, true); if (req.method === 'GET') { var ttl = global.environment.varnish.layergroupTtl || 86400; @@ -353,6 +348,12 @@ function addAnalysesMetadata(username, layergroup, analysesResults, includeQuery }); } +// TODO this should take into account several URL patterns +function addDataviewsAndWidgetsUrls(username, layergroup, mapConfig) { + addDataviewsUrls(username, layergroup, mapConfig); + addWidgetsUrl(username, layergroup, mapConfig); +} + function addDataviewsUrls(username, layergroup, mapConfig) { layergroup.metadata.dataviews = layergroup.metadata.dataviews || {}; var dataviews = mapConfig.dataviews || {}; @@ -365,20 +366,23 @@ function addDataviewsUrls(username, layergroup, mapConfig) { }); } -function addWidgetsUrl(username, layergroup) { - - if (layergroup.metadata && Array.isArray(layergroup.metadata.layers)) { +function addWidgetsUrl(username, layergroup, mapConfig) { + if (layergroup.metadata && Array.isArray(layergroup.metadata.layers) && Array.isArray(mapConfig.layers)) { layergroup.metadata.layers = layergroup.metadata.layers.map(function(layer, layerIndex) { - if (layer.widgets) { - Object.keys(layer.widgets).forEach(function(widgetName) { + var mapConfigLayer = mapConfig.layers[layerIndex]; + if (mapConfigLayer.options && mapConfigLayer.options.widgets) { + layer.widgets = layer.widgets || {}; + Object.keys(mapConfigLayer.options.widgets).forEach(function(widgetName) { var resource = layergroup.layergroupid + '/' + layerIndex + '/widget/' + widgetName; - layer.widgets[widgetName].url = getUrls(username, resource); + layer.widgets[widgetName] = { + type: mapConfigLayer.options.widgets[widgetName].type, + url: getUrls(username, resource) + }; }); } return layer; }); } - } function getUrls(username, resource) {