'the name', * 'custom_var_v1' => 'the value', * ... * ) * ``` */ class CustomVariablesRequestProcessor extends RequestProcessor { public function processRequestParams(VisitProperties $visitProperties, Request $request) { // TODO: re-add optimization where if custom variables exist in request, don't bother selecting them in Visitor $visitorCustomVariables = $request->getCustomVariables($scope = Model::SCOPE_VISIT); if (!empty($visitorCustomVariables)) { Common::printDebug("Visit level Custom Variables: "); Common::printDebug($visitorCustomVariables); } $request->setMetadata('CustomVariables', 'visitCustomVariables', $visitorCustomVariables); } public function onNewVisit(VisitProperties $visitProperties, Request $request) { $visitCustomVariables = $request->getMetadata('CustomVariables', 'visitCustomVariables'); if (!empty($visitCustomVariables)) { $visitProperties->setProperties(array_merge($visitProperties->getProperties(), $visitCustomVariables)); } } public function onExistingVisit(&$valuesToUpdate, VisitProperties $visitProperties, Request $request) { $visitCustomVariables = $request->getMetadata('CustomVariables', 'visitCustomVariables'); if (!empty($visitCustomVariables)) { $valuesToUpdate = array_merge($valuesToUpdate, $visitCustomVariables); } } public function afterRequestProcessed(VisitProperties $visitProperties, Request $request) { $action = $request->getMetadata('Actions', 'action'); if (empty($action) || !($action instanceof Action)) { return; } $customVariables = $action->getCustomVariables(); if (!empty($customVariables)) { Common::printDebug("Page level Custom Variables: "); Common::printDebug($customVariables); foreach ($customVariables as $field => $value) { $action->setCustomField($field, $value); } } } }