| <?php |
|
|
| |
| |
| |
| |
| |
| |
| |
|
|
| namespace Piwik\Plugins\CustomVariables; |
|
|
| use Piwik\Plugins\Live\VisitorDetailsAbstract; |
| use Piwik\View; |
|
|
| class VisitorDetails extends VisitorDetailsAbstract |
| { |
| public function extendVisitorDetails(&$visitor) |
| { |
| $customVariables = array(); |
|
|
| $maxCustomVariables = CustomVariables::getNumUsableCustomVariables(); |
|
|
| for ($i = 1; $i <= $maxCustomVariables; $i++) { |
| if (!empty($this->details['custom_var_k' . $i])) { |
| $customVariables[$i] = array( |
| 'customVariableName' . $i => $this->details['custom_var_k' . $i], |
| 'customVariableValue' . $i => $this->details['custom_var_v' . $i], |
| ); |
| } |
| } |
|
|
| $visitor['customVariables'] = $customVariables; |
| } |
|
|
| public function extendActionDetails(&$action, $nextAction, $visitorDetails) |
| { |
| $maxCustomVariables = CustomVariables::getNumUsableCustomVariables(); |
| $customVariablesPage = array(); |
|
|
| for ($i = 1; $i <= $maxCustomVariables; $i++) { |
| if (!empty($action['custom_var_k' . $i])) { |
| $cvarKey = $action['custom_var_k' . $i]; |
|
|
| if (in_array($cvarKey, ['_pk_scat', '_pk_scount'])) { |
| continue; |
| } |
|
|
| $customVariablesPage[$i] = array( |
| 'customVariablePageName' . $i => $cvarKey, |
| 'customVariablePageValue' . $i => $action['custom_var_v' . $i], |
| ); |
| } |
| unset($action['custom_var_k' . $i]); |
| unset($action['custom_var_v' . $i]); |
| } |
| if (!empty($customVariablesPage)) { |
| $action['customVariables'] = $customVariablesPage; |
| } |
| } |
|
|
| public function renderActionTooltip($action, $visitInfo) |
| { |
| if (empty($action['customVariables'])) { |
| return []; |
| } |
|
|
| $view = new View('@CustomVariables/_actionTooltip'); |
| $view->action = $action; |
| return [[ 40, $view->render() ]]; |
| } |
|
|
| public function renderVisitorDetails($visitInfo) |
| { |
| if (empty($visitInfo['customVariables'])) { |
| return []; |
| } |
|
|
| $view = new View('@CustomVariables/_visitorDetails'); |
| $view->visitInfo = $visitInfo; |
| return [[ 50, $view->render() ]]; |
| } |
|
|
| protected $customVariables = []; |
|
|
| public function initProfile($visits, &$profile) |
| { |
| $this->customVariables = [ |
| Model::SCOPE_PAGE => [], |
| Model::SCOPE_VISIT => [], |
| ]; |
| } |
|
|
| public function handleProfileAction($action, &$profile) |
| { |
| if (empty($action['customVariables'])) { |
| return; |
| } |
|
|
| foreach ($action['customVariables'] as $index => $customVariable) { |
| $scope = Model::SCOPE_PAGE; |
| $name = $customVariable['customVariablePageName' . $index]; |
| $value = $customVariable['customVariablePageValue' . $index]; |
|
|
| if (empty($value)) { |
| continue; |
| } |
|
|
| if (!array_key_exists($name, $this->customVariables[$scope])) { |
| $this->customVariables[$scope][$name] = []; |
| } |
|
|
| if (!array_key_exists($value, $this->customVariables[$scope][$name])) { |
| $this->customVariables[$scope][$name][$value] = 0; |
| } |
|
|
| $this->customVariables[$scope][$name][$value]++; |
| } |
| } |
|
|
| public function handleProfileVisit($visit, &$profile) |
| { |
| if (empty($visit['customVariables'])) { |
| return; |
| } |
|
|
| foreach ($visit['customVariables'] as $index => $customVariable) { |
| $scope = Model::SCOPE_VISIT; |
| $name = $customVariable['customVariableName' . $index]; |
| $value = $customVariable['customVariableValue' . $index]; |
|
|
| if (empty($value)) { |
| continue; |
| } |
|
|
| if (!array_key_exists($name, $this->customVariables[$scope])) { |
| $this->customVariables[$scope][$name] = []; |
| } |
|
|
| if (!array_key_exists($value, $this->customVariables[$scope][$name])) { |
| $this->customVariables[$scope][$name][$value] = 0; |
| } |
|
|
| $this->customVariables[$scope][$name][$value]++; |
| } |
| } |
|
|
| public function finalizeProfile($visits, &$profile) |
| { |
| $customVariables = $this->customVariables; |
| foreach ($customVariables as $scope => &$variables) { |
| if (empty($variables)) { |
| unset($customVariables[$scope]); |
| continue; |
| } |
|
|
| foreach ($variables as $name => &$values) { |
| arsort($values); |
| } |
| } |
| if (!empty($customVariables)) { |
| $profile['customVariables'] = $this->convertForProfile($customVariables); |
| } |
| } |
|
|
| protected function convertForProfile($customVariables) |
| { |
| $convertedVariables = []; |
|
|
| foreach ($customVariables as $scope => $scopeVariables) { |
| $convertedVariables[$scope] = []; |
|
|
| foreach ($scopeVariables as $name => $values) { |
| $variable = [ |
| 'name' => $name, |
| 'values' => [] |
| ]; |
|
|
| foreach ($values as $value => $count) { |
| $variable['values'][] = [ |
| 'value' => $value, |
| 'count' => $count |
| ]; |
| } |
|
|
| $convertedVariables[$scope][] = $variable; |
| } |
| } |
|
|
| return $convertedVariables; |
| } |
| } |
|
|