| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| namespace Piwik\Archive; |
|
|
| use Piwik\Archive; |
| use Piwik\Period; |
| use Piwik\Segment; |
| use Piwik\Site; |
| use Piwik\Period\Factory as PeriodFactory; |
|
|
| class ArchiveQueryFactory |
| { |
| public function __construct() |
| { |
| |
| } |
|
|
| |
| |
| |
| public function build($idSites, $strPeriod, $strDate, $strSegment = false, $_restrictSitesToLogin = false) |
| { |
| list($websiteIds, $timezone, $idSiteIsAll) = $this->getSiteInfoFromQueryParam($idSites, $_restrictSitesToLogin); |
| list($allPeriods, $isMultipleDate) = $this->getPeriodInfoFromQueryParam($strDate, $strPeriod, $timezone); |
| $segment = $this->getSegmentFromQueryParam($strSegment, $websiteIds, $allPeriods); |
|
|
| return $this->factory($segment, $allPeriods, $websiteIds, $idSiteIsAll, $isMultipleDate); |
| } |
|
|
| |
| |
| |
| public function factory(Segment $segment, array $periods, array $idSites, $idSiteIsAll = false, $isMultipleDate = false) |
| { |
| $forceIndexedBySite = false; |
| $forceIndexedByDate = false; |
|
|
| if ($idSiteIsAll || count($idSites) > 1) { |
| $forceIndexedBySite = true; |
| } |
|
|
| if (count($periods) > 1 || $isMultipleDate) { |
| $forceIndexedByDate = true; |
| } |
|
|
| $params = new Parameters($idSites, $periods, $segment); |
|
|
| return $this->newInstance($params, $forceIndexedBySite, $forceIndexedByDate); |
| } |
|
|
| public function newInstance(Parameters $params, $forceIndexedBySite, $forceIndexedByDate) |
| { |
| return new Archive($params, $forceIndexedBySite, $forceIndexedByDate); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| protected function getSiteInfoFromQueryParam($idSites, $_restrictSitesToLogin) |
| { |
| $websiteIds = Site::getIdSitesFromIdSitesString($idSites, $_restrictSitesToLogin); |
|
|
| $timezone = false; |
| if (count($websiteIds) === 1) { |
| $timezone = Site::getTimezoneFor($websiteIds[0]); |
| } |
|
|
| $idSiteIsAll = $idSites === Archive::REQUEST_ALL_WEBSITES_FLAG; |
|
|
| return [$websiteIds, $timezone, $idSiteIsAll]; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| protected function getPeriodInfoFromQueryParam($strDate, $strPeriod, $timezone) |
| { |
| if (Period::isMultiplePeriod($strDate, $strPeriod)) { |
| $oPeriod = PeriodFactory::build($strPeriod, $strDate, $timezone); |
| $allPeriods = $oPeriod->getSubperiods(); |
| } else { |
| $oPeriod = PeriodFactory::makePeriodFromQueryParams($timezone, $strPeriod, $strDate); |
| $allPeriods = array($oPeriod); |
| } |
|
|
| $isMultipleDate = Period::isMultiplePeriod($strDate, $strPeriod); |
|
|
| return [$allPeriods, $isMultipleDate]; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| protected function getSegmentFromQueryParam($strSegment, $websiteIds, $allPeriods) |
| { |
| |
| |
| return new Segment($strSegment, $websiteIds, reset($allPeriods)->getDateTimeStart(), end($allPeriods)->getDateTimeEnd()); |
| } |
| } |
|
|