added status return codes to activities, and fixed a problem with workflow parameters

This commit is contained in:
JT Smith 2006-03-16 22:01:39 +00:00
parent 4dc0fc073d
commit ac1a9c7eae
30 changed files with 135 additions and 59 deletions

View file

@ -16,6 +16,7 @@ package WebGUI::VersionTag;
use strict;
use WebGUI::Asset;
use WebGUI::Workflow::Instance;
=head1 NAME
@ -227,6 +228,26 @@ sub new {
bless {_session=>$session, _id=>$tagId, _data=>$data}, $class;
}
#-------------------------------------------------------------------
=head2 requestCommit ( )
Locks the version tag and then kicks off the approval/commit workflow for it.
=cut
sub requestCommit {
my $self = shift;
$self->lock;
my $instance = WebGUI::Workflow::Instance->new($self->session, {
workflowId=>$self->get("workflowId"),
className=>"WebGUI::VersionTag",
method=>"new",
parameters=>$self->getId
});
}
#-------------------------------------------------------------------
=head2 rollback ( )

View file

@ -18,7 +18,6 @@ package WebGUI::Workflow::Activity;
use strict;
use WebGUI::HTMLForm;
=head1 NAME
Package WebGUI::Workflow::Activity
@ -31,6 +30,34 @@ This package provides the base class for workflow activities.
use WebGUI::Workflow::Activity;
=head1 CONSTANTS
The following constants are available from this package.
=head2 COMPLETE
A constant to be sent to Spectre informing it that this activity completed successfully.
=cut
sub COMPLETE { return "complete" };
=head2 ERROR
A constant to be sent to Spectre informing it that this activity did not execute properly due to some error.
=cut
sub ERROR { return "error" };
=head2 WAITING
A constant to be sent to Spectre informing it that this actiivty is waiting for some other event to be triggered.
=cut
sub WAITING { return "waiting" };
=head1 METHODS
These methods are available from this class:

View file

@ -90,6 +90,7 @@ sub execute {
$b->finish;
}
$a->finish;
return $self->COMPLETE;
}
1;

View file

@ -84,6 +84,7 @@ sub execute {
$size = $cache->getNamespaceSize($expiresModifier);
$expiresModifier += 60 * 30; # add 30 minutes each pass
}
return $self->COMPLETE;
}

View file

@ -76,6 +76,7 @@ See WebGUI::Workflow::Activity::execute() for details.
sub execute {
my $self = shift;
$self->session->db->write("delete from userLoginLog where timeStamp < ?", [(time()-(86400*$self->get("ageToDelete")))]);
return $self->COMPLETE;
}

View file

@ -134,6 +134,7 @@ sub recurseFileSystem {
}
}
}
return $self->COMPLETE;
}

View file

@ -71,6 +71,7 @@ sub execute {
my $self = shift;
my $versionTag = shift;
$versionTag->commit;
return $self->COMPLETE;
}

View file

@ -145,7 +145,7 @@ sub execute {
methodName=>$instance->get("methodName"),
parameters=>$instance->get("parameters")
});
return defined $cron ? 1 : 0;
return defined $cron ? $self->COMPLETE : $self->ERROR;
}

View file

@ -82,6 +82,7 @@ See WebGUI::Workflow::Activity::execute() for details.
sub execute {
my $self = shift;
$self->session->db->write("update users set karma=karma-? where karma > ?", [$self->get("decayFactor"), $self->get("minimumKarma")]);
return $self->COMPLETE;
}

View file

@ -77,6 +77,7 @@ sub execute {
}
}
$sth->finish;
return $self->COMPLETE;
}

View file

@ -95,6 +95,7 @@ sub execute {
$self->session->db->write("delete from groupings where groupId=? and expireDate < ?", [$data->{groupId}, time()-(86400*$data->{deleteOffset})]);
}
}
return $self->COMPLETE;
}

View file

@ -72,6 +72,7 @@ See WebGUI::Workflow::Activity::execute() for details.
sub execute {
my $self = shift;
$self->session->db->write("update subscriptionCode set status='Expired' where status = 'Unused' and dateCreated + expires < ?", [time()]);
return $self->COMPLETE;
}

View file

@ -79,7 +79,7 @@ sub execute {
WebGUI::Asset::Wobject::SyndicatedContent::_get_rss_data($self->session,$_);
}
}
return 1;
return $self->COMPLETE;
}

View file

@ -99,7 +99,7 @@ sub execute {
subject=>$self->get("subject")
});
$mail->addText($message);
return $mail->send;
return $mail->send ? $self->COMPLETE : $self->ERROR;
}

View file

@ -108,7 +108,7 @@ sub execute {
$properties->{groupId} = $versionTag->get("groupToUse");
}
$inbox->addMessage($properties);
return 1;
return $self->COMPLETE;
}

View file

@ -130,7 +130,7 @@ sub execute {
subject=>'Daily recurring payments report'
});
$mail->addText($message);
$mail->send;
return $mail->send ? $self->COMPLETE : $self->ERROR;
}
1;

View file

@ -84,7 +84,7 @@ sub execute {
}
}
$sth->finish;
return 1;
return $self->COMPLETE;
}

View file

@ -81,7 +81,7 @@ sub execute {
my $asset = WebGUI::Asset->new($self->session, $id,$class);
$asset->purge if (defined $asset);
}
return 1;
return $self->COMPLETE;
}

View file

@ -107,6 +107,7 @@ sub execute {
});
$instance->setScratch("messageId",$message->getId);
$instance->setScratch("status","notified");
return $self->WAITING;
} elsif ($instance->getScratch("status") eq "denied") {
my $newInstance = WebGUI::Workflow::Instance->create($self->session, {
workflowId=>$self->get("doOnDeny"),
@ -116,13 +117,15 @@ sub execute {
priority=>$instance->get("priority")
});
$instance->delete;
return $self->COMPLETE;
} elsif ($instance->getScratch("status") eq "approved") {
my $message = $inbox->getMessage($instance->getScratch("messageId"));
$message->setCompleted;
$instance->deleteScratch("messageId");
$instance->deleteScratch("status");
return 1;
return $self->COMPLETE;
}
return $self->WAITING;
}

View file

@ -71,6 +71,7 @@ sub execute {
my $self = shift;
my $versionTag = shift;
$versionTag->rollback;
return $self->COMPLETE;
}

View file

@ -82,9 +82,10 @@ sub execute {
$self->session->user({user=>$user});
WebGUI::Macro::process(\$cmd);
if (system($cmd)) {
return 0;
$self->session->errorHandler->error("Workflow: RunCommandAsUser failed because: $!");
return $self->ERROR;
} else {
return 1;
return $self->COMPLETE;
}
}

View file

@ -69,7 +69,7 @@ See WebGUI::Workflow::Activity::execute() for details.
sub execute {
my $self = shift;
return unless ($self->session->setting->get("passiveProfilingEnabled"));
return $self->COMPLETE unless ($self->session->setting->get("passiveProfilingEnabled"));
my ($firstDate) = $self->session->db->quickArray("select min(dateOfEntry) from passiveProfileLog");
my $sessionExpired = time() - $self->session->setting->get("sessionTimeout");
# We process entries for registered users and expired visitor sessions
@ -80,6 +80,7 @@ sub execute {
$self->session->db->write("delete from passiveProfileLog where passiveProfileLogId = ?", [$data->{passiveProfileLogId}]);
}
$sth->finish;
return $self->COMPLETE;
}

View file

@ -105,44 +105,45 @@ See WebGUI::Workflow::Activity::execute() for details.
sub execute {
my $self = shift;
my ($userId, $u, $userData, $uri, $port, %args, $fieldName, $ldap, $search, $a, $b);
$a = $self->session->db->read("select userId from users where authMethod='LDAP'");
while (($userId) = $a->array) {
$u = WebGUI::User->new($self->session, $userId);
my $auth = WebGUI::Auth->new($self->session, "LDAP",$userId);
$userData = $auth->getParams;
$uri = URI->new($userData->{ldapUrl});
if ($uri->port < 1) {
$port = 389;
} else {
$port = $uri->port;
}
%args = (port => $port);
$ldap = Net::LDAP->new($uri->host, %args);
if ($ldap) {
my $result = $ldap->bind;
if ($result->code == 0) {
$search = $ldap->search( base=>$userData->{connectDN}, filter=>"&(objectClass=*)" );
if($search->code) {
$self->session->errorHandler->warn("Couldn't search LDAP ".$uri->host." to find user ".$u->username." (".$userId.").\nError Message from LDAP: ".$ldapStatusCode{$search->code});
} elsif($search->count == 0) {
$self->session->errorHandler->warn("No results returned for user with dn ".$userData->{connectDN});
} else {
my $user = WebGUI::User->new($self->session, $userId);
$b = $self->session->db->read("select fieldName from userProfileField where profileCategoryId<>4");
while (($fieldName) = $b->array) {
if ($search->entry(0)->get_value(_alias($fieldName)) ne "") {
$user->profileField($fieldName,$search->entry(0)->get_value(_alias($fieldName)));
}
}
$b->finish;
}
$ldap->unbind;
} else {
$self->session->errorHandler->warn("Couldn't bind to LDAP host ".$uri->host."\nError Message from LDAP: ".$ldapStatusCode{$result->code});
}
}
$a = $self->session->db->read("select userId from users where authMethod='LDAP'");
while (($userId) = $a->array) {
$u = WebGUI::User->new($self->session, $userId);
my $auth = WebGUI::Auth->new($self->session, "LDAP",$userId);
$userData = $auth->getParams;
$uri = URI->new($userData->{ldapUrl});
if ($uri->port < 1) {
$port = 389;
} else {
$port = $uri->port;
}
$a->finish;
%args = (port => $port);
$ldap = Net::LDAP->new($uri->host, %args);
if ($ldap) {
my $result = $ldap->bind;
if ($result->code == 0) {
$search = $ldap->search( base=>$userData->{connectDN}, filter=>"&(objectClass=*)" );
if($search->code) {
$self->session->errorHandler->warn("Couldn't search LDAP ".$uri->host." to find user ".$u->username." (".$userId.").\nError Message from LDAP: ".$ldapStatusCode{$search->code});
} elsif($search->count == 0) {
$self->session->errorHandler->warn("No results returned for user with dn ".$userData->{connectDN});
} else {
my $user = WebGUI::User->new($self->session, $userId);
$b = $self->session->db->read("select fieldName from userProfileField where profileCategoryId<>4");
while (($fieldName) = $b->array) {
if ($search->entry(0)->get_value(_alias($fieldName)) ne "") {
$user->profileField($fieldName,$search->entry(0)->get_value(_alias($fieldName)));
}
}
$b->finish;
}
$ldap->unbind;
} else {
$self->session->errorHandler->warn("Couldn't bind to LDAP host ".$uri->host."\nError Message from LDAP: ".$ldapStatusCode{$result->code});
}
}
}
$a->finish;
return $self->COMPLETE;
}
1;

View file

@ -81,6 +81,7 @@ sub execute {
my $asset = WebGUI::Asset->new($id,$class);
$asset->trash;
}
return $self->COMPLETE;
}

View file

@ -84,7 +84,7 @@ sub execute {
}
}
$sth->finish;
return 1;
return $self->COMPLETE;
}

View file

@ -75,6 +75,7 @@ sub execute {
}
$versionTag->lock;
$versionTag->clearWorking;
return $self->COMPLETE;
}

View file

@ -71,6 +71,7 @@ sub execute {
my $self = shift;
my $versionTag = shift;
$versionTag->unlock;
return $self->COMPLETE;
}

View file

@ -75,6 +75,7 @@ See WebGUI::Workflow::Activity::execute() for details.
sub execute {
my $self = shift;
# do some work here, whatever this activity is supposed to do
return $self->COMPLETE;
}

View file

@ -17,7 +17,7 @@ package WebGUI::Workflow::Cron;
use strict;
use WebGUI::Workflow::Spectre;
use JSON;
=head1 NAME
@ -108,6 +108,10 @@ Returns the value for a given property. See the set() method for details.
sub get {
my $self = shift;
my $name = shift;
if ($name eq "parameters") {
my $parameters = JSON::jsonToObj( $self->{_data}{$name});
return $parameters->{parameters};
}
return $self->{_data}{$name};
}
@ -266,7 +270,9 @@ sub set {
$self->{_data}{workflowId} = $properties->{workflowId} || $self->{_data}{workflowId};
$self->{_data}{className} = (exists $properties->{className}) ? $properties->{className} : $self->{_data}{className};
$self->{_data}{methodName} = (exists $properties->{methodName}) ? $properties->{methodName} : $self->{_data}{methodName};
$self->{_data}{parameters} = (exists $properties->{parameters}) ? $properties->{parameters} : $self->{_data}{parameters};
if (exists $properties->{parameters}) {
$self->{_data}{parameters} = JSON::objToJson({parameters => $properties->{parameters}});
}
$self->{_data}{enabled} = 0 unless ($self->{_data}{workflowId});
my $spectre = WebGUI::Workflow::Spectre->new($self->session);
$self->session->db->setRow("WorkflowSchedule","taskId",$self->{_data});

View file

@ -16,6 +16,7 @@ package WebGUI::Workflow::Instance;
=cut
use strict;
use JSON;
use WebGUI::Workflow::Spectre;
@ -131,6 +132,10 @@ Returns the value for a given property. See the set() method for details.
sub get {
my $self = shift;
my $name = shift;
if ($name eq "parameters") {
my $parameters = JSON::jsonToObj( $self->{_data}{$name});
return $parameters->{parameters};
}
return $self->{_data}{$name};
}
@ -214,18 +219,13 @@ sub run {
my $method = $self->get("methodName");
my $params = $self->get("parameters");
if ($class && $method) {
$params = eval($params);
if ($@) {
$self->session->errorHandler->warn("Error reconsituting activity (".$activity->getId.") pass-in params: ".$@);
return "error";
}
$object = eval($class->$method($self->session, $params));
if ($@) {
$self->session->errorHandler->warn("Error instanciating activity (".$activity->getId.") pass-in object: ".$@);
return "error";
}
}
$activity->execute($object, $self);
return $activity->execute($object, $self);
}
@ -285,7 +285,9 @@ sub set {
$self->{_data}{workflowId} = $properties->{workflowId} || $self->{_data}{workflowId};
$self->{_data}{className} = (exists $properties->{className}) ? $properties->{className} : $self->{_data}{className};
$self->{_data}{methodName} = (exists $properties->{methodName}) ? $properties->{methodName} : $self->{_data}{methodName};
$self->{_data}{parameters} = (exists $properties->{parameters}) ? $properties->{parameters} : $self->{_data}{parameters};
if (exists $properties->{parameters}) {
$self->{_data}{parameters} = JSON::objToJson({parameters => $properties->{parameters}});
}
$self->{_data}{currentActivityId} = (exists $properties->{currentActivityId}) ? $properties->{currentActivityId} : $self->{_data}{currentActivityId};
$self->{_data}{lastUpdate} = time();
$self->session->db->setRow("WorkflowInstance","instanceId",$self->{_data});