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;", +}