diff --git a/importxls.cgi b/importxls.cgi index 7bea65dee..29f1c83eb 100755 --- a/importxls.cgi +++ b/importxls.cgi @@ -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; diff --git a/template/en/custom/bug/import/importxls.html.tmpl b/template/en/custom/bug/import/importxls.html.tmpl index f0295c3af..ee301d86a 100644 --- a/template/en/custom/bug/import/importxls.html.tmpl +++ b/template/en/custom/bug/import/importxls.html.tmpl @@ -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 %]

Mass Bug Import from Excel files

@@ -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=''; +} -
- -[% FOR key = forall.keys %] - -[% END %] - - - -[% FOR field = fields %] - -[% END %] - [% lens = {} %] [% FOR bug = data %] [% FOR field = fields %] @@ -112,6 +110,27 @@ function toggleallbugz(chk) [% lens.${key} = 3 %] [% END %] [% END %] + + + +[% FOR key = forall.keys %] + +[% END %] +
[% IF field_descs.${field} %][% field_descs.${field} %][% ELSE %][% field %][% END %]
+ + +[% FOR field = fields %] + +[% END %] + [% FOR bug = data %]
+

[% IF field_descs.${field} %][% field_descs.${field} %][% ELSE %][% field %][% END %]

+ +