added status return codes to activities, and fixed a problem with workflow parameters
This commit is contained in:
parent
4dc0fc073d
commit
ac1a9c7eae
30 changed files with 135 additions and 59 deletions
|
|
@ -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 ( )
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ sub execute {
|
|||
$b->finish;
|
||||
}
|
||||
$a->finish;
|
||||
return $self->COMPLETE;
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ sub execute {
|
|||
$size = $cache->getNamespaceSize($expiresModifier);
|
||||
$expiresModifier += 60 * 30; # add 30 minutes each pass
|
||||
}
|
||||
return $self->COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -134,6 +134,7 @@ sub recurseFileSystem {
|
|||
}
|
||||
}
|
||||
}
|
||||
return $self->COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ sub execute {
|
|||
my $self = shift;
|
||||
my $versionTag = shift;
|
||||
$versionTag->commit;
|
||||
return $self->COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@ sub execute {
|
|||
}
|
||||
}
|
||||
$sth->finish;
|
||||
return $self->COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ sub execute {
|
|||
WebGUI::Asset::Wobject::SyndicatedContent::_get_rss_data($self->session,$_);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
return $self->COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ sub execute {
|
|||
subject=>$self->get("subject")
|
||||
});
|
||||
$mail->addText($message);
|
||||
return $mail->send;
|
||||
return $mail->send ? $self->COMPLETE : $self->ERROR;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ sub execute {
|
|||
$properties->{groupId} = $versionTag->get("groupToUse");
|
||||
}
|
||||
$inbox->addMessage($properties);
|
||||
return 1;
|
||||
return $self->COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ sub execute {
|
|||
subject=>'Daily recurring payments report'
|
||||
});
|
||||
$mail->addText($message);
|
||||
$mail->send;
|
||||
return $mail->send ? $self->COMPLETE : $self->ERROR;
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ sub execute {
|
|||
}
|
||||
}
|
||||
$sth->finish;
|
||||
return 1;
|
||||
return $self->COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ sub execute {
|
|||
my $self = shift;
|
||||
my $versionTag = shift;
|
||||
$versionTag->rollback;
|
||||
return $self->COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ sub execute {
|
|||
my $asset = WebGUI::Asset->new($id,$class);
|
||||
$asset->trash;
|
||||
}
|
||||
return $self->COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ sub execute {
|
|||
}
|
||||
}
|
||||
$sth->finish;
|
||||
return 1;
|
||||
return $self->COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ sub execute {
|
|||
}
|
||||
$versionTag->lock;
|
||||
$versionTag->clearWorking;
|
||||
return $self->COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ sub execute {
|
|||
my $self = shift;
|
||||
my $versionTag = shift;
|
||||
$versionTag->unlock;
|
||||
return $self->COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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});
|
||||
|
|
|
|||
|
|
@ -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});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue