Ext.namespace("clientSetup"); clientSetup.application = { init: function () { var OCLIENTOPTION = ""; var loadMaskData = new Ext.LoadMask(Ext.getBody(), {msg: _("ID_LOADING_GRID")}); function oauthClientProcessAjax(option, oauthClientId) { //Message var msg = ""; switch (option) { case "INS": msg = "Insert data..."; break; case "UPD": msg = "Update data..."; break; case "DEL": msg = "Delete data..."; break; //case "LST": // break; } var loadMaskAux = new Ext.LoadMask(Ext.getBody(), {msg: msg}); loadMaskAux.show(); //Data var p; switch (option) { case "INS": p = { option: option, name: Ext.getCmp("txtName").getValue(), description: Ext.getCmp("txtDescription").getValue(), webSite: Ext.getCmp("txtWebSite").getValue(), redirectUri: Ext.getCmp("txtRedirectUri").getValue() }; break; case "UPD": p = { option: option, oauthClientId: oauthClientId, name: Ext.getCmp("txtName").getValue(), description: Ext.getCmp("txtDescription").getValue(), webSite: Ext.getCmp("txtWebSite").getValue(), redirectUri: Ext.getCmp("txtRedirectUri").getValue() }; break; case "DEL": p = { option: option, oauthClientId: oauthClientId }; break; //case "LST": // break; } Ext.Ajax.request({ url: "../oauth2/clientSetupAjax", method: "POST", params: p, success: function (response, opts) { var dataResponse = Ext.util.JSON.decode(response.responseText); switch (option) { case "INS": case "UPD": case "DEL": if (dataResponse.status) { if (dataResponse.status == "OK") { pagingData.moveFirst(); switch (option) { case "INS": dataResponse.data.CLIENT_NAME = Ext.getCmp("txtName").getValue(); insertSuccessView(dataResponse.data); break; } } else { Ext.MessageBox.alert(_("ID_ALERT"), dataResponse.message); } } break; //case "LST": // break; } loadMaskAux.hide(); }, failure: function (response, opts) { loadMaskAux.hide(); } }); } function oauthClientSetForm(option, oauthClientId) { switch (option) { case "INS": Ext.getCmp("oauthClientId").setValue(""); Ext.getCmp("txtName").setValue(""); Ext.getCmp("txtDescription").setValue(""); Ext.getCmp("txtWebSite").setValue(""); Ext.getCmp("txtRedirectUri").setValue(""); Ext.getCmp("txtName").allowBlank = true; winData.setTitle("New Application"); winData.show(); Ext.getCmp("btnSubmit").btnEl.dom.innerHTML = "Register Application"; Ext.getCmp("txtName").allowBlank = false; break; case "UPD": var record = grdpnlMain.getSelectionModel().getSelected(); if (typeof(record) != "undefined") { Ext.getCmp("oauthClientId").setValue(record.get("CLIENT_ID")); //oauthClientId Ext.getCmp("txtName").setValue(record.get("CLIENT_NAME")); Ext.getCmp("txtDescription").setValue(record.get("CLIENT_DESCRIPTION")); Ext.getCmp("txtWebSite").setValue(record.get("CLIENT_WEBSITE")); Ext.getCmp("txtRedirectUri").setValue(record.get("REDIRECT_URI")); Ext.getCmp("txtName").allowBlank = true; winData.setTitle("Edit Application"); winData.show(); Ext.getCmp("btnSubmit").btnEl.dom.innerHTML = "Save Changes"; Ext.getCmp("txtName").allowBlank = false; } break; } } function insertSuccessView(data) { var html = "Your application \"" + data.CLIENT_NAME + "\" was registered successfully!" + "

"; html = html + "

" + "Application Credentials" + "


"; html = html + "  * " + "Client ID" + ": " + data.CLIENT_ID + "
"; html = html + "  * " + "Client Secret" + ": " + data.CLIENT_SECRET + "

"; html = html + "

" + "Next Steps" + "


"; html = html + "  * " + "Make authorize requests" + "
"; html = html + "  * " + "Get access tokens" + "
"; var formItems = Ext.getCmp("frmInsertSuccessView").form.items; formItems.items[0].setValue(html); winInsertSuccess.show(); } function detailView() { var record = grdpnlMain.getSelectionModel().getSelected(); if (typeof(record) != "undefined") { var html = "Your application \"" + record.get("CLIENT_NAME") + "\"" + "

"; html = html + "

" + "Application Details" + "


"; html = html + "  * " + "Description" + ": " + record.get("CLIENT_DESCRIPTION") + "
"; html = html + "  * " + "Web Site" + ": " + record.get("CLIENT_WEBSITE") + "
"; html = html + "  * " + "Callback URL" + ": " + record.get("REDIRECT_URI") + "

"; html = html + "

" + "Application Credentials" + "


"; html = html + "  * " + "Client ID" + ": " + record.get("CLIENT_ID") + "
"; html = html + "  * " + "Client Secret" + ": " + record.get("CLIENT_SECRET") + "

"; var formItems = Ext.getCmp("frmDetailView").form.items; formItems.items[0].setValue(html); winDetail.show(); } } function onMnuContext(grid, rowIndex, e) { e.stopEvent(); var coords = e.getXY(); mnuContext.showAt([coords[0], coords[1]]); } //Variables var pageSize = parseInt(CONFIG.pageSize); //Stores var storeData = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({ url: "../oauth2/clientSetupAjax", method: "POST" }), //baseParams: {"option": "LST", "pageSize": pageSize}, reader: new Ext.data.JsonReader({ totalProperty: "resultTotal", root: "resultRoot", fields: [ {name: "CLIENT_ID", type: "string"}, {name: "CLIENT_SECRET", type: "string"}, {name: "CLIENT_NAME", type: "string"}, {name: "CLIENT_DESCRIPTION", type: "string"}, {name: "CLIENT_WEBSITE", type: "string"}, {name: "REDIRECT_URI", type: "string"}, {name: "USR_UID", type: "string"} ] }), //autoLoad: true, //First call remoteSort: true, listeners: { beforeload: function (store, opt) { loadMaskData.show(); btnEdit.setDisabled(true); btnDelete.setDisabled(true); btnDetail.setDisabled(true); this.baseParams = { option: "LST", pageSize: pageSize, search: Ext.getCmp("txtSearch").getValue() }; }, load: function (store, record, opt) { loadMaskData.hide(); if (CREATE_CLIENT == 1) { OCLIENTOPTION = "INS"; CREATE_CLIENT = 0; oauthClientSetForm(OCLIENTOPTION, ""); } } } }); var storePageSize = new Ext.data.SimpleStore({ fields: ["size"], data: [["20"], ["30"], ["40"], ["50"], ["100"]], autoLoad: true }); //Components var winData = new Ext.Window({ layout: "fit", width: 550, height: 475, //title: "", modal: true, resizable: false, closeAction: "hide", items: [ new Ext.FormPanel({ id: "frmOauthClient", frame: true, labelAlign: "right", labelWidth: 80, autoWidth: true, //height: 395, autoScroll: false, defaults: {width: 425}, items: [ { xtype: "hidden", id: "oauthClientId", name: "oauthClientId", }, { xtype: "textfield", id: "txtName", name: "txtName", fieldLabel: "Name", validator: function(value){ var val = (value=='')? false: true; return val; } }, { xtype: "label", fieldLabel: " ", labelSeparator: "", html: "" + "Your application name. This is used to attribute the source in user-facing authorization screens. 32 characters max." + "
" }, { xtype: "textarea", id: "txtDescription", name: "txtDescription", fieldLabel: "Description", height: 55 }, { xtype: "label", fieldLabel: " ", labelSeparator: "", html: "" + "Your application description, which will be shown in user-facing authorization screens. Between 10 and 200 characters max." + "
" }, { xtype: "textfield", id: "txtWebSite", name: "txtWebSite", fieldLabel: "Web Site", validator: function (value){ var regexStringIp = new RegExp(/^https?\:\/\/[^\/\s]+(\/.*)?$/); var regexNumberIp = new RegExp(/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/); var result = (value.match(regexStringIp) || value.match(regexNumberIp)) ? true : false; return result; } }, { xtype: "label", fieldLabel: " ", labelSeparator: "", html: "" + "Your application's publicly accessible home page, where users can go to download, make use of, or find out more information about your application. This fully-qualified URL is used in the source attribution for request created by your application and will be shown in user-facing authorization screens. (If you don't have a URL yet, just put a placeholder here but remember to change it later.)" + "
" }, { xtype: "textfield", id: "txtRedirectUri", name: "txtRedirectUri", fieldLabel: "Callback URL"/*, vtype: "url"*/ }, { xtype: "label", fieldLabel: " ", labelSeparator: "", html: "" + "URL where redirected after successfully authenticating (calling the {workspace}/oauth2/authorize endpoint). This URL typically contains code to get the access token from the {workspace}/oauth2/token endpoint. To prevent your application from using callbacks, leave this field blank." + "" } ] }) ], buttons: [ { id: "btnSubmit", text: "Save", handler: function () { if (Ext.getCmp("frmOauthClient").getForm().isValid()) { oauthClientProcessAjax(OCLIENTOPTION, Ext.getCmp("oauthClientId").getValue()); Ext.getCmp("txtName").allowBlank = true; winData.hide(); } else { Ext.MessageBox.alert(_("ID_INVALID_DATA"), _("ID_CHECK_FIELDS_MARK_RED")); } } }, { text: _("ID_CANCEL"), handler: function () { Ext.getCmp("txtName").allowBlank = true; winData.hide(); } } ] }); var winInsertSuccess = new Ext.Window({ layout: "fit", width: 450, height: 300, title: "Registration Success", modal: true, resizable: false, closeAction: "hide", items: [ new Ext.FormPanel({ id: "frmInsertSuccessView", frame: true, labelAlign: "right", labelWidth: 1, autoWidth: true, //height: 395, autoScroll: true, items: [ { xtype: "displayfield", fieldLabel: "" } ] }) ] }); var winDetail = new Ext.Window({ layout: "fit", width: 450, height: 300, title: "Detail", modal: true, resizable: false, closeAction: "hide", items: [ new Ext.FormPanel({ id: "frmDetailView", frame: true, labelAlign: "right", labelWidth: 1, autoWidth: true, //height: 395, autoScroll: true, items: [ { xtype: "displayfield", fieldLabel: "" } ] }) ] }); var btnNew = new Ext.Action({ id: "btnNew", text: _("ID_NEW"), iconCls: "button_menu_ext ss_sprite ss_add", handler: function () { OCLIENTOPTION = "INS"; oauthClientSetForm(OCLIENTOPTION, ""); } }); var btnEdit = new Ext.Action({ id: "btnEdit", text: _("ID_EDIT"), iconCls: "button_menu_ext ss_sprite ss_pencil", handler: function () { var record = grdpnlMain.getSelectionModel().getSelected(); if (typeof(record) != "undefined") { OCLIENTOPTION = "UPD"; oauthClientSetForm(OCLIENTOPTION, record.get("CLIENT_ID")); } } }); var btnDelete = new Ext.Action({ id: "btnDelete", text: _("ID_DELETE"), iconCls: "button_menu_ext ss_sprite ss_cross", handler: function () { var record = grdpnlMain.getSelectionModel().getSelected(); if (typeof(record) != "undefined") { Ext.MessageBox.confirm( _("ID_CONFIRM"), "Do you want to delete selected Application?", function (btn) { if (btn == "yes") { OCLIENTOPTION = "DEL"; oauthClientProcessAjax(OCLIENTOPTION, record.get("CLIENT_ID")); } } ); } } }); var btnDetail = new Ext.Action({ id: "btnDetail", text: _("ID_DETAILS"), iconCls: "button_menu_ext ss_sprite ss_zoom", handler: function () { detailView(); } }); var btnSearch = new Ext.Action({ id: "btnSearch", text: _("ID_SEARCH"), handler: function () { pagingData.moveFirst(); } }); var txtSearch = new Ext.form.TextField({ id: "txtSearch", emptyText: _("ID_ENTER_SEARCH_TERM"), width: 150, allowBlank: true, listeners: { specialkey: function (f, e) { if (e.getKey() == e.ENTER) { pagingData.moveFirst(); } } } }); var btnTextClear = new Ext.Action({ id: "btnTextClear", text: "X", ctCls: "pm_search_x_button", handler: function () { txtSearch.reset(); } }); var cboPageSize = new Ext.form.ComboBox({ id: "cboPageSize", mode: "local", triggerAction: "all", store: storePageSize, valueField: "size", displayField: "size", width: 50, editable: false, listeners: { select: function (combo, record, index) { pageSize = parseInt(record.data["size"]); pagingData.pageSize = pageSize; pagingData.moveFirst(); } } }); var pagingData = new Ext.PagingToolbar({ id: "pagingData", pageSize: pageSize, store: storeData, displayInfo: true, displayMsg: "Displaying data " + "{" + "0" + "}" + " - " + "{" + "1" + "}" + " of " + "{" + "2" + "}", emptyMsg: "No data to display", items: ["-", "Page size:", cboPageSize] }); var cmodel = new Ext.grid.ColumnModel({ defaults: { sortable: true }, columns: [ {id: "CLIENT_ID", dataIndex: "CLIENT_ID", hidden: true, hideable: false}, {id: "CLIENT_SECRET", dataIndex: "CLIENT_SECRET", hidden: true, hideable: false}, {id: "CLIENT_NAME", dataIndex: "CLIENT_NAME", header: "Name", width: 200, align: "left"}, {id: "CLIENT_DESCRIPTION", dataIndex: "CLIENT_DESCRIPTION", header: "Description", width: 250, align: "left"}, {id: "CLIENT_WEBSITE", dataIndex: "CLIENT_WEBSITE", hidden: true, hideable: false}, {id: "REDIRECT_URI", dataIndex: "REDIRECT_URI", hidden: true, hideable: false}, {id: "USR_UID", dataIndex: "USR_UID", hidden: true, hideable: false} ] }); var smodel = new Ext.grid.RowSelectionModel({ singleSelect: true, listeners: { rowselect: function (sm) { btnEdit.setDisabled(false); btnDelete.setDisabled(false); btnDetail.setDisabled(false); }, rowdeselect: function (sm) { btnEdit.setDisabled(true); btnDelete.setDisabled(true); btnDetail.setDisabled(true); } } }); var grdpnlMain = new Ext.grid.GridPanel({ id: "grdpnlMain", store: storeData, colModel: cmodel, selModel: smodel, columnLines: true, viewConfig: {forceFit: true}, //Expand all columns enableColumnResize: true, enableHdMenu: true, //Menu of the column //autoExpandColumn: "CLIENT_DESCRIPTION", //tbar: [btnNew, "-", btnEdit, btnDelete, "-", btnDetail, "->", txtSearch, btnTextClear, btnSearch], tbar: [btnNew, "-", btnEdit, btnDelete, "-", btnDetail], //bbar: pagingData, //style: "margin: 0 auto 0 auto;", //width: 550, //height: 450, title: "
" + "User Applications" + "
", border: false, listeners: { afterrender: function (grid) { // var btn = new Ext.Button({ // text: " " + "Applications", // iconCls: "button_menu_ext ss_sprite ss_arrow_left", // renderTo: "divAccessTokenSetup", // // handler: function () // { // location.href = "accessTokenSetup"; // } // }); }, rowdblclick: function (grid, rowIndex, evt) { var record = grdpnlMain.getSelectionModel().getSelected(); if (typeof(record) != "undefined") { OCLIENTOPTION = "UPD"; oauthClientSetForm(OCLIENTOPTION, record.get("CLIENT_ID")); } } } }); //Menu context var mnuContext = new Ext.menu.Menu({ id: "mnuContext", items: [btnEdit, btnDelete, "-", btnDetail] }); //Initialize events grdpnlMain.on( "rowcontextmenu", function (grid, rowIndex, evt) { var sm = grid.getSelectionModel(); sm.selectRow(rowIndex, sm.isSelected(rowIndex)); }, this ); grdpnlMain.addListener("rowcontextmenu", onMnuContext, this); cboPageSize.setValue(pageSize); grdpnlMain.store.load(); //Load all panels var viewport = new Ext.Viewport({ layout: "fit", autoScroll: false, items: [grdpnlMain] }); } } Ext.onReady(clientSetup.application.init, clientSetup.application);