798 lines
30 KiB
JavaScript
798 lines
30 KiB
JavaScript
/*
|
|
* The contents of this file are subject to the Mozilla Public
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is the Bugzilla Testopia System.
|
|
*
|
|
* The Initial Developer of the Original Code is Greg Hendricks.
|
|
* Portions created by Greg Hendricks are Copyright (C) 2006
|
|
* Novell. All Rights Reserved.
|
|
*
|
|
* Contributor(s): Greg Hendricks <ghendricks@novell.com>
|
|
* Ryan Hamilton <rhamilton@novell.com>
|
|
* Daniel Parker <dparker1@novell.com>
|
|
*/
|
|
|
|
Testopia.Search = {};
|
|
Testopia.Search.dashboard_urls = [];
|
|
|
|
Testopia.Search.fillInForm = function(type, params, name){
|
|
var f = document.getElementById(type + '_search_form');
|
|
for (var i=0; i < f.length; i++){
|
|
if (f[i].type == 'select-multiple'){
|
|
for (k=0; k < f[i].options.length; k++){
|
|
f[i].options[k].selected = false;
|
|
}
|
|
|
|
var list = params[f[i].name];
|
|
if(!list){
|
|
continue;
|
|
}
|
|
if (typeof list != 'object'){
|
|
list = new Array(list);
|
|
}
|
|
for (j=0; j < list.length; j++){
|
|
for (k=0; k < f[i].options.length; k++){
|
|
if(f[i].options[k].value == list[j]){
|
|
f[i].options[k].selected = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
if (params[f[i].name]){
|
|
f[i].value = params[f[i].name] || '';
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
SearchPopup = function(tab, params){
|
|
var win = new Ext.Window({
|
|
id: 'search_win',
|
|
closable: true,
|
|
width: Ext.getBody().getViewSize().width - 150,
|
|
height: Ext.getBody().getViewSize().height - 150,
|
|
plain: true,
|
|
shadow: false,
|
|
layout: 'fit',
|
|
items: [new SearchPanel(tab, params)]
|
|
});
|
|
win.show();
|
|
};
|
|
|
|
SearchPanel = function(tab, params){
|
|
params = params || {};
|
|
|
|
SearchPanel.superclass.constructor.call(this,{
|
|
title: 'Create a Search',
|
|
id: 'search_panel',
|
|
autoScroll: true,
|
|
activeTab: tab + '_search_panel',
|
|
defaults: {
|
|
// applied to each contained panel
|
|
bodyStyle:'padding:10px',
|
|
autoScroll: true
|
|
},
|
|
items:[
|
|
new PlanSearch(params),
|
|
new CaseSearch(params),
|
|
new RunSearch(params),
|
|
new CaseRunSearch(params)
|
|
]
|
|
});
|
|
};
|
|
Ext.extend(SearchPanel, Ext.TabPanel);
|
|
|
|
PlanSearch = function(params){
|
|
this.params = params;
|
|
PlanSearch.superclass.constructor.call(this,{
|
|
title: 'Plan Search',
|
|
id: 'plan_search_panel',
|
|
layout:'fit',
|
|
buttons:[{
|
|
text: 'Submit',
|
|
handler: function(){
|
|
var form = new Ext.form.BasicForm('plan_search_form');
|
|
var values = form.getValues();
|
|
var searchnum = Math.round(Math.random()*100);
|
|
try {
|
|
// EXT BUG - Closing always causes an error:
|
|
// http://extjs.com/forum/showthread.php?t=20930
|
|
Ext.getCmp('search_win').close();
|
|
}
|
|
catch(err){}
|
|
if (params.report){
|
|
Ext.getCmp('object_panel').add(new Ext.Panel({
|
|
id: 'plan_search' + searchnum,
|
|
closable: true,
|
|
title: 'Plan Report',
|
|
autoScroll: true,
|
|
listeners: { 'render': function(){
|
|
this.load({
|
|
url: 'tr_plan_reports.cgi',
|
|
params: values
|
|
});
|
|
}},
|
|
tbar:[new Ext.Toolbar.Fill(),
|
|
{
|
|
xtype: 'button',
|
|
id: 'save_plan_report_btn',
|
|
icon: 'testopia/img/save.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Save this report',
|
|
handler: function(b,e){
|
|
saveSearch('plan', values);
|
|
}
|
|
},{
|
|
xtype: 'button',
|
|
id: 'link_plan_report_btn',
|
|
icon: 'testopia/img/link.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Create a link to this report',
|
|
handler: function(b,e){
|
|
linkPopup(values);
|
|
}
|
|
}]
|
|
}));
|
|
Ext.getCmp('object_panel').activate('plan_search' + searchnum);
|
|
}
|
|
else{
|
|
Ext.getCmp('object_panel').add(new PlanGrid(values,{
|
|
id: 'plan_search' + searchnum,
|
|
closable: true,
|
|
title: 'Plan Search'
|
|
}));
|
|
Ext.getCmp('object_panel').activate('plan_search' + searchnum);
|
|
}
|
|
}
|
|
}]
|
|
});
|
|
|
|
this.on('activate', this.onActivate, this);
|
|
};
|
|
Ext.extend(PlanSearch, Ext.Panel,{
|
|
onActivate: function(event){
|
|
if (Ext.get('case_search_form')){
|
|
Ext.get('case_search_form').remove();
|
|
}
|
|
if (Ext.get('run_search_form')){
|
|
Ext.get('run_search_form').remove();
|
|
}
|
|
if (Ext.get('caserun_search_form')){
|
|
Ext.get('caserun_search_form').remove();
|
|
}
|
|
|
|
this.params.current_tab = 'plan';
|
|
this.load({
|
|
url: 'tr_query.cgi',
|
|
params: this.params,
|
|
scripts: true,
|
|
text: 'Loading search form...',
|
|
callback: Testopia.Search.fillInForm.createDelegate(this,['plan',this.params])
|
|
});
|
|
}
|
|
});
|
|
|
|
CaseSearch = function(params){
|
|
this.params = params;
|
|
CaseSearch.superclass.constructor.call(this,{
|
|
title: 'Case Search',
|
|
id: 'case_search_panel',
|
|
layout:'fit',
|
|
buttons:[{
|
|
text: 'Submit',
|
|
handler: function(){
|
|
var form = new Ext.form.BasicForm('case_search_form');
|
|
var values = form.getValues();
|
|
var searchnum = Math.round(Math.random()*100);
|
|
try {
|
|
// EXT BUG - Closing always causes an error:
|
|
// http://extjs.com/forum/showthread.php?t=20930
|
|
Ext.getCmp('search_win').hide();
|
|
}
|
|
catch(err){}
|
|
if (params.report){
|
|
Ext.getCmp('object_panel').add(new Ext.Panel({
|
|
id: 'case_search' + searchnum,
|
|
closable: true,
|
|
title: 'Case Report',
|
|
autoScroll: true,
|
|
listeners: { 'render': function(){
|
|
this.load({
|
|
url: 'tr_case_reports.cgi',
|
|
params: values
|
|
});
|
|
}},
|
|
tbar:[new Ext.Toolbar.Fill(),
|
|
{
|
|
xtype: 'button',
|
|
id: 'save_case_report_btn',
|
|
icon: 'testopia/img/save.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Save this report',
|
|
handler: function(b,e){
|
|
saveSearch('case', values);
|
|
}
|
|
},{
|
|
xtype: 'button',
|
|
id: 'link_case_report_btn',
|
|
icon: 'testopia/img/link.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Create a link to this report',
|
|
handler: function(b,e){
|
|
linkPopup(values);
|
|
}
|
|
}]
|
|
}));
|
|
Ext.getCmp('object_panel').activate('plan_search' + searchnum);
|
|
}
|
|
else{
|
|
Ext.getCmp('object_panel').add(new CaseGrid(values,{
|
|
id: 'case_search' + searchnum,
|
|
closable: true,
|
|
title: 'Case Search'
|
|
}));
|
|
}
|
|
Ext.getCmp('object_panel').activate('case_search' + searchnum);
|
|
}
|
|
}]
|
|
});
|
|
|
|
this.on('activate', this.onActivate, this);
|
|
};
|
|
Ext.extend(CaseSearch, Ext.Panel,{
|
|
onActivate: function(event){
|
|
if (Ext.get('run_search_form')){
|
|
Ext.get('run_search_form').remove();
|
|
}
|
|
if (Ext.get('plan_search_form')){
|
|
Ext.get('plan_search_form').remove();
|
|
}
|
|
if (Ext.get('caserun_search_form')){
|
|
Ext.get('caserun_search_form').remove();
|
|
}
|
|
|
|
this.params.current_tab = 'case';
|
|
this.load({
|
|
url: 'tr_query.cgi',
|
|
params: this.params,
|
|
scripts: true,
|
|
text: 'Loading search form...',
|
|
callback: Testopia.Search.fillInForm.createDelegate(this,['case',this.params])
|
|
});
|
|
}
|
|
});
|
|
|
|
RunSearch = function(params){
|
|
this.params = params;
|
|
RunSearch.superclass.constructor.call(this,{
|
|
title: 'Run Search',
|
|
id: 'run_search_panel',
|
|
layout:'fit',
|
|
buttons:[{
|
|
text: 'Submit',
|
|
handler: function(){
|
|
var form = new Ext.form.BasicForm('run_search_form');
|
|
var values = form.getValues();
|
|
if (params.qname)
|
|
values.qname = params.qname;
|
|
var searchnum = Math.round(Math.random()*100);
|
|
try {
|
|
// EXT BUG - Closing always causes an error:
|
|
// http://extjs.com/forum/showthread.php?t=20930
|
|
Ext.getCmp('search_win').close();
|
|
}
|
|
catch(err){}
|
|
if (params.report){
|
|
Ext.getCmp('object_panel').add(new Ext.Panel({
|
|
id: 'run_search' + searchnum,
|
|
closable: true,
|
|
title: 'Run Report',
|
|
autoScroll: true,
|
|
listeners: { 'render': function(){
|
|
this.load({
|
|
url: 'tr_run_reports.cgi',
|
|
params: values
|
|
});
|
|
}},
|
|
tbar:[new Ext.Toolbar.Fill(),
|
|
{
|
|
xtype: 'button',
|
|
id: 'save_run_report_btn',
|
|
icon: 'testopia/img/save.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Save this report',
|
|
handler: function(b,e){
|
|
saveSearch('run', values);
|
|
}
|
|
},{
|
|
xtype: 'button',
|
|
id: 'link_run_report_btn',
|
|
icon: 'testopia/img/link.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Create a link to this report',
|
|
handler: function(b,e){
|
|
linkPopup(values);
|
|
}
|
|
}]
|
|
}));
|
|
Ext.getCmp('object_panel').activate('run_search' + searchnum);
|
|
}
|
|
else{
|
|
Ext.getCmp('object_panel').add(new RunGrid(values,{
|
|
id: 'run_search' + searchnum,
|
|
closable: true,
|
|
title: 'Run Search'
|
|
}));
|
|
}
|
|
Ext.getCmp('object_panel').activate('run_search' + searchnum);
|
|
}
|
|
}]
|
|
});
|
|
|
|
this.on('activate', this.onActivate, this);
|
|
};
|
|
Ext.extend(RunSearch, Ext.Panel,{
|
|
onActivate: function(event){
|
|
if (Ext.get('case_search_form')){
|
|
Ext.get('case_search_form').remove();
|
|
}
|
|
if (Ext.get('plan_search_form')){
|
|
Ext.get('plan_search_form').remove();
|
|
}
|
|
if (Ext.get('caserun_search_form')){
|
|
Ext.get('caserun_search_form').remove();
|
|
}
|
|
|
|
this.params.current_tab = 'run';
|
|
this.load({
|
|
url: 'tr_query.cgi',
|
|
params: this.params,
|
|
scripts: true,
|
|
text: 'Loading search form...',
|
|
callback: Testopia.Search.fillInForm.createDelegate(this,['run',this.params])
|
|
});
|
|
}
|
|
});
|
|
|
|
CaseRunSearch = function(params){
|
|
this.params = params;
|
|
CaseRunSearch.superclass.constructor.call(this,{
|
|
title: 'Case-Run Search',
|
|
id: 'caserun_search_panel',
|
|
layout:'fit',
|
|
buttons:[{
|
|
text: 'Submit',
|
|
handler: function(){
|
|
var form = new Ext.form.BasicForm('caserun_search_form');
|
|
var values = form.getValues();
|
|
var searchnum = Math.round(Math.random()*100);
|
|
try {
|
|
// EXT BUG - Closing always causes an error:
|
|
// http://extjs.com/forum/showthread.php?t=20930
|
|
Ext.getCmp('search_win').close();
|
|
}
|
|
catch(err){}
|
|
if (params.report){
|
|
Ext.getCmp('object_panel').add(new Ext.Panel({
|
|
id: 'case_run_search' + searchnum,
|
|
closable: true,
|
|
title: 'Case-Run Report',
|
|
autoScroll: true,
|
|
listeners: { 'render': function(){
|
|
this.load({
|
|
url: 'tr_caserun_reports.cgi',
|
|
params: values
|
|
});
|
|
}},
|
|
tbar:[new Ext.Toolbar.Fill(),
|
|
{
|
|
xtype: 'button',
|
|
id: 'save_caserun_report_btn',
|
|
icon: 'testopia/img/save.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Save this report',
|
|
handler: function(b,e){
|
|
saveSearch('caserun', values);
|
|
}
|
|
},{
|
|
xtype: 'button',
|
|
id: 'link_plan_list_btn',
|
|
icon: 'testopia/img/link.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Create a link to this report',
|
|
handler: function(b,e){
|
|
linkPopup(values);
|
|
}
|
|
}]
|
|
}));
|
|
Ext.getCmp('object_panel').activate('case_run_search' + searchnum);
|
|
}
|
|
else{
|
|
Ext.getCmp('object_panel').add(new CaseRunListGrid(values,{
|
|
id: 'case_run_search' + searchnum,
|
|
closable: true,
|
|
title: 'Case-Run Search'
|
|
}));
|
|
}
|
|
Ext.getCmp('object_panel').activate('case_run_search' + searchnum);
|
|
}
|
|
}]
|
|
});
|
|
|
|
this.on('activate', this.onActivate, this);
|
|
};
|
|
Ext.extend(CaseRunSearch, Ext.Panel,{
|
|
onActivate: function(event){
|
|
if (Ext.get('case_search_form')){
|
|
Ext.get('case_search_form').remove();
|
|
}
|
|
if (Ext.get('run_search_form')){
|
|
Ext.get('run_search_form').remove();
|
|
}
|
|
if (Ext.get('plan_search_form')){
|
|
Ext.get('plan_search_form').remove();
|
|
}
|
|
this.params.current_tab = 'case_run';
|
|
this.load({
|
|
url: 'tr_query.cgi',
|
|
params: this.params,
|
|
scripts: true,
|
|
text: 'Loading search form...',
|
|
callback: Testopia.Search.fillInForm.createDelegate(this,['caserun',this.params])
|
|
});
|
|
}
|
|
});
|
|
|
|
ReportGrid = function(cfg){
|
|
|
|
this.store = new Ext.data.JsonStore({
|
|
url: 'tr_query.cgi',
|
|
baseParams: {action: 'get_saved_searches', type: cfg.type},
|
|
root: 'searches',
|
|
fields: ["name","query","author","type"]
|
|
});
|
|
var ds = this.store;
|
|
var current_col = 'dashboard_leftcol';
|
|
|
|
this.columns = [
|
|
{header: "Name", width: 30, dataindex: "name", sortable: true}
|
|
];
|
|
|
|
ReportGrid.superclass.constructor.call(this, {
|
|
id: cfg.id || "reports_grid",
|
|
loadMask: {msg: "Loading ..."},
|
|
autoScroll: true,
|
|
sm: new Ext.grid.RowSelectionModel({
|
|
singleSelect: true,
|
|
listeners: {'rowselect': function(sm, i, r){
|
|
var name = r.get('name');
|
|
if(r.get('type') == 1){
|
|
Ext.getCmp('object_panel').setActiveTab('dashboardpanel');
|
|
var newPortlet = new Ext.ux.Portlet({
|
|
title: name,
|
|
id: name,
|
|
closable: true,
|
|
autoScroll: true,
|
|
tools: PortalTools,
|
|
url: r.get('query')
|
|
});
|
|
|
|
Ext.getCmp(current_col).add(newPortlet);
|
|
Ext.getCmp(current_col).doLayout();
|
|
Testopia.Search.dashboard_urls.push(r.get('query'));
|
|
newPortlet.load({
|
|
scripts: true,
|
|
url: r.get('query')
|
|
});
|
|
current_col = current_col == 'dashboard_leftcol' ? 'dashboard_rightcol' : 'dashboard_leftcol';
|
|
}
|
|
else{
|
|
sm.grid.loadPanel(r);
|
|
}
|
|
}}
|
|
}),
|
|
viewConfig: {
|
|
forceFit:true
|
|
}
|
|
});
|
|
Ext.apply(this,cfg);
|
|
this.on('rowcontextmenu', this.onContextClick, this);
|
|
this.on('activate', this.onActivate, this);
|
|
};
|
|
|
|
Ext.extend(ReportGrid, Ext.grid.GridPanel, {
|
|
onContextClick: function(grid, index, e){
|
|
var d = grid.store.getAt(index).get('query').match(/(tr_list_|_reports)/);
|
|
if (d){
|
|
var g = grid.store.getAt(index).get('query').match(/completion/);
|
|
if (g)
|
|
d = null;
|
|
}
|
|
this.menu = new Ext.menu.Menu({
|
|
id:'run-ctx-menu',
|
|
items: [{
|
|
text: 'Open in a new tab',
|
|
disabled: d ? false : true,
|
|
handler: function(){
|
|
var r = grid.store.getAt(index);
|
|
if (r.get('type') == 0){
|
|
grid.loadPanel(r);
|
|
}
|
|
else{
|
|
var newTab = new Ext.Panel({
|
|
title: r.get('name'),
|
|
closable: true,
|
|
id: 'search' + r.get('name'),
|
|
autoScroll: true
|
|
});
|
|
Ext.getCmp('object_panel').add(newTab);
|
|
Ext.getCmp('object_panel').activate('search' + r.get('name'));
|
|
newTab.load({
|
|
url: r.get('query')
|
|
});
|
|
}
|
|
|
|
}
|
|
},{
|
|
text: 'Edit',
|
|
icon: 'testopia/img/edit.png',
|
|
iconCls: 'img_button_16x',
|
|
disabled: d ? false : true,
|
|
handler: function(){
|
|
var r = grid.store.getAt(index);
|
|
var name = r.get('name');
|
|
var q = r.get('query');
|
|
var type;
|
|
type = q.match(/tr_list_(run|case|plan|caserun)s/);
|
|
if (!type) {
|
|
type = q.match(/tr_(run|case|plan|caserun)_reports/);
|
|
if (!type) {
|
|
Ext.Msg.show({
|
|
title: "Non-editable",
|
|
msg: "This Search or Report cannot be edited",
|
|
icon: Ext.MessageBox.ERROR,
|
|
buttons: Ext.MessageBox.OK
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
type = type[1];
|
|
|
|
var params = searchToJson(r.get('query'));
|
|
SearchPopup(type, params);
|
|
}
|
|
},{
|
|
text: 'Delete',
|
|
icon: 'testopia/img/delete.png',
|
|
iconCls: 'img_button_16x',
|
|
handler: function (){
|
|
var form = new Ext.form.BasicForm('testopia_helper_frm',{});
|
|
Ext.Msg.show({
|
|
msg: 'Are you sure you want to delete this search?',
|
|
buttons: Ext.MessageBox.YESNO,
|
|
icon: Ext.MessageBox.QUESTION,
|
|
fn: function(btn, text){
|
|
if (btn == 'yes'){
|
|
var r = grid.store.getAt(index);
|
|
form.submit({
|
|
url: 'tr_query.cgi',
|
|
params: {action: 'delete_query', query_name: r.get('name')},
|
|
success: function(){
|
|
if (grid){
|
|
grid.store.load();
|
|
}
|
|
},
|
|
failure: testopiaError
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
},{
|
|
text: 'Refresh List',
|
|
icon: 'testopia/img/refresh.png',
|
|
iconCls: 'img_button_16x',
|
|
handler: function(){
|
|
grid.store.reload();
|
|
}
|
|
}]
|
|
});
|
|
e.stopEvent();
|
|
this.menu.showAt(e.getXY());
|
|
},
|
|
onActivate: function(event){
|
|
if (!this.store.getCount()){
|
|
this.store.load();
|
|
}
|
|
},
|
|
loadPanel: function(r){
|
|
var cfg = {
|
|
id: 'search' + r.get('name'),
|
|
closable: true,
|
|
title: r.get('name'),
|
|
lc: 'lc_' + r.get('name'),
|
|
rc: 'rc_' + r.get('name')
|
|
};
|
|
if (r.get('type') == 3){
|
|
Ext.getCmp('object_panel').add(new DashboardPanel(cfg));
|
|
Ext.getCmp('object_panel').activate('search' + r.get('name'));
|
|
Ext.getCmp('search' + r.get('name')).getTopToolbar().add({
|
|
xtype: 'button',
|
|
id: 'link_dashboard_btn',
|
|
icon: 'testopia/img/link.png',
|
|
iconCls: 'img_button_16x',
|
|
tooltip: 'Create a link to this dashboard',
|
|
handler: function(b,e){
|
|
var l = window.location;
|
|
var pathprefix = l.pathname.match(/(.*)[\/\\]([^\/\\]+\.\w+)$/);
|
|
pathprefix = pathprefix[1];
|
|
var win = new Ext.Window({
|
|
width: 300,
|
|
plain: true,
|
|
shadow: false,
|
|
items: [new Ext.form.TextField({
|
|
value: encodeURI(l.protocol + '//' + l.host + pathprefix + '/' + 'tr_show_product.cgi?dashboard=' + r.get('name') + '&userid=' + Testopia_user.id),
|
|
width: 287
|
|
})]
|
|
});
|
|
win.show();
|
|
}
|
|
});
|
|
|
|
var current_col = 'lc_' + r.get('name');
|
|
var urls = r.get('query').split('::>');
|
|
var newPortlet;
|
|
for (var i in urls){
|
|
if (typeof urls[i] != 'string'){
|
|
continue;
|
|
}
|
|
var p = searchToJson(urls[i]);
|
|
var t;
|
|
typeof p.qname == 'object' ? t = p.qname[0] : t = p.qname;
|
|
newPortlet = new Ext.ux.Portlet({
|
|
title: t || ' ',
|
|
id: 'search' + r.get('name') + i,
|
|
closable: true,
|
|
autoScroll: true,
|
|
tools: PortalTools,
|
|
url: urls[i]
|
|
});
|
|
Ext.getCmp(current_col).add(newPortlet);
|
|
Ext.getCmp(current_col).doLayout();
|
|
current_col = current_col == 'lc_' + r.get('name') ? 'rc_' + r.get('name') : 'lc_' + r.get('name');
|
|
|
|
newPortlet.load({
|
|
scripts: true,
|
|
url: urls[i]
|
|
});
|
|
}
|
|
}
|
|
else{
|
|
var params = searchToJson(r.get('query'));
|
|
var tab = params.current_tab;
|
|
switch(tab){
|
|
case 'plan':
|
|
Ext.getCmp('object_panel').add(new PlanGrid(params,cfg));
|
|
break;
|
|
case 'run':
|
|
Ext.getCmp('object_panel').add(new RunGrid(params,cfg));
|
|
break;
|
|
case 'case':
|
|
Ext.getCmp('object_panel').add(new CaseGrid(params,cfg));
|
|
break;
|
|
default:
|
|
Ext.Msg.show({
|
|
title:'No Type Found',
|
|
msg: 'There must have been a problem saving this search. I can\'t find a type',
|
|
buttons: Ext.Msg.OK,
|
|
icon: Ext.MessageBox.ERROR
|
|
});
|
|
return;
|
|
}
|
|
Ext.getCmp('object_panel').activate('search' + r.get('name'));
|
|
}
|
|
}
|
|
});
|
|
|
|
PortalTools = [{
|
|
id:'gear',
|
|
handler: function(e,target,panel){
|
|
var form = new Ext.form.BasicForm('testopia_helper_frm',{});
|
|
this.menu = new Ext.menu.Menu({
|
|
id: 'portal_tools_menu',
|
|
items: [
|
|
{
|
|
text: 'Save',
|
|
handler: function(){
|
|
Ext.Msg.prompt('Save Report As', '', function(btn, text){
|
|
if (btn == 'ok'){
|
|
form.submit({
|
|
url: 'tr_query.cgi',
|
|
params: {action: 'save_query', query_name: text, query_part: panel.url, type: 1},
|
|
success: function(){
|
|
Ext.getCmp('reports_grid').store.load();
|
|
panel.title = text;
|
|
},
|
|
failure: testopiaError
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},{
|
|
text: 'Refresh',
|
|
icon: 'testopia/img/refresh.png',
|
|
iconCls: 'img_button_16x',
|
|
handler: function(){
|
|
panel.load({url: panel.url});
|
|
}
|
|
},{
|
|
text: 'Link to this report',
|
|
handler: function(){
|
|
var path;
|
|
if (panel.url.match(/^http/)){
|
|
path = panel.url;
|
|
path = path.replace(/\&noheader=1/gi, '');
|
|
}
|
|
else{
|
|
var l = window.location;
|
|
var pathprefix = l.pathname.match(/(.*)[\/\\]([^\/\\]+\.\w+)$/);
|
|
pathprefix = pathprefix[1];
|
|
path = l.protocol + '//' + l.host + pathprefix + '/' + panel.url;
|
|
path = path.replace(/\&noheader=1/gi, '');
|
|
}
|
|
var win = new Ext.Window({
|
|
width: 300,
|
|
plain: true,
|
|
shadow: false,
|
|
items: [new Ext.form.TextField({
|
|
value: path,
|
|
width: 287
|
|
})]
|
|
});
|
|
win.show();
|
|
}
|
|
},{
|
|
text: 'Delete',
|
|
handler: function(){
|
|
Ext.Msg.show({
|
|
title:'Confirm Delete?',
|
|
icon: Ext.MessageBox.QUESTION,
|
|
msg: 'Are you sure you want to delete this report?',
|
|
buttons: Ext.Msg.YESNO,
|
|
fn: function(btn, text){
|
|
if (btn == 'yes'){
|
|
form.submit({
|
|
url: 'tr_query.cgi',
|
|
params: {action: 'delete_query', query_name: panel.title},
|
|
success: function(){
|
|
Ext.getCmp('reports_grid').store.load();
|
|
panel.ownerCt.remove(panel, true);
|
|
},
|
|
failure: testopiaError
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}]
|
|
});
|
|
e.stopEvent();
|
|
this.menu.showAt(e.getXY());
|
|
}
|
|
},{
|
|
id:'close',
|
|
handler: function(e, target, panel){
|
|
panel.ownerCt.remove(panel, true);
|
|
}
|
|
}];
|