Piwik\Plugins\API\API::getBulkRequest PHP Method

getBulkRequest() public method

Performs multiple API requests at once and returns every result.
public getBulkRequest ( array $urls ) : array
$urls array The array of API requests.
return array
    public function getBulkRequest($urls)
    {
        if (empty($urls)) {
            return array();
        }
        $urls = array_map('urldecode', $urls);
        $urls = array_map(array('Piwik\\Common', 'unsanitizeInputValue'), $urls);
        $result = array();
        foreach ($urls as $url) {
            $params = Request::getRequestArrayFromString($url . '&format=php&serialize=0');
            if (isset($params['urls']) && $params['urls'] == $urls) {
                // by default 'urls' is added to $params as Request::getRequestArrayFromString adds all $_GET/$_POST
                // default parameters
                unset($params['urls']);
            }
            if (!empty($params['segment']) && strpos($url, 'segment=') > -1) {
                // only unsanitize input when segment is actually present in URL, not when it was used from
                // $defaultRequest in Request::getRequestArrayFromString from $_GET/$_POST
                $params['segment'] = urlencode(Common::unsanitizeInputValue($params['segment']));
            }
            $req = new Request($params);
            $result[] = $req->process();
        }
        return $result;
    }

Usage Example

Example #1
0
 public function test_getBulkRequest_IsAbleToHandleManyDifferentRequests()
 {
     $token = Fixture::getTokenAuth();
     $urls = array("method%3dVisitsSummary.get%26idSite%3d1%26date%3d2015-01-26%26period%3dday", "method%3dVisitsSummary.get%26token_auth%3d{$token}%26idSite%3d1%26date%3d2015-01-26%26period%3dday", "method%3dVisitsSummary.get%26idSite%3d1%26date%3d2015-01-26%26period%3dday", "method%3dVisitsSummary.get%26idSite%3d1%26token_auth%3danonymous%26date%3d2015-01-26%26period%3dday");
     $response = $this->api->getBulkRequest($urls);
     $this->assertResponseIsPermissionError($response[0]);
     $this->assertResponseIsSuccess($response[1]);
     $this->assertSame(0, $response[1]['nb_visits']);
     $this->assertResponseIsPermissionError($response[2]);
     $this->assertResponseIsPermissionError($response[3]);
 }