Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 28 additions & 28 deletions src/Decision/BucketingManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down Expand Up @@ -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
),
]
);
}
Expand Down Expand Up @@ -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;
}
}
Expand Down Expand Up @@ -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;
}

Expand All @@ -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;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/Enum/FlagshipConstant.php
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down
26 changes: 18 additions & 8 deletions src/Hit/Segment.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand All @@ -18,7 +19,7 @@ public static function getClassName(): string
/**
* @var array<string, mixed>
*/
protected array $sl;
protected array $sl = [];

/**
* @return array<string, mixed>
Expand All @@ -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);
}

Expand All @@ -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);
}

/**
Expand All @@ -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;
}

Expand All @@ -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;
}

/**
Expand Down
2 changes: 1 addition & 1 deletion tests/Api/TrackingManagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
46 changes: 33 additions & 13 deletions tests/Hit/SegmentTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,34 +15,54 @@ 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"]);

$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());
}
}