bugzilla-4intranet/extensions/testopia/template/en/default/testopia/plan/show.html.tmpl

691 lines
28 KiB
Cheetah

[%# 1.0@bugzilla.org %]
[%# 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 Test Runner System.
#
# The Initial Developer of the Original Code is Maciej Maczynski.
# Portions created by Maciej Maczynski are Copyright (C) 2001
# Maciej Maczynski. All Rights Reserved.
#
# Contributor(s): Ed Fuentetaja <efuentetaja@acm.org>
# Greg Hendricks <ghendricks@novell.com>
#%]
[%# INTERFACE:
# ...
#%]
[% PROCESS testopia/blocks.html.tmpl %]
[% PROCESS testopia/style.none.tmpl %]
[% javascript_urls.push("extensions/testopia/extjs/examples/ux/Portal.js") %]
[% javascript_urls.push("extensions/testopia/extjs/examples/ux/PortalColumn.js") %]
[% javascript_urls.push("extensions/testopia/extjs/examples/ux/Portlet.js") %]
[% IF NOT plan.isactive %]
[% title = "Test Plan $plan.id: $plan.name (ARCHIVED)" FILTER html %]
[% ELSE %]
[% title = "Test Plan $plan.id: $plan.name" FILTER html %]
[% END %]
[% PROCESS global/header.html.tmpl %]
<script type="text/javascript">
var Param_Show_Setup_Breakdown = [% Param('testopia-show-setup-breakdown') ? 1 : 0 %];
var product_id;
var plan = [% plan.TO_JSON FILTER html_light %];
Ext.onReady(function(){
Ext.QuickTips.init();
var testopia_form = new Ext.form.BasicForm('testopia_helper_frm',{});
var confirmDelete = function(){
Ext.Msg.show({
title:'Confirm Delete?',
msg: 'You are about to delete plan ' + plan.plan_id + ' with all of its children and history. Are you sure you want to continue?',
buttons: Ext.Msg.YESNO,
fn: planDelete,
animEl: 'plan-delete-btn',
icon: Ext.MessageBox.QUESTION
});
};
var planDelete = function(btn){
if (btn == 'yes'){
testopia_form.submit({
url: 'tr_process_plan.cgi',
params: {plan_id: plan.plan_id, action:'delete'},
success: function(data){
Ext.Msg.show({
title:'Test Plan Deleted',
msg: "Test Plan " + plan.plan_id + " was deleted",
buttons: Ext.Msg.OK,
icon: Ext.MessageBox.INFO
});
window.location = 'tr_show_product.cgi?product_id=' + plan.product_id;
},
failure: Testopia.Util.error
});
}
};
var cgrid = new Testopia.TestCase.Grid({plan_id: plan.plan_id },{id: 'plan_case_grid'});
var rgrid = new Testopia.TestRun.Grid({plan_id: plan.plan_id },{id: 'plan_run_grid'});
var tgrid = new Testopia.Tags.ObjectTags('plan', plan.plan_id);
var attachGrid = new Testopia.Attachment.Grid(plan);
var fileMenu = new Ext.menu.Menu({
id: 'plan-file-menu',
items: [{
text: "Archived",
id: 'plan_archive_mnu',
ignoreParentClicks: true,
checked: [% plan.isactive ? 'false' : 'true' %],
checkHandler: function(i,c){
testopia_form.submit({
url: 'tr_process_plan.cgi',
params: {action: c ? 'archive':'unarchive' , plan_id: plan.plan_id},
success: function(){
Testopia.Util.notify.msg('Plan updated', 'Plan {0} was updated successfully', 'archival');
if (c){
Ext.get('archive_flag').addClass('plan_archived');
}
else {
Ext.get('archive_flag').removeClass('plan_archived');
}
},
failure: Testopia.Util.error
});
}
}
[% IF user.in_group('Testers') %]
,{
text: 'Clone',
icon: 'extensions/testopia/img/copy.png',
iconCls: 'img_button_16x',
handler: function(){
Testopia.TestPlan.ClonePopup(plan);
}
}
[% END %]
,{
text: "Print",
handler: function(){
window.location='tr_show_plan.cgi?&plan_id=[% plan.id FILTER none %]&ctype=print';
}
},{
text: 'Export',
menu: [{
text: 'Test Results as CSV',
handler: function(){
window.location = 'tr_list_caseruns.cgi?ctype=csv&viewall=1&plan_id=[% plan.id FILTER none %]';
}
},{
text: 'Cases as CSV',
handler: function(){
window.location='tr_show_plan.cgi?&plan_id=[% plan.id FILTER none %]&export=testcases&ctype=csv&viewall=1';
}
},{
text: 'Plan as XML',
handler: function(){
window.location='tr_show_plan.cgi?&plan_id=[% plan.id FILTER none %]&export=testcases&ctype=xml&viewall=1';
}
}]
},{
text: 'Import',
menu:[{
text: 'Cases',
handler: function(){
Testopia.TestPlan.Import({
plan_id: plan.plan_id
});
}
}]
},{
text: 'New',
menu: [{
text: 'Test Run',
handler: function(){
Testopia.TestRun.NewRunPopup(plan);
}
},{
text: 'Test Case',
handler: function(){
Testopia.TestCase.NewCasePopup(plan.plan_id, plan.product_id);
}
}]
},{
text: "Delete",
id: 'btn-delete',
icon: 'extensions/testopia/img/delete.png',
iconCls: 'img_button_16x',
disabled: plan.candelete ? false : true,
handler: confirmDelete
}]
});
var editMenu = new Ext.menu.Menu({
id: 'plan-edit-menu',
items: [{
text: "Access Controls",
handler: function(){
Ext.getCmp('object_panel').activate('plan-permissions');
}
}]
});
var viewMenu = new Ext.menu.Menu({
id: 'view-menu',
items: [{
text: "Reports",
menu: [{
text: 'New Status Report',
handler: function(){
Ext.getCmp('object_panel').setActiveTab('dashboardpanel');
var newPortlet = new Ext.ux.Portlet({
title: 'Status Report',
closable: true,
autoScroll: true,
tools: PortalTools
});
newPortlet.url = 'tr_run_reports.cgi?type=status&plan_ids=' + plan.plan_id;
Testopia.Search.dashboard_urls.push(newPortlet.url);
Ext.getCmp('dashboard_leftcol').add(newPortlet);
Ext.getCmp('dashboard_leftcol').doLayout();
newPortlet.load({
url: newPortlet.url
});
}
}, {
text: 'New Completion Report',
handler: function(){
Ext.getCmp('object_panel').setActiveTab('dashboardpanel');
var newPortlet = new Ext.ux.Portlet({
title: 'Completion Report',
closable: true,
autoScroll: true,
tools: PortalTools
});
newPortlet.url = 'tr_run_reports.cgi?type=completion&plan_ids=' + plan.plan_id;
Testopia.Search.dashboard_urls.push(newPortlet.url);
Ext.getCmp('dashboard_leftcol').add(newPortlet);
Ext.getCmp('dashboard_leftcol').doLayout();
newPortlet.load({
url: newPortlet.url
});
}
}, {
text: 'New Run Execution Report',
handler: function(){
var win = new Ext.Window({
title: 'Select a date range',
id: 'plan_execution_win',
layout: 'fit',
split: true,
plain: true,
shadow: false,
width: 350,
height: 150,
items: [new Ext.FormPanel({
labelWidth: '40',
bodyStyle: 'padding: 5px',
items: [{
xtype: 'datefield',
id: 'execution_start_date',
fieldLabel: 'Start Date',
name: 'chfieldfrom'
}, {
xtype: 'datefield',
fieldLabel: 'Stop Date',
id: 'execution_stop_date',
emptyText: 'Now',
name: 'chfieldto'
}]
})],
buttons: [{
text: 'Submit',
handler: function(){
Ext.getCmp('object_panel').setActiveTab('dashboardpanel');
var newPortlet = new Ext.ux.Portlet({
title: 'Execution Report',
closable: true,
autoScroll: true,
tools: PortalTools
});
newPortlet.url = 'tr_run_reports.cgi?type=execution&plan_ids=' + plan.plan_id + '&chfieldfrom=' + Ext.getCmp('execution_start_date').getValue() + '&chfieldto=' + Ext.getCmp('execution_stop_date').getValue();
Testopia.Search.dashboard_urls.push(newPortlet.url);
Ext.getCmp('dashboard_leftcol').add(newPortlet);
Ext.getCmp('dashboard_leftcol').doLayout();
newPortlet.load({
url: newPortlet.url
});
win.close();
}
}, {
text: 'Cancel',
handler: function(){
win.close();
}
}]
});
win.show();
}
}, {
text: 'New Priority Breakdown Report',
handler: function(){
Ext.getCmp('object_panel').setActiveTab('dashboardpanel');
var newPortlet = new Ext.ux.Portlet({
title: 'Status Report',
closable: true,
autoScroll: true,
tools: PortalTools
});
newPortlet.url = 'tr_run_reports.cgi?type=priority&plan_ids=' + plan.plan_id;
Testopia.Search.dashboard_urls.push(newPortlet.url);
Ext.getCmp('dashboard_leftcol').add(newPortlet);
Ext.getCmp('dashboard_leftcol').doLayout();
newPortlet.load({
url: newPortlet.url
});
}
}, {
text: 'New Bug Report',
handler: function(){
Ext.getCmp('object_panel').setActiveTab('dashboardpanel');
var newPortlet = new Ext.ux.Portlet({
title: 'Bug Report',
closable: true,
autoScroll: true,
tools: PortalTools
});
newPortlet.url = 'tr_run_reports.cgi?type=bug_grid&plan_ids=' + plan.plan_id + '&noheader=1';
Testopia.Search.dashboard_urls.push(newPortlet.url);
Ext.getCmp('dashboard_leftcol').add(newPortlet);
Ext.getCmp('dashboard_leftcol').doLayout();
newPortlet.load({
scripts: true,
url: newPortlet.url
});
}
}, {
text: 'Worst Offender Report',
handler: function(){
Ext.getCmp('object_panel').setActiveTab('dashboardpanel');
var newPortlet = new Ext.ux.Portlet({
title: 'Worst Offender Report',
closable: true,
autoScroll: true,
tools: PortalTools
});
newPortlet.url = 'tr_run_reports.cgi?type=worst&plan_ids=' + plan.plan_id + '&noheader=1';
Testopia.Search.dashboard_urls.push(newPortlet.url);
Ext.getCmp('dashboard_leftcol').add(newPortlet);
Ext.getCmp('dashboard_leftcol').doLayout();
newPortlet.load({
scripts: true,
url: newPortlet.url
});
}
},{
text: 'Missing Cases Report',
handler: function(){
window.open('tr_list_cases.cgi?report_type=missing&plan_ids=' + plan.plan_id);
}
}, {
text: 'Case Roll-up Report',
handler: function(){
window.open('tr_list_caseruns.cgi?report_type=rollup&plan_ids=' + plan.plan_id);
}
}]
}]
});
var planpanel = new Ext.Panel({
layout: 'border',
title: '[% title FILTER js %]',
monitorResize: true,
height: 800,
footer: true,
autoShow: true,
tbar: [{
text: 'File',
menu: fileMenu
},{
text: 'Edit',
menu: editMenu
},{
text: 'View',
menu: viewMenu
},
new Ext.Toolbar.Fill()
[% IF user.in_group('Testers') %]
,{
xtype: 'button',
id: 'plan-copy-button',
icon: 'extensions/testopia/img/copy.png',
iconCls: 'img_button_16x',
tooltip: 'Clone this Test Plan',
handler: function(){
Testopia.TestPlan.ClonePopup(plan);
}
}
[% END %]
[% IF plan.candelete %]
,{
xtype: 'button',
id: 'plan-delete-btn',
icon: 'extensions/testopia/img/delete.png',
iconCls: 'img_button_16x',
tooltip: 'Delete this Plan',
handler: confirmDelete
}
[% END %]
],
applyTo: 'plan-body-div',
items:[{
xtype: 'tabpanel',
stateEvents: ['tabchange'],
split: true,
region: 'center',
id: 'object_panel',
activeTab: Ext.state.Manager.get('plan_active_tab', 0),
listeners: {
'tabchange': function(){
Ext.state.Manager.set('plan_active_tab', Ext.getCmp('object_panel').getActiveTab().getId());
}
},
items: [
new Testopia.Search.DashboardPanel({}),
rgrid,
cgrid,
attachGrid,
{
layout: 'fit',
title: 'Plan Document',
tbar: new DocCompareToolbar('plan',plan.plan_id),
items: [{
id: 'plan_doc',
xtype:'htmleditor',
value: '[% plan.text.plan_text FILTER js %]'
}],
buttons: [{
text: 'Submit',
disabled: plan.canedit ? false : true,
handler: function(){
testopia_form.submit({
url: 'tr_process_plan.cgi',
params: {action: 'edit', plandoc: Ext.getCmp('plan_doc').getValue(), plan_id: plan.plan_id},
success: function(){
Testopia.Util.notify.msg('Plan updated', 'Plan {0} was updated successfully', 'Document');
},
failure: Testopia.Util.error
});
}
}]
},{
layout: 'fit',
id:'plan-permissions',
title: 'Permissions',
autoShow: true,
autoScroll: true,
contentEl: 'plan-permissions-div',
bodyStyle: 'padding: 10px;'
},new Testopia.Util.HistoryList('plan',plan.plan_id)]
},{
id: 'test-plan-id',
split: true,
region: 'north',
contentEl: 'plan_overview',
height: Ext.get('plan_overview_table').getHeight() + 30
},{
id: 'plan_east_panel',
xtype: 'tabpanel',
region: 'east',
width: '200',
activeTab: 0,
split: true,
items: [tgrid, new Testopia.Search.SavedReportsList({
title: 'Reports',
id: 'reports_grid',
type: 1
})
]
}]
});
[% IF plan.canedit %]
var vbox = new Testopia.Product.VersionCombo({
hiddenName: 'product_version',
transform: 'product_version'
});
vbox.on('select', function(c,r,i){
testopia_form.submit({
url: 'tr_process_plan.cgi',
params: {action: 'edit', prod_version: r.get('value'), plan_id: plan.plan_id},
success: function(){
Testopia.Util.notify.msg('Plan updated', 'Plan {0} was updated successfully', 'Product Version');
},
failure: Testopia.Util.error
});
});
if (Ext.get('adduser')){
var adduser = new Testopia.User.Lookup({
id: 'plan_permission_add_user',
hiddenName: 'adduser'
});
adduser.render('adduser');
}
var types = new Testopia.TestPlan.TypesCombo({
hiddenName: 'plan_type',
transform: 'plan_type'
});
types.on('select', function(c,r,i){
testopia_form.submit({
url: 'tr_process_plan.cgi',
params: {action: 'edit', type: r.get('value'), plan_id: plan.plan_id},
success: function(){
Testopia.Util.notify.msg('Plan updated', 'Plan {0} was updated successfully', 'type');
},
failure: Testopia.Util.error
});
});
function plan_wiki_set_url()
{
var a = "[% (plan.product.wiki_url || Param('wiki_url')) FILTER js %]";
var re = /(\/*index\.php)?\/*$/i;
a = a.replace(re, '/index.php/Category:');
document.getElementById('plan_wiki').href = a +
document.getElementById('plan_wiki').innerHTML;
}
plan_wiki_set_url();
var edit_wiki_btn = new Ext.Button({
applyTo: 'plan_wiki_edit_btn',
id:'edit_plan_wiki_btn',
icon: 'extensions/testopia/img/edit.png',
iconCls: 'img_button_16x',
tooltip: 'Edit Plan Wiki Category',
handler: function(){
Ext.getCmp('plan_wiki_edt').startEdit(Ext.get('plan_wiki'));
}
});
var plan_wiki_edt = new Ext.Editor(
new Ext.form.TextField({
width: Ext.get('plan_wiki').getWidth() < 200 ? 200 : Ext.get('plan_wiki').getWidth(),
name: 'plan_wiki'
}),{
alignment: 'tl-tl',
id: 'plan_wiki_edt',
ignoreNoChange: true,
updateEl: true,
completeOnEnter: true,
cancelOnEsc: true
});
plan_wiki_edt.on('complete', function(e,v,sv){
testopia_form.submit({
url: 'tr_process_plan.cgi',
params: {action: 'edit', wiki: v, plan_id: plan.plan_id},
success: function(){
plan_wiki_set_url();
TestopiaUtil.notify.msg('Plan updated', 'Plan {0} was updated successfully', 'wiki');
},
failure: Testopia.Util.error
});
});
var sync_wiki_btn = new Ext.Button({
applyTo: 'plan_wiki_sync_btn',
text: 'Synchronize',
id: 'edit_plan_wiki_btn',
tooltip: 'Synchronize Test Plan with Wiki Category',
handler: function(){
var w = Ext.get('plan_wiki').dom.innerHTML;
if (!w.match(/^\s*$/))
{
var l = window.location.href;
var m;
if (m = l.match(/^(.*?)\?/))
l = m[1];
window.location.href = l + '?wikisync=1&plan_id=' + plan.plan_id;
}
}
});
var edit_summary_btn = new Ext.Button({
applyTo: 'plan_name_edit_btn',
id:'edit_plan_summary_btn',
icon: 'extensions/testopia/img/edit.png',
iconCls: 'img_button_16x',
tooltip: 'Edit Plan Summary',
handler: function(){
Ext.getCmp('plan_name_edt').startEdit(Ext.get('plan_name'));
}
});
var plan_name_edt = new Ext.Editor(
new Ext.form.TextField({
width: Ext.get('plan_name').getWidth() < 200 ? 200 : Ext.get('plan_name').getWidth(),
name: 'plan_name'
}),{
alignment: 'tl-tl',
id: 'plan_name_edt',
ignoreNoChange: true,
updateEl: true,
completeOnEnter: true,
cancelOnEsc: true
});
plan_name_edt.on('complete', function(e,v,sv){
testopia_form.submit({
url: 'tr_process_plan.cgi',
params: {action: 'edit', name: v, plan_id: plan.plan_id},
success: function(){
Testopia.Util.notify.msg('Plan updated', 'Plan {0} was updated successfully', 'name');
},
failure: Testopia.Util.error
});
});
[% END %]
Ext.getCmp('dashboardpanel').on('render', function(){
Ext.getCmp('dashboardpanel').getTopToolbar().add({
xtype: 'button',
id: 'save_dashboard_btn',
icon: 'extensions/testopia/img/save.png',
iconCls: 'img_button_16x',
tooltip: 'Save this dashboard',
handler: function(b,e){
Testopia.Search.save('dashboard', Testopia.Search.dashboard_urls);
}
});
});
Ext.get('plan_overview').show();
});
</script>
[% PROCESS testopia/plan/navigate.html.tmpl %]
<div id="plan-body-div" class="x-display-hidden"></div>
<div id="plan_overview" style="visibility: hidden">
<table border="0" cellpadding="3" cellspacing="3" width="100%" id="plan_overview_table">
<tbody align="left">
<tr class="bz_row_header">
<th>Plan Name</th>
<th colspan="2">Wiki category</th>
</tr>
<tr class="bz_row_data">
<td>
<table>
<tr>
<td><div id="plan_name">[% plan.name FILTER html %]</div></td>
<td><div id="plan_name_edit_btn"></div></td>
<td><div id="archive_flag" style="position: absolute; right:50px; top: 0px;" [% 'class="plan_archived"' IF NOT plan.isactive %]></div></td>
</tr>
</table>
</td>
<td colspan="2">
<table>
<tr>
<td><div><a id="plan_wiki">[% plan.wiki FILTER html %]</a></div></td>
<td><div id="plan_wiki_edit_btn"></div></td>
<td><div id="plan_wiki_sync_btn"></div></td>
</tr>
</table>
</td>
</tr>
<tr class="bz_row_header">
<th>Product</th>
<th>Product Version </th>
<th>Created</th>
</tr>
<tr class="bz_row_data">
<td><a href="tr_show_product.cgi?product_id=[% plan.product_id FILTER none %]">[% plan.product.name FILTER html %]</a></td>
<td>[% IF plan.canedit %]
[% PROCESS select sel = { name => 'product_version',
list => plan.product.versions,
default => plan.product_version } %]
[% ELSE %]
[% plan.product_version FILTER html %]
[% END %]
</td>
<td>[% plan.creation_date FILTER time %]</td>
</tr>
<tr class="bz_row_header">
<th>Author</th>
<th>Plan Version</th>
<th>Type</th>
</tr>
<tr class="bz_row_data">
<td><a href="mailto:[% plan.author.email FILTER html %]">[% plan.author.identity FILTER html %]</a></td>
<td>[% plan.version FILTER html %]</td>
<td>[% IF plan.canedit %]
[% PROCESS select sel = { name => 'plan_type',
list => plan.get_plan_types,
default => plan.plan_type } %]
[% ELSE %]
[% plan.plan_type FILTER html %]
[% END %]
</td>
</tr>
</tbody>
</table>
</div>
<div id="plan-permissions-div" class="x-hidden">
[% PROCESS "testopia/plan/access-list.html.tmpl" %]
</div>
[% PROCESS global/footer.html.tmpl %]