From ac1a9c7eaea374f85bf8ce0281ab03feb37fb9ba Mon Sep 17 00:00:00 2001 From: JT Smith Date: Thu, 16 Mar 2006 22:01:39 +0000 Subject: [PATCH] added status return codes to activities, and fixed a problem with workflow parameters --- lib/WebGUI/VersionTag.pm | 21 ++++++ lib/WebGUI/Workflow/Activity.pm | 29 ++++++- .../Workflow/Activity/ArchiveOldThreads.pm | 1 + .../Workflow/Activity/CleanFileCache.pm | 1 + .../Workflow/Activity/CleanLoginHistory.pm | 1 + .../Workflow/Activity/CleanTempStorage.pm | 1 + .../Workflow/Activity/CommitVersionTag.pm | 1 + lib/WebGUI/Workflow/Activity/CreateCronJob.pm | 2 +- lib/WebGUI/Workflow/Activity/DecayKarma.pm | 1 + .../Activity/DeleteExpiredSessions.pm | 1 + .../Workflow/Activity/ExpireGroupings.pm | 1 + .../Activity/ExpireSubscriptionCodes.pm | 1 + .../Workflow/Activity/GetSyndicatedContent.pm | 2 +- .../Workflow/Activity/NotifyAboutUser.pm | 2 +- .../Activity/NotifyAboutVersionTag.pm | 2 +- .../Activity/ProcessRecurringPayments.pm | 2 +- .../Activity/PurgeOldAssetRevisions.pm | 2 +- lib/WebGUI/Workflow/Activity/PurgeOldTrash.pm | 2 +- .../Activity/RequestApprovalForVersionTag.pm | 5 +- .../Workflow/Activity/RollbackVersionTag.pm | 1 + .../Workflow/Activity/RunCommandAsUser.pm | 5 +- .../Activity/SummarizePassiveProfileLog.pm | 3 +- .../Workflow/Activity/SyncProfilesToLdap.pm | 75 ++++++++++--------- .../Workflow/Activity/TrashClipboard.pm | 1 + .../Workflow/Activity/TrashExpiredEvents.pm | 2 +- .../Workflow/Activity/TrashVersionTag.pm | 1 + .../Workflow/Activity/UnlockVersionTag.pm | 1 + .../Workflow/Activity/_activity.skeleton | 1 + lib/WebGUI/Workflow/Cron.pm | 10 ++- lib/WebGUI/Workflow/Instance.pm | 16 ++-- 30 files changed, 135 insertions(+), 59 deletions(-) diff --git a/lib/WebGUI/VersionTag.pm b/lib/WebGUI/VersionTag.pm index da37920d0..16ee6272d 100644 --- a/lib/WebGUI/VersionTag.pm +++ b/lib/WebGUI/VersionTag.pm @@ -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 ( ) diff --git a/lib/WebGUI/Workflow/Activity.pm b/lib/WebGUI/Workflow/Activity.pm index 028683655..35ff6910d 100644 --- a/lib/WebGUI/Workflow/Activity.pm +++ b/lib/WebGUI/Workflow/Activity.pm @@ -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: diff --git a/lib/WebGUI/Workflow/Activity/ArchiveOldThreads.pm b/lib/WebGUI/Workflow/Activity/ArchiveOldThreads.pm index 39558ccc4..152ce57b1 100644 --- a/lib/WebGUI/Workflow/Activity/ArchiveOldThreads.pm +++ b/lib/WebGUI/Workflow/Activity/ArchiveOldThreads.pm @@ -90,6 +90,7 @@ sub execute { $b->finish; } $a->finish; + return $self->COMPLETE; } 1; diff --git a/lib/WebGUI/Workflow/Activity/CleanFileCache.pm b/lib/WebGUI/Workflow/Activity/CleanFileCache.pm index 077fea245..66c1cf6f9 100644 --- a/lib/WebGUI/Workflow/Activity/CleanFileCache.pm +++ b/lib/WebGUI/Workflow/Activity/CleanFileCache.pm @@ -84,6 +84,7 @@ sub execute { $size = $cache->getNamespaceSize($expiresModifier); $expiresModifier += 60 * 30; # add 30 minutes each pass } + return $self->COMPLETE; } diff --git a/lib/WebGUI/Workflow/Activity/CleanLoginHistory.pm b/lib/WebGUI/Workflow/Activity/CleanLoginHistory.pm index ccf39712d..f4fe4e93f 100644 --- a/lib/WebGUI/Workflow/Activity/CleanLoginHistory.pm +++ b/lib/WebGUI/Workflow/Activity/CleanLoginHistory.pm @@ -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; } diff --git a/lib/WebGUI/Workflow/Activity/CleanTempStorage.pm b/lib/WebGUI/Workflow/Activity/CleanTempStorage.pm index bf82784dd..476e5b77e 100644 --- a/lib/WebGUI/Workflow/Activity/CleanTempStorage.pm +++ b/lib/WebGUI/Workflow/Activity/CleanTempStorage.pm @@ -134,6 +134,7 @@ sub recurseFileSystem { } } } + return $self->COMPLETE; } diff --git a/lib/WebGUI/Workflow/Activity/CommitVersionTag.pm b/lib/WebGUI/Workflow/Activity/CommitVersionTag.pm index 6fc64a99c..112de5d39 100644 --- a/lib/WebGUI/Workflow/Activity/CommitVersionTag.pm +++ b/lib/WebGUI/Workflow/Activity/CommitVersionTag.pm @@ -71,6 +71,7 @@ sub execute { my $self = shift; my $versionTag = shift; $versionTag->commit; + return $self->COMPLETE; } diff --git a/lib/WebGUI/Workflow/Activity/CreateCronJob.pm b/lib/WebGUI/Workflow/Activity/CreateCronJob.pm index f6f5088cf..117fafc9f 100644 --- a/lib/WebGUI/Workflow/Activity/CreateCronJob.pm +++ b/lib/WebGUI/Workflow/Activity/CreateCronJob.pm @@ -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; } diff --git a/lib/WebGUI/Workflow/Activity/DecayKarma.pm b/lib/WebGUI/Workflow/Activity/DecayKarma.pm index 8fa8e6b6f..3dbb58caa 100644 --- a/lib/WebGUI/Workflow/Activity/DecayKarma.pm +++ b/lib/WebGUI/Workflow/Activity/DecayKarma.pm @@ -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; } diff --git a/lib/WebGUI/Workflow/Activity/DeleteExpiredSessions.pm b/lib/WebGUI/Workflow/Activity/DeleteExpiredSessions.pm index 69b897fd3..d18a3e625 100644 --- a/lib/WebGUI/Workflow/Activity/DeleteExpiredSessions.pm +++ b/lib/WebGUI/Workflow/Activity/DeleteExpiredSessions.pm @@ -77,6 +77,7 @@ sub execute { } } $sth->finish; + return $self->COMPLETE; } diff --git a/lib/WebGUI/Workflow/Activity/ExpireGroupings.pm b/lib/WebGUI/Workflow/Activity/ExpireGroupings.pm index 094e6ce3a..55869b2ab 100644 --- a/lib/WebGUI/Workflow/Activity/ExpireGroupings.pm +++ b/lib/WebGUI/Workflow/Activity/ExpireGroupings.pm @@ -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; } diff --git a/lib/WebGUI/Workflow/Activity/ExpireSubscriptionCodes.pm b/lib/WebGUI/Workflow/Activity/ExpireSubscriptionCodes.pm index acbf9607e..0ed4226b5 100644 --- a/lib/WebGUI/Workflow/Activity/ExpireSubscriptionCodes.pm +++ b/lib/WebGUI/Workflow/Activity/ExpireSubscriptionCodes.pm @@ -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; } diff --git a/lib/WebGUI/Workflow/Activity/GetSyndicatedContent.pm b/lib/WebGUI/Workflow/Activity/GetSyndicatedContent.pm index b3be986f2..dbfc72c7a 100644 --- a/lib/WebGUI/Workflow/Activity/GetSyndicatedContent.pm +++ b/lib/WebGUI/Workflow/Activity/GetSyndicatedContent.pm @@ -79,7 +79,7 @@ sub execute { WebGUI::Asset::Wobject::SyndicatedContent::_get_rss_data($self->session,$_); } } - return 1; + return $self->COMPLETE; } diff --git a/lib/WebGUI/Workflow/Activity/NotifyAboutUser.pm b/lib/WebGUI/Workflow/Activity/NotifyAboutUser.pm index b090d26f9..78bf7c730 100644 --- a/lib/WebGUI/Workflow/Activity/NotifyAboutUser.pm +++ b/lib/WebGUI/Workflow/Activity/NotifyAboutUser.pm @@ -99,7 +99,7 @@ sub execute { subject=>$self->get("subject") }); $mail->addText($message); - return $mail->send; + return $mail->send ? $self->COMPLETE : $self->ERROR; } diff --git a/lib/WebGUI/Workflow/Activity/NotifyAboutVersionTag.pm b/lib/WebGUI/Workflow/Activity/NotifyAboutVersionTag.pm index b49ed0ceb..e014a3d95 100644 --- a/lib/WebGUI/Workflow/Activity/NotifyAboutVersionTag.pm +++ b/lib/WebGUI/Workflow/Activity/NotifyAboutVersionTag.pm @@ -108,7 +108,7 @@ sub execute { $properties->{groupId} = $versionTag->get("groupToUse"); } $inbox->addMessage($properties); - return 1; + return $self->COMPLETE; } diff --git a/lib/WebGUI/Workflow/Activity/ProcessRecurringPayments.pm b/lib/WebGUI/Workflow/Activity/ProcessRecurringPayments.pm index 9c22195b5..95baa88ae 100644 --- a/lib/WebGUI/Workflow/Activity/ProcessRecurringPayments.pm +++ b/lib/WebGUI/Workflow/Activity/ProcessRecurringPayments.pm @@ -130,7 +130,7 @@ sub execute { subject=>'Daily recurring payments report' }); $mail->addText($message); - $mail->send; + return $mail->send ? $self->COMPLETE : $self->ERROR; } 1; diff --git a/lib/WebGUI/Workflow/Activity/PurgeOldAssetRevisions.pm b/lib/WebGUI/Workflow/Activity/PurgeOldAssetRevisions.pm index 21dc8f620..07d13e21a 100644 --- a/lib/WebGUI/Workflow/Activity/PurgeOldAssetRevisions.pm +++ b/lib/WebGUI/Workflow/Activity/PurgeOldAssetRevisions.pm @@ -84,7 +84,7 @@ sub execute { } } $sth->finish; - return 1; + return $self->COMPLETE; } diff --git a/lib/WebGUI/Workflow/Activity/PurgeOldTrash.pm b/lib/WebGUI/Workflow/Activity/PurgeOldTrash.pm index a55801eb2..a10b77640 100644 --- a/lib/WebGUI/Workflow/Activity/PurgeOldTrash.pm +++ b/lib/WebGUI/Workflow/Activity/PurgeOldTrash.pm @@ -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; } diff --git a/lib/WebGUI/Workflow/Activity/RequestApprovalForVersionTag.pm b/lib/WebGUI/Workflow/Activity/RequestApprovalForVersionTag.pm index 87b940009..87e526021 100644 --- a/lib/WebGUI/Workflow/Activity/RequestApprovalForVersionTag.pm +++ b/lib/WebGUI/Workflow/Activity/RequestApprovalForVersionTag.pm @@ -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; } diff --git a/lib/WebGUI/Workflow/Activity/RollbackVersionTag.pm b/lib/WebGUI/Workflow/Activity/RollbackVersionTag.pm index 70f342f3a..3f7e8191a 100644 --- a/lib/WebGUI/Workflow/Activity/RollbackVersionTag.pm +++ b/lib/WebGUI/Workflow/Activity/RollbackVersionTag.pm @@ -71,6 +71,7 @@ sub execute { my $self = shift; my $versionTag = shift; $versionTag->rollback; + return $self->COMPLETE; } diff --git a/lib/WebGUI/Workflow/Activity/RunCommandAsUser.pm b/lib/WebGUI/Workflow/Activity/RunCommandAsUser.pm index 15c9363fc..df516f903 100644 --- a/lib/WebGUI/Workflow/Activity/RunCommandAsUser.pm +++ b/lib/WebGUI/Workflow/Activity/RunCommandAsUser.pm @@ -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; } } diff --git a/lib/WebGUI/Workflow/Activity/SummarizePassiveProfileLog.pm b/lib/WebGUI/Workflow/Activity/SummarizePassiveProfileLog.pm index 30f80e06c..fb467b08e 100644 --- a/lib/WebGUI/Workflow/Activity/SummarizePassiveProfileLog.pm +++ b/lib/WebGUI/Workflow/Activity/SummarizePassiveProfileLog.pm @@ -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; } diff --git a/lib/WebGUI/Workflow/Activity/SyncProfilesToLdap.pm b/lib/WebGUI/Workflow/Activity/SyncProfilesToLdap.pm index 5734231da..845349a98 100644 --- a/lib/WebGUI/Workflow/Activity/SyncProfilesToLdap.pm +++ b/lib/WebGUI/Workflow/Activity/SyncProfilesToLdap.pm @@ -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; diff --git a/lib/WebGUI/Workflow/Activity/TrashClipboard.pm b/lib/WebGUI/Workflow/Activity/TrashClipboard.pm index f6196b7f9..4cc59705a 100644 --- a/lib/WebGUI/Workflow/Activity/TrashClipboard.pm +++ b/lib/WebGUI/Workflow/Activity/TrashClipboard.pm @@ -81,6 +81,7 @@ sub execute { my $asset = WebGUI::Asset->new($id,$class); $asset->trash; } + return $self->COMPLETE; } diff --git a/lib/WebGUI/Workflow/Activity/TrashExpiredEvents.pm b/lib/WebGUI/Workflow/Activity/TrashExpiredEvents.pm index 2b62fa9c5..0fa30cfe9 100644 --- a/lib/WebGUI/Workflow/Activity/TrashExpiredEvents.pm +++ b/lib/WebGUI/Workflow/Activity/TrashExpiredEvents.pm @@ -84,7 +84,7 @@ sub execute { } } $sth->finish; - return 1; + return $self->COMPLETE; } diff --git a/lib/WebGUI/Workflow/Activity/TrashVersionTag.pm b/lib/WebGUI/Workflow/Activity/TrashVersionTag.pm index ba87838ee..6ad22a1d3 100644 --- a/lib/WebGUI/Workflow/Activity/TrashVersionTag.pm +++ b/lib/WebGUI/Workflow/Activity/TrashVersionTag.pm @@ -75,6 +75,7 @@ sub execute { } $versionTag->lock; $versionTag->clearWorking; + return $self->COMPLETE; } diff --git a/lib/WebGUI/Workflow/Activity/UnlockVersionTag.pm b/lib/WebGUI/Workflow/Activity/UnlockVersionTag.pm index 5f475417e..bc1c87c63 100644 --- a/lib/WebGUI/Workflow/Activity/UnlockVersionTag.pm +++ b/lib/WebGUI/Workflow/Activity/UnlockVersionTag.pm @@ -71,6 +71,7 @@ sub execute { my $self = shift; my $versionTag = shift; $versionTag->unlock; + return $self->COMPLETE; } diff --git a/lib/WebGUI/Workflow/Activity/_activity.skeleton b/lib/WebGUI/Workflow/Activity/_activity.skeleton index 0b20e659e..0a613176a 100644 --- a/lib/WebGUI/Workflow/Activity/_activity.skeleton +++ b/lib/WebGUI/Workflow/Activity/_activity.skeleton @@ -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; } diff --git a/lib/WebGUI/Workflow/Cron.pm b/lib/WebGUI/Workflow/Cron.pm index 02b934136..cd26760a7 100644 --- a/lib/WebGUI/Workflow/Cron.pm +++ b/lib/WebGUI/Workflow/Cron.pm @@ -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}); diff --git a/lib/WebGUI/Workflow/Instance.pm b/lib/WebGUI/Workflow/Instance.pm index 1ba55ab3a..0735344a4 100644 --- a/lib/WebGUI/Workflow/Instance.pm +++ b/lib/WebGUI/Workflow/Instance.pm @@ -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});