Skip to content

Commit

Permalink
comments addressed
Browse files Browse the repository at this point in the history
  • Loading branch information
ozayr-zaviar committed Aug 24, 2021
1 parent b67e2d1 commit 563003b
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 47 deletions.
19 changes: 8 additions & 11 deletions src/Optimizely/Config/DatafileProjectConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ class DatafileProjectConfig implements ProjectConfigInterface
/**
* list of Typed Audiences that will be parsed from the datafile
*
* @var [typed_audience]
* @var [Audience]
*/
private $typedAudiences;

Expand Down Expand Up @@ -270,17 +270,17 @@ public function __construct($datafile, $logger, $errorHandler)

$this->_accountId = $config['accountId'];
$this->_projectId = $config['projectId'];
$this->attributes = isset($config['attributes']) ? $config['attributes'] : [];
$this->audiences = isset($config['audiences']) ? $config['audiences'] : [];
$this->events = $config['events'] ?: [];
$this->typedAudiences = isset($config['typedAudiences']) ? $config['typedAudiences'] : [];
$this->_anonymizeIP = isset($config['anonymizeIP']) ? $config['anonymizeIP'] : false;
$this->_botFiltering = isset($config['botFiltering']) ? $config['botFiltering'] : null;
$this->_revision = $config['revision'];
$this->_sendFlagDecisions = isset($config['sendFlagDecisions']) ? $config['sendFlagDecisions'] : false;

$groups = $config['groups'] ?: [];
$experiments = $config['experiments'] ?: [];
$this->attributes = isset($config['attributes']) ? $config['attributes'] : [];
$this->audiences = isset($config['audiences']) ? $config['audiences'] : [];
$this->events = isset($config['events']) ? $config['events'] : [];
$this->typedAudiences = isset($config['typedAudiences']) ? $config['typedAudiences'] : [];
$rollouts = isset($config['rollouts']) ? $config['rollouts'] : [];
$featureFlags = isset($config['featureFlags']) ? $config['featureFlags']: [];

Expand Down Expand Up @@ -558,12 +558,9 @@ public function getAllExperiments()
$rolloutExperimentIds[] = $experiment->getId();
}
}
return array_filter(
array_values($this->_experimentIdMap),
function ($experiment) use ($rolloutExperimentIds) {
return !in_array($experiment->getId(), $rolloutExperimentIds);
}
);
return array_filter(array_values($this->_experimentIdMap), function ($experiment) use ($rolloutExperimentIds) {
return !in_array($experiment->getId(), $rolloutExperimentIds);
});
}

/**
Expand Down
5 changes: 5 additions & 0 deletions src/Optimizely/OptimizelyConfig/OptimizelyConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ class OptimizelyConfig implements \JsonSerializable

/**
* Map of Experiment Keys to OptimizelyExperiments.
* This experimentsMap is for experiments of legacy projects only.
* For flag projects, experiment keys are not guaranteed to be unique
* across multiple flags, so this map may not include all experiments
* when keys conflict. Use experimentRules and deliveryRules instead.
*
* @var <String, OptimizelyExperiment> associative array
*/
Expand Down Expand Up @@ -124,6 +128,7 @@ public function getDatafile()
*/
public function getExperimentsMap()
{
# This experimentsMap is deprecated. Use experimentRules and deliveryRules instead.
return $this->experimentsMap;
}

Expand Down
61 changes: 30 additions & 31 deletions src/Optimizely/OptimizelyConfig/OptimizelyConfigService.php
Original file line number Diff line number Diff line change
Expand Up @@ -161,32 +161,37 @@ protected function getConfigEvents()
*/
protected function getConfigAudiences()
{
$finalAudiences = [];
$uniqueIdsMap = [];
$normalAudiences = $this->projectConfig->getAudiences();
$allAudiences = [];
$typedAudienceIds = [];
$audiences = $this->projectConfig->getAudiences();
$typedAudiences = $this->projectConfig->getTypedAudiences();
$audiencesArray = $typedAudiences;
foreach ($audiencesArray as $key => $typedAudience) {
$uniqueIdsMap[$typedAudience['id']] = $typedAudience['id'];
$audiencesArray[$key]['conditions'] = json_encode($typedAudience['conditions']);
}
foreach ($normalAudiences as $naudience) {
if (!array_key_exists($naudience['id'], $uniqueIdsMap)) {
array_push($audiencesArray, $naudience);
}
}
foreach ($audiencesArray as $audience) {
$id = $audience['id'];
$typedAudienceIds[] = $typedAudience['id'];
$id = $typedAudience['id'];
if ($id != '$opt_dummy_audience') {
$optlyAudience = new OptimizelyAudience(
$id,
$audience['name'],
$audience['conditions']
$typedAudience['name'],
json_encode($typedAudience['conditions'])
);
array_push($finalAudiences, $optlyAudience);
array_push($allAudiences, $optlyAudience);
}
}
return $finalAudiences;
foreach ($audiences as $naudience) {
if (!in_array($naudience['id'], $typedAudienceIds, true)) {
$id = $naudience['id'];
if ($id != '$opt_dummy_audience') {
$optlyAudience = new OptimizelyAudience(
$id,
$naudience['name'],
$naudience['conditions']
);
array_push($allAudiences, $optlyAudience);
}
}
}
return $allAudiences;
}

/**
Expand Down Expand Up @@ -249,7 +254,6 @@ protected function getVariablesMap(Experiment $experiment, Variation $variation)
}

$featureFlag = $this->experimentIdFeatureMap[$experimentId];

$featureKey = $featureFlag->getKey();

// Set default variables for variation.
Expand Down Expand Up @@ -331,6 +335,7 @@ protected function getVariationsMap(Experiment $experiment)
*/
protected function getSerializedAudiences(array $audienceConditions)
{
$operators = ['and', 'or', 'not'];
$finalAudiences = '';
if ($audienceConditions == null) {
return $finalAudiences;
Expand All @@ -340,10 +345,8 @@ protected function getSerializedAudiences(array $audienceConditions)
$subAudience = '';
// Checks if item is list of conditions means if it is sub audience
if (is_array($var)) {
$subAudience = $this->getSerializedAudiences($var);

$subAudience = '(' . $subAudience . ')';
} elseif (in_array($var, array('and', 'or', 'not'), true)) {
$subAudience = $subAudience = '(' . $this->getSerializedAudiences($var) . ')';
} elseif (in_array($var, $operators, true)) {
$cond = strtoupper(strval($var));
} else {
// Checks if item is audience id
Expand All @@ -353,25 +356,21 @@ protected function getSerializedAudiences(array $audienceConditions)
// if audience condition is "NOT" then add "NOT" at start. Otherwise check if there is already audience id in finalAudiences then append condition between finalAudiences and item
if ($finalAudiences !== '' || $cond == "NOT") {
if ($finalAudiences !== '') {
$finalAudiences = $finalAudiences . ' ';
} else {
$finalAudiences = $finalAudiences;
$finalAudiences .= ' ';
}
if ($cond == '') {
$cond = 'OR';
}
$finalAudiences = $finalAudiences . $cond . ' ' . '"' . $name . '"';
$finalAudiences .= $cond . ' ' . '"' . $name . '"';
} else {
$finalAudiences = '"' . $name . '"';
}
}
// Checks if sub audience is empty or not
if (strval($subAudience !== '')) {
if ($subAudience !== '') {
if ($finalAudiences !== '' || $cond == "NOT") {
if ($finalAudiences !== '') {
$finalAudiences = $finalAudiences . ' ';
} else {
$finalAudiences = $finalAudiences;
$finalAudiences .= ' ';
}
if ($cond == '') {
$cond = 'OR';
Expand Down Expand Up @@ -426,7 +425,7 @@ protected function getExperimentsMaps()
*
* @param string feature rollout id.
*
* @return array of optimizelyExperiments as delivery rules .
* @return array of optimizelyExperiments as delivery rules.
*/
protected function getDeliveryRules($rollout_id)
{
Expand Down
2 changes: 1 addition & 1 deletion src/Optimizely/OptimizelyConfig/OptimizelyEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public function getKey()
}

/**
* @return string event conditions.
* @return array experimentIds representing event experiment ids.
*/
public function getExperimentIds()
{
Expand Down
8 changes: 4 additions & 4 deletions src/Optimizely/OptimizelyConfig/OptimizelyFeature.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,16 @@ class OptimizelyFeature implements \JsonSerializable
private $key;

/**
* Map of Experiment Keys to OptimizelyExperiments.
* Array of experiment rules.
*
* @var <String, OptimizelyExperiment> associative array
* @var [OptimizelyExperiment]
*/
private $experimentRules;

/**
* Map of rollout Experiments Keys to OptimizelyExperiments.
* Array of delivery rules.
*
* @var <String, OptimizelyExperiment> associative array
* @var [OptimizelyExperiment]
*/
private $deliveryRules;

Expand Down

0 comments on commit 563003b

Please sign in to comment.