matomo-org / matomo

Empowering People Ethically with the leading open source alternative to Google Analytics that gives you full control over your data. Matomo lets you easily collect data from websites & apps and visualise this data and extract insights. Privacy is built-in. Liberating Web Analytics. Star us on Github? +1. And we love Pull Requests!
https://matomo.org/
GNU General Public License v3.0
19.7k stars 2.62k forks source link

Update browser-plugins on existing visit #6408

Open lucasHSA opened 9 years ago

lucasHSA commented 9 years ago

Hi,

it would be nice if the browser-plugin-list of the visitor is updated on each request.

This is the GitHub-Issue for this Forum-Feature-Suggestion.

Use-Case-1

If the visitor-id (uid, cid or _id) is the same, the detected plugins in the request should be used to update the "log_visit"-table. So the visitor could be found, even if the visitor-id is not present and his plugins changed during his visit. Example (Actions of one session):

So the matching by browser finger print and visitor-id fails. If the browser plugin list in the DB would have been updated during his visit, he could be found again.

Use-Case-2

I'm detecting the browser plugins with some JavaScript code, pass it to the server and track the request on server side (Java). But on the first request the detection has not yet run. So on the first request the visit is saved in the DB whiteout any browser-plugins. On the second request (and all following) the server knows the detected browser-plugins and can pass it to the piwik-tracking-api, but piwik doesn't update the browser-plugin-list of the visit (which was created on the first request).

These are the columns of the table "log_visit" which should be updated:

Therefore the function "onExistingVisit()" must be added to the Plugin* - Classes in "piwik / plugins / UserSettings / Columns /". The function would be called from Visit.getExistingVisitFieldsToUpdate() see "piwik / core / Tracker / Visit.php":

namespace Piwik\Plugins\UserSettings\Columns;

class PluginFlash extends VisitDimension
{
    protected $columnName = 'config_flash';
    protected $columnType = 'TINYINT(1) NOT NULL';

    /**
     * @param Request $request
     * @param Visitor $visitor
     * @param Action|null $action
     * @return mixed
     */
    public function onNewVisit(Request $request, Visitor $visitor, $action)
    {
        return Common::getRequestVar('fla', 0, 'int', $request->getParams());
    }

    /* This function is required */
    public function onExistingVisit(Request $request, Visitor $visitor, $action)
    {
        return Common::getRequestVar('fla', 0, 'int', $request->getParams());
    }
}

Mit freundlichen Grüßen aus Augsburg / Best regards from Augsburg CADENAS GmbH Software Development Lucas Kögel

mattab commented 9 years ago

Thanks for the suggestion to improve tracker, it's not high priority but definitely makes sense.