Developed with love by KnpLabs Hire us for your project!
0

piwik-bundle

by devhelp

integration of devhelp/piwik-api into symfony. Allows to create services for piwik api methods

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

The MIT License (MIT)

Copyright (c) 2015 devhelp.pl

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.