Ignore:
Timestamp:
08/12/25 15:47:28 (31 hours ago)
Author:
Kris Deugau
Message:

/branches/secondaryzones

First chunk of adding secondary zone management

  • Menu link
  • Zone list page
  • Extend getZoneCount() and getZoneList() to read the secondary zone table
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/secondaryzones/DNSDB.pm

    r908 r911  
    31703170#  - an array of "acceptable" groups
    31713171#  - a flag for forward/reverse zones
     3172#  - a flag for primary/secondary zones
    31723173#  - Optionally accept a "starts with" and/or "contains" filter argument
    31733174# Returns an integer count of the resulting zone list.
     
    31963197
    31973198  my $sql;
    3198   # Not as compact, and fix-me-twice if the common bits get wrong, but much easier to read
    3199   if ($args{revrec} eq 'n') {
    3200     $sql = "SELECT count(*) FROM domains".
     3199
     3200  if ($args{secondary} eq 'y') {
     3201    # Secondary zones have less distinction between forward/reverse.
     3202    # May need to revisit that once viewing records in the zones.
     3203    $sql = "SELECT count(*) FROM secondaryzones".
     3204        " WHERE group_id IN ($args{curgroup}".($args{childlist} ? ",$args{childlist}" : '').")".
     3205        ($args{startwith} ? " AND zone ~* ?" : '').
     3206        ($args{filter} ? " AND zone ~* ?" : '');
     3207  } else {
     3208    if ($args{revrec} eq 'n') {
     3209      $sql = "SELECT count(*) FROM domains".
    32013210        " WHERE group_id IN ($args{curgroup}".($args{childlist} ? ",$args{childlist}" : '').")".
    32023211        ($args{startwith} ? " AND domain ~* ?" : '').
    32033212        ($args{filter} ? " AND domain ~* ?" : '');
    3204   } else {
    3205     $sql = "SELECT count(*) FROM revzones".
     3213    } else {
     3214      $sql = "SELECT count(*) FROM revzones".
    32063215        " WHERE group_id IN ($args{curgroup}".($args{childlist} ? ",$args{childlist}" : '').")".
    32073216        ($args{startwith} ? " AND CAST(revnet AS VARCHAR) ~* ?" : '');
    3208 #    if ($self->{showrev_arpa} eq 'zone' || $self->{showrev_arpa} eq 'all') {
    32093217      # Just In Case the UI is using formal .arpa notation, and someone enters something reversed,
    32103218      # we want to match both the formal and natural zone name
    32113219      $sql .= ($args{filter} ? " AND (CAST(revnet AS VARCHAR) ~* ? OR CAST(revnet AS VARCHAR) ~* ?)" : '');
    32123220      push @filterargs, join('[.]',reverse(split(/\[\.\]/,$args{filter}))) if $args{filter};
    3213 #    } else {
    3214 #      $sql .= ($args{filter} ? " AND CAST(revnet AS VARCHAR) ~* ?" : '');
    3215 #    }
     3221    }
    32163222  }
    32173223  my ($count) = $dbh->selectrow_array($sql, undef, @filterargs);
     
    32533259
    32543260  my $sql;
    3255   # Not as compact, and fix-me-twice if the common bits get wrong, but much easier to read
    3256   if ($args{revrec} eq 'n') {
    3257     $args{sortby} = 'domain' if !$args{sortby} || !grep /^$args{sortby}$/, ('domain','group','status');
     3261
     3262  if ($args{secondary} eq 'y') {
     3263    $args{sortby} = 'zone' if !$args{sortby} || !grep /^$args{sortby}$/, ('zone','primaryserver','group','status');
    32583264    $sql = q(SELECT
     3265                secondary_id AS zoneid,
     3266                zone,
     3267                primaryserver,
     3268                status,
     3269                groups.group_name AS group,
     3270                l.description AS location
     3271        FROM secondaryzones
     3272        LEFT JOIN locations l ON secondaryzones.default_location=l.location
     3273        INNER JOIN groups ON secondaryzones.group_id=groups.group_id ).
     3274        "WHERE secondaryzones.group_id IN ($args{curgroup}".($args{childlist} ? ",$args{childlist}" : '').")".
     3275        ($args{startwith} ? " AND zone ~* ?" : '').
     3276        ($args{filter} ? " AND zone ~* ?" : '');
     3277  } else {
     3278    if ($args{revrec} eq 'n') {
     3279      $args{sortby} = 'domain' if !$args{sortby} || !grep /^$args{sortby}$/, ('domain','group','status');
     3280      $sql = q(SELECT
    32593281                domain_id AS zoneid,
    32603282                domain AS zone,
     
    32683290        ($args{startwith} ? " AND domain ~* ?" : '').
    32693291        ($args{filter} ? " AND domain ~* ?" : '');
    3270   } else {
     3292    } else {
    32713293##fixme:  arguably startwith here is irrelevant.  depends on the UI though.
    3272     $args{sortby} = 'revnet' if !$args{sortby} || !grep /^$args{sortby}$/, ('revnet','group','status');
    3273     $sql = q(SELECT
     3294      $args{sortby} = 'revnet' if !$args{sortby} || !grep /^$args{sortby}$/, ('revnet','group','status');
     3295      $sql = q(SELECT
    32743296                rdns_id AS zoneid,
    32753297                revnet AS zone,
     
    32823304        " WHERE revzones.group_id IN ($args{curgroup}".($args{childlist} ? ",$args{childlist}" : '').")".
    32833305        ($args{startwith} ? " AND CAST(revnet AS VARCHAR) ~* ?" : '');
    3284 #    if ($self->{showrev_arpa} eq 'zone' || $self->{showrev_arpa} eq 'all') {
    32853306      # Just In Case the UI is using formal .arpa notation, and someone enters something reversed,
    32863307      # we want to match both the formal and natural zone name
    32873308      $sql .= ($args{filter} ? " AND (CAST(revnet AS VARCHAR) ~* ? OR CAST(revnet AS VARCHAR) ~* ?)" : '');
    32883309      push @filterargs, join('[.]',reverse(split(/\[\.\]/,$args{filter}))) if $args{filter};
    3289 #    } else {
    3290 #      $sql .= ($args{filter} ? " AND CAST(revnet AS VARCHAR) ~* ?" : '');
    3291 #    }
     3310    }
    32923311  }
    32933312  # A common tail.
Note: See TracChangeset for help on using the changeset viewer.