Solstice::Factory::Group::Remote - Has the ability to create remote group objects.


Solstice documentation Contained in the Solstice distribution.

Index


Code Index:

NAME

Top

Solstice::Factory::Group::Remote - Has the ability to create remote group objects.

SYNOPSIS

Top

my $factory = Solstice::Factory::Group::Remote->new(); my $list = $factory->createByIDs(\@group_ids);

DESCRIPTION

Top

This object has the ability to create remote groups.

Export

None by default.

Methods

createByIDs(\@list)
createByGroupID($group_id)
createHashByGroupIDs(\@group_ids)
createBySourceID($source_id)
createBySourceIDAndDate($source_id, $datetime)

Returns a list of remote groups containing the passed $source_id and created on or after the passed $datetime.

_createRemoteGroupFromDBData(\%data)

AUTHOR

Top

Educational Technology Development Group <catalyst@u.washington.edu>

VERSION

Top

$Revision: 597 $

SEE ALSO

Top

Solstice::List.

COPYRIGHT

Top


Solstice documentation Contained in the Solstice distribution.
package Solstice::Factory::Group::Remote;

use 5.006_000;
use strict;
use warnings;

use base qw(Solstice::Factory);

use Solstice::Database;
use Solstice::DateTime;
use Solstice::List;

sub createByIDs {
    my $self = shift;
    my $ids  = shift;
    my $list = Solstice::List->new();

    return $list unless defined $ids && scalar @$ids;

    my $select_string = join ',', map { '?' } @$ids;
    
    my $db = Solstice::Database->new();
    my $db_name = $self->getConfigService()->getDBName();

    $db->readQuery("SELECT rg.*, rgs.package
                FROM $db_name.RemoteGroup AS rg
                JOIN $db_name.RemoteGroupSource AS rgs USING(remote_group_source_id)
                WHERE rg.remote_key != 0 AND rg.remote_group_id IN ($select_string)",
        @$ids);

    while (my $data = $db->fetchRow()) {
        my $remote_group = $self->_createRemoteGroupFromDBData($data);
        $list->push($remote_group) if defined $remote_group;
    }
    
    return $list;
}

sub createByGroupID {
    my $self = shift;
    my $group_id = shift;
    my $list = Solstice::List->new();

    return $list unless defined $group_id;
    
    my $db = Solstice::Database->new();
    my $db_name = $self->getConfigService()->getDBName();

    $db->readQuery("SELECT rg.*, rgs.package
                FROM $db_name.RemoteGroupsInGroup AS rgg
                        JOIN $db_name.RemoteGroup AS rg USING(remote_group_id)
                        JOIN $db_name.RemoteGroupSource AS rgs USING(remote_group_source_id)
                WHERE rgg.parent_group_id = ?", $group_id);

    while (my $data = $db->fetchRow()) {
        my $remote_group = $self->_createRemoteGroupFromDBData($data);
        $list->push($remote_group) if defined $remote_group;
    }
    
    return $list;
}

sub createHashByGroupIDs {
    my $self = shift;
    my $group_ids = shift;
    my $remote_groups = {};

    return $remote_groups unless defined $group_ids && scalar @$group_ids;

    my $select_string = join ',', map { '?' } @$group_ids;

    my $db = Solstice::Database->new();
    my $db_name = $self->getConfigService()->getDBName();

    $db->readQuery("SELECT rgg.parent_group_id, rg.*, rgs.package
                FROM $db_name.RemoteGroupsInGroup AS rgg
                JOIN $db_name.RemoteGroup AS rg USING(remote_group_id)
                JOIN $db_name.RemoteGroupSource AS rgs USING(remote_group_source_id)
                WHERE rg.remote_key != 0 AND rgg.parent_group_id IN ($select_string)
                ", @$group_ids);

    while (my $data = $db->fetchRow()) {
        my $remote_group = $self->_createRemoteGroupFromDBData($data);
        next unless defined $remote_group;
        $remote_groups->{$data->{'parent_group_id'}}->{$data->{'remote_group_id'}} = $remote_group;
    }

    return $remote_groups;
}

sub createBySourceID {
    my $self = shift;
    my $source_id = shift;
    my $list = Solstice::List->new();

    return $list unless defined $source_id;

    my $db = Solstice::Database->new();
    my $db_name = $self->getConfigService()->getDBName();
    
    $db->readQuery("SELECT rg.*, rgs.package
                FROM $db_name.RemoteGroup AS rg
                JOIN $db_name.RemoteGroupSource AS rgs USING(remote_group_source_id)
                WHERE rg.remote_key != 0 AND rg.remote_group_source_id = ?",
        $source_id);

    while (my $data = $db->fetchRow()) {
        my $remote_group = $self->_createRemoteGroupFromDBData($data);
        $list->push($remote_group) if defined $remote_group;
    }
    
    return $list;
}

sub createBySourceIDAndDate {
    my $self = shift;
    my $source_id = shift;
    my $datetime  = shift;
    my $list = Solstice::List->new();

    return $list unless (defined $source_id &&
        defined $datetime && $datetime->isValid());

    my $db = Solstice::Database->new();
    my $db_name = $self->getConfigService()->getDBName();

    $db->readQuery("SELECT rg.*, rgs.package
                FROM $db_name.RemoteGroup AS rg
                JOIN $db_name.RemoteGroupSource AS rgs USING(remote_group_source_id)
                WHERE rg.remote_key != 0 AND rg.remote_group_source_id = ?
                        AND date_created >= ?
                ORDER BY rg.date_created", $source_id, $datetime->toSQL());

    while (my $data = $db->fetchRow()) {
        my $remote_group = $self->_createRemoteGroupFromDBData($data);
        $list->push($remote_group) if defined $remote_group;
    }

    return $list;
}

sub _createRemoteGroupFromDBData {
    my $self = shift;
    my $data = shift;

    return unless defined $data;

    my $package = $data->{'package'};
    $self->loadModule($package);

    return $package->new({
        id                  => $data->{'remote_group_id'},
        remote_source_id    => $data->{'remote_group_source_id'},
        remote_key          => $data->{'remote_key'},
        name                => $data->{'name'},
        modification_date   => Solstice::DateTime->new($data->{'date_modified'}),
        creation_date       => Solstice::DateTime->new($data->{'date_created'}),
        reconciliation_date => Solstice::DateTime->new($data->{'date_reconciled'}),
    });
}

1;

__END__