Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Piwik Bundle Laravel Package

devhelp/piwik-bundle

View on GitHub
Deep Wiki
Context7

Build Status Scrutinizer Code Quality

Purpose

Bundle provides integration with Piwik API. Adds services to the dependency injection container that allows to use Piwik API methods as services. It uses devhelp/piwik-api library - check its documentation for more advanced usage.

Installation

$ composer require devhelp/piwik-bundle

For more information please check composer website.

Add the bundle to AppKernel

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            //...
            new \Devhelp\PiwikBundle\DevhelpPiwikBundle(),
            //...
        );

        //...

        return $bundles;
    }

    //...
}

Sandbox

Full working example can be found at devhelp/piwik-bundle-sandbox

Usage

Define API connection in config.yml

devhelp_piwik:
    client: my_piwik.client
    api:
        reader:
            url: http://my_piwik_instance.piwik.pro
            default_params:
                token_auth: %piwik_token_auth%
                idSite: %piwik_site_id%

Create piwik client service that is used in config.yml

This example uses PiwikGuzzleClient class that is responsible for making http request to Piwik. You can include this extension by including devhelp/piwik-api-guzzle in your project

my_piwik.client:
    class: Devhelp\Piwik\Api\Guzzle\Client\PiwikGuzzleClient
    arguments:
        # guzzle service must implement GuzzleHttp\ClientInterface
        - '@guzzle'

Use API method in your use case

service configuration

my_service:
    class: Acme\DemoBundle\Service\MyService
    arguments:
        # it is an alias of first configured api (in this case it equals devhelp_piwik.api.reader service)
        - '@devhelp_piwik.api'

service definition

namespace Acme\DemoBundle\Service;


use Devhelp\Piwik\Api\Api;

class MyService
{

    /**
     * @var Api
     */
    private $piwikApi;

    public function __construct(Api $piwikApi)
    {
        $this->piwikApi = $piwikApi;
    }

    public function doSomething()
    {
        //...
        $this->piwikApi->getMethod('PiwikPlugin.pluginAction')->call();
        //...
    }
}

Define API parameters resolved at runtime

You are allowed to set services as a params. If you do that then the service will be used to resolve the parameter at runtime. For example have a service that would return token_auth of logged in user

devhelp_piwik:
    client: my_piwik.client
    api:
        reader:
            url: http://my_piwik_instance.piwik.pro
            default_params:
                token_auth: my_token_auth_provider
                idSite: %piwik_site_id%

my_token_auth_provider service definition

my_token_auth_provider:
    class: Acme\DemoBundle\Param\MyTokenAuthProvider
    arguments:
        - '@security.token_storage'

MyTokenAuthProvider class definition (assumes that User class has getPiwikToken method)

namespace Acme\DemoBundle\Param;

use Devhelp\Piwik\Api\Param\Param;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;

class MyTokenAuthProvider implements Param
{

    /**
     * @var TokenStorageInterface
     */
    private $tokenStorage;

    public function __construct(TokenStorageInterface $tokenStorage)
    {
        $this->tokenStorage = $tokenStorage;
    }

    public function value()
    {
        $token = $this->tokenStorage->getToken();

        return $token instanceof TokenInterface ? $token->getUser()->getPiwikToken() : null;
    }
}

Define API methods as services

my_piwik_method:
    class: Devhelp\Piwik\Api\Method\Method
    factory:
        - '@devhelp_piwik.api'
        - getMethod
    arguments:
        - VisitFrequency.get

This depends on your Symfony version (check here)

Calling API using Symfony command

devhelp_piwik:api:call command allows you to call the API from command line. You can do it either by specifying method service id or by passing method name together with api name (or use the default)

for more information please run

$ console devhelp_piwik:api:call --help

Feedback/Requests

Feel free to create an issue if you think that something is missing or needs fixing. Feedback is more than welcome!

Credits

Brought to you by: devhelp.pl

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
sentix/ai-chatbot
terminal42/code-quality-tools
codifyo/ts-generator-bundle
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky