/** * Builds an Archive object or returns the same archive if previously built. * * @param string|int idSite integer, or comma separated list of integer * @param string|Piwik_Date $date 'YYYY-MM-DD' or magic keywords 'today' @see Piwik_Date::factory() * @param string $period 'week' 'day' etc. * * @return Piwik_Archive */ public static function build($idSite, $period, $strDate) { if ($idSite === 'all') { $sites = Piwik_SitesManager_API::getSitesIdWithAtLeastViewAccess(); } else { $sites = Piwik_Site::getIdSitesFromIdSitesString($idSite); } // idSite=1,3 or idSite=all if (count($sites) > 1 || $idSite === 'all') { require_once 'Archive/Array/IndexedBySite.php'; $archive = new Piwik_Archive_Array_IndexedBySite($sites, $period, $strDate); } elseif (is_string($strDate) && (ereg('^(last|previous){1}([0-9]*)$', $strDate, $regs) || ereg('^([0-9]{4}-[0-9]{1,2}-[0-9]{1,2}),([0-9]{4}-[0-9]{1,2}-[0-9]{1,2})$', $strDate, $regs))) { $oSite = new Piwik_Site($idSite); require_once 'Archive/Array/IndexedByDate.php'; $archive = new Piwik_Archive_Array_IndexedByDate($oSite, $period, $strDate); } else { if (is_string($strDate)) { $oDate = Piwik_Date::factory($strDate); } else { $oDate = $strDate; } $date = $oDate->toString(); if (isset(self::$alreadyBuilt[$idSite][$date][$period])) { return self::$alreadyBuilt[$idSite][$date][$period]; } $oPeriod = Piwik_Period::factory($period, $oDate); $archive = new Piwik_Archive_Single(); $archive->setPeriod($oPeriod); $archive->setSite(new Piwik_Site($idSite)); $archiveJustProcessed = $archive->prepareArchive(); //we don't cache the archives just processed, the datatable were freed from memory if (!$archiveJustProcessed) { self::$alreadyBuilt[$idSite][$date][$period] = $archive; } } return $archive; }
/** * Builds an Archive object or returns the same archive if previously built. * * @param string|int idSite integer, or comma separated list of integer * @param string|Piwik_Date $date 'YYYY-MM-DD' or magic keywords 'today' @see Piwik_Date::factory() * @param string $period 'week' 'day' etc. * * @return Piwik_Archive */ static public function build($idSite, $period, $strDate ) { if($idSite === 'all') { $sites = Piwik_SitesManager_API::getSitesIdWithAtLeastViewAccess(); } else { $sites = Piwik_Site::getIdSitesFromIdSitesString($idSite); } // idSite=1,3 or idSite=all if( count($sites) > 1 || $idSite === 'all' ) { $archive = new Piwik_Archive_Array_IndexedBySite($sites, $period, $strDate); } // if a period date string is detected: either 'last30', 'previous10' or 'YYYY-MM-DD,YYYY-MM-DD' elseif(is_string($strDate) && ( preg_match('/^(last|previous){1}([0-9]*)$/', $strDate, $regs) || preg_match('/^([0-9]{4}-[0-9]{1,2}-[0-9]{1,2}),([0-9]{4}-[0-9]{1,2}-[0-9]{1,2})$/', $strDate, $regs) ) ) { $oSite = new Piwik_Site($idSite); $archive = new Piwik_Archive_Array_IndexedByDate($oSite, $period, $strDate); } // case we request a single archive else { if(is_string($strDate)) { $oDate = Piwik_Date::factory($strDate); } else { $oDate = $strDate; } $date = $oDate->toString(); if(isset(self::$alreadyBuilt[$idSite][$date][$period])) { return self::$alreadyBuilt[$idSite][$date][$period]; } $oPeriod = Piwik_Period::factory($period, $oDate); $archive = new Piwik_Archive_Single(); $archive->setPeriod($oPeriod); $archive->setSite(new Piwik_Site($idSite)); $archiveJustProcessed = $archive->prepareArchive(); //we don't cache the archives just processed, the datatable were freed from memory if(!$archiveJustProcessed) { self::$alreadyBuilt[$idSite][$date][$period] = $archive; } } return $archive; }
/** * Returns the ID of the archived subperiods. * * @return array Array of the idArchive of the subperiods */ protected function loadSubperiodsArchive() { $periods = array(); // we first compute every subperiod of the archive foreach ($this->period->getSubperiods() as $period) { $archivePeriod = new Piwik_Archive_Single(); $archivePeriod->setSite($this->site); $archivePeriod->setPeriod($period); $archivePeriod->prepareArchive(); $periods[] = $archivePeriod; } return $periods; }