=== modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module.properties 2012-09-03 19:48:33 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module.properties 2013-03-15 12:07:56 +0000 @@ -28,8 +28,8 @@ last_quarter=Last quarter last_4_quarters=Last 4 quarters six_months=Six months -last_six_month=Last 6 months -last_two_six_month=Last two 6 months +last_six_month=Last six-month +last_two_six_month=Last 2 six-months years=Years last_year=Last year last_5_years=Last 5 years @@ -135,5 +135,6 @@ groups_replace_orgunits = Note: Groups will replace the selected organisation units fixed_periods = Fixed periods relative_periods = Relative periods +periods = Periods select_type = Select type last_3_months = Last 3 months \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/css/style.css' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/css/style.css 2013-03-06 18:25:40 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/css/style.css 2013-03-15 15:41:21 +0000 @@ -31,6 +31,12 @@ body { font-size: 10px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } .dv-accordion-options .x-panel-body-default { @@ -79,28 +85,90 @@ color: #111; } -/* Grid */ - -.x-grid-row .x-grid-cell { - color: #222; - background-color: transparent; - border: 1px solid transparent; -} - -.x-grid-row-selected .x-grid-cell { - border: 1px solid transparent; -} - -.x-grid-row-over { - background-color: #f1f1f1; -} - -.x-grid-row-over .x-grid-cell-first, .x-grid-row-selected .x-grid-cell-first { - border-radius: 2px 0 0 2px; -} - -.x-grid-row-over .x-grid-cell-last, .x-grid-row-selected .x-grid-cell-last { - border-radius: 0 2px 2px 0; + +/*---------------------------------------------------------------------------- + * PT Grid + *--------------------------------------------------------------------------*/ + +.dv-grid-row-icon-edit, +.dv-grid-row-icon-overwrite, +.dv-grid-row-icon-sharing, +.dv-grid-row-icon-dashboard, +.dv-grid-row-icon-delete { + width: 16px; + height: 16px; + cursor: pointer; +} +.dv-grid-row-icon-edit { + background: url('../images/grid-edit_16.png') no-repeat; +} +.dv-grid-row-icon-overwrite { + background: url('../images/grid-save_16.png') no-repeat; + margin-left: 4px; +} +.dv-grid-row-icon-sharing { + background: url('../images/grid-sharing_16.png') no-repeat; + margin-left: 4px; +} +.dv-grid-row-icon-dashboard { + background: url('../images/grid-dashboard_16.png') no-repeat; + margin-left: 4px; +} +.dv-grid-row-icon-delete { + background: url('../images/grid-delete_16.png') no-repeat; + margin-left: 4px; +} +.dv-grid-row-icon-disabled img.dv-grid-row-icon-edit, +.dv-grid-row-icon-disabled img.dv-grid-row-icon-overwrite, +.dv-grid-row-icon-disabled img.dv-grid-row-icon-delete { + opacity: 0; + filter:Alpha(opacity=0); +} +.dv-grid-row-icon-disabled * { + cursor: default !important; +} +.dv-grid-row-icon-disabled img.dv-grid-row-icon-sharing, +.dv-grid-row-icon-disabled img.dv-grid-row-icon-dashboard { + cursor: pointer !important; +} + +.dv-grid .x-grid-cell-inner, +.dv-grid .x-grid-cell-inner * { + font-size: 10px !important; +} +.dv-grid .x-grid-cell-inner { + padding-top: 3px; + padding-bottom: 3px; +} + +.dv-grid .x-column-header-text { + color: #333; +} +.dv-grid .x-grid-header-ct { + border-bottom-width: 1px !important; + border-bottom-color: #d0d0d0; +} +.dv-grid .x-grid-body { + border: 1px solid #d0d0d0; + border-top: 0 none !important; +} + +.dv-grid .x-grid-dirty-cell { /* hide red "dirty" icon */ + background-image: none; +} +.dv-grid .x-grid-row { /* middle align text in row with image */ + vertical-align: middle; +} +.dv-grid .x-grid-row .x-grid-cell { /* remove blurry borders */ + border-top: 0 none; +} + +.dv-grid .link, +.dv-grid .link * { + cursor: pointer; + cursor: hand; + color: blue; + text-decoration: underline; } /* DV menu grid */ @@ -252,7 +320,7 @@ } .dv-toolbar-btn-menu { /* Align menu */ - margin-top: 5px; + margin-top: 4px; } /* Button */ @@ -307,7 +375,7 @@ } .x-tip-anchor { - border-bottom-color: #111; + border-top-color: #111; } /* Chart tips (tooltip) */ @@ -320,14 +388,6 @@ font-size: 11px; } -/* Grid row/cell text position */ -.x-grid-cell-inner { - line-height: 15px; - font-size: 10px; - cursor: pointer; - cursor: hand; -} - /* Grid datatable column chooser */ .x-column-header-over .x-column-header-trigger, .x-column-header-open .x-column-header-trigger { display: none; @@ -447,9 +507,13 @@ border-radius: 2px } -/* Grid datatable columns */ -.x-grid-header-ct { - border-style: none; + /* Window bbar info */ +.dv-label-info { + font-size: 10px !important; + color: #666; + padding-left: 4px; + height: 22px; + line-height: 21px; } /* Grid datatable first row border top */ === added file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-dashboard_16.png' Binary files dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-dashboard_16.png 1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-dashboard_16.png 2013-03-15 08:41:22 +0000 differ === added file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-delete_16.png' Binary files dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-delete_16.png 1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-delete_16.png 2013-03-15 08:41:22 +0000 differ === added file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-edit_16.png' Binary files dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-edit_16.png 1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-edit_16.png 2013-03-15 08:41:22 +0000 differ === added file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-save_16.png' Binary files dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-save_16.png 1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-save_16.png 2013-03-15 08:41:22 +0000 differ === added file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-sharing_16.png' Binary files dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-sharing_16.png 1970-01-01 00:00:00 +0000 and dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/images/grid-sharing_16.png 2013-03-15 08:41:22 +0000 differ === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/scripts/app.js' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/scripts/app.js 2013-03-11 13:05:31 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/scripts/app.js 2013-03-15 15:41:21 +0000 @@ -71,7 +71,7 @@ }, user: { id: r.user.id, - isadmin: r.user.isAdmin, + isAdmin: r.user.isAdmin, ou: r.user.ou, ouc: r.user.ouc }, @@ -189,17 +189,50 @@ } }, period: { - relativeperiodunits: { - reportingMonth: 1, - last3Months: 3, - last12Months: 12, - reportingQuarter: 1, - last4Quarters: 4, - lastSixMonth: 1, - last2SixMonths: 2, - thisYear: 1, - lastYear: 1, - last5Years: 5 + relativePeriods: { + 'LAST_WEEK': 1, + 'LAST_4_WEEKS': 4, + 'LAST_12_WEEKS': 12, + 'LAST_MONTH': 1, + 'LAST_3_MONTHS': 3, + 'LAST_12_MONTHS': 12, + 'LAST_QUARTER': 1, + 'LAST_4_QUARTERS': 4, + 'LAST_SIX_MONTH': 1, + 'LAST_2_SIXMONTHS': 2, + 'THIS_YEAR': 1, + 'LAST_YEAR': 1, + 'LAST_5_YEARS': 5 + }, + relativePeriodValueKeys: { + 'LAST_WEEK': 'lastWeek', + 'LAST_4_WEEKS': 'last4Weeks', + 'LAST_12_WEEKS': 'last12Weeks', + 'LAST_MONTH': 'reportingMonth', + 'LAST_3_MONTHS': 'last3Months', + 'LAST_12_MONTHS': 'last12Months', + 'LAST_QUARTER': 'reportingQuarter', + 'LAST_4_QUARTERS': 'last4Quarters', + 'LAST_SIX_MONTH': 'lastSixMonth', + 'LAST_2_SIXMONTHS': 'last2SixMonths', + 'THIS_YEAR': 'thisYear', + 'LAST_YEAR': 'lastYear', + 'LAST_5_YEARS': 'last5Years' + }, + relativePeriodParamKeys: { + 'lastWeek': 'LAST_WEEK', + 'last4Weeks': 'LAST_4_WEEKS', + 'last12Weeks': 'LAST_12_WEEKS', + 'reportingMonth': 'LAST_MONTH', + 'last3Months': 'LAST_3_MONTHS', + 'last12Months': 'LAST_12_MONTHS', + 'reportingQuarter': 'LAST_QUARTER', + 'last4Quarters': 'LAST_4_QUARTERS', + 'lastSixMonth': 'LAST_SIX_MONTH', + 'last2SixMonths': 'LAST_2_SIXMONTHS', + 'thisYear': 'THIS_YEAR', + 'lastYear': 'LAST_YEAR', + 'last5Years': 'LAST_5_YEARS' }, periodtypes: [ {id: 'Daily', name: 'Daily'}, @@ -238,16 +271,15 @@ west_fill_accordion_indicator: 63, west_fill_accordion_dataelement: 63, west_fill_accordion_dataset: 33, - west_fill_accordion_fixedperiod: 63, - west_fill_accordion_organisationunit: 97, + west_fill_accordion_period: 240, + west_fill_accordion_organisationunit: 62, west_maxheight_accordion_indicator: 500, west_maxheight_accordion_dataelement: 500, west_maxheight_accordion_dataset: 500, - west_maxheight_accordion_relativeperiod: 402, - west_maxheight_accordion_fixedperiod: 500, - west_maxheight_accordion_organisationunit: 900, - west_maxheight_accordion_organisationunitgroup: 281, - west_maxheight_accordion_options: 431, + west_maxheight_accordion_period: 650, + west_maxheight_accordion_organisationunit: 700, + west_maxheight_accordion_organisationunitgroup: 253, + west_maxheight_accordion_options: 403, east_tbar_height: 31, east_gridcolumn_height: 30, form_label_width: 55, @@ -255,6 +287,7 @@ window_confirm_width: 250, window_share_width: 500, grid_favorite_width: 420, + grid_row_height: 27, treepanel_minheight: 135, treepanel_maxheight: 400, treepanel_fill_default: 310, @@ -286,10 +319,11 @@ indicator: {}, dataelement: {}, dataset: {}, + period: {}, + fixedperiod: {}, relativeperiod: { checkbox: [] }, - fixedperiod: {}, organisationunit: {}, organisationunitgroup: {} }, @@ -369,8 +403,8 @@ }, resizeDimensions: function() { var a = [DV.cmp.dimension.indicator.panel, DV.cmp.dimension.dataelement.panel, DV.cmp.dimension.dataset.panel, - DV.cmp.dimension.relativeperiod.panel, DV.cmp.dimension.fixedperiod.panel, DV.cmp.dimension.organisationunit.panel, - DV.cmp.dimension.organisationunitgroup.panel, DV.cmp.options.panel]; + DV.cmp.dimension.period.panel, DV.cmp.dimension.organisationunit.panel, DV.cmp.dimension.organisationunitgroup.panel, + DV.cmp.options.panel]; for (var i = 0; i < a.length; i++) { if (!a[i].collapsed) { a[i].fireEvent('expand'); @@ -574,12 +608,12 @@ } }, relativeperiod: { - getRecordsByRelativePeriods: function(obj) { + getRecordsByRelativePeriods: function(rp) { var a = [], count = 0; - for (var rp in obj) { - if (obj[rp]) { - count += DV.conf.period.relativeperiodunits[rp]; + for (var key in rp) { + if (rp[key]) { + count += DV.conf.period.relativePeriods[key] || DV.conf.period.relativePeriods[DV.conf.period.relativePeriodParamKeys[key]]; } } for (var i = 0; i < count; i++) { @@ -599,7 +633,7 @@ var a = {}, cmp = DV.cmp.dimension.relativeperiod.checkbox; Ext.Array.each(cmp, function(item) { - a[item.paramName] = item.getValue(); + a[item.relativePeriodId] = item.getValue(); }); return a; }, @@ -636,10 +670,11 @@ }, getUrl: function() { var a = [], - obj = DV.c.relativeperiod.rp; - for (var rp in obj) { - if (obj[rp]) { - a.push(rp + '=true'); + rp = DV.c.relativeperiod.rp, + param; + for (var key in rp) { + if (rp[key]) { + a.push((DV.conf.period.relativePeriodValueKeys[key] || key) + '=true'); } } @@ -1168,10 +1203,10 @@ checkbox: { setRelativePeriods: function(rp) { if (rp) { - for (var r in rp) { - var cmp = DV.util.getCmp('checkbox[paramName="' + r + '"]'); + for (var key in rp) { + var cmp = DV.util.getCmp('checkbox[relativePeriodId="' + (DV.conf.period.relativePeriodParamKeys[key] || key) + '"]'); if (cmp) { - cmp.setValue(rp[r]); + cmp.setValue(rp[key]); } } } @@ -1322,7 +1357,22 @@ }); } } - } + }, + window: { + setAnchorPosition: function(w, target) { + var vpw = DV.viewport.getWidth(), + targetx = target ? target.getPosition()[0] : 4, + winw = w.getWidth(), + y = target ? target.getPosition()[1] + target.getHeight() + 4 : 33; + + if ((targetx + winw) > vpw) { + w.setPosition((vpw - winw - 2), y); + } + else { + w.setPosition(targetx, y); + } + } + } }; DV.store = { @@ -1536,13 +1586,33 @@ fields: ['id', 'name', 'lastUpdated', 'userId'], proxy: { type: 'ajax', - url: DV.conf.finals.ajax.path_visualizer + DV.conf.finals.ajax.favorite_getall, reader: { type: 'json', root: 'charts' } }, isloaded: false, + pageSize: 10, + page: 1, + defaultUrl: DV.init.contextPath + '/api/charts.json?links=false', + loadStore: function(url) { + this.proxy.url = url || this.defaultUrl; + + this.load({ + params: { + pageSize: this.pageSize, + page: this.page + } + }); + }, + loadFn: function(fn) { + if (this.isLoaded) { + fn.call(); + } + else { + this.load(fn); + } + }, sorting: { field: 'name', direction: 'ASC' @@ -1551,7 +1621,7 @@ this.sort(this.sorting.field, this.sorting.direction); }, filtersystem: function() { - if (!DV.init.user.isadmin) { + if (!DV.init.user.isAdmin) { this.filterBy( function(r) { return r.data.userId ? true : false; }); @@ -2534,6 +2604,879 @@ } }; + DV.app = {}; + + DV.app.FavoriteWindow = function() { + + // Objects + var NameWindow, + + // Instances + nameWindow, + + // Functions + getBody, + + // Components + addButton, + searchTextfield, + grid, + prevButton, + nextButton, + tbar, + bbar, + info, + nameTextfield, + createButton, + updateButton, + cancelButton, + mapWindow, + + // Vars + windowWidth = 500, + windowCmpWidth = windowWidth - 22; + + DV.store.favorite.on('load', function(store, records) { + var pager = store.proxy.reader.jsonData.pager; + + info.setText('Page ' + pager.page + ' of ' + pager.pageCount); + + prevButton.enable(); + nextButton.enable(); + + if (pager.page === 1) { + prevButton.disable(); + } + + if (pager.page === pager.pageCount) { + nextButton.disable(); + } + }); + + getBody = function() { + var favorite; + + if (DV.c.rendered) { + favorite = {}; + + // Server sync + //DV.c.lastMonth = DV.c.reportingMonth; + //DV.c.lastQuarter = DV.c.reportingQuarter; + + favorite.type = DV.c.type; + favorite.series = DV.c.dimension.series; + favorite.category = DV.c.dimension.category; + favorite.filter = DV.c.dimension.filter; + favorite.hideLegend = DV.c.hidelegend; + favorite.hideSubtitle = DV.c.hidesubtitle; + favorite.showData = DV.c.showdata; + favorite.regression = DV.c.trendline; + favorite.userOrganisationUnit = DV.c.userorganisationunit; + favorite.userOrganisationUnitChildren = DV.c.userorganisationunitchildren; + + // Options + if (DV.c.domainAxisLabel) { + favorite.domainAxisLabel = DV.c.domainaxislabel; + } + if (DV.c.rangeAxisLabel) { + favorite.rangeAxisLabel = DV.c.rangeaxislabel; + } + if (DV.c.targetLineValue) { + favorite.targetLineValue = DV.c.targetlinevalue; + } + if (DV.c.targetLineLabel) { + favorite.targetLineLabel = DV.c.targetlinelabel; + } + if (DV.c.baseLineValue) { + favorite.baseLineValue = DV.c.baselinevalue; + } + if (DV.c.baseLineLabel) { + favorite.baseLineLabel = DV.c.baselinelabel; + } + + // Indicators + if (Ext.isObject(DV.c.indicator) && Ext.isArray(DV.c.indicator.records) && DV.c.indicator.records.length) { + favorite.indicators = Ext.clone(DV.c.indicator.records); + } + + // Data elements + if (Ext.isObject(DV.c.dataelement) && Ext.isArray(DV.c.dataelement.records) && DV.c.dataelement.records.length) { + favorite.dataElements = Ext.clone(DV.c.dataelement.records); + } + + // Data sets + if (Ext.isObject(DV.c.dataset) && Ext.isArray(DV.c.dataset.records) && DV.c.dataset.records.length) { + favorite.dataSets = Ext.clone(DV.c.dataset.records); + } + + // Fixed periods + if (Ext.isObject(DV.c.fixedperiod) && Ext.isArray(DV.c.fixedperiod.records) && DV.c.fixedperiod.records.length) { + favorite.periods = Ext.clone(DV.c.fixedperiod.records); + } + + // Relative periods + favorite.relativePeriods = {}; + + if (Ext.isObject(DV.c.relativeperiod)) { + favorite.rewindRelativePeriods = !!DV.c.relativeperiod.rewind; + + if (Ext.isObject(DV.c.relativeperiod.rp)) { + for (var key in DV.c.relativeperiod.rp) { + if (DV.c.relativeperiod.rp.hasOwnProperty(key) && !!DV.c.relativeperiod.rp[key]) { + favorite.relativePeriods[DV.conf.period.relativePeriodValueKeys[key]] = true; + } + } + } + } + + // Organisation units + if (Ext.isObject(DV.c.organisationunit)) { + if (Ext.isString(DV.c.organisationunit.groupsetid)) { + favorite.organisationUnitGroupSetId = DV.c.organisationunit.groupsetid; + } + + if (Ext.isArray(DV.c.organisationunit.records) && DV.c.organisationunit.records.length) { + favorite.organisationUnits = Ext.clone(DV.c.organisationunit.records); + } + } + } + + return favorite; + }; + + NameWindow = function(id) { + var window, + record = DV.store.favorite.getById(id); + + nameTextfield = Ext.create('Ext.form.field.Text', { + height: 26, + width: 250, + fieldStyle: 'padding-left: 6px; border-radius: 1px; border-color: #bbb; font-size:11px', + style: 'margin-bottom:0', + emptyText: 'Favorite name', + value: id ? record.data.name : '', + listeners: { + afterrender: function() { + this.focus(); + } + } + }); + + createButton = Ext.create('Ext.button.Button', { + text: 'Create', //i18n + handler: function() { + var favorite = getBody(); + favorite.name = nameTextfield.getValue (); + + if (favorite && favorite.name) { + Ext.Ajax.request({ + url: DV.init.contextPath + '/api/charts/', + method: 'POST', + headers: {'Content-Type': 'application/json'}, + params: Ext.encode(favorite), + failure: function(r) { + DV.util.mask.hideMask(); + alert(r.responseText); + }, + success: function(r) { + var id = r.getAllResponseHeaders().location.split('/').pop(); + + //pt.favorite = favorite; + + DV.store.favorite.loadStore(); + + //pt.viewport.interpretationButton.enable(); + + window.destroy(); + } + }); + } + } + }); + + updateButton = Ext.create('Ext.button.Button', { + text: 'Update', //i18n + handler: function() { + var name = nameTextfield.getValue(), + favorite; + + if (id && name) { + Ext.Ajax.request({ + url: DV.init.contextPath + '/api/charts/' + id + '.json?links=false', + method: 'GET', + failure: function(r) { + DV.util.mask.hideMask(); + alert(r.responseText); + }, + success: function(r) { + favorite = Ext.decode(r.responseText); + favorite.name = name; + + Ext.Ajax.request({ + url: DV.init.contextPath + '/api/charts/' + favorite.id, + method: 'PUT', + headers: {'Content-Type': 'application/json'}, + params: Ext.encode(favorite), + failure: function(r) { + DV.util.mask.hideMask(); + alert(r.responseText); + }, + success: function(r) { + DV.store.favorite.loadStore(); + window.destroy(); + } + }); + } + }); + } + } + }); + + cancelButton = Ext.create('Ext.button.Button', { + text: 'Cancel', //i18n + handler: function() { + window.destroy(); + } + }); + + window = Ext.create('Ext.window.Window', { + title: id ? 'Rename favorite' : 'Create new favorite', + //iconCls: 'dv-window-title-icon-favorite', + bodyStyle: 'padding:5px; background:#fff', + resizable: false, + modal: true, + items: nameTextfield, + //destroyOnBlur: true, + bbar: [ + cancelButton, + '->', + id ? updateButton : createButton + ], + listeners: { + show: function(w) { + DV.util.window.setAnchorPosition(w, addButton); + + //if (!w.hasDestroyBlurHandler) { + //pt.util.window.addDestroyOnBlurHandler(w); + //} + + //pt.viewport.favoriteWindow.destroyOnBlur = false; + }, + destroy: function() { + //pt.viewport.favoriteWindow.destroyOnBlur = true; + } + } + }); + + return window; + }; + + addButton = Ext.create('Ext.button.Button', { + text: 'Add new', //i18n + width: 67, + height: 26, + style: 'border-radius: 1px;', + menu: {}, + disabled: !DV.c.rendered, + handler: function() { + nameWindow = new NameWindow(null, 'create'); + nameWindow.show(); + } + }); + + searchTextfield = Ext.create('Ext.form.field.Text', { + width: windowCmpWidth - addButton.width - 11, + height: 26, + fieldStyle: 'padding-right: 0; padding-left: 6px; border-radius: 1px; border-color: #bbb; font-size:11px', + emptyText: 'Search for favorites', //i18n + enableKeyEvents: true, + currentValue: '', + listeners: { + keyup: function() { + if (this.getValue() !== this.currentValue) { + this.currentValue = this.getValue(); + + var value = this.getValue(), + url = value ? DV.init.contextPath + '/api/charts/query/' + value + '.json?links=false' : null, + store = DV.store.favorite; + + store.page = 1; + store.loadStore(url); + } + } + } + }); + + prevButton = Ext.create('Ext.button.Button', { + text: 'Prev', //i18n + handler: function() { + var value = searchTextfield.getValue(), + url = value ? DV.init.contextPath + '/api/charts/query/' + value + '.json?links=false' : null, + store = DV.store.favorite; + + store.page = store.page <= 1 ? 1 : store.page - 1; + store.loadStore(url); + } + }); + + nextButton = Ext.create('Ext.button.Button', { + text: 'Next', //i18n + handler: function() { + var value = searchTextfield.getValue(), + url = value ? DV.init.contextPath + '/api/charts/query/' + value + '.json?links=false' : null, + store = DV.store.favorite; + + store.page = store.page + 1; + store.loadStore(url); + } + }); + + info = Ext.create('Ext.form.Label', { + cls: 'dv-label-info', + width: 300, + height: 22 + }); + + grid = Ext.create('Ext.grid.Panel', { + cls: 'dv-grid', + scroll: false, + hideHeaders: true, + columns: [ + { + dataIndex: 'name', + sortable: false, + width: windowCmpWidth - 88, + renderer: function(value, metaData, record) { + var fn = function() { + var el = Ext.get(record.data.id); + if (el) { + el = el.parent('td'); + el.addClsOnOver('link'); + el.favoriteId = record.data.id; + el.hideWindow = function() { + favoriteWindow.hide(); + }; + el.dom.setAttribute('onclick', 'Ext.get(this).hideWindow(); DV.exe.execute(Ext.get(this).favoriteId);'); + } + }; + + Ext.defer(fn, 100); + + return '
' + value + '
'; + } + }, + { + xtype: 'actioncolumn', + sortable: false, + width: 80, + items: [ + { + iconCls: 'dv-grid-row-icon-edit', + getClass: function(value, metaData, record) { + if (DV.init.user.isAdmin) { + return 'tooltip-favorite-edit'; + } + }, + handler: function(grid, rowIndex, colIndex, col, event) { + var record = this.up('grid').store.getAt(rowIndex), + id = record.data.id; + + if (DV.init.user.isAdmin) { + nameWindow = new NameWindow(id); + nameWindow.show(); + } + } + }, + { + iconCls: 'dv-grid-row-icon-overwrite', + getClass: function(value, metaData, record) { + if (DV.init.user.isAdmin) { + return 'tooltip-favorite-overwrite'; + } + }, + handler: function(grid, rowIndex, colIndex, col, event) { + var record = this.up('grid').store.getAt(rowIndex), + id = record.data.id, + name = record.data.name, + message = 'Overwrite favorite?\n\n' + name, + favorite = getBody(); + + if (favorite) { + favorite.name = name; + + if (confirm(message)) { + Ext.Ajax.request({ + url: DV.init.contextPath + '/api/charts/' + id, + method: 'PUT', + headers: {'Content-Type': 'application/json'}, + params: Ext.encode(favorite), + success: function() { + //pt.favorite = favorite; + + //pt.viewport.interpretationButton.enable(); + + DV.store.favorite.loadStore(); + } + }); + } + } + else { + alert('Please create a table first'); //i18n + } + } + }, + { + iconCls: 'dv-grid-row-icon-sharing', + getClass: function() { + return 'tooltip-favorite-sharing'; + }, + handler: function(grid, rowIndex) { + var record = this.up('grid').store.getAt(rowIndex), + id = record.data.id, + window; + + Ext.Ajax.request({ + url: DV.init.contextPath + '/api/sharing?type=chart&id=' + id, + method: 'GET', + failure: function(r) { + DV.util.mask.hideMask(); + alert(r.responseText); + }, + success: function(r) { + var sharing = Ext.decode(r.responseText); + window = DV.app.SharingWindow(sharing); + window.show(); + } + }); + } + }, + { + iconCls: 'dv-grid-row-icon-delete', + getClass: function(value, metaData, record) { + if (DV.init.user.isAdmin) { + return 'tooltip-favorite-delete'; + } + }, + handler: function(grid, rowIndex, colIndex, col, event) { + var record = this.up('grid').store.getAt(rowIndex), + id = record.data.id, + name = record.data.name, + message = 'Delete favorite?\n\n' + name; + + if (confirm(message)) { + Ext.Ajax.request({ + url: DV.init.contextPath + '/api/charts/' + id, + method: 'DELETE', + success: function() { + DV.store.favorite.loadStore(); + } + }); + } + } + } + ], + renderer: function(value, metaData, record) { + if (!DV.init.user.isAdmin && !record.data.user) { + metaData.tdCls = 'dv-grid-row-icon-disabled'; + } + } + }, + { + sortable: false, + width: 6 + } + ], + store: DV.store.favorite, + bbar: [ + info, + '->', + prevButton, + nextButton + ], + listeners: { + added: function() { + DV.viewport.favoriteGrid = this; + }, + render: function() { + var size = Math.floor((DV.viewport.centerRegion.getHeight() - 155) / DV.conf.layout.grid_row_height); + this.store.pageSize = size; + this.store.page = 1; + this.store.loadStore(); + + DV.store.favorite.on('load', function() { + if (this.isVisible()) { + this.fireEvent('afterrender'); + } + }, this); + }, + afterrender: function() { + var fn = function() { + var editArray = Ext.query('.tooltip-favorite-edit'), + overwriteArray = Ext.query('.tooltip-favorite-overwrite'), + //dashboardArray = Ext.query('.tooltip-favorite-dashboard'), + sharingArray = Ext.query('.tooltip-favorite-sharing'), + deleteArray = Ext.query('.tooltip-favorite-delete'), + el; + + for (var i = 0; i < editArray.length; i++) { + var el = editArray[i]; + Ext.create('Ext.tip.ToolTip', { + target: el, + html: 'Rename', //i18n + 'anchor': 'bottom', + anchorOffset: -14, + showDelay: 1000 + }); + } + + for (var i = 0; i < overwriteArray.length; i++) { + el = overwriteArray[i]; + Ext.create('Ext.tip.ToolTip', { + target: el, + html: 'Overwrite', //i18n + 'anchor': 'bottom', + anchorOffset: -14, + showDelay: 1000 + }); + } + + for (var i = 0; i < sharingArray.length; i++) { + el = sharingArray[i]; + Ext.create('Ext.tip.ToolTip', { + target: el, + html: 'Share with other people', //i18n + 'anchor': 'bottom', + anchorOffset: -14, + showDelay: 1000 + }); + } + + for (var i = 0; i < deleteArray.length; i++) { + el = deleteArray[i]; + Ext.create('Ext.tip.ToolTip', { + target: el, + html: 'Delete', //i18n + 'anchor': 'bottom', + anchorOffset: -14, + showDelay: 1000 + }); + } + }; + + Ext.defer(fn, 100); + }, + itemmouseenter: function(grid, record, item) { + this.currentItem = Ext.get(item); + this.currentItem.removeCls('x-grid-row-over'); + }, + select: function() { + this.currentItem.removeCls('x-grid-row-selected'); + }, + selectionchange: function() { + this.currentItem.removeCls('x-grid-row-focused'); + } + } + }); + + favoriteWindow = Ext.create('Ext.window.Window', { + title: 'Manage favorites', + //iconCls: 'dv-window-title-icon-favorite', + bodyStyle: 'padding:5px; background-color:#fff', + resizable: false, + modal: true, + width: windowWidth, + destroyOnBlur: true, + items: [ + { + xtype: 'panel', + layout: 'hbox', + bodyStyle: 'border:0 none', + items: [ + addButton, + { + height: 24, + width: 1, + style: 'width:1px; margin-left:5px; margin-right:5px; margin-top:1px', + bodyStyle: 'border-left: 1px solid #aaa' + }, + searchTextfield + ] + }, + grid + ], + listeners: { + show: function(w) { + DV.util.window.setAnchorPosition(w, DV.cmp.toolbar.favorite); + + //if (!w.hasDestroyOnBlurHandler) { + //pt.util.window.addDestroyOnBlurHandler(w); + //} + } + } + }); + + return favoriteWindow; + }; + + DV.app.SharingWindow = function(sharing) { + + // Objects + var UserGroupRow, + + // Functions + getBody, + + // Components + userGroupStore, + userGroupField, + userGroupButton, + userGroupRowContainer, + publicGroup, + window; + + UserGroupRow = function(obj, isPublicAccess, disallowPublicAccess) { + var getData, + store, + getItems, + combo, + getAccess, + panel; + + getData = function() { + var data = [ + {id: 'r-------', name: 'Can view'}, //i18n + {id: 'rw------', name: 'Can edit and view'} + ]; + + if (isPublicAccess) { + data.unshift({id: '-------', name: 'None'}); + } + + return data; + } + + store = Ext.create('Ext.data.Store', { + fields: ['id', 'name'], + data: getData() + }); + + getItems = function() { + var items = []; + + combo = Ext.create('Ext.form.field.ComboBox', { + fieldLabel: isPublicAccess ? 'Public access' : obj.name, //i18n + labelStyle: 'color:#333', + cls: 'pt-combo', + width: 380, + labelWidth: 250, + queryMode: 'local', + valueField: 'id', + displayField: 'name', + labelSeparator: null, + editable: false, + disabled: !!disallowPublicAccess, + value: obj.access, + store: store + }); + + items.push(combo); + + if (!isPublicAccess) { + items.push(Ext.create('Ext.Img', { + src: 'images/grid-delete_16.png', + style: 'margin-top:2px; margin-left:7px', + overCls: 'pointer', + width: 16, + height: 16, + listeners: { + render: function(i) { + i.getEl().on('click', function(e) { + i.up('panel').destroy(); + window.doLayout(); + }); + } + } + })); + } + + return items; + }; + + getAccess = function() { + return { + id: obj.id, + name: obj.name, + access: combo.getValue() + }; + }; + + panel = Ext.create('Ext.panel.Panel', { + layout: 'column', + bodyStyle: 'border:0 none', + getAccess: getAccess, + items: getItems() + }); + + return panel; + }; + + getBody = function() { + var body = { + object: { + id: sharing.object.id, + name: sharing.object.name, + publicAccess: publicGroup.down('combobox').getValue(), + user: { + id: DV.init.user.id, + name: DV.init.user.name + } + } + }; + + if (userGroupRowContainer.items.items.length > 1) { + body.object.userGroupAccesses = []; + for (var i = 1, item; i < userGroupRowContainer.items.items.length; i++) { + item = userGroupRowContainer.items.items[i]; + body.object.userGroupAccesses.push(item.getAccess()); + } + } + + return body; + }; + + // Initialize + userGroupStore = Ext.create('Ext.data.Store', { + fields: ['id', 'name'], + proxy: { + type: 'ajax', + url: DV.init.contextPath + '/api/sharing/search', + reader: { + type: 'json', + root: 'userGroups' + } + } + }); + + userGroupField = Ext.create('Ext.form.field.ComboBox', { + valueField: 'id', + displayField: 'name', + emptyText: 'Search for user groups', //i18n + queryParam: 'key', + queryDelay: 200, + minChars: 1, + hideTrigger: true, + fieldStyle: 'height:26px; padding-left:6px; border-radius:1px; font-size:11px', + style: 'margin-bottom:5px', + width: 380, + store: userGroupStore, + listeners: { + beforeselect: function(cb) { // beforeselect instead of select, fires regardless of currently selected item + userGroupButton.enable(); + }, + afterrender: function(cb) { + cb.inputEl.on('keyup', function() { + userGroupButton.disable(); + }); + } + } + }); + + userGroupButton = Ext.create('Ext.button.Button', { + text: '+', + style: 'margin-left:2px; padding-right:4px; padding-left:4px; border-radius:1px', + disabled: true, + height: 26, + handler: function(b) { + userGroupRowContainer.add(UserGroupRow({ + id: userGroupField.getValue(), + name: userGroupField.getRawValue(), + access: 'r-------' + })); + + userGroupField.clearValue(); + b.disable(); + } + }); + + userGroupRowContainer = Ext.create('Ext.container.Container', { + bodyStyle: 'border:0 none' + }); + + publicGroup = userGroupRowContainer.add(UserGroupRow({ + id: sharing.object.id, + name: sharing.object.name, + access: sharing.object.publicAccess + }, true, !sharing.meta.allowPublicAccess)); + + if (Ext.isArray(sharing.object.userGroupAccesses)) { + for (var i = 0, userGroupRow; i < sharing.object.userGroupAccesses.length; i++) { + userGroupRow = UserGroupRow(sharing.object.userGroupAccesses[i]); + userGroupRowContainer.add(userGroupRow); + } + } + + window = Ext.create('Ext.window.Window', { + title: 'Sharing layout', + bodyStyle: 'padding:8px 8px 3px; background-color:#fff', + width: 434, + resizable: false, + modal: true, + destroyOnBlur: true, + items: [ + { + html: sharing.object.name, + bodyStyle: 'border:0 none; font-weight:bold; color:#333', + style: 'margin-bottom:8px' + }, + { + xtype: 'container', + layout: 'column', + bodyStyle: 'border:0 none', + items: [ + userGroupField, + userGroupButton + ] + }, + userGroupRowContainer + ], + bbar: [ + '->', + { + text: 'Save', + handler: function() { + Ext.Ajax.request({ + url: DV.init.contextPath + '/api/sharing?type=chart&id=' + sharing.object.id, + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + params: Ext.encode(getBody()) + }); + + window.destroy(); + } + } + ], + listeners: { + show: function(w) { + var pos = DV.cmp.favorite.window.getPosition(); + w.setPosition(pos[0] + 5, pos[1] + 5); + + //if (!w.hasDestroyOnBlurHandler) { + //pt.util.window.addDestroyOnBlurHandler(w); + //} + + //pt.viewport.favoriteWindow.destroyOnBlur = false; + }, + destroy: function() { + //pt.viewport.favoriteWindow.destroyOnBlur = true; + } + } + }); + + return window; + }; + DV.viewport = Ext.create('Ext.container.Viewport', { layout: 'border', items: [ @@ -3198,220 +4141,7 @@ } }, { - title: '
' + DV.i18n.relative_periods + '
', - hideCollapseTool: true, - autoScroll: true, - items: [ - { - xtype: 'panel', - layout: 'column', - bodyStyle: 'border-style:none', - items: [ - { - xtype: 'panel', - layout: 'anchor', - bodyStyle: 'border-style:none; padding:2px 0 0 10px', - defaults: { - labelSeparator: '', - style: 'margin-bottom:2px', - listeners: { - added: function(chb) { - if (chb.xtype === 'checkbox') { - DV.cmp.dimension.relativeperiod.checkbox.push(chb); - } - }, - change: function() { - DV.cmp.dimension.relativeperiod.rewind.xable(); - } - } - }, - items: [ - { - xtype: 'label', - text: DV.i18n.months, - cls: 'dv-label-period-heading' - }, - { - xtype: 'checkbox', - paramName: 'reportingMonth', - boxLabel: DV.i18n.last_month - }, - { - xtype: 'checkbox', - paramName: 'last3Months', - boxLabel: DV.i18n.last_3_months - }, - { - xtype: 'checkbox', - paramName: 'last12Months', - boxLabel: DV.i18n.last_12_months, - checked: true - } - ] - }, - { - xtype: 'panel', - layout: 'anchor', - bodyStyle: 'border-style:none; padding:2px 0 0 32px', - defaults: { - labelSeparator: '', - style: 'margin-bottom:2px', - listeners: { - added: function(chb) { - if (chb.xtype === 'checkbox') { - DV.cmp.dimension.relativeperiod.checkbox.push(chb); - } - }, - change: function() { - DV.cmp.dimension.relativeperiod.rewind.xable(); - } - } - }, - items: [ - { - xtype: 'label', - text: DV.i18n.quarters, - cls: 'dv-label-period-heading' - }, - { - xtype: 'checkbox', - paramName: 'reportingQuarter', - boxLabel: DV.i18n.last_quarter - }, - { - xtype: 'checkbox', - paramName: 'last4Quarters', - boxLabel: DV.i18n.last_4_quarters - } - ] - }, - { - xtype: 'panel', - layout: 'anchor', - bodyStyle: 'border-style:none; padding:2px 0 0 32px', - defaults: { - labelSeparator: '', - style: 'margin-bottom:2px', - listeners: { - added: function(chb) { - if (chb.xtype === 'checkbox') { - DV.cmp.dimension.relativeperiod.checkbox.push(chb); - } - }, - change: function() { - DV.cmp.dimension.relativeperiod.rewind.xable(); - } - } - }, - items: [ - { - xtype: 'label', - text: DV.i18n.six_months, - cls: 'dv-label-period-heading' - }, - { - xtype: 'checkbox', - paramName: 'lastSixMonth', - boxLabel: DV.i18n.last_six_month - }, - { - xtype: 'checkbox', - paramName: 'last2SixMonths', - boxLabel: DV.i18n.last_two_six_month - } - ] - } - ] - }, - { - xtype: 'panel', - layout: 'column', - bodyStyle: 'border-style:none', - items: [ - { - xtype: 'panel', - layout: 'anchor', - bodyStyle: 'border-style:none; padding:5px 0 0 10px', - defaults: { - labelSeparator: '', - style: 'margin-bottom:2px', - listeners: { - added: function(chb) { - if (chb.xtype === 'checkbox') { - DV.cmp.dimension.relativeperiod.checkbox.push(chb); - } - }, - change: function() { - DV.cmp.dimension.relativeperiod.rewind.xable(); - } - } - }, - items: [ - { - xtype: 'label', - text: DV.i18n.years, - cls: 'dv-label-period-heading' - }, - { - xtype: 'checkbox', - paramName: 'thisYear', - boxLabel: DV.i18n.this_year - }, - { - xtype: 'checkbox', - paramName: 'lastYear', - boxLabel: DV.i18n.last_year - }, - { - xtype: 'checkbox', - paramName: 'last5Years', - boxLabel: DV.i18n.last_5_years - } - ] - }, - { - xtype: 'panel', - layout: 'anchor', - bodyStyle: 'border-style:none; padding:5px 0 0 46px', - defaults: { - labelSeparator: '', - style: 'margin-bottom:2px', - }, - items: [ - { - xtype: 'label', - text: 'Options', - cls: 'dv-label-period-heading-options' - }, - { - xtype: 'checkbox', - paramName: 'rewind', - boxLabel: 'Rewind one period', - xable: function() { - this.setDisabled(DV.util.checkbox.isAllFalse()); - }, - listeners: { - added: function() { - DV.cmp.dimension.relativeperiod.rewind = this; - } - } - } - ] - } - ] - } - ], - listeners: { - added: function() { - DV.cmp.dimension.relativeperiod.panel = this; - }, - expand: function() { - DV.util.dimension.panel.setHeight(DV.conf.layout.west_maxheight_accordion_relativeperiod); - } - } - }, - { - title: '
' + DV.i18n.fixed_periods + '
', + title: '
' + DV.i18n.periods + '
', hideCollapseTool: true, items: [ { @@ -3429,6 +4159,7 @@ displayField: 'name', fieldLabel: DV.i18n.select_type, labelStyle: 'padding-left:8px;', + labelWidth: 110, editable: false, queryMode: 'remote', store: DV.store.periodtype, @@ -3483,13 +4214,14 @@ xtype: 'panel', layout: 'column', - bodyStyle: 'border-style:none', + bodyStyle: 'border-style:none; padding-bottom:4px', items: [ { xtype: 'multiselect', name: 'availableFixedPeriods', cls: 'dv-toolbar-multiselect-left', width: (DV.conf.layout.west_fieldset_width - DV.conf.layout.west_width_padding) / 2, + height: 180, valueField: 'id', displayField: 'name', store: DV.store.fixedperiod.available, @@ -3534,10 +4266,10 @@ name: 'selectedFixedPeriods', cls: 'dv-toolbar-multiselect-right', width: (DV.conf.layout.west_fieldset_width - DV.conf.layout.west_width_padding) / 2, + height: 180, displayField: 'name', valueField: 'id', - ddReorder: false, - queryMode: 'local', + ddReorder: true, store: DV.store.fixedperiod.selected, tbar: [ ' ', @@ -3576,19 +4308,260 @@ } } ] + }, + { + xtype: 'container', + layout: 'column', + bodyStyle: 'border-style:none', + items: [ + { + xtype: 'panel', + columnWidth: 0.35, + bodyStyle: 'border-style:none; padding:0 0 0 8px', + defaults: { + labelSeparator: '', + style: 'margin-bottom:2px', + listeners: { + added: function(chb) { + if (chb.xtype === 'checkbox') { + DV.cmp.dimension.relativeperiod.checkbox.push(chb); + } + }, + change: function() { + DV.cmp.dimension.relativeperiod.rewind.xable(); + } + } + }, + items: [ + { + xtype: 'label', + text: 'Weeks', //i18n pt.i18n.months, + cls: 'dv-label-period-heading' + }, + { + xtype: 'checkbox', + relativePeriodId: 'LAST_WEEK', + boxLabel: 'Last week', //i18n pt.i18n.last_month + }, + { + xtype: 'checkbox', + relativePeriodId: 'LAST_4_WEEKS', + boxLabel: 'Last 4 weeks', //i18n pt.i18n.last_3_months + }, + { + xtype: 'checkbox', + relativePeriodId: 'LAST_12_WEEKS', + boxLabel: 'Last 12 weeks' //i18n pt.i18n.last_12_months, + } + ] + }, + { + xtype: 'panel', + columnWidth: 0.32, + bodyStyle: 'border-style:none', + defaults: { + labelSeparator: '', + style: 'margin-bottom:2px', + listeners: { + added: function(chb) { + if (chb.xtype === 'checkbox') { + DV.cmp.dimension.relativeperiod.checkbox.push(chb); + } + }, + change: function() { + DV.cmp.dimension.relativeperiod.rewind.xable(); + } + } + }, + items: [ + { + xtype: 'label', + text: DV.i18n.months, + cls: 'dv-label-period-heading' + }, + { + xtype: 'checkbox', + relativePeriodId: 'LAST_MONTH', + boxLabel: DV.i18n.last_month + }, + { + xtype: 'checkbox', + relativePeriodId: 'LAST_3_MONTHS', + boxLabel: DV.i18n.last_3_months + }, + { + xtype: 'checkbox', + relativePeriodId: 'LAST_12_MONTHS', + boxLabel: DV.i18n.last_12_months, + checked: true + } + ] + }, + { + xtype: 'panel', + columnWidth: 0.33, + bodyStyle: 'border-style:none', + defaults: { + labelSeparator: '', + style: 'margin-bottom:2px', + listeners: { + added: function(chb) { + if (chb.xtype === 'checkbox') { + DV.cmp.dimension.relativeperiod.checkbox.push(chb); + } + }, + change: function() { + DV.cmp.dimension.relativeperiod.rewind.xable(); + } + } + }, + items: [ + { + xtype: 'label', + text: DV.i18n.quarters, + cls: 'dv-label-period-heading' + }, + { + xtype: 'checkbox', + relativePeriodId: 'LAST_QUARTER', + boxLabel: DV.i18n.last_quarter + }, + { + xtype: 'checkbox', + relativePeriodId: 'LAST_4_QUARTERS', + boxLabel: DV.i18n.last_4_quarters + } + ] + } + ] + }, + { + xtype: 'container', + layout: 'column', + bodyStyle: 'border-style:none', + items: [ + { + xtype: 'panel', + columnWidth: 0.35, + bodyStyle: 'border-style:none; padding:5px 0 0 10px', + defaults: { + labelSeparator: '', + style: 'margin-bottom:2px', + listeners: { + added: function(chb) { + if (chb.xtype === 'checkbox') { + DV.cmp.dimension.relativeperiod.checkbox.push(chb); + } + }, + change: function() { + DV.cmp.dimension.relativeperiod.rewind.xable(); + } + } + }, + items: [ + { + xtype: 'label', + text: DV.i18n.six_months, + cls: 'dv-label-period-heading' + }, + { + xtype: 'checkbox', + relativePeriodId: 'LAST_SIX_MONTH', + boxLabel: DV.i18n.last_six_month + }, + { + xtype: 'checkbox', + relativePeriodId: 'LAST_2_SIXMONTHS', + boxLabel: DV.i18n.last_two_six_month + } + ] + }, + { + xtype: 'panel', + columnWidth: 0.32, + bodyStyle: 'border-style:none; padding:5px 0 0', + defaults: { + labelSeparator: '', + style: 'margin-bottom:2px', + listeners: { + added: function(chb) { + if (chb.xtype === 'checkbox') { + DV.cmp.dimension.relativeperiod.checkbox.push(chb); + } + }, + change: function() { + DV.cmp.dimension.relativeperiod.rewind.xable(); + } + } + }, + items: [ + { + xtype: 'label', + text: DV.i18n.years, + cls: 'dv-label-period-heading' + }, + { + xtype: 'checkbox', + relativePeriodId: 'THIS_YEAR', + boxLabel: DV.i18n.this_year + }, + { + xtype: 'checkbox', + relativePeriodId: 'LAST_YEAR', + boxLabel: DV.i18n.last_year + }, + { + xtype: 'checkbox', + relativePeriodId: 'LAST_5_YEARS', + boxLabel: DV.i18n.last_5_years + } + ] + }, + { + xtype: 'panel', + columnWidth: 0.33, + bodyStyle: 'border-style:none; padding:5px 0 0', + defaults: { + labelSeparator: '', + style: 'margin-bottom:2px', + }, + items: [ + { + xtype: 'label', + text: 'Options', + cls: 'dv-label-period-heading-options' + }, + { + xtype: 'checkbox', + paramName: 'rewind', + boxLabel: 'Rewind one period', + xable: function() { + this.setDisabled(DV.util.checkbox.isAllFalse()); + }, + listeners: { + added: function() { + DV.cmp.dimension.relativeperiod.rewind = this; + } + } + } + ] + } + ] } ], listeners: { added: function() { - DV.cmp.dimension.fixedperiod.panel = this; + DV.cmp.dimension.period.panel = this; }, expand: function() { - DV.util.dimension.panel.setHeight(DV.conf.layout.west_maxheight_accordion_fixedperiod); + DV.util.dimension.panel.setHeight(DV.conf.layout.west_maxheight_accordion_period); DV.util.multiselect.setHeight( [DV.cmp.dimension.fixedperiod.available, DV.cmp.dimension.fixedperiod.selected], - DV.cmp.dimension.fixedperiod.panel, - DV.conf.layout.west_fill_accordion_fixedperiod + DV.cmp.dimension.period.panel, + DV.conf.layout.west_fill_accordion_period ); + + this.doLayout(); } } }, @@ -3608,7 +4581,7 @@ boxLabel: DV.i18n.user_orgunit, labelWidth: DV.conf.layout.form_label_width, handler: function(chb, checked) { - DV.cmp.dimension.organisationunit.toolbar.xable(checked, DV.cmp.favorite.userorganisationunitchildren.getValue()); + //DV.cmp.dimension.organisationunit.toolbar.xable(checked, DV.cmp.favorite.userorganisationunitchildren.getValue()); DV.cmp.dimension.organisationunit.treepanel.xable(checked, DV.cmp.favorite.userorganisationunitchildren.getValue()); }, listeners: { @@ -3623,7 +4596,7 @@ boxLabel: DV.i18n.user_orgunit_children, labelWidth: DV.conf.layout.form_label_width, handler: function(chb, checked) { - DV.cmp.dimension.organisationunit.toolbar.xable(checked, DV.cmp.favorite.userorganisationunit.getValue()); + //DV.cmp.dimension.organisationunit.toolbar.xable(checked, DV.cmp.favorite.userorganisationunit.getValue()); DV.cmp.dimension.organisationunit.treepanel.xable(checked, DV.cmp.favorite.userorganisationunit.getValue()); }, listeners: { @@ -3634,94 +4607,95 @@ } ] }, - { - id: 'organisationunit_t', - xtype: 'toolbar', - style: 'margin-bottom: 5px', - width: DV.conf.layout.west_fieldset_width - 4, - xable: function(checked, value) { - if (checked || value) { - this.disable(); - } - else { - this.enable(); - } - }, - defaults: { - height: 24 - }, - items: [ - { - xtype: 'label', - text: 'Auto-select organisation units by', - style: 'padding-left:8px; color:#666; line-height:24px' - }, - '->', - { - text: 'Group..', - handler: function() {}, - listeners: { - added: function() { - this.menu = Ext.create('Ext.menu.Menu', { - shadow: false, - showSeparator: false, - width: DV.conf.layout.treepanel_toolbar_menu_width_group, - items: [ - { - xtype: 'grid', - cls: 'dv-menugrid', - width: DV.conf.layout.treepanel_toolbar_menu_width_group, - scroll: 'vertical', - columns: [ - { - dataIndex: 'name', - width: DV.conf.layout.treepanel_toolbar_menu_width_group, - style: 'display:none' - } - ], - setHeightInMenu: function(store) { - var h = store.getCount() * 24, - sh = DV.util.viewport.getSize().y * 0.6; - this.setHeight(h > sh ? sh : h); - this.doLayout(); - this.up('menu').doLayout(); - }, - store: DV.store.group, - listeners: { - itemclick: function(g, r) { - g.getSelectionModel().select([], false); - this.up('menu').hide(); - DV.cmp.dimension.organisationunit.treepanel.selectByGroup(r.data.id); - } - } - } - ], - listeners: { - show: function() { - if (!DV.store.group.isloaded) { - DV.store.group.load({scope: this, callback: function() { - this.down('grid').setHeightInMenu(DV.store.group); - }}); - } - else { - this.down('grid').setHeightInMenu(DV.store.group); - } - } - } - }); - } - } - } - ], - listeners: { - added: function() { - DV.cmp.dimension.organisationunit.toolbar = this; - } - } - }, + //{ + //id: 'organisationunit_t', + //xtype: 'toolbar', + //style: 'margin-bottom: 5px', + //width: DV.conf.layout.west_fieldset_width - 4, + //xable: function(checked, value) { + //if (checked || value) { + //this.disable(); + //} + //else { + //this.enable(); + //} + //}, + //defaults: { + //height: 24 + //}, + //items: [ + //{ + //xtype: 'label', + //text: 'Auto-select organisation units by', + //style: 'padding-left:8px; color:#666; line-height:24px' + //}, + //'->', + //{ + //text: 'Group..', + //handler: function() {}, + //listeners: { + //added: function() { + //this.menu = Ext.create('Ext.menu.Menu', { + //shadow: false, + //showSeparator: false, + //width: DV.conf.layout.treepanel_toolbar_menu_width_group, + //items: [ + //{ + //xtype: 'grid', + //cls: 'dv-menugrid', + //width: DV.conf.layout.treepanel_toolbar_menu_width_group, + //scroll: 'vertical', + //columns: [ + //{ + //dataIndex: 'name', + //width: DV.conf.layout.treepanel_toolbar_menu_width_group, + //style: 'display:none' + //} + //], + //setHeightInMenu: function(store) { + //var h = store.getCount() * 24, + //sh = DV.util.viewport.getSize().y * 0.6; + //this.setHeight(h > sh ? sh : h); + //this.doLayout(); + //this.up('menu').doLayout(); + //}, + //store: DV.store.group, + //listeners: { + //itemclick: function(g, r) { + //g.getSelectionModel().select([], false); + //this.up('menu').hide(); + //DV.cmp.dimension.organisationunit.treepanel.selectByGroup(r.data.id); + //} + //} + //} + //], + //listeners: { + //show: function() { + //if (!DV.store.group.isloaded) { + //DV.store.group.load({scope: this, callback: function() { + //this.down('grid').setHeightInMenu(DV.store.group); + //}}); + //} + //else { + //this.down('grid').setHeightInMenu(DV.store.group); + //} + //} + //} + //}); + //} + //} + //} + //], + //listeners: { + //added: function() { + //DV.cmp.dimension.organisationunit.toolbar = this; + //} + //} + //}, { xtype: 'treepanel', cls: 'dv-tree', + style: 'border-top: 1px solid #ddd; padding-top: 1px', width: DV.conf.layout.west_fieldset_width - DV.conf.layout.west_width_padding, rootVisible: false, autoScroll: true, @@ -4166,7 +5140,6 @@ }, items: [ { - xtype: 'button', name: 'resizewest', text: '<<<', handler: function() { @@ -4185,7 +5158,6 @@ } }, { - xtype: 'button', text: '' + DV.i18n.update + '', handler: function() { DV.c.currentFavorite = null; @@ -4193,582 +5165,22 @@ } }, { - xtype: 'button', text: DV.i18n.favorites, menu: {}, - listeners: { - afterrender: function(b) { - this.menu = Ext.create('Ext.menu.Menu', { - shadow: false, - showSeparator: false, - items: [ - { - text: DV.i18n.manage_favorites, - iconCls: 'dv-menu-item-edit', - handler: function() { - DV.store.favorite.filtersystem(); - if (DV.cmp.favorite.window) { - DV.cmp.favorite.window.show(); - } - else { - DV.cmp.favorite.window = Ext.create('Ext.window.Window', { - title: DV.i18n.manage_favorites, - iconCls: 'dv-window-title-favorite', - bodyStyle: 'padding:8px; background-color:#fff', - width: DV.conf.layout.grid_favorite_width, - closeAction: 'hide', - resizable: false, - modal: true, - resetForm: function() { - DV.cmp.favorite.name.setValue(''); - DV.cmp.favorite.system.setValue(false); - }, - items: [ - { - xtype: 'form', - bodyStyle: 'border-style:none', - items: [ - { - xtype: 'textfield', - cls: 'dv-textfield', - fieldLabel: DV.i18n.name, - maxLength: 160, - enforceMaxLength: true, - labelWidth: DV.conf.layout.form_label_width, - width: DV.conf.layout.grid_favorite_width - 28, - listeners: { - added: function() { - DV.cmp.favorite.name = this; - }, - change: function() { - DV.cmp.favorite.system.check(); - DV.cmp.favorite.save.xable(); - } - } - }, - { - xtype: 'checkbox', - cls: 'dv-checkbox', - style: 'padding-bottom:2px', - fieldLabel: DV.i18n.system, - labelWidth: DV.conf.layout.form_label_width, - disabled: !DV.init.user.isadmin, - check: function() { - if (!DV.init.user.isadmin) { - if (DV.store.favorite.findExact('name', DV.cmp.favorite.name.getValue()) === -1) { - this.setValue(false); - } - } - }, - listeners: { - added: function() { - DV.cmp.favorite.system = this; - } - } - } - ] - }, - { - xtype: 'grid', - width: DV.conf.layout.grid_favorite_width - 28, - scroll: 'vertical', - multiSelect: true, - columns: [ - { - dataIndex: 'name', - width: DV.conf.layout.grid_favorite_width - 139, - style: 'display:none' - }, - { - dataIndex: 'lastUpdated', - width: 111, - style: 'display:none' - } - ], - setHeightInWindow: function(store) { - var h = (store.getCount() * 23) + 30, - sh = DV.util.viewport.getSize().y * 0.6; - this.setHeight(h > sh ? sh : h); - this.doLayout(); - this.up('window').doLayout(); - }, - store: DV.store.favorite, - tbar: { - id: 'favorite_t', - defaults: { - height: 24 - }, - items: [ - { - text: DV.i18n.sort_by + '..', - cls: 'dv-toolbar-btn-2', - listeners: { - added: function() { - DV.cmp.favorite.sortby = this; - }, - afterrender: function(b) { - this.addCls('dv-menu-togglegroup'); - this.menu = Ext.create('Ext.menu.Menu', { - margin: '-1 0 0 -1', - shadow: false, - showSeparator: false, - width: 109, - height: 67, - items: [ - { - xtype: 'radiogroup', - cls: 'dv-radiogroup', - columns: 1, - vertical: true, - items: [ - { - boxLabel: DV.i18n.name, - name: 'sortby', - handler: function() { - if (this.getValue()) { - var store = DV.store.favorite; - store.sorting.field = 'name'; - store.sorting.direction = 'ASC'; - store.sortStore(); - this.up('menu').hide(); - } - } - }, - { - boxLabel: DV.i18n.system, - name: 'sortby', - handler: function() { - if (this.getValue()) { - var store = DV.store.favorite; - store.sorting.field = 'userId'; - store.sorting.direction = 'ASC'; - store.sortStore(); - this.up('menu').hide(); - } - } - }, - { - boxLabel: DV.i18n.last_updated, - name: 'sortby', - checked: true, - handler: function() { - if (this.getValue()) { - var store = DV.store.favorite; - store.sorting.field = 'lastUpdated'; - store.sorting.direction = 'DESC'; - store.sortStore(); - this.up('menu').hide(); - } - } - } - ] - } - ] - }); - } - } - }, - '->', - { - text: DV.i18n.rename + '..', - cls: 'dv-toolbar-btn-2', - disabled: true, - xable: function() { - if (DV.cmp.favorite.grid.getSelectionModel().getSelection().length == 1) { - DV.cmp.favorite.rename.button.enable(); - } - else { - DV.cmp.favorite.rename.button.disable(); - } - }, - handler: function() { - var selected = DV.cmp.favorite.grid.getSelectionModel().getSelection()[0]; - var w = Ext.create('Ext.window.Window', { - title: DV.i18n.rename_favorite, - layout: 'fit', - width: DV.conf.layout.window_confirm_width, - bodyStyle: 'padding:10px 5px; background-color:#fff; text-align:center', - modal: true, - cmp: {}, - items: [ - { - xtype: 'textfield', - cls: 'dv-textfield', - maxLength: 160, - enforceMaxLength: true, - value: selected.data.name, - listeners: { - added: function() { - this.up('window').cmp.name = this; - }, - change: function() { - this.up('window').cmp.rename.xable(); - } - } - } - ], - bbar: { - cls: 'dv-toolbar-bbar', - defaults: { - height: 22 - }, - items: [ - { - xtype: 'label', - style: 'padding-left:2px; line-height:22px; font-size:10px; color:#666; width:50%', - listeners: { - added: function() { - DV.cmp.favorite.rename.label = this; - } - } - }, - '->', - { - text: DV.i18n.cancel, - handler: function() { - this.up('window').close(); - } - }, - { - text: DV.i18n.rename, - disabled: true, - xable: function() { - var value = this.up('window').cmp.name.getValue(); - if (value) { - if (DV.store.favorite.findExact('name', value) == -1) { - this.enable(); - DV.cmp.favorite.rename.label.setText(''); - return; - } - else { - DV.cmp.favorite.rename.label.setText(DV.i18n.name_already_in_use); - } - } - this.disable(); - }, - handler: function() { - DV.util.crud.favorite.updateName(this.up('window').cmp.name.getValue()); - }, - listeners: { - afterrender: function() { - this.up('window').cmp.rename = this; - }, - change: function() { - this.xable(); - } - } - } - ] - }, - listeners: { - afterrender: function() { - DV.cmp.favorite.rename.window = this; - } - } - }); - w.setPosition((screen.width/2)-(DV.conf.layout.window_confirm_width/2), DV.conf.layout.window_favorite_ypos + 100, true); - w.show(); - }, - listeners: { - added: function() { - DV.cmp.favorite.rename.button = this; - } - } - }, - { - text: DV.i18n.delete_object + '..', - cls: 'dv-toolbar-btn-2', - disabled: true, - xable: function() { - if (DV.cmp.favorite.grid.getSelectionModel().getSelection().length) { - DV.cmp.favorite.del.enable(); - } - else { - DV.cmp.favorite.del.disable(); - } - }, - handler: function() { - var sel = DV.cmp.favorite.grid.getSelectionModel().getSelection(); - if (sel.length) { - var str = ''; - for (var i = 0; i < sel.length; i++) { - var out = sel[i].data.name.length > 35 ? (sel[i].data.name.substr(0,35) + '...') : sel[i].data.name; - str += '
' + out; - } - var w = Ext.create('Ext.window.Window', { - title: DV.i18n.delete_favorite, - width: DV.conf.layout.window_confirm_width, - bodyStyle: 'padding:10px 5px; background-color:#fff; text-align:center', - modal: true, - items: [ - { - html: DV.i18n.are_you_sure, - bodyStyle: 'border-style:none' - }, - { - html: str, - cls: 'dv-window-confirm-list' - } - ], - bbar: { - cls: 'dv-toolbar-bbar', - defaults: { - height: 22 - }, - items: [ - { - text: DV.i18n.cancel, - handler: function() { - this.up('window').close(); - } - }, - '->', - { - text: DV.i18n.delete_object, - handler: function() { - this.up('window').close(); - DV.util.crud.favorite.del(function() { - DV.cmp.favorite.name.setValue(''); - DV.cmp.favorite.window.down('grid').setHeightInWindow(DV.store.favorite); - }); - } - } - ] - } - }); - w.setPosition((screen.width/2)-(DV.conf.layout.window_confirm_width/2), DV.conf.layout.window_favorite_ypos + 100, true); - w.show(); - } - }, - listeners: { - added: function() { - DV.cmp.favorite.del = this; - } - } - } - ] - }, - listeners: { - added: function() { - DV.cmp.favorite.grid = this; - }, - itemclick: function(g, r) { - DV.cmp.favorite.name.setValue(r.data.name); - DV.cmp.favorite.system.setValue(r.data.userId ? false : true); - DV.cmp.favorite.rename.button.xable(); - DV.cmp.favorite.del.xable(); - }, - itemdblclick: function() { - if (DV.cmp.favorite.save.xable()) { - DV.cmp.favorite.save.handler(); - } - } - } - } - ], - bbar: { - cls: 'dv-toolbar-bbar', - defaults: { - height: 22 - }, - items: [ - { - xtype: 'label', - style: 'padding-left:6px; line-height:22px; font-size:10px; color:#666; width:70%', - listeners: { - added: function() { - DV.cmp.favorite.label = this; - } - } - }, - '->', - { - text: DV.i18n.save, - disabled: true, - xable: function() { - if (DV.c.rendered) { - if (DV.cmp.favorite.name.getValue()) { - var index = DV.store.favorite.findExact('name', DV.cmp.favorite.name.getValue()); - if (index != -1) { - if (DV.store.favorite.getAt(index).data.userId || DV.init.user.isadmin) { - this.enable(); - DV.cmp.favorite.label.setText(''); - return true; - } - else { - DV.cmp.favorite.label.setText(DV.i18n.system_favorite_overwrite_not_allowed); - } - } - else { - this.enable(); - DV.cmp.favorite.label.setText(''); - return true; - } - } - else { - DV.cmp.favorite.label.setText(''); - } - } - else { - if (DV.cmp.favorite.name.getValue()) { - DV.cmp.favorite.label.setText('* ' + DV.i18n.create_chart_before_saving); - } - else { - DV.cmp.favorite.label.setText(''); - } - } - this.disable(); - return false; - }, - handler: function() { - if (this.xable()) { - var value = DV.cmp.favorite.name.getValue(); - if (DV.store.favorite.findExact('name', value) != -1) { - var item = value.length > 40 ? (value.substr(0,40) + '...') : value; - var w = Ext.create('Ext.window.Window', { - title: DV.i18n.save_favorite, - width: DV.conf.layout.window_confirm_width, - bodyStyle: 'padding:10px 5px; background-color:#fff; text-align:center', - modal: true, - items: [ - { - html: DV.i18n.are_you_sure, - bodyStyle: 'border-style:none' - }, - { - html: '
' + item, - cls: 'dv-window-confirm-list' - } - ], - bbar: { - cls: 'dv-toolbar-bbar', - defaults: { - height: 22 - }, - items: [ - { - text: DV.i18n.cancel, - handler: function() { - this.up('window').close(); - } - }, - '->', - { - text: DV.i18n.overwrite, - handler: function() { - this.up('window').close(); - DV.util.crud.favorite.update(function() { - DV.cmp.favorite.window.resetForm(); - }); + handler: function() { + if (DV.cmp.favorite.window) { + DV.cmp.favorite.window.destroy(); + } - } - } - ] - } - }); - w.setPosition((screen.width/2)-(DV.conf.layout.window_confirm_width/2), DV.conf.layout.window_favorite_ypos + 100, true); - w.show(); - } - else { - DV.util.crud.favorite.create(function() { - DV.cmp.favorite.window.resetForm(); - DV.cmp.favorite.window.down('grid').setHeightInWindow(DV.store.favorite); - }); - } - } - }, - listeners: { - added: function() { - DV.cmp.favorite.save = this; - } - } - } - ] - }, - listeners: { - show: function() { - DV.cmp.favorite.save.xable(); - this.down('grid').setHeightInWindow(DV.store.favorite); - }, - hide: function() { - DV.store.favorite.clearFilter(); - } - } - }); - var w = DV.cmp.favorite.window; - w.setPosition((screen.width/2)-(DV.conf.layout.grid_favorite_width/2), DV.conf.layout.window_favorite_ypos, true); - w.show(); - } - }, - listeners: { - added: function() { - DV.cmp.toolbar.menuitem.datatable = this; - } - } - }, - { - xtype: 'menuseparator', - height: 1, - style: 'margin:1px 0; border-color:#dadada' - }, - { - xtype: 'grid', - cls: 'dv-menugrid', - width: 420, - scroll: 'vertical', - columns: [ - { - dataIndex: 'icon', - width: 25, - style: 'display:none' - }, - { - dataIndex: 'name', - width: 285, - style: 'display:none' - }, - { - dataIndex: 'lastUpdated', - width: 110, - style: 'display:none' - } - ], - setHeightInMenu: function(store) { - var h = store.getCount() * 23, - sh = DV.util.viewport.getSize().y * 0.6; - this.setHeight(h > sh ? sh : h); - this.doLayout(); - this.up('menu').doLayout(); - }, - store: DV.store.favorite, - listeners: { - itemclick: function(g, r) { - g.getSelectionModel().select([], false); - this.up('menu').hide(); - DV.exe.execute(r.data.id); - } - } - } - ], - listeners: { - afterrender: function() { - this.getEl().addCls('dv-toolbar-btn-menu'); - }, - show: function() { - if (!DV.store.favorite.isloaded) { - DV.store.favorite.load({scope: this, callback: function() { - this.down('grid').setHeightInMenu(DV.store.favorite); - }}); - } - else { - this.down('grid').setHeightInMenu(DV.store.favorite); - } - } - } - }); - } - } - }, + DV.cmp.favorite.window = DV.app.FavoriteWindow(); + DV.cmp.favorite.window.show(); + }, + listeners: { + added: function() { + DV.cmp.toolbar.favorite = this; + } + } + }, { xtype: 'tbseparator', height: 18, @@ -4868,7 +5280,7 @@ layout: 'fit', iconCls: 'dv-window-title-interpretation', width: 500, - bodyStyle: 'padding:8px 8px 3px; background-color:#fff', + bodyStyle: 'padding:5px 5px 0; background-color:#fff', resizable: true, modal: true, items: [ @@ -4891,8 +5303,8 @@ { xtype: 'panel', html: 'Link: ' + DV.init.contextPath + '/dhis-web-visualizer/app/index.html?id=' + DV.c.currentFavorite.id, - style: 'padding-top: 9px; padding-bottom: 6px', - bodyStyle: 'border: 0 none' + bodyStyle: 'border: 0 none; -webkit-touch-callout:all; -webkit-user-select:all; -khtml-user-select:all; -moz-user-select:all; -ms-user-select:all; user-select:all', + style: 'padding:6px 0 6px 1px' } ], bbar: { @@ -4938,8 +5350,8 @@ ] }, listeners: { - show: function() { - this.setPosition(this.getPosition()[0], 100); + show: function(w) { + DV.util.window.setAnchorPosition(w, DV.cmp.toolbar.share); }, hide: function() { document.body.oncontextmenu = function(){return false;}; @@ -5061,6 +5473,8 @@ ], listeners: { afterrender: function(vp) { + vp.centerRegion = DV.cmp.region.center; + DV.init.initialize(vp); }, resize: function(vp) { === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/i18n.vm' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/i18n.vm 2012-07-24 04:04:14 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/i18n.vm 2013-03-15 12:07:56 +0000 @@ -134,6 +134,7 @@ groups_replace_orgunits:'$encoder.jsEscape($i18n.getString( 'groups_replace_orgunits' ) , "'")', fixed_periods:'$encoder.jsEscape($i18n.getString( 'fixed_periods' ) , "'")', relative_periods:'$encoder.jsEscape($i18n.getString( 'relative_periods' ) , "'")', +periods:'$encoder.jsEscape($i18n.getString( 'periods' ) , "'")', select_type:'$encoder.jsEscape($i18n.getString( 'select_type' ) , "'")', last_3_months:'$encoder.jsEscape($i18n.getString( 'last_3_months' ) , "'")' }; === modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/jsonInitialize.vm' --- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/jsonInitialize.vm 2012-11-04 07:58:03 +0000 +++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/jsonInitialize.vm 2013-03-14 19:34:13 +0000 @@ -1,6 +1,6 @@ #set($oucSize = $currentUser.getOrganisationUnit().getSortedChildren().size()){ "contextPath":"$!{contextPath}", -"user":{"id":"$!currentUser.id","isAdmin":$auth.hasAccess( "dhis-web-visualizer", "addOrUpdateSystemChart" ), +"user":{"id":"$!currentUser.id","name":"$currentUser.name","isAdmin":$auth.hasAccess( "dhis-web-visualizer", "addOrUpdateSystemChart" ), "ou":{"id":"$currentUser.getOrganisationUnit().uid","name":"$currentUser.getOrganisationUnit().name"}, "ouc":[#foreach($ou in $currentUser.getOrganisationUnit().getSortedChildren()){"id":"$ou.uid","name":"$ou.name"}#if($velocityCount < $oucSize),#end#end]}, "system":{"rn":[#foreach($rn in $rootNodes)["$!{rn.uid}","$!encoder.jsonEncode(${rn.name})"]#if($velocityCount<$rootNodes.size()),#end#end],