classifications.id
classifications.name
classifications.description
+ classifications.sortkey
);
our $columns = join(", ", DB_COLUMNS);
sub id { return $_[0]->{'id'}; }
sub name { return $_[0]->{'name'}; }
sub description { return $_[0]->{'description'}; }
+sub sortkey { return $_[0]->{'sortkey'}; }
###############################
#### Subroutines ####
my $dbh = Bugzilla->dbh;
my $ids = $dbh->selectcol_arrayref(q{
- SELECT id FROM classifications ORDER BY name});
+ SELECT id FROM classifications ORDER BY sortkey, name});
my @classifications;
foreach my $id (@$ids) {
PRIMARYKEY => 1},
name => {TYPE => 'varchar(64)', NOTNULL => 1},
description => {TYPE => 'MEDIUMTEXT'},
+ sortkey => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => '0'},
],
INDEXES => [
classifications_name_idx => {FIELDS => ['name'],
$class->{$product->classification_id} ||=
new Bugzilla::Classification($product->classification_id);
}
- my @sorted_class = sort {lc($a->name) cmp lc($b->name)} (values %$class);
+ my @sorted_class = sort {$a->sortkey <=> $b->sortkey
+ || lc($a->name) cmp lc($b->name)} (values %$class);
$self->{selectable_classifications} = \@sorted_class;
return $self->{selectable_classifications};
}
$dbh->bz_drop_column("namedqueries", "linkinfooter");
}
+# 2006-07-07 olav@bkor.dhs.org - Bug 277377
+# Add a sortkey to the classifications
+if (!$dbh->bz_column_info('classifications', 'sortkey')) {
+ print "Adding sortkey column to classifications table...\n" unless $silent;
+
+ $dbh->bz_add_column('classifications', 'sortkey',
+ {TYPE => 'INT2', NOTNULL => 1, DEFAULT => 0});
+
+ my $class_ids = $dbh->selectcol_arrayref('SELECT id FROM classifications ' .
+ 'ORDER BY name');
+ my $sth = $dbh->prepare('UPDATE classifications SET sortkey = ? ' .
+ 'WHERE id = ?');
+ my $sortkey = 0;
+ foreach my $class_id (@$class_ids) {
+ $sth->execute($sortkey, $class_id);
+ $sortkey += 100;
+ }
+}
+
# If you had to change the --TABLE-- definition in any way, then add your
# differential change code *** A B O V E *** this comment.
#
}
my $description = trim($cgi->param('description') || '');
+ my $sortkey = trim($cgi->param('sortkey') || 0);
+
trick_taint($description);
trick_taint($class_name);
+ detaint_natural($sortkey);
# Add the new classification.
- $dbh->do("INSERT INTO classifications (name, description)
- VALUES (?, ?)", undef, ($class_name, $description));
+ $dbh->do("INSERT INTO classifications (name, description, sortkey)
+ VALUES (?, ?, ?)", undef, ($class_name, $description, $sortkey));
$vars->{'classification'} = $class_name;
my $class_old_name = trim($cgi->param('classificationold') || '');
my $description = trim($cgi->param('description') || '');
+ my $sortkey = trim($cgi->param('sortkey') || 0);
my $class_old =
Bugzilla::Classification::check_classification($class_old_name);
$vars->{'updated_description'} = 1;
}
+ if ($sortkey ne $class_old->sortkey) {
+ detaint_natural($sortkey);
+ $dbh->do("UPDATE classifications SET sortkey = ?
+ WHERE id = ?", undef,
+ ($sortkey, $class_old->id));
+
+ $vars->{'updated_sortkey'} = 1;
+ }
+
$dbh->bz_unlock_tables();
LoadTemplate($action);
$class->{$product->classification_id} ||=
new Bugzilla::Classification($product->classification_id);
}
- my @classifications = sort {lc($a->name) cmp lc($b->name)} (values %$class);
+ my @classifications = sort {$a->sortkey <=> $b->sortkey
+ || lc($a->name) cmp lc($b->name)}
+ (values %$class);
# We know there is at least one classification available,
# else we would have stopped earlier.
%]
</td>
</tr>
+ <tr>
+ <th align="right"><label for="sortkey">Sortkey:</label></th>
+ <td><input id="sortkey" size="20" maxlength="20" name="sortkey"
+ value=""></td>
+ </tr>
</table>
<hr>
<input type=submit value="Add">
[% END %]
</td>
+</tr><tr>
+ <td valign="top">Sortkey:</td>
+ <td valign="top">[% classification.sortkey FILTER html %]</td>
+
</tr>
</table>
%]
</td>
</tr>
+ <tr>
+ <th align="right"><label for="sortkey">Sortkey:</label></th>
+ <td><input id="sortkey" size="20" maxlength="20" name="sortkey" value="
+ [%- classification.sortkey FILTER html %]"></td>
+ </tr>
<tr valign=top>
<th align="right">
<a href="editproducts.cgi?classification=[% classification.name FILTER url_quote %]">
[% END %]
</td>
+ </tr><tr>
+ <td valign="top">Sortkey:</td>
+ <td valign="top" colspan=3>[% classification.sortkey FILTER html %]</td>
+
</tr><tr>
<td valign="top">Products:</td>
<td valign="top">Products</td>
<tr bgcolor="#6666ff">
<th align="left">Edit Classification ...</th>
<th align="left">Description</th>
+ <th align="left">Sortkey</th>
<th align="left">Products</th>
<th align="left">Action</th>
</tr>
<font color="red">none</font>
[% END %]
</td>
+ <td valign="top">[% cl.sortkey FILTER html %]</td>
[% IF (cl.id == 1) %]
<td valign="top">[% cl.product_count FILTER html %]</td>
[% ELSE %]
[% END %]
<tr>
- <td valign="top" colspan=3>Add a new classification</td>
+ <td valign="top" colspan=4>Add a new classification</td>
<td valign="top" align="center"><a href="editclassifications.cgi?action=add">Add</a></td>
</tr>
</table>
title = "Update classification"
%]
+[% IF updated_sortkey %]
+ Updated sortkey.<br>
+[% END %]
+
[% IF updated_description %]
Updated description.<br>
[% END %]