diff --git a/src/Decision/BucketingManager.php b/src/Decision/BucketingManager.php index 3f366579..c5972b93 100644 --- a/src/Decision/BucketingManager.php +++ b/src/Decision/BucketingManager.php @@ -77,13 +77,13 @@ public function __construct(HttpClientInterface $httpClient, BucketingConfig $co */ protected function sendContext(VisitorAbstract $visitor): void { - if (count($visitor->getContext()) <= self::NB_MIN_CONTEXT_KEYS || !$visitor->hasConsented()|| !$visitor->getHasContextBeenUpdated()) { + if (count($visitor->getContext()) <= self::NB_MIN_CONTEXT_KEYS || !$visitor->hasConsented() || !$visitor->getHasContextBeenUpdated()) { return; } $visitor->setHasContextBeenUpdated(false); - $segmentHit = new Segment($visitor->getContext()); + $segmentHit = new Segment($visitor->getContext(), $this->getConfig()); $visitor->sendHit($segmentHit); } @@ -127,14 +127,14 @@ protected function getThirdPartySegment(string $visitorId): array self::GET_THIRD_PARTY_SEGMENT, FlagshipConstant::UNEXPECTED_ERROR_OCCURRED, [ - self::THIRD_PARTY_SEGMENT, - $this->getLogFormat( - $exception->getMessage(), - $url, - [], - [], - $this->getNow() - $now - ), + self::THIRD_PARTY_SEGMENT, + $this->getLogFormat( + $exception->getMessage(), + $url, + [], + [], + $this->getNow() - $now + ), ] ); } @@ -289,14 +289,14 @@ private function getVisitorCampaigns( $visitor ); $visitorCampaigns[] = [ - FlagshipField::FIELD_ID => $campaignId, - FlagshipField::FIELD_NANE => $campaignName, - FlagshipField::FIELD_SLUG => $slug, - FlagshipField::FIELD_VARIATION_GROUP_ID => $variationGroup[FlagshipField::FIELD_ID], - FlagshipField::FIELD_VARIATION_GROUP_NAME => $variationGroup[FlagshipField::FIELD_NANE] ?? null, - FlagshipField::FIELD_VARIATION => $variations, - FlagshipField::FIELD_CAMPAIGN_TYPE => $campaignType, - ]; + FlagshipField::FIELD_ID => $campaignId, + FlagshipField::FIELD_NANE => $campaignName, + FlagshipField::FIELD_SLUG => $slug, + FlagshipField::FIELD_VARIATION_GROUP_ID => $variationGroup[FlagshipField::FIELD_ID], + FlagshipField::FIELD_VARIATION_GROUP_NAME => $variationGroup[FlagshipField::FIELD_NANE] ?? null, + FlagshipField::FIELD_VARIATION => $variations, + FlagshipField::FIELD_CAMPAIGN_TYPE => $campaignType, + ]; break; } } @@ -352,11 +352,11 @@ private function getVariation(array $variationGroup, VisitorAbstract $visitor): continue; } $visitorVariation = [ - FlagshipField::FIELD_ID => $newVariation[FlagshipField::FIELD_ID], - FlagshipField::FIELD_MODIFICATIONS => $newVariation[FlagshipField::FIELD_MODIFICATIONS], - FlagshipField::FIELD_REFERENCE => !empty($newVariation[FlagshipField::FIELD_REFERENCE]), - FlagshipField::FIELD_NANE => $newVariation[FlagshipField::FIELD_NANE] ?? null, - ]; + FlagshipField::FIELD_ID => $newVariation[FlagshipField::FIELD_ID], + FlagshipField::FIELD_MODIFICATIONS => $newVariation[FlagshipField::FIELD_MODIFICATIONS], + FlagshipField::FIELD_REFERENCE => !empty($newVariation[FlagshipField::FIELD_REFERENCE]), + FlagshipField::FIELD_NANE => $newVariation[FlagshipField::FIELD_NANE] ?? null, + ]; break; } @@ -367,11 +367,11 @@ private function getVariation(array $variationGroup, VisitorAbstract $visitor): $totalAllocation += $variation[FlagshipField::FIELD_ALLOCATION]; if ($hashAllocation < $totalAllocation) { $visitorVariation = [ - FlagshipField::FIELD_ID => $variation[FlagshipField::FIELD_ID], - FlagshipField::FIELD_MODIFICATIONS => $variation[FlagshipField::FIELD_MODIFICATIONS], - FlagshipField::FIELD_REFERENCE => !empty($variation[FlagshipField::FIELD_REFERENCE]), - FlagshipField::FIELD_NANE => $variation[FlagshipField::FIELD_NANE] ?? null, - ]; + FlagshipField::FIELD_ID => $variation[FlagshipField::FIELD_ID], + FlagshipField::FIELD_MODIFICATIONS => $variation[FlagshipField::FIELD_MODIFICATIONS], + FlagshipField::FIELD_REFERENCE => !empty($variation[FlagshipField::FIELD_REFERENCE]), + FlagshipField::FIELD_NANE => $variation[FlagshipField::FIELD_NANE] ?? null, + ]; break; } } diff --git a/src/Enum/FlagshipConstant.php b/src/Enum/FlagshipConstant.php index 270fb673..562bcd6f 100644 --- a/src/Enum/FlagshipConstant.php +++ b/src/Enum/FlagshipConstant.php @@ -54,7 +54,7 @@ class FlagshipConstant /** * SDK version */ - public const SDK_VERSION = "4.1.1"; + public const SDK_VERSION = "4.1.2"; public const GET_FLAG = 'GET_FLAG'; diff --git a/src/Hit/Segment.php b/src/Hit/Segment.php index 438e72fa..a6748279 100644 --- a/src/Hit/Segment.php +++ b/src/Hit/Segment.php @@ -2,8 +2,9 @@ namespace Flagship\Hit; -use Flagship\Enum\FlagshipConstant; use Flagship\Enum\HitType; +use Flagship\Config\FlagshipConfig; +use Flagship\Enum\FlagshipConstant; class Segment extends HitAbstract { @@ -18,7 +19,7 @@ public static function getClassName(): string /** * @var array */ - protected array $sl; + protected array $sl = []; /** * @return array @@ -45,9 +46,10 @@ public function setSl(array $sl): static /** * @param array $sl */ - public function __construct(array $sl) + public function __construct(array $sl, FlagshipConfig $config) { parent::__construct(HitType::SEGMENT); + $this->setConfig($config); $this->setSl($sl); } @@ -57,9 +59,7 @@ public function __construct(array $sl) */ protected function isAssoc(array $array): bool { - $keys = array_keys($array); - - return array_keys($keys) !== $keys; + return !array_is_list($array); } /** @@ -68,7 +68,17 @@ protected function isAssoc(array $array): bool public function toApiKeys(): array { $arrayParent = parent::toApiKeys(); - $arrayParent[FlagshipConstant::SL_API_ITEM] = $this->getSl(); + $apiContext = array_map(function ($value) { + if ($value === null) { + return 'null'; + } + if (is_bool($value)) { + return $value ? 'true' : 'false'; + } + return strval($value); + }, $this->getSl()); + + $arrayParent[FlagshipConstant::SL_API_ITEM] = $apiContext; return $arrayParent; } @@ -77,7 +87,7 @@ public function toApiKeys(): array */ public function isReady(): bool { - return parent::isReady() && $this->getSl(); + return parent::isReady() && $this->getSl() && count($this->getSl()) > 0; } /** diff --git a/tests/Api/TrackingManagerTest.php b/tests/Api/TrackingManagerTest.php index b544cad1..7f01fe12 100644 --- a/tests/Api/TrackingManagerTest.php +++ b/tests/Api/TrackingManagerTest.php @@ -180,7 +180,7 @@ public function testLookupHits() $screen = new Screen("home"); $screen->setConfig($config)->setVisitorId($visitorId)->setKey("$visitorId:key4"); - $segment = new Segment(["key" => "value"]); + $segment = new Segment(["key" => "value"], $config); $segment->setConfig($config)->setVisitorId($visitorId)->setKey("$visitorId:key5"); $activate = new Activate("varGrid", "varId"); diff --git a/tests/Hit/SegmentTest.php b/tests/Hit/SegmentTest.php index 517cc651..9ec8a63a 100644 --- a/tests/Hit/SegmentTest.php +++ b/tests/Hit/SegmentTest.php @@ -15,14 +15,18 @@ public function testConstructor() $visitorId = "visitorId"; $context = [ - "key1" => "value1", - "key2" => 1, - "key3" => true, - ]; + "key1" => "value1", + "key2" => 1, + "key3" => true, + "key4" => null, + "key5" => false, + ]; $config = new DecisionApiConfig($envId); - $segment = new Segment($context); + + + $segment = new Segment($context, $config); $segment->setConfig($config)->setVisitorId($visitorId); $segment->setSl(["key"]); @@ -30,19 +34,35 @@ public function testConstructor() $this->assertSame($context, $segment->getSl()); $segmentArray = [ - FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId, - FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP, - FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId, - FlagshipConstant::T_API_ITEM => HitType::SEGMENT->value, - FlagshipConstant::CUSTOMER_UID => null, - FlagshipConstant::QT_API_ITEM => 0.0, - FlagshipConstant::SL_API_ITEM => $context, - ]; + FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId, + FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP, + FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId, + FlagshipConstant::T_API_ITEM => HitType::SEGMENT->value, + FlagshipConstant::CUSTOMER_UID => null, + FlagshipConstant::QT_API_ITEM => 0.0, + FlagshipConstant::SL_API_ITEM => [ + "key1" => "value1", + "key2" => "1", + "key3" => "true", + "key4" => "null", + "key5" => "false", + ] + ]; $this->assertSame($segmentArray, $segment->toApiKeys()); $this->assertTrue($segment->isReady()); $this->assertSame(Segment::ERROR_MESSAGE, $segment->getErrorMessage()); + + $segment1 = new Segment([], $config); + + $segment1->setConfig($config)->setVisitorId($visitorId); + + $segmentArray[FlagshipConstant::SL_API_ITEM] = []; + + $this->assertSame($segmentArray, $segment1->toApiKeys()); + + $this->assertFalse($segment1->isReady()); } }