From 8a1ed4d3670b07049131d60f3ae369cf8d353e76 Mon Sep 17 00:00:00 2001
From: mattab <matthieu.aubry@gmail.com>
Date: Thu, 19 Mar 2015 16:49:41 +1300
Subject: [PATCH] Simplifies object scope to only return modified date
 parameter

---
 core/CronArchive.php                          | 37 +++++++++++++------
 .../SegmentArchivingRequestUrlProvider.php    | 17 +--------
 ...SegmentArchivingRequestUrlProviderTest.php | 28 +++++++-------
 3 files changed, 40 insertions(+), 42 deletions(-)

diff --git a/core/CronArchive.php b/core/CronArchive.php
index 7a4c0bf972..c21a0205e7 100644
--- a/core/CronArchive.php
+++ b/core/CronArchive.php
@@ -236,7 +236,7 @@ class CronArchive
         $this->initTokenAuth();
 
         $processNewSegmentsFrom = $processNewSegmentsFrom ?: StaticContainer::get('ini.General.process_new_segments_from');
-        $this->segmentArchivingRequestUrlProvider = new SegmentArchivingRequestUrlProvider($this->piwikUrl, $this->token_auth, $processNewSegmentsFrom);
+        $this->segmentArchivingRequestUrlProvider = new SegmentArchivingRequestUrlProvider($processNewSegmentsFrom);
     }
 
     /**
@@ -629,9 +629,13 @@ class CronArchive
     /**
      * Returns base URL to process reports for the $idSite on a given $period
      */
-    private function getVisitsRequestUrl($idSite, $period, $date)
+    private function getVisitsRequestUrl($idSite, $period, $date, $segment = false)
     {
-        return "?module=API&method=API.get&idSite=$idSite&period=$period&date=" . $date . "&format=php&token_auth=" . $this->token_auth;
+        $request = "?module=API&method=API.get&idSite=$idSite&period=$period&date=" . $date . "&format=php&token_auth=" . $this->token_auth;
+        if($segment) {
+            $request .= '&segment=' . urlencode($segment);;
+        }
+        return $request;
     }
 
     private function initSegmentsToArchive()
@@ -764,11 +768,8 @@ class CronArchive
     {
         $timer = new Timer();
 
-        $url  = $this->piwikUrl;
-
-        $url .= $this->getVisitsRequestUrl($idSite, $period, $date);
-
-        $url .= self::APPEND_TO_API_REQUEST;
+        $url = $this->getVisitsRequestUrl($idSite, $period, $date, $segment = false);
+        $url = $this->makeRequestUrl($url);
 
         $visitsInLastPeriods = $visitsLastPeriod = 0;
         $success = true;
@@ -783,8 +784,10 @@ class CronArchive
         }
 
         foreach ($this->getSegmentsForSite($idSite) as $segment) {
-            $urlWithSegment = $this->segmentArchivingRequestUrlProvider->getUrlToArchiveSegment($idSite, $period, $date, $segment);
-            $urlWithSegment .= self::APPEND_TO_API_REQUEST;
+            $dateParamForSegment = $this->segmentArchivingRequestUrlProvider->getUrlParameterDateString($idSite, $period, $date, $segment);
+
+            $urlWithSegment = $this->getVisitsRequestUrl($idSite, $period, $dateParamForSegment, $segment);
+            $urlWithSegment = $this->makeRequestUrl($urlWithSegment);
 
             $urls[] = $urlWithSegment;
             $this->requests++;
@@ -866,11 +869,12 @@ class CronArchive
     }
 
     /**
-     * Issues a request to $url
+     * Issues a request to $url eg. "?module=API&method=API.getDefaultMetricTranslations&format=original&serialize=1"
+     *
      */
     private function request($url)
     {
-        $url = $this->piwikUrl . $url . self::APPEND_TO_API_REQUEST;
+        $url = $this->makeRequestUrl($url);
 
         if ($this->shouldStartProfiler) {
             $url .= "&xhprof=2";
@@ -1545,4 +1549,13 @@ class CronArchive
 
         return $customDateRangesToProcessForSites;
     }
+
+    /**
+     * @param $url
+     * @return string
+     */
+    private function makeRequestUrl($url)
+    {
+        return $this->piwikUrl . $url . self::APPEND_TO_API_REQUEST;
+    }
 }
\ No newline at end of file
diff --git a/core/CronArchive/SegmentArchivingRequestUrlProvider.php b/core/CronArchive/SegmentArchivingRequestUrlProvider.php
index 6b3828af06..332d5f5cee 100644
--- a/core/CronArchive/SegmentArchivingRequestUrlProvider.php
+++ b/core/CronArchive/SegmentArchivingRequestUrlProvider.php
@@ -39,30 +39,17 @@ class SegmentArchivingRequestUrlProvider
      */
     private $now;
 
-    private $baseUrl;
-    private $tokenAuth;
     private $processNewSegmentsFrom;
 
-    public function __construct($baseUrl, $tokenAuth, $processNewSegmentsFrom, Model $segmentEditorModel = null, Cache $segmentListCache = null, Date $now = null)
+    public function __construct($processNewSegmentsFrom, Model $segmentEditorModel = null, Cache $segmentListCache = null, Date $now = null)
     {
-        $this->baseUrl = $baseUrl;
-        $this->tokenAuth = $tokenAuth;
         $this->processNewSegmentsFrom = $processNewSegmentsFrom;
         $this->segmentEditorModel = $segmentEditorModel ?: new Model();
         $this->segmentListCache = $segmentListCache ?: new Transient();
         $this->now = $now ?: Date::factory('now');
     }
 
-    public function getUrlToArchiveSegment($idSite, $period, $date, $segment)
-    {
-        $date = $this->getModifiedSegmentArchvingDateRange($idSite, $period, $date, $segment);
-
-        return $this->baseUrl
-            . "?module=API&method=API.get&idSite=$idSite&period=$period&date=" . $date . "&format=php&token_auth=" . $this->tokenAuth
-            . '&segment=' . urlencode($segment);
-    }
-
-    private function getModifiedSegmentArchvingDateRange($idSite, $period, $date, $segment)
+    public function getUrlParameterDateString($idSite, $period, $date, $segment)
     {
         $segmentCreatedTime = $this->getCreatedTimeOfSegment($idSite, $segment);
         if (empty($segmentCreatedTime)) {
diff --git a/tests/PHPUnit/Unit/CronArchive/SegmentArchivingRequestUrlProviderTest.php b/tests/PHPUnit/Unit/CronArchive/SegmentArchivingRequestUrlProviderTest.php
index 7d50d3f17f..20d4faca20 100644
--- a/tests/PHPUnit/Unit/CronArchive/SegmentArchivingRequestUrlProviderTest.php
+++ b/tests/PHPUnit/Unit/CronArchive/SegmentArchivingRequestUrlProviderTest.php
@@ -13,10 +13,8 @@ use Piwik\CronArchive\SegmentArchivingRequestUrlProvider;
 /**
  * @group Core
  */
-class SegmentArchivingRequestUrlProviderTest extends \PHPUnit_Framework_TestCase
+class test extends \PHPUnit_Framework_TestCase
 {
-    const BASE_URL = 'http://base/';
-    const TOKEN_AUTH = 'tokenauth';
     const TEST_NOW = '2015-03-01';
 
     private $mockSegmentEntries;
@@ -69,13 +67,14 @@ class SegmentArchivingRequestUrlProviderTest extends \PHPUnit_Framework_TestCase
     {
         $urlProvider = $this->createUrlProviderToTest($processNewSegmentsFrom);
 
-        $actual = $urlProvider->getUrlToArchiveSegment($idSite, $period, $date, $segment);
+        $actual = $urlProvider->getUrlParameterDateString($idSite, $period, $date, $segment);
         $this->assertEquals($expected, $actual);
     }
 
     public function getUrlToArchiveSegmentTestData()
     {
         $dateRange = '2010-02-01,' . self::TEST_NOW;
+
         return array(
             array( // test beginning_of_time does not modify date
                 'beginning_of_time',
@@ -83,7 +82,7 @@ class SegmentArchivingRequestUrlProviderTest extends \PHPUnit_Framework_TestCase
                 $dateRange,
                 'week',
                 'browserName==FF',
-                "http://base/?module=API&method=API.get&idSite=1&period=week&date=$dateRange&format=php&token_auth=tokenauth&segment=" . urlencode('browserName==FF')
+                $dateRange
             ),
 
             array( // test garbage string does not modify date
@@ -92,7 +91,7 @@ class SegmentArchivingRequestUrlProviderTest extends \PHPUnit_Framework_TestCase
                 $dateRange,
                 'week',
                 'browserName==FF',
-                "http://base/?module=API&method=API.get&idSite=1&period=week&date=$dateRange&format=php&token_auth=tokenauth&segment=" . urlencode('browserName==FF')
+                $dateRange
             ),
 
             array( // test creation_time uses creation time of segment
@@ -101,7 +100,7 @@ class SegmentArchivingRequestUrlProviderTest extends \PHPUnit_Framework_TestCase
                 $dateRange,
                 'week',
                 'browserName==FF',
-                'http://base/?module=API&method=API.get&idSite=1&period=week&date=2014-01-01,2015-03-01&format=php&token_auth=tokenauth&segment=' . urlencode('browserName==FF')
+                "2014-01-01,2015-03-01"
             ),
 
             array( // test creation_time uses earliest time of segment if multiple match (multiple for site)
@@ -110,7 +109,7 @@ class SegmentArchivingRequestUrlProviderTest extends \PHPUnit_Framework_TestCase
                 $dateRange,
                 'week',
                 'countryCode==us',
-                'http://base/?module=API&method=API.get&idSite=1&period=week&date=2012-01-01,2015-03-01&format=php&token_auth=tokenauth&segment=' . urlencode('countryCode==us')
+                '2012-01-01,2015-03-01'
             ),
 
             array( // test creation_time uses earliest time of segment if multiple match (multiple for site + one for all)
@@ -119,7 +118,7 @@ class SegmentArchivingRequestUrlProviderTest extends \PHPUnit_Framework_TestCase
                 $dateRange,
                 'week',
                 'countryCode==ca',
-                'http://base/?module=API&method=API.get&idSite=2&period=week&date=2011-01-01,2015-03-01&format=php&token_auth=tokenauth&segment=' . urlencode('countryCode==ca')
+                '2011-01-01,2015-03-01'
             ),
 
             array( // test 'now' is used if no site matches (testing w/o any segments)
@@ -128,7 +127,7 @@ class SegmentArchivingRequestUrlProviderTest extends \PHPUnit_Framework_TestCase
                 $dateRange,
                 'week',
                 'pageTitle==abc',
-                'http://base/?module=API&method=API.get&idSite=1&period=week&date=2015-03-01,2015-03-01&format=php&token_auth=tokenauth&segment=' . urlencode('pageTitle==abc')
+                "2015-03-01,2015-03-01"
             ),
 
             array( // test 'now' is used if no site matches (testing w/ segment for another site)
@@ -137,7 +136,7 @@ class SegmentArchivingRequestUrlProviderTest extends \PHPUnit_Framework_TestCase
                 $dateRange,
                 'week',
                 'countryCode==us',
-                'http://base/?module=API&method=API.get&idSite=3&period=week&date=2015-03-01,2015-03-01&format=php&token_auth=tokenauth&segment=' . urlencode('countryCode==us')
+                "2015-03-01,2015-03-01"
             ),
 
             array( // test lastN rewinds created date by N days
@@ -146,7 +145,7 @@ class SegmentArchivingRequestUrlProviderTest extends \PHPUnit_Framework_TestCase
                 $dateRange,
                 'week',
                 'countryCode==us',
-                'http://base/?module=API&method=API.get&idSite=1&period=week&date=2011-12-22,2015-03-01&format=php&token_auth=tokenauth&segment=' . urlencode('countryCode==us')
+                "2011-12-22,2015-03-01"
             ),
 
             array( // test lastN rewinds now by N days (testing w/ no found segment)
@@ -155,7 +154,7 @@ class SegmentArchivingRequestUrlProviderTest extends \PHPUnit_Framework_TestCase
                 $dateRange,
                 'week',
                 'countryCode==us',
-                'http://base/?module=API&method=API.get&idSite=3&period=week&date=2015-02-19,2015-03-01&format=php&token_auth=tokenauth&segment=' . urlencode('countryCode==us')
+                "2015-02-19,2015-03-01"
             ),
         );
     }
@@ -165,7 +164,6 @@ class SegmentArchivingRequestUrlProviderTest extends \PHPUnit_Framework_TestCase
         $mockSegmentEditorModel = $this->getMock('Piwik\Plugins\SegmentEditor\Model', array('getAllSegmentsAndIgnoreVisibility'));
         $mockSegmentEditorModel->expects($this->any())->method('getAllSegmentsAndIgnoreVisibility')->will($this->returnValue($this->mockSegmentEntries));
 
-        return new SegmentArchivingRequestUrlProvider(self::BASE_URL, self::TOKEN_AUTH, $processNewSegmentsFrom,
-            $mockSegmentEditorModel, null, Date::factory(self::TEST_NOW));
+        return new SegmentArchivingRequestUrlProvider($processNewSegmentsFrom, $mockSegmentEditorModel, null, Date::factory(self::TEST_NOW));
     }
 }
\ No newline at end of file
-- 
GitLab