diff --git a/workflow/engine/controllers/dashboard.php b/workflow/engine/controllers/dashboard.php index ad5b312cd..ccb99bac9 100644 --- a/workflow/engine/controllers/dashboard.php +++ b/workflow/engine/controllers/dashboard.php @@ -26,7 +26,73 @@ class Dashboard extends Controller public function index ($httpData) { try { - $this->setJSVar( 'dashletsInstances', $this->getDashletsInstancesForCurrentUser() ); + $dashletsExist = $this->getDashletsInstancesForCurrentUser(); + $dashletsHide = array(); + $dashletColumns = 3; + + G::LoadClass( 'configuration' ); + $oConfiguration = new Configurations(); + $aConfiguration = $oConfiguration->load('Dashboard', '', '', $_SESSION['USER_LOGGED']); + if (is_array($aConfiguration) && count($aConfiguration) != 0) { + if (isset($aConfiguration["COLUMNS"])) { + $dashletColumns = $aConfiguration["COLUMNS"]; + } + + if (isset($aConfiguration["ORDER"])) { + + $listDashletAux = array(); + $listDashletAuxShow = array(); + foreach ($dashletsExist as $key => $value) { + $listDashletAux[$value['DAS_INS_UID']] = $key; + } + + $dashletsShow['0'] = array(); + foreach ($aConfiguration['ORDER']['0'] as $value) { + if (isset($listDashletAux[$value])) { + $listDashletAuxShow[] = $value; + $dashletsShow['0'][] = $dashletsExist[$listDashletAux[$value]]; + } + } + + $dashletsShow['1'] = array(); + foreach ($aConfiguration['ORDER']['1'] as $value) { + if (isset($listDashletAux[$value])) { + $listDashletAuxShow[] = $value; + $dashletsShow['1'][] = $dashletsExist[$listDashletAux[$value]]; + } + } + + $dashletsShow['2'] = array(); + foreach ($aConfiguration['ORDER']['2'] as $value) { + if (isset($listDashletAux[$value])) { + $listDashletAuxShow[] = $value; + $dashletsShow['2'][] = $dashletsExist[$listDashletAux[$value]]; + } + } + } else { + $col = 0; + foreach ($dashletsExist as $value) { + $dashletsShow[$col][] = $value; + $col++; + if ($col == 3) { + $col = 0; + } + } + } + } else { + $col = 0; + foreach ($dashletsExist as $value) { + $dashletsShow[$col][] = $value; + $col++; + if ($col == 3) { + $col = 0; + } + } + } + + $this->setJSVar( 'dashletsAll', $dashletsExist); + $this->setJSVar( 'dashletsInstances', $dashletsShow); + $this->setJSVar( 'dashletsColumns', $dashletColumns); $this->includeExtJS( 'dashboard/index' ); $this->includeExtJSLib( 'ux/portal' ); G::RenderPage( 'publish', 'extJs' ); @@ -35,6 +101,39 @@ class Dashboard extends Controller } } + public function saveOrderDashlet ($data) + { + $this->setResponseType( 'json' ); + try { + $orderDashlet[0] = json_decode($data->postionCol0); + $orderDashlet[1] = json_decode($data->postionCol1); + $orderDashlet[2] = json_decode($data->postionCol2); + + G::loadClass('configuration'); + $oConfiguration = new Configurations(); + $aConfiguration = $oConfiguration->load('Dashboard', '', '', $_SESSION['USER_LOGGED']); + $dataDashboard = array(); + if (isset($aConfiguration["CFG_VALUE"])) { + $dataDashboard = $aConfiguration["CFG_VALUE"]; + } + $dataNow['ORDER'] = $orderDashlet; + + if (isset($data->columns)) { + $dataNow['COLUMNS'] = json_decode($data->columns); + } + + $dataDashboard = array_merge($dataDashboard, $dataNow); + + $oConfiguration->aConfig = $dataDashboard; + $oConfiguration->saveConfig('Dashboard', '', '', $_SESSION['USER_LOGGED']); + + $result->success = '1'; + return $result; + } catch (Exception $error) { + //ToDo: Display a error message + } + } + public function renderDashletInstance ($data) { try { diff --git a/workflow/engine/templates/dashboard/index.js b/workflow/engine/templates/dashboard/index.js index 6e58462e7..2dffea09a 100644 --- a/workflow/engine/templates/dashboard/index.js +++ b/workflow/engine/templates/dashboard/index.js @@ -1,3 +1,22 @@ +function generatedOrder () { + var orderNow = new Array(); + orderNow[0] = new Array(); + orderNow[1] = new Array(); + orderNow[2] = new Array(); + + for (var i = 0; i < Ext.getCmp('columnPos0').items.items.length; i++) { + orderNow[0][i] = Ext.getCmp('columnPos0').items.items[i].dasInsUid; + } + for (var i = 0; i < Ext.getCmp('columnPos1').items.items.length; i++) { + orderNow[1][i] = Ext.getCmp('columnPos1').items.items[i].dasInsUid; + } + for (var i = 0; i < Ext.getCmp('columnPos2').items.items.length; i++) { + orderNow[2][i] = Ext.getCmp('columnPos2').items.items[i].dasInsUid; + } + + return orderNow; +} + Ext.onReady(function(){ Ext.state.Manager.setProvider(new Ext.state.CookieProvider()); @@ -22,13 +41,18 @@ Ext.onReady(function(){ xtype: 'tbbutton', text : _("ID_DASHBOARD_BTNCOLUMNS3"), handler : function(a) { + Ext.MessageBox.show({ + msg: _('ID_LOADING'), + progressText: 'Saving...', + width:300, + wait:true, + waitConfig: {interval:200}, + animEl: 'mb7' + }); + var vp = Ext.getCmp('viewportDashboard'); var pd = Ext.getCmp('portalDashboard'); - for (var i = 0; i <= dashletsInstances.length - 1; i++) { - pd.items.items[i % 3].add(pd.items.items[i % 2].items.items[0]); - } - pd.items.items[0].columnWidth = 0.33; pd.items.items[1].columnWidth = 0.33; pd.items.items[2].columnWidth = 0.33; @@ -36,18 +60,57 @@ Ext.onReady(function(){ tbDashboard.items.items[0].setDisabled(true); tbDashboard.items.items[1].setDisabled(false); + + var orderNow = generatedOrder(); + Ext.Ajax.request({ + params: { + postionCol0: Ext.encode(orderNow[0]), + postionCol1: Ext.encode(orderNow[1]), + postionCol2: Ext.encode(orderNow[2]), + columns: 3 + }, + url: 'dashboard/saveOrderDashlet', + success: function (retorno) { + var data = Ext.decode(retorno.responseText); + if (data.success) { + Ext.MessageBox.hide(); + } + }, + failure: function () { + Ext.MessageBox.alert('Error', 'Error al Guardar'); + } + }); } }, { xtype: 'tbbutton', text : _("ID_DASHBOARD_BTNCOLUMNS2"), handler : function(a) { + Ext.MessageBox.show({ + msg: _('ID_LOADING'), + progressText: 'Saving...', + width:300, + wait:true, + waitConfig: {interval:200}, + animEl: 'mb7' + }); + var vp = Ext.getCmp('viewportDashboard'); var pd = Ext.getCmp('portalDashboard'); - for (var i = 0; i <= dashletsInstances.length - 1; i++) { - pd.items.items[i % 2].add(pd.items.items[i % 3].items.items[0]); + var dashletMove = new Array(); + for (var i = 0; i < Ext.getCmp('columnPos2').items.items.length; i++) { + dashletMove.push(Ext.getCmp('columnPos2').items.items[i].id); } + var flag = 0; + for (var i = 0; i < dashletMove.length; i++) { + Ext.getCmp('columnPos' + flag).add(Ext.getCmp(dashletMove[i])); + if (flag == 0) { + flag = 1; + } else { + flag = 0; + } + }; pd.items.items[0].columnWidth = 0.49; pd.items.items[1].columnWidth = 0.49; @@ -56,6 +119,26 @@ Ext.onReady(function(){ tbDashboard.items.items[0].setDisabled(false); tbDashboard.items.items[1].setDisabled(true); + + var orderNow = generatedOrder(); + Ext.Ajax.request({ + params: { + postionCol0: Ext.encode(orderNow[0]), + postionCol1: Ext.encode(orderNow[1]), + postionCol2: Ext.encode(orderNow[2]), + columns: 2 + }, + url: 'dashboard/saveOrderDashlet', + success: function (retorno) { + var data = Ext.decode(retorno.responseText); + if (data.success) { + Ext.MessageBox.hide(); + } + }, + failure: function () { + Ext.MessageBox.alert('Error', 'Error al Guardar'); + } + }); } } ] @@ -74,58 +157,112 @@ Ext.onReady(function(){ id : 'portalDashboard', items:[{ columnWidth:.33, + id : 'columnPos0', style:'padding:10px 0 10px 10px', items:[] },{ - columnWidth:.33, - style:'padding:10px 0 10px 10px', - items:[] + columnWidth:.33, + id : 'columnPos1', + style:'padding:10px 0 10px 10px', + items:[] },{ - columnWidth:.33, - style:'padding:10px', - items:[] - }] + columnWidth:.33, + id : 'columnPos2', + style:'padding:10px', + items:[] + }], + listeners: { + 'drop': function(e) { + var orderNow = generatedOrder(); + Ext.MessageBox.show({ + msg: _('ID_LOADING'), + progressText: 'Saving...', + width:300, + wait:true, + waitConfig: {interval:200}, + animEl: 'mb7' + }); - /* - * Uncomment this block to test handling of the drop event. You could use this - * to save portlet position state for example. The event arg e is the custom - * event defined in Ext.ux.Portal.DropZone. - */ -// ,listeners: { -// 'drop': function(e){ -// Ext.Msg.alert('Portlet Dropped', e.panel.title + '
Column: ' + -// e.columnIndex + '
Position: ' + e.position); -// } -// } + if (tbDashboard.items.items[0].disabled == true) { + var colum = 3; + } else { + var colum = 2; + } + Ext.Ajax.request({ + params: { + postionCol0: Ext.encode(orderNow[0]), + postionCol1: Ext.encode(orderNow[1]), + postionCol2: Ext.encode(orderNow[2]), + columns: colum + }, + url: 'dashboard/saveOrderDashlet', + success: function (retorno) { + var data = Ext.decode(retorno.responseText); + if (data.success) { + Ext.MessageBox.hide(); + } + }, + failure: function () { + Ext.MessageBox.alert('Error', 'Error al Guardar'); + } + }); + } + } }] }); var pd = Ext.getCmp('portalDashboard'); - + var con = 0; for (var i = 0; i < dashletsInstances.length; i++) { - var np = new Ext.ux.Portlet({ - title: dashletsInstances[i].DAS_TITLE, - index: i, - dasInsUid : dashletsInstances[i].DAS_INS_UID, - html: 'Gauge Placeholder', - listeners: { - 'resize': function(p, w, h) { - var template = new Ext.XTemplate(dashletsInstances[p.index].DAS_XTEMPLATE).apply({ - id: p.dasInsUid, - page: 'dashboard/renderDashletInstance', - width: w - 12, - random: Math.floor(Math.random() * 1000000) - }) - p.update(template); - } - } - }); + for(var d = 0; d < dashletsInstances[i].length; d++) { - pd.items.items[i % 3].add(np); + var np = new Ext.ux.Portlet({ + title: dashletsInstances[i][d].DAS_TITLE, + index: con, + indicei: i, + indiced: d, + dasInsUid : dashletsInstances[i][d].DAS_INS_UID, + html: 'Gauge Placeholder', + listeners: { + 'resize': function(p, w, h) { + var template = new Ext.XTemplate(dashletsInstances[p.indicei][p.indiced].DAS_XTEMPLATE).apply({ + id: p.dasInsUid, + page: 'dashboard/renderDashletInstance', + width: w - 12, + random: Math.floor(Math.random() * 1000000) + }) + p.update(template); + } + } + }); + pd.items.items[i].add(np); + + con++; + } } + pd.doLayout(); - tbDashboard.items.items[0].setDisabled(true); - tbDashboard.items.items[1].setDisabled(false); + if (dashletsColumns == 2) { + tbDashboard.items.items[0].setDisabled(false); + tbDashboard.items.items[1].setDisabled(true); + + var pd = Ext.getCmp('portalDashboard'); + + pd.items.items[0].columnWidth = 0.49; + pd.items.items[1].columnWidth = 0.49; + pd.items.items[2].columnWidth = 0.01; + pd.doLayout(); + } else { + var pd = Ext.getCmp('portalDashboard'); + + pd.items.items[0].columnWidth = 0.33; + pd.items.items[1].columnWidth = 0.33; + pd.items.items[2].columnWidth = 0.33; + pd.doLayout(); + + tbDashboard.items.items[0].setDisabled(true); + tbDashboard.items.items[1].setDisabled(false); + } });