Changeset 325 for trunk/DNSDB.pm


Ignore:
Timestamp:
05/02/12 15:03:07 (12 years ago)
Author:
Kris Deugau
Message:

/trunk

Move SQL from user list code into DNSDB.pm. See #1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/DNSDB.pm

    r324 r325  
    4444        &getGroupCount &getGroupList
    4545        &addUser &updateUser &delUser &userFullName &userStatus &getUserData
     46        &getUserCount &getUserList
    4647        &getSOA &updateSOA &getRecLine &getDomRecs &getRecCount
    4748        &addRec &updateRec &delRec
     
    6869                &getGroupCount &getGroupList
    6970                &addUser &updateUser &delUser &userFullName &userStatus &getUserData
     71                &getUserCount &getUserList
    7072                &getSOA &updateSOA &getRecLine &getDomRecs &getRecCount
    7173                &addRec &updateRec &delRec
     
    23562358  return ('OK',"User $username ($fname $lname) added");
    23572359} # end addUser
     2360
     2361
     2362## DNSDB::getUserCount()
     2363# Get count of users in group
     2364# Takes a database handle and hash containing at least the current group, and optionally:
     2365# - a reference list of secondary groups
     2366# - a filter string
     2367# - a "Starts with" string
     2368sub getUserCount {
     2369  my $dbh = shift;
     2370
     2371  my %args = @_;
     2372
     2373  my @filterargs;
     2374
     2375  $args{startwith} = undef if $args{startwith} && $args{startwith} !~ /^(?:[a-z]|0-9)$/;
     2376  push @filterargs, "^$args{startwith}" if $args{startwith};
     2377  push @filterargs, $args{filter} if $args{filter};
     2378
     2379
     2380  my $sql = "SELECT count(*) FROM users ".
     2381        "WHERE group_id IN ($args{curgroup}".($args{childlist} ? ",$args{childlist}" : '').")".
     2382        ($args{startwith} ? " AND username ~* ?" : '').
     2383        ($args{filter} ? " AND username ~* ?" : '');
     2384  my ($count) = $dbh->selectrow_array($sql, undef, (@filterargs) );
     2385  $errstr = $dbh->errstr if !$count;
     2386  return $count;
     2387} # end getUserCount()
     2388
     2389
     2390## DNSDB::getUserList()
     2391# Get list of users
     2392# Takes the same arguments as getUserCount() above, plus optional:
     2393# - sort field
     2394# - sort order
     2395# - offset/return-all-everything flag (defaults to $perpage records)
     2396sub getUserList {
     2397  my $dbh = shift;
     2398
     2399  my %args = @_;
     2400
     2401  my @filterargs;
     2402
     2403  $args{startwith} = undef if $args{startwith} && $args{startwith} !~ /^(?:[a-z]|0-9)$/;
     2404  push @filterargs, "^$args{startwith}" if $args{startwith};
     2405  push @filterargs, $args{filter} if $args{filter};
     2406
     2407  # better to request sorts on "simple" names, but it means we need to map it to real columns
     2408  my %sortmap = (user => 'u.username', type => 'u.type', group => 'g.group_name', status => 'u.status',
     2409        fname => 'fname');
     2410  $args{sortby} = $sortmap{$args{sortby}};
     2411
     2412  # protection against bad or missing arguments
     2413  $args{sortorder} = 'ASC' if !$args{sortorder};
     2414  $args{sortby} = 'u.username' if !$args{sortby};
     2415  $args{offset} = 0 if !$args{offset};
     2416
     2417  my $sql = "SELECT u.user_id, u.username, u.firstname || ' ' || u.lastname AS fname, u.type, g.group_name, u.status ".
     2418        "FROM users u ".
     2419        "INNER JOIN groups g ON u.group_id=g.group_id ".
     2420        "WHERE u.group_id IN ($args{curgroup}".($args{childlist} ? ",$args{childlist}" : '').")".
     2421        ($args{startwith} ? " AND u.username ~* ?" : '').
     2422        ($args{filter} ? " AND u.username ~* ?" : '').
     2423        " ORDER BY $args{sortby} $args{sortorder} ".
     2424        ($args{offset} eq 'all' ? '' : " LIMIT $config{perpage} OFFSET ".$args{offset}*$config{perpage});
     2425  my $ulist = $dbh->selectall_arrayref($sql, { Slice => {} }, (@filterargs) );
     2426  $errstr = $dbh->errstr if !$ulist;
     2427  return $ulist;
     2428} # end getUserList()
    23582429
    23592430
Note: See TracChangeset for help on using the changeset viewer.