select('ruledef.*') ->join('testrule', 'testrule.RuleID = ruledef.RuleID', 'inner') ->where('ruledef.EventCode', $eventCode) ->where('ruledef.EndDate IS NULL') ->where('testrule.TestSiteID', $testSiteID) ->where('testrule.EndDate IS NULL') ->orderBy('ruledef.RuleID', 'ASC') ->findAll(); } /** * Get all tests linked to a rule * * @param int $ruleID The rule ID * @return array Array of test site IDs */ public function getLinkedTests(int $ruleID): array { $db = \Config\Database::connect(); $result = $db->table('testrule') ->where('RuleID', $ruleID) ->where('EndDate IS NULL') ->select('TestSiteID') ->get() ->getResultArray(); return array_column($result, 'TestSiteID'); } /** * Link a rule to a test * * @param int $ruleID The rule ID * @param int $testSiteID The test site ID * @return bool Success status */ public function linkTest(int $ruleID, int $testSiteID): bool { $db = \Config\Database::connect(); // Check if already linked (and not soft deleted) $existing = $db->table('testrule') ->where('RuleID', $ruleID) ->where('TestSiteID', $testSiteID) ->where('EndDate IS NULL') ->first(); if ($existing) { return true; // Already linked } // Check if soft deleted - restore it $softDeleted = $db->table('testrule') ->where('RuleID', $ruleID) ->where('TestSiteID', $testSiteID) ->where('EndDate IS NOT NULL') ->first(); if ($softDeleted) { return $db->table('testrule') ->where('TestRuleID', $softDeleted['TestRuleID']) ->update(['EndDate' => null]); } // Create new link return $db->table('testrule')->insert([ 'RuleID' => $ruleID, 'TestSiteID' => $testSiteID, 'CreateDate' => date('Y-m-d H:i:s'), ]); } /** * Unlink a rule from a test (soft delete) * * @param int $ruleID The rule ID * @param int $testSiteID The test site ID * @return bool Success status */ public function unlinkTest(int $ruleID, int $testSiteID): bool { $db = \Config\Database::connect(); return $db->table('testrule') ->where('RuleID', $ruleID) ->where('TestSiteID', $testSiteID) ->where('EndDate IS NULL') ->update(['EndDate' => date('Y-m-d H:i:s')]); } }