@@ -29,6 +29,8 @@ class FeatureFlag
2929 protected $ _deleted = false ;
3030 /** @var bool */
3131 protected $ _trackEvents = false ;
32+ /** @var bool */
33+ protected $ _trackEventsFallthrough = false ;
3234 /** @var int | null */
3335 protected $ _debugEventsUntilDate = null ;
3436 /** @var bool */
@@ -50,6 +52,7 @@ protected function __construct($key,
5052 array $ variations ,
5153 $ deleted ,
5254 $ trackEvents ,
55+ $ trackEventsFallthrough ,
5356 $ debugEventsUntilDate ,
5457 $ clientSide )
5558 {
@@ -65,6 +68,7 @@ protected function __construct($key,
6568 $ this ->_variations = $ variations ;
6669 $ this ->_deleted = $ deleted ;
6770 $ this ->_trackEvents = $ trackEvents ;
71+ $ this ->_trackEventsFallthrough = $ trackEventsFallthrough ;
6872 $ this ->_debugEventsUntilDate = $ debugEventsUntilDate ;
6973 $ this ->_clientSide = $ clientSide ;
7074 }
@@ -85,6 +89,7 @@ public static function getDecoder()
8589 $ v ['variations ' ] ?: [],
8690 $ v ['deleted ' ],
8791 isset ($ v ['trackEvents ' ]) && $ v ['trackEvents ' ],
92+ isset ($ v ['trackEventsFallthrough ' ]) && $ v ['trackEventsFallthrough ' ],
8893 isset ($ v ['debugEventsUntilDate ' ]) ? $ v ['debugEventsUntilDate ' ] : null ,
8994 isset ($ v ['clientSide ' ]) && $ v ['clientSide ' ]
9095 );
@@ -104,30 +109,30 @@ public function isOn()
104109 /**
105110 * @param LDUser $user
106111 * @param FeatureRequester $featureRequester
107- * @param bool $includeReasonsInEvents
112+ * @param Impl\EventFactory $eventFactory
108113 * @return EvalResult
109114 */
110- public function evaluate ($ user , $ featureRequester , $ includeReasonsInEvents = false )
115+ public function evaluate ($ user , $ featureRequester , $ eventFactory )
111116 {
112117 $ prereqEvents = array ();
113- $ detail = $ this ->evaluateInternal ($ user , $ featureRequester , $ prereqEvents , $ includeReasonsInEvents );
118+ $ detail = $ this ->evaluateInternal ($ user , $ featureRequester , $ prereqEvents , $ eventFactory );
114119 return new EvalResult ($ detail , $ prereqEvents );
115120 }
116121
117122 /**
118123 * @param LDUser $user
119124 * @param FeatureRequester $featureRequester
120125 * @param array $events
121- * @param bool $includeReasonsInEvents
126+ * @param Impl\EventFactory $eventFactory
122127 * @return EvaluationDetail
123128 */
124- private function evaluateInternal ($ user , $ featureRequester , &$ events , $ includeReasonsInEvents )
129+ private function evaluateInternal ($ user , $ featureRequester , &$ events , $ eventFactory )
125130 {
126131 if (!$ this ->isOn ()) {
127132 return $ this ->getOffValue (EvaluationReason::off ());
128133 }
129134
130- $ prereqFailureReason = $ this ->checkPrerequisites ($ user , $ featureRequester , $ events , $ includeReasonsInEvents );
135+ $ prereqFailureReason = $ this ->checkPrerequisites ($ user , $ featureRequester , $ events , $ eventFactory );
131136 if ($ prereqFailureReason !== null ) {
132137 return $ this ->getOffValue ($ prereqFailureReason );
133138 }
@@ -158,10 +163,10 @@ private function evaluateInternal($user, $featureRequester, &$events, $includeRe
158163 * @param LDUser $user
159164 * @param FeatureRequester $featureRequester
160165 * @param array $events
161- * @param bool $includeReasonsInEvents
166+ * @param Impl\EventFactory $eventFactory
162167 * @return EvaluationReason|null
163168 */
164- private function checkPrerequisites ($ user , $ featureRequester , &$ events , $ includeReasonsInEvents )
169+ private function checkPrerequisites ($ user , $ featureRequester , &$ events , $ eventFactory )
165170 {
166171 if ($ this ->_prerequisites != null ) {
167172 foreach ($ this ->_prerequisites as $ prereq ) {
@@ -172,16 +177,12 @@ private function checkPrerequisites($user, $featureRequester, &$events, $include
172177 if ($ prereqFeatureFlag == null ) {
173178 $ prereqOk = false ;
174179 } else {
175- $ prereqEvalResult = $ prereqFeatureFlag ->evaluateInternal ($ user , $ featureRequester , $ events , $ includeReasonsInEvents );
180+ $ prereqEvalResult = $ prereqFeatureFlag ->evaluateInternal ($ user , $ featureRequester , $ events , $ eventFactory );
176181 $ variation = $ prereq ->getVariation ();
177182 if (!$ prereqFeatureFlag ->isOn () || $ prereqEvalResult ->getVariationIndex () !== $ variation ) {
178183 $ prereqOk = false ;
179184 }
180- array_push ($ events , Util::newFeatureRequestEvent ($ prereq ->getKey (), $ user ,
181- $ prereqEvalResult ->getVariationIndex (), $ prereqEvalResult ->getValue (),
182- null , $ prereqFeatureFlag ->getVersion (), $ this ->_key ,
183- ($ includeReasonsInEvents && $ prereqEvalResult ) ? $ prereqEvalResult ->getReason () : null
184- ));
185+ array_push ($ events , $ eventFactory ->newEvalEvent ($ prereqFeatureFlag , $ user , $ prereqEvalResult , null , $ this ));
185186 }
186187 } catch (EvaluationException $ e ) {
187188 $ prereqOk = false ;
@@ -258,6 +259,14 @@ public function isDeleted()
258259 return $ this ->_deleted ;
259260 }
260261
262+ /**
263+ * @return array
264+ */
265+ public function getRules ()
266+ {
267+ return $ this ->_rules ;
268+ }
269+
261270 /**
262271 * @return boolean
263272 */
@@ -266,6 +275,14 @@ public function isTrackEvents()
266275 return $ this ->_trackEvents ;
267276 }
268277
278+ /**
279+ * @return boolean
280+ */
281+ public function isTrackEventsFallthrough ()
282+ {
283+ return $ this ->_trackEventsFallthrough ;
284+ }
285+
269286 /**
270287 * @return int | null
271288 */
0 commit comments