Bug 42133

Excel bug import


git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@176 6955db30-a419-402b-8a0d-67ecbb4d7f56
custis
svnuser 2009-06-10 16:19:22 +00:00
parent 2c3e8fe1cd
commit a0198ba25c
2 changed files with 69 additions and 17 deletions

View File

@ -121,24 +121,56 @@ else
my @keys = $cgi->param;
my $bugs = {};
my $forall = {};
my $tr = {};
# переименования полей багов
for (grep { /^t_/so } @keys)
{
if ($cgi->param($_) && $cgi->param($_) ne substr($_,2))
{
$tr->{substr($_,2)} = $cgi->param($_);
}
}
for (@keys)
{
if (/^b_(.*?)_(\d+)$/so)
{
$bugs->{$2}->{$1} = $cgi->param($_);
# поля багов
$bugs->{$2}->{$tr->{$1} || $1} = $cgi->param($_);
}
elsif (/^f_/so)
{
# скрытые значения полей для всех багов (шаблон)
$forall->{$'} = $cgi->param($_) if $cgi->param($_);
}
}
my $r = 0;
my $ids = [];
my $f = 0;
Bugzilla->dbh->bz_start_transaction;
for my $bug (values %$bugs)
{
$bug->{$_} ||= $forall->{$_} for keys %$forall;
$r += post_bug($bug) ? 1 : 0 if $bug->{enabled};
if ($bug->{enabled})
{
my $id = post_bug($bug);
if ($id)
{
$r++;
push @$ids, $id;
}
else
{
Bugzilla->dbh->bz_rollback_transaction;
$f = 1;
last;
}
}
}
unless ($f)
{
Bugzilla->dbh->bz_commit_transaction;
print $cgi->redirect(-location => 'importxls.cgi?result='.$r);
}
print $cgi->redirect(-location => 'importxls.cgi?result='.$r);
}
# разобрать лист Excel
@ -204,6 +236,7 @@ sub post_bug
}
my $um = Bugzilla->usage_mode;
Bugzilla->usage_mode(USAGE_MODE_EMAIL);
Bugzilla->error_mode(ERROR_MODE_WEBPAGE);
my $bug_id = do 'post_bug.cgi';
Bugzilla->usage_mode($um);
return $bug_id;

View File

@ -5,10 +5,15 @@
[% title = 'Excel import' %]
[% PROCESS "global/field-descs.none.tmpl" %]
[% PROCESS global/header.html.tmpl %]
[% field_descs.platform = field_descs.rep_platform %]
[% field_descs.delete("rep_platform") %]
[% PROCESS global/header.html.tmpl %]
[% FOR k = field_descs.keys %]
[% IF k.match('\.|^(\[Bug creation\]|days_elapsed|owner_idle_time|changeddate|creation_ts|delta_ts)$') %]
[% field_descs.delete(k) %]
[% END %]
[% END %]
[% IF form || show_error %]
<h2>Mass Bug Import from Excel files</h2>
@ -83,20 +88,13 @@ function toggleallbugz(chk)
for (i = 0; i < bugz.children.length; i++)
document.getElementById('b_enabled_'+(""+bugz.children[i].id).substr(5)).checked = chk;
}
function fieldrename(field)
{
document.getElementById('tp_'+field).style.display='none';
document.getElementById('t_'+field).style.display='';
}
</script>
<form action="importxls.cgi" method="post">
<input type="hidden" name="commit" value="1" />
[% FOR key = forall.keys %]
<input type="hidden" name="f_[% key FILTER html %]" value="[% forall.${key} FILTER html %]" />
[% END %]
<table>
<tr>
<td><input type="checkbox" onclick="toggleallbugz(this.checked)" /></td>
[% FOR field = fields %]
<td>[% IF field_descs.${field} %][% field_descs.${field} %][% ELSE %]<span style="color: #A0A0A0">[% field %]</span>[% END %]</td>
[% END %]
</tr>
[% lens = {} %]
[% FOR bug = data %]
[% FOR field = fields %]
@ -112,6 +110,27 @@ function toggleallbugz(chk)
[% lens.${key} = 3 %]
[% END %]
[% END %]
<form action="importxls.cgi" method="post">
<input type="hidden" name="commit" value="1" />
[% FOR key = forall.keys %]
<input type="hidden" name="f_[% key FILTER html %]" value="[% forall.${key} FILTER html %]" />
[% END %]
<table>
<tr>
<td><input type="checkbox" onclick="toggleallbugz(this.checked)" /></td>
[% FOR field = fields %]
<td style="white-space: nowrap">
<p id="tp_[% field %]"><a href="javascript:void fieldrename('[% field.replace("['\"]", '\\$&') %]')">[% IF field_descs.${field} %][% field_descs.${field} %][% ELSE %]<span style="color: red">[% field %]</span>[% END %]</a></p>
<select id="t_[% field %]" name="t_[% field %]" style="display:none; width: 90px">
<option value="[% field %]">[% IF field_descs.${field} %][% field_descs.${field} %][% ELSE %]Unknown field - [% field %][% END %]</option>
[% FOR f = field_descs.keys.sort %]
<option value="[% f %]">[% field_descs.${f} %]</option>
[% END %]
</select>
</td>
[% END %]
</tr>
<tbody id="bugz">
[% FOR bug = data %]
<tr id="bugz_[% bug.num %]">