Matomo - Плагин провайдера геолокации и доступ к деталям посещения

Я пытаюсь написать свой первый плагин Matomo (поставщик местоположения), который будет определять местоположение пользователя на основе столбца настраиваемого измерения.

Пока что я придумал этот код:

<?php

namespace Piwik\Plugins\LocationProviderCustom\LocationProvider;

use Piwik\Plugins\UserCountry\LocationProvider;

class CountryProvider extends LocationProvider {

public function getLocation($info) {

    // custom_dimension_1 should be accessible here

    $location = array(
        self::COUNTRY_CODE_KEY => 'us'
    );
    self::completeLocationResult($location);
    return $location;
}

public function isWorking() {
    return true;
}

public function isAvailable() {
    return true;
}

public function getSupportedLocationInfo() {
    return array(
        self::COUNTRY_CODE_KEY => true
    );
}

public function getInfo() {
    return array(
        'id' => 'locationProviderCustom',
        'title' => 'Location Provide',
        'description' => '',
        'order' => 5
    );
}

}

Итак, в getLocation ($ info) я должен определить код страны. $ info содержит только IP-адрес и язык браузера. Все подключения провайдеров местоположения, которые я видел, использовали одно из этих двух свойств для определения страны пользователя.

Можно ли получить сведения о посещении и особенно значения параметров пользовательского посещения в поле "Местоположение"? Или подойти к этому как-то иначе?

Спасибо


person daemon    schedule 15.08.2019    source источник


Ответы (1)


Используйте Common :: getrequestVar () для получения значений запроса.

Вот пример, в котором я использовал пользовательскую переменную, а не специальные параметры:

    public function getLocation($info)
    {
        $country_code = 'us';

        $_cvar = Common::getRequestVar('_cvar', '{}');

        //in my case $_cvar string looks something like '{&quot;1&quot;:[&quot;COUNTRY&quot;,&quot;gb&quot;]}'

        $_cvar = html_entity_decode($_cvar);
        $decoded_cvars = json_decode($_cvar, true);

        if ($decoded_cvars !== NULL) {
          $custom_var = array();

          foreach($decoded_cvars as $var) {
            $custom_var[$var[0]] = $var[1];
          }

          if (array_key_exists('COUNTRY', $custom_var)) {
            $country_code = $custom_var['COUNTRY'];
          }
        }

        $location = array(
          self::COUNTRY_CODE_KEY => $country_code
        );

        self::completeLocationResult($location);

        return $location;
    }
person esukf    schedule 18.09.2019