From c0a4a5fc7fdc84c97ae1aaced118a746c1c15615 Mon Sep 17 00:00:00 2001 From: Benn Oshrin Date: Thu, 22 Jun 2023 20:52:02 -0400 Subject: [PATCH] Miscellaneous fixes mostly for provisioning (CFM-254) --- .../src/Model/Table/SqlProvisionersTable.php | 2 +- app/config/app.php | 8 ++++++++ app/src/Lib/Traits/PluggableModelTrait.php | 18 ++++++++++++++++++ .../Model/Table/ProvisioningTargetsTable.php | 5 +++-- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/app/availableplugins/SqlConnector/src/Model/Table/SqlProvisionersTable.php b/app/availableplugins/SqlConnector/src/Model/Table/SqlProvisionersTable.php index 2cebb53af..df0a584a1 100644 --- a/app/availableplugins/SqlConnector/src/Model/Table/SqlProvisionersTable.php +++ b/app/availableplugins/SqlConnector/src/Model/Table/SqlProvisionersTable.php @@ -365,7 +365,7 @@ public function provision( return $this->syncEntity( $provisioningTarget, - $entityName, + $className, $data, $eligibility ); diff --git a/app/config/app.php b/app/config/app.php index fa10ff058..d2227ea7c 100644 --- a/app/config/app.php +++ b/app/config/app.php @@ -415,6 +415,14 @@ 'file' => 'trace', 'url' => env('LOG_TRACE_URL', null), 'scopes' => ['trace'], + ], + // We define a rules level to record application rule execution + 'rule' => [ + 'className' => 'Cake\Log\Engine\FileLog', + 'path' => LOGS, + 'file' => 'rule', + 'url' => env('LOG_TRACE_URL', null), + 'scopes' => ['rule'], ] ], diff --git a/app/src/Lib/Traits/PluggableModelTrait.php b/app/src/Lib/Traits/PluggableModelTrait.php index 8bb384fc8..d8bb2eae9 100644 --- a/app/src/Lib/Traits/PluggableModelTrait.php +++ b/app/src/Lib/Traits/PluggableModelTrait.php @@ -51,6 +51,24 @@ public function getPluggableModelType(): string { return Inflector::underscore(StringUtilities::tableToEntityName($this)); } + /** + * Obtain the list of plugin relations, suitable for passing to contains(). + * + * @since COmanage Registry v5.0.0 + * @return array Array of strings of model names + */ + + public function getPluginRelations(): array { + // _pluginModels is an array with entries of the form Plugin.Model + // (eg: SqlConnector.SqlProvisioners) but we want to return an array + // of just the Models for use in contains(). + + return array_map( + function($v) { $bits = explode('.', $v); return $bits[1] ;}, + $this->_pluginModels + ); + } + /** * Instantiate a plugin model that is NOT a Cake Table model. * diff --git a/app/src/Model/Table/ProvisioningTargetsTable.php b/app/src/Model/Table/ProvisioningTargetsTable.php index e0a3d76e7..9dcc5b2ed 100644 --- a/app/src/Model/Table/ProvisioningTargetsTable.php +++ b/app/src/Model/Table/ProvisioningTargetsTable.php @@ -44,6 +44,7 @@ class ProvisioningTargetsTable extends Table { use \App\Lib\Traits\AutoViewVarsTrait; use \App\Lib\Traits\ChangelogBehaviorTrait; use \App\Lib\Traits\CoLinkTrait; + use \App\Lib\Traits\LabeledLogTrait; use \App\Lib\Traits\PermissionsTrait; use \App\Lib\Traits\PluggableModelTrait; use \App\Lib\Traits\PrimaryLinkTrait; @@ -151,9 +152,9 @@ public function provision( } $targets = $query->order(['ProvisioningTargets.ordr' => 'ASC']) - ->contain($this->getContainableModels()) + ->contain($this->getPluginRelations()) ->all(); - + foreach($targets as $t) { // Compare our $context against the target's $status. There are three possible // contexts, with their corresponding provisionable statuses: