From 6d401f77392d4376db51214e42282628c7b744fd Mon Sep 17 00:00:00 2001 From: Anne-Cath Date: Mon, 24 Jun 2024 17:10:57 +0200 Subject: [PATCH 1/9] =?UTF-8?q?N=C2=B03366=20-=20Multiple=20target=20state?= =?UTF-8?q?=20on=20approbal-extended=20-=20WIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- datamodel.combodo-approval-extended.xml | 81 +++++++++++++++++++------ main.combodo-approval-extended.php | 17 ++++-- 2 files changed, 72 insertions(+), 26 deletions(-) diff --git a/datamodel.combodo-approval-extended.xml b/datamodel.combodo-approval-extended.xml index 58d2c65..60a4d9d 100755 --- a/datamodel.combodo-approval-extended.xml +++ b/datamodel.combodo-approval-extended.xml @@ -87,6 +87,18 @@ true + + bizmodel + target_class + UserRequest + false + + + target_class_state + target_class + + false + level1_rule @@ -200,15 +212,21 @@ 10 - - 10 - - - 20 - - - 30 - + + 10 + + + 20 + + + 30 + + + 40 + + + 50 + @@ -279,9 +297,15 @@ 20 - - 30 - + + 30 + + + 40 + + + 50 + @@ -342,7 +366,14 @@ - + + + target_class_state + obj_class + + false + + true @@ -355,22 +386,28 @@ 'first_reject' => ApprovalScheme::EXIT_ON_FIRST_REJECT, 'first_approve' => ApprovalScheme::EXIT_ON_FIRST_APPROVE, ); - if ((get_class($oObject) != 'UserRequest')) + + $aAllowedClasses = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'targets', ['UserRequest'=>['target_state'=>'new']]); +IssueLog::Error('aAllowedClasses'.json_encode($aAllowedClasses)); +if (array_key_exists(get_class($oObject), $aAllowedClasses) === false) { return null; } - $sTargetState = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'target_state', 'new'); - if ($sReachingState != $sTargetState) + + $sTargetState = $aAllowedClasses[get_class($oObject)][ 'target_state']; +IssueLog::Error('aAllowedClasses $sTargetState'.json_encode($sTargetState)); + if (in_array($sReachingState, explode(',', $sTargetState)) === false) { return null; } - $sOQL = 'SELECT ApprovalRule AS ar JOIN ServiceSubcategory AS sc ON sc.approvalrule_id = ar.id WHERE sc.id = :servicesubcategory'; + $sOQL = 'SELECT ApprovalRule AS ar JOIN ServiceSubcategory AS sc ON sc.approvalrule_id = ar.id WHERE sc.id = :servicesubcategory AND ar.target_class = :target_class AND ar.target_class_state = :target_class_state'; $oApprovalRuleSet = new DBObjectSet( DBObjectSearch::FromOQL($sOQL), array(), - array('servicesubcategory' => $oObject->Get('servicesubcategory_id')) - ); + ['servicesubcategory' => $oObject->Get('servicesubcategory_id'), 'target_class' => get_class($oObject), 'target_class_state' => $sReachingState]); + IssueLog::Error('ApprovalRule: '.$oApprovalRuleSet->GetFilter()->ToOQL(true)); + IssueLog::Error('ApprovalRuleSet count: '.$oApprovalRuleSet->count()); if ($oApprovalRuleSet->count() == 0) { // No approval rule applies to the current object @@ -381,6 +418,8 @@ $oApprovalRule = $oApprovalRuleSet->fetch(); $oScheme = new ExtendedApprovalScheme(); + $oScheme->Set('target_class_state', $sReachingState); + $oScheme->Set('started_state', $sReachingState); $bStepAdded = false; @@ -551,7 +590,9 @@ return false; } - $sAllowedProfiles = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'bypass_profiles', 'Administrator, Service Manager'); + $aAllowedClasses = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'targets', ['UserRequest'=>['bypass_profiles'=>' Administrator, Service Manager']]); + + $sAllowedProfiles = $aAllowedClasses[$this->Get('obj_class')]['bypass_profiles']; $aAllowed = array(); foreach (explode(',', $sAllowedProfiles) as $sProfileRaw) { diff --git a/main.combodo-approval-extended.php b/main.combodo-approval-extended.php index 8840ffc..d9e4b10 100755 --- a/main.combodo-approval-extended.php +++ b/main.combodo-approval-extended.php @@ -51,14 +51,19 @@ class HideButtonsPlugin implements iApplicationUIExtension { public function OnDisplayProperties($oObject, WebPage $oPage, $bEditMode = false) { - if ( (get_class($oObject) == 'UserRequest' ) && ( $oObject->IsNew()) ) + $aAllowedClasses = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'targets', ['UserRequest'=>['bypass_profiles'=>' Administrator, Service Manager']]); + if (array_key_exists(get_class($oObject), $aAllowedClasses) && MetaModel::HasLifecycle(get_class($oObject))) { - $oSet = new DBObjectSet(new DBObjectSearch('ApprovalRule')); - $iCount = $oSet->Count(); - if ($iCount > 0) - { + $sOQL = 'SELECT ApprovalRule AS ar JOIN ServiceSubcategory AS sc ON sc.approvalrule_id = ar.id WHERE ar.target_class = :target_class AND ar.target_class_state = :target_state'; + $sStateAttCode = MetaModel::GetStateAttributeCode(get_class($oObject)); + $sTargetState = $oObject->Get($sStateAttCode); + $oApprovalRuleSet = new DBObjectSet( + DBObjectSearch::FromOQL($sOQL), + array(), + ['target_class' => get_class($oObject), 'target_state' => $sTargetState]); + if ($oApprovalRuleSet->Count() > 0) { $oPage->add_ready_script( -<< Date: Mon, 12 Aug 2024 17:41:23 +0200 Subject: [PATCH 2/9] WIP : change name of conf + usage --- datamodel.combodo-approval-extended.xml | 19 ++++++-------- main.combodo-approval-extended.php | 33 ++++++++++++++++--------- module.combodo-approval-extended.php | 17 ++++++++----- 3 files changed, 39 insertions(+), 30 deletions(-) diff --git a/datamodel.combodo-approval-extended.xml b/datamodel.combodo-approval-extended.xml index 60a4d9d..ee17690 100755 --- a/datamodel.combodo-approval-extended.xml +++ b/datamodel.combodo-approval-extended.xml @@ -387,17 +387,13 @@ 'first_approve' => ApprovalScheme::EXIT_ON_FIRST_APPROVE, ); - $aAllowedClasses = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'targets', ['UserRequest'=>['target_state'=>'new']]); -IssueLog::Error('aAllowedClasses'.json_encode($aAllowedClasses)); -if (array_key_exists(get_class($oObject), $aAllowedClasses) === false) - { + $aAllowedClasses = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'targets', ApprovalConfiguration::DEFAULT_TARGET); + if (array_key_exists(get_class($oObject), $aAllowedClasses) === false) { return null; } - $sTargetState = $aAllowedClasses[get_class($oObject)][ 'target_state']; -IssueLog::Error('aAllowedClasses $sTargetState'.json_encode($sTargetState)); - if (in_array($sReachingState, explode(',', $sTargetState)) === false) - { + $aTargetState = $aAllowedClasses[get_class($oObject)][ 'target_states']; + if (in_array($sReachingState, $aTargetState) === false) { return null; } @@ -406,15 +402,14 @@ IssueLog::Error('aAllowedClasses $sTargetState'.json_encode($sTargetState)); DBObjectSearch::FromOQL($sOQL), array(), ['servicesubcategory' => $oObject->Get('servicesubcategory_id'), 'target_class' => get_class($oObject), 'target_class_state' => $sReachingState]); - IssueLog::Error('ApprovalRule: '.$oApprovalRuleSet->GetFilter()->ToOQL(true)); - IssueLog::Error('ApprovalRuleSet count: '.$oApprovalRuleSet->count()); + if ($oApprovalRuleSet->count() == 0) { // No approval rule applies to the current object return null; } - $bReusePreviousAnswers = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'reuse_previous_answers', true); + $bReusePreviousAnswers = $aAllowedClasses[get_class($oObject)][ 'reuse_previous_answers']; $oApprovalRule = $oApprovalRuleSet->fetch(); $oScheme = new ExtendedApprovalScheme(); @@ -590,7 +585,7 @@ IssueLog::Error('aAllowedClasses $sTargetState'.json_encode($sTargetState)); return false; } - $aAllowedClasses = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'targets', ['UserRequest'=>['bypass_profiles'=>' Administrator, Service Manager']]); + $aAllowedClasses = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'targets', ApprovalConfiguration::DEFAULT_TARGET); $sAllowedProfiles = $aAllowedClasses[$this->Get('obj_class')]['bypass_profiles']; $aAllowed = array(); diff --git a/main.combodo-approval-extended.php b/main.combodo-approval-extended.php index d9e4b10..925fe37 100755 --- a/main.combodo-approval-extended.php +++ b/main.combodo-approval-extended.php @@ -23,7 +23,16 @@ * @author Denis Flaven * @license http://www.opensource.org/licenses/gpl-3.0.html LGPL */ - +class ApprovalConfiguration +{ + const DEFAULT_TARGET = [ + 'UserRequest' => [ + 'target_states' => ['new'], + 'bypass_profiles' => 'Service Manager', + 'reuse_previous_answers' => true, + ] + ]; +} class ApprovalComputeWorkingHours implements iWorkingTimeComputer { public static function GetDescription() @@ -51,22 +60,22 @@ class HideButtonsPlugin implements iApplicationUIExtension { public function OnDisplayProperties($oObject, WebPage $oPage, $bEditMode = false) { - $aAllowedClasses = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'targets', ['UserRequest'=>['bypass_profiles'=>' Administrator, Service Manager']]); + $aAllowedClasses = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'targets',ApprovalConfiguration::DEFAULT_TARGET); if (array_key_exists(get_class($oObject), $aAllowedClasses) && MetaModel::HasLifecycle(get_class($oObject))) { - $sOQL = 'SELECT ApprovalRule AS ar JOIN ServiceSubcategory AS sc ON sc.approvalrule_id = ar.id WHERE ar.target_class = :target_class AND ar.target_class_state = :target_state'; $sStateAttCode = MetaModel::GetStateAttributeCode(get_class($oObject)); $sTargetState = $oObject->Get($sStateAttCode); - $oApprovalRuleSet = new DBObjectSet( - DBObjectSearch::FromOQL($sOQL), - array(), - ['target_class' => get_class($oObject), 'target_state' => $sTargetState]); - if ($oApprovalRuleSet->Count() > 0) { - $oPage->add_ready_script( - << get_class($oObject), 'target_state' => $sTargetState]); + if ($oApprovalRuleSet->Count() > 0) { + $oPage->add_ready_script( + << '', // hyperlink to manual setup documentation, if any 'doc.more_information' => '', // hyperlink to more information, if any - 'settings' => array( - // Module specific settings go here, if any - 'target_state' => 'new', - 'bypass_profiles' => 'Administrator, Service Manager', - 'reuse_previous_answers' => true - ), + 'settings' => + [ + 'targets' => [ + 'UserRequest' => + [ + 'target_states' => 'new,assigned', + 'bypass_profiles' => 'Service Manager', + 'reuse_previous_answers' => true, + ], + ], + ], ) ); From 892f8ad8423038069f24b8c30883ade76b875751 Mon Sep 17 00:00:00 2001 From: Molkobain Date: Mon, 12 Aug 2024 17:42:48 +0200 Subject: [PATCH 3/9] Update datamodel.combodo-approval-extended.xml Co-authored-by: Thomas Casteleyn --- datamodel.combodo-approval-extended.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/datamodel.combodo-approval-extended.xml b/datamodel.combodo-approval-extended.xml index ee17690..d1f4542 100755 --- a/datamodel.combodo-approval-extended.xml +++ b/datamodel.combodo-approval-extended.xml @@ -413,8 +413,8 @@ $oApprovalRule = $oApprovalRuleSet->fetch(); $oScheme = new ExtendedApprovalScheme(); - $oScheme->Set('target_class_state', $sReachingState); - $oScheme->Set('started_state', $sReachingState); + $oScheme->Set('target_class_state', $sReachingState); + $oScheme->Set('started_state', $sReachingState); $bStepAdded = false; From 0b0075a66dff8839f5f471d6ba53f0ca33721b5a Mon Sep 17 00:00:00 2001 From: Anne-Catherine <57360138+accognet@users.noreply.github.com> Date: Tue, 13 Aug 2024 10:03:18 +0200 Subject: [PATCH 4/9] Update datamodel.combodo-approval-extended.xml Co-authored-by: Molkobain --- datamodel.combodo-approval-extended.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datamodel.combodo-approval-extended.xml b/datamodel.combodo-approval-extended.xml index d1f4542..4748928 100755 --- a/datamodel.combodo-approval-extended.xml +++ b/datamodel.combodo-approval-extended.xml @@ -90,7 +90,7 @@ bizmodel target_class - UserRequest + false From 616e46be6a44ba67a9fa16c9662aa2852cfd3962 Mon Sep 17 00:00:00 2001 From: Anne-Catherine <57360138+accognet@users.noreply.github.com> Date: Tue, 13 Aug 2024 10:03:33 +0200 Subject: [PATCH 5/9] Update datamodel.combodo-approval-extended.xml Co-authored-by: Molkobain --- datamodel.combodo-approval-extended.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/datamodel.combodo-approval-extended.xml b/datamodel.combodo-approval-extended.xml index 4748928..bf54b44 100755 --- a/datamodel.combodo-approval-extended.xml +++ b/datamodel.combodo-approval-extended.xml @@ -95,7 +95,6 @@ target_class_state - target_class false From b30b9b30d5a491115562a5a8b0b65e2e3ffec121 Mon Sep 17 00:00:00 2001 From: Anne-Cath Date: Tue, 17 Sep 2024 11:28:05 +0200 Subject: [PATCH 6/9] Add installer --- datamodel.combodo-approval-extended.xml | 2 +- main.combodo-approval-extended.php | 4 ++-- module.combodo-approval-extended.php | 27 ++++++++++++++++++++++--- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/datamodel.combodo-approval-extended.xml b/datamodel.combodo-approval-extended.xml index bf54b44..3a3feb8 100755 --- a/datamodel.combodo-approval-extended.xml +++ b/datamodel.combodo-approval-extended.xml @@ -391,7 +391,7 @@ return null; } - $aTargetState = $aAllowedClasses[get_class($oObject)][ 'target_states']; + $aTargetState = $aAllowedClasses[get_class($oObject)]['target_states']; if (in_array($sReachingState, $aTargetState) === false) { return null; } diff --git a/main.combodo-approval-extended.php b/main.combodo-approval-extended.php index 925fe37..b700d54 100755 --- a/main.combodo-approval-extended.php +++ b/main.combodo-approval-extended.php @@ -71,9 +71,9 @@ public function OnDisplayProperties($oObject, WebPage $oPage, $bEditMode = false $oApprovalRuleSet = new DBObjectSet( DBObjectSearch::FromOQL($sOQL), [], ['target_class' => get_class($oObject), 'target_state' => $sTargetState]); if ($oApprovalRuleSet->Count() > 0) { $oPage->add_ready_script( - << [ 'UserRequest' => [ - 'target_states' => 'new,assigned', + 'target_states' => ['new'], 'bypass_profiles' => 'Service Manager', 'reuse_previous_answers' => true, ], @@ -78,7 +78,28 @@ class ApprovalExtendedInstaller extends ModuleInstallerAPI { public static function BeforeWritingConfig(Config $oConfiguration) { - // If you want to override/force some configuration values, do it here + if (empty(utils::GetConfig()->GetModuleSetting('combodo-approval-extended', 'targets', null)) + && !empty(utils::GetConfig()->GetModuleSetting('combodo-approval-extended', 'target_state', null) )) { + // Migration of the old configuration to the new one + $newConfiguration = [ + 'UserRequest' => [ + 'target_states' => [$oConfiguration->GetModuleSetting('combodo-approval-extended', 'target_state', null) ], + 'bypass_profiles' =>$oConfiguration->GetModuleSetting('combodo-approval-extended', 'bypass_profiles', 'Service Manager') , + 'reuse_previous_answers' => $oConfiguration->GetModuleSetting('combodo-approval-extended', 'reuse_previous_answers', true) , + ] + ]; + $oConfiguration->SetModuleSetting('combodo-approval-extended', 'targets', $newConfiguration); + } + // Replacing old conf parameters value to indicate that it is obsolete + $aParamsToRemove = array('target_state', 'bypass_profiles', 'reuse_previous_answers'); + foreach($aParamsToRemove as $sParamToRemove) + { + $sParamCurrentValue = $oConfiguration->GetModuleSetting('combodo-approval-extended', $sParamToRemove, null); + if(!empty($sParamCurrentValue)) + { + $oConfiguration->SetModuleSetting('combodo-approval-extended', $sParamToRemove, 'No longer used, you can remove this parameter.'); + } + } return $oConfiguration; } From 8e5529206af378f61acc0dae821f58452317b389 Mon Sep 17 00:00:00 2001 From: Anne-Cath Date: Tue, 17 Sep 2024 16:00:38 +0200 Subject: [PATCH 7/9] indentation + change target_state to target_states --- datamodel.combodo-approval-extended.xml | 6 +++--- main.combodo-approval-extended.php | 2 +- module.combodo-approval-extended.php | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/datamodel.combodo-approval-extended.xml b/datamodel.combodo-approval-extended.xml index 3a3feb8..1e3cc62 100755 --- a/datamodel.combodo-approval-extended.xml +++ b/datamodel.combodo-approval-extended.xml @@ -387,7 +387,7 @@ ); $aAllowedClasses = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'targets', ApprovalConfiguration::DEFAULT_TARGET); - if (array_key_exists(get_class($oObject), $aAllowedClasses) === false) { + if (array_key_exists(get_class($oObject), $aAllowedClasses) === false) { return null; } @@ -399,7 +399,7 @@ $sOQL = 'SELECT ApprovalRule AS ar JOIN ServiceSubcategory AS sc ON sc.approvalrule_id = ar.id WHERE sc.id = :servicesubcategory AND ar.target_class = :target_class AND ar.target_class_state = :target_class_state'; $oApprovalRuleSet = new DBObjectSet( DBObjectSearch::FromOQL($sOQL), - array(), + [], ['servicesubcategory' => $oObject->Get('servicesubcategory_id'), 'target_class' => get_class($oObject), 'target_class_state' => $sReachingState]); if ($oApprovalRuleSet->count() == 0) @@ -584,7 +584,7 @@ return false; } - $aAllowedClasses = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'targets', ApprovalConfiguration::DEFAULT_TARGET); + $aAllowedClasses = MetaModel::GetConfig()->GetModuleSetting('combodo-approval-extended', 'targets', ApprovalConfiguration::DEFAULT_TARGET); $sAllowedProfiles = $aAllowedClasses[$this->Get('obj_class')]['bypass_profiles']; $aAllowed = array(); diff --git a/main.combodo-approval-extended.php b/main.combodo-approval-extended.php index b700d54..8d99646 100755 --- a/main.combodo-approval-extended.php +++ b/main.combodo-approval-extended.php @@ -68,7 +68,7 @@ public function OnDisplayProperties($oObject, WebPage $oPage, $bEditMode = false if (in_array($sTargetState, $aAllowedClasses[get_class($oObject)][ 'target_states']) ) { $sOQL = 'SELECT ApprovalRule AS ar JOIN ServiceSubcategory AS sc ON sc.approvalrule_id = ar.id WHERE ar.target_class = :target_class AND ar.target_class_state = :target_state'; - $oApprovalRuleSet = new DBObjectSet( DBObjectSearch::FromOQL($sOQL), [], ['target_class' => get_class($oObject), 'target_state' => $sTargetState]); + $oApprovalRuleSet = new DBObjectSet( DBObjectSearch::FromOQL($sOQL), [], ['target_class' => get_class($oObject), 'target_states' => $sTargetState]); if ($oApprovalRuleSet->Count() > 0) { $oPage->add_ready_script( <<GetModuleSetting('combodo-approval-extended', 'targets', null)) - && !empty(utils::GetConfig()->GetModuleSetting('combodo-approval-extended', 'target_state', null) )) { + && !empty(utils::GetConfig()->GetModuleSetting('combodo-approval-extended', 'target_states', null) )) { // Migration of the old configuration to the new one $newConfiguration = [ 'UserRequest' => [ - 'target_states' => [$oConfiguration->GetModuleSetting('combodo-approval-extended', 'target_state', null) ], + 'target_states' => [$oConfiguration->GetModuleSetting('combodo-approval-extended', 'target_states', null) ], 'bypass_profiles' =>$oConfiguration->GetModuleSetting('combodo-approval-extended', 'bypass_profiles', 'Service Manager') , 'reuse_previous_answers' => $oConfiguration->GetModuleSetting('combodo-approval-extended', 'reuse_previous_answers', true) , ] @@ -91,7 +91,7 @@ public static function BeforeWritingConfig(Config $oConfiguration) $oConfiguration->SetModuleSetting('combodo-approval-extended', 'targets', $newConfiguration); } // Replacing old conf parameters value to indicate that it is obsolete - $aParamsToRemove = array('target_state', 'bypass_profiles', 'reuse_previous_answers'); + $aParamsToRemove = array('target_states', 'bypass_profiles', 'reuse_previous_answers'); foreach($aParamsToRemove as $sParamToRemove) { $sParamCurrentValue = $oConfiguration->GetModuleSetting('combodo-approval-extended', $sParamToRemove, null); From 6786112485ec3ae7b86313fc3d75cba5853fa061 Mon Sep 17 00:00:00 2001 From: Anne-Catherine <57360138+accognet@users.noreply.github.com> Date: Tue, 17 Sep 2024 16:58:39 +0200 Subject: [PATCH 8/9] Update main.combodo-approval-extended.php Co-authored-by: Thomas Casteleyn --- main.combodo-approval-extended.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.combodo-approval-extended.php b/main.combodo-approval-extended.php index 8d99646..26277a9 100755 --- a/main.combodo-approval-extended.php +++ b/main.combodo-approval-extended.php @@ -75,7 +75,7 @@ public function OnDisplayProperties($oObject, WebPage $oPage, $bEditMode = false $('button.action[name="next_action"]').hide(); JS ); - } + } } } } From 51f29c971ed9f83b482ebeceb724f63453dd2eaa Mon Sep 17 00:00:00 2001 From: Anne-Cath Date: Fri, 27 Sep 2024 15:01:27 +0200 Subject: [PATCH 9/9] Fix name error --- main.combodo-approval-extended.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.combodo-approval-extended.php b/main.combodo-approval-extended.php index 26277a9..44c7e6e 100755 --- a/main.combodo-approval-extended.php +++ b/main.combodo-approval-extended.php @@ -68,7 +68,7 @@ public function OnDisplayProperties($oObject, WebPage $oPage, $bEditMode = false if (in_array($sTargetState, $aAllowedClasses[get_class($oObject)][ 'target_states']) ) { $sOQL = 'SELECT ApprovalRule AS ar JOIN ServiceSubcategory AS sc ON sc.approvalrule_id = ar.id WHERE ar.target_class = :target_class AND ar.target_class_state = :target_state'; - $oApprovalRuleSet = new DBObjectSet( DBObjectSearch::FromOQL($sOQL), [], ['target_class' => get_class($oObject), 'target_states' => $sTargetState]); + $oApprovalRuleSet = new DBObjectSet( DBObjectSearch::FromOQL($sOQL), [], ['target_class' => get_class($oObject), 'target_state' => $sTargetState]); if ($oApprovalRuleSet->Count() > 0) { $oPage->add_ready_script( <<