From f91dc231c54219824fd1fe51dcd5f60ce3a9be86 Mon Sep 17 00:00:00 2001 From: Matt Zagrabelny Date: Mon, 30 Jan 2017 10:19:46 -0600 Subject: [PATCH] add "sort" field to Zone table for sorting Zones displayed in UI It would be nice to be able to "push" the .arpa zones to the bottom of the zone list and also to bubble up any more important zones to the top of the list. --- etc/default_data | 2 +- etc/netdot.meta | 13 +++++++++++-- htdocs/management/host.html | 4 ++-- htdocs/management/ip.html | 6 +++--- htdocs/management/zone_tasks.html | 2 +- lib/Netdot/Model/Zone.pm | 32 ++++++++++++++++++++++++++++++- upgrade/updatedb | 16 ++++++++++++++++ 7 files changed, 65 insertions(+), 10 deletions(-) diff --git a/etc/default_data b/etc/default_data index 729e41127..035770bb3 100755 --- a/etc/default_data +++ b/etc/default_data @@ -330,7 +330,7 @@ INSERT INTO ipblock (address, prefix, version, status, owner, used_by, descripti INSERT INTO ipblock (address, prefix, version, status, owner, used_by, description) VALUES ('338288524927261089654018896841347694592', '10', '6', '1', '1', '1', 'Link-Local Unicast'); -INSERT INTO zone (name, active, default_ttl, info, minimum, mname, refresh, retry, rname, serial, expire, export_file) VALUES ('defaultdomain', '0', '86400', 'Default Zone', '86400', 'localhost.defaultdomain', '7200', '900', 'hostmaster.defaultdomain', '0', 1577858400, '/tmp/zone_export.txt'); +INSERT INTO zone (name, active, default_ttl, info, minimum, mname, refresh, retry, rname, serial, expire, export_file, sort) VALUES ('defaultdomain', '0', '86400', 'Default Zone', '86400', 'localhost.defaultdomain', '7200', '900', 'hostmaster.defaultdomain', '0', 1577858400, '/tmp/zone_export.txt', 100); INSERT INTO rr (name, active, zone, auto_update) VALUES ('@', '0', '1', true); INSERT INTO rrns (rr, nsdname, ttl) VALUES ('1', 'ns1.defaultdomain', '86400'); INSERT INTO rrns (rr, nsdname, ttl) VALUES ('1', 'ns2.defaultdomain', '86400'); diff --git a/etc/netdot.meta b/etc/netdot.meta index b75d01437..ae4e99af8 100644 --- a/etc/netdot.meta +++ b/etc/netdot.meta @@ -8596,7 +8596,15 @@ $meta = { nullable => 0, tag => 'Serial', type => 'bigint' - } + }, + sort => { + default => 100, + description => 'Integer value that zones will be sorted by for display purposes.', + length => '', + nullable => 0, + tag => 'Sort', + type => 'integer' + }, }, description => 'A DNS Zone', has_history => 0, @@ -8626,7 +8634,8 @@ $meta = { 'export_file', 'default_ttl', 'include', - 'info' + 'sort', + 'info', ], brief => [ 'name', diff --git a/htdocs/management/host.html b/htdocs/management/host.html index 2719026a0..28986dba1 100644 --- a/htdocs/management/host.html +++ b/htdocs/management/host.html @@ -223,7 +223,7 @@ @select_list = ( $zone ); $ffargs{default} = $zone->id; } - foreach my $z ( sort { $a->name cmp $b->name } Zone->retrieve_all ){ + foreach my $z ( Zone->retrieve_all ){ next if $z->is_dot_arpa; next unless $z->active; next if $zone && ($z->id == $zone->id); @@ -813,7 +813,7 @@ push( @cell_data, '' ); } my $zone_select = ' diff --git a/htdocs/management/zone_tasks.html b/htdocs/management/zone_tasks.html index 632badf79..4836fead0 100644 --- a/htdocs/management/zone_tasks.html +++ b/htdocs/management/zone_tasks.html @@ -47,7 +47,7 @@ *print_showtaskslink = $m->comp('SELF:.sub_print_showtaskslink'); my $hideheader = 'style="display:none"' if ( !$showheader ); -my @all_zones = sort { $a->name cmp $b->name } Zone->retrieve_all(); +my @all_zones = Zone->retrieve_all(); my $manager = $ui->get_permission_manager($r); diff --git a/lib/Netdot/Model/Zone.pm b/lib/Netdot/Model/Zone.pm index a021e2dff..65ac32b21 100644 --- a/lib/Netdot/Model/Zone.pm +++ b/lib/Netdot/Model/Zone.pm @@ -151,6 +151,34 @@ sub search_like { return wantarray ? @result : $result; } +######################################################################### + +=head2 retrieve_all - Return all Zone objects sorted or an iterator + + Args: + none + Returns: + Sorted array of Zone objects or an iterator + Examples: + my @zones = Zone->retrieve_all(); + my $iterator = Zone->retrieve_all; + +=cut + +sub retrieve_all { + my ($class, @args) = @_; + $class->isa_class_method('retrieve_all'); + + # Sort by the "sort" field in ascending order, then sort by the name field + # of the zone. + return $class->SUPER::retrieve_from_sql( + qq{ + id IS NOT NULL + ORDER BY + sort, name + } + ); +} ######################################################################### @@ -168,6 +196,7 @@ sub search_like { expire max time before zone no longer authoritative minimum negative caching TTL (RFC 2308) template (optional) Name or ID of another zone to clone from + sort integer to sort displayed zones Returns: Zone object Examples: @@ -193,7 +222,7 @@ sub insert { ); # Copy values from template zone - foreach my $field ( qw(mname rname refresh retry expire minimum default_ttl include) ){ + foreach my $field ( qw(mname rname refresh retry expire minimum default_ttl include sort) ){ $state{$field} = $tzone->$field; } $newzone = $class->SUPER::insert( \%state ); @@ -227,6 +256,7 @@ sub insert { active => $argv->{active} || 1, export_file => $argv->{export_file} || $argv->{name}, default_ttl => $argv->{default_ttl} || $class->config->get('ZONE_DEFAULT_TTL'), + sort => $argv->{sort} || 100, ); $newzone = $class->SUPER::insert( \%state ); diff --git a/upgrade/updatedb b/upgrade/updatedb index 3a5e3d07e..160eacd11 100644 --- a/upgrade/updatedb +++ b/upgrade/updatedb @@ -37,6 +37,7 @@ if ( $schema_version eq '1.0.1' ){ &upg_104_105(); &upg_105_106(); &upg_106_107(); + &upg_107_108(); }elsif ( $schema_version eq '1.0.2' ){ @@ -45,6 +46,7 @@ if ( $schema_version eq '1.0.1' ){ &upg_104_105(); &upg_105_106(); &upg_106_107(); + &upg_107_108(); }elsif ( $schema_version eq '1.0.3' ){ @@ -52,22 +54,30 @@ if ( $schema_version eq '1.0.1' ){ &upg_104_105(); &upg_105_106(); &upg_106_107(); + &upg_107_108(); }elsif ( $schema_version eq '1.0.4' ){ &upg_104_105(); &upg_105_106(); &upg_106_107(); + &upg_107_108(); }elsif ( $schema_version eq '1.0.5' ){ &upg_105_106(); &upg_106_107(); + &upg_107_108(); }elsif ( $schema_version eq '1.0.6' ){ &upg_106_107(); + &upg_107_108(); +}elsif ( $schema_version eq '1.0.7' ){ + + &upg_107_108(); + }else{ die "Unsupported version for this upgrade: $schema_version\n"; } @@ -340,3 +350,9 @@ sub upg_105_106 { sub upg_106_107 { push @statements, "UPDATE schemainfo SET version='1.0.7' WHERE id=1;", } + +######################################################################### +sub upg_107_108 { + push @statements, "ALTER TABLE zone ADD COLUMN sort INTEGER NOT NULL DEFAULT 100;"; + push @statements, "UPDATE schemainfo SET version='1.0.8' WHERE id=1;", +}