protected function getDeleteLogsInfo() { Piwik::checkUserIsSuperUser(); $deleteLogsInfos = array(); $taskScheduler = new Piwik_TaskScheduler(); $deleteLogsInfos["config"] = Zend_Registry::get('config')->Deletelogs->toArray(); $privacyManager = new Piwik_PrivacyManager(); $deleteLogsInfos["deleteTables"] = implode(", ", $privacyManager->getDeleteTableLogTables()); $scheduleTimetable = $taskScheduler->getScheduledTimeForTask("Piwik_PrivacyManager", "deleteLogTables"); $optionTable = Piwik_GetOption(self::OPTION_LAST_DELETE_PIWIK_LOGS); //If task was already rescheduled, read time from taskTimetable. Else, calculate next possible runtime. if (!empty($scheduleTimetable) && $scheduleTimetable - time() > 0) { $nextPossibleSchedule = (int) $scheduleTimetable; } else { $date = Piwik_Date::factory("today"); $nextPossibleSchedule = $date->addDay(1)->getTimestamp(); } //deletion schedule did not run before if (empty($optionTable)) { $deleteLogsInfos["lastRun"] = false; //next run ASAP (with next schedule run) $date = Piwik_Date::factory("today"); $deleteLogsInfos["nextScheduleTime"] = $nextPossibleSchedule; } else { $deleteLogsInfos["lastRun"] = $optionTable; $deleteLogsInfos["lastRunPretty"] = Piwik_Date::factory((int) $optionTable)->getLocalized('%day% %shortMonth% %longYear%'); //Calculate next run based on last run + interval $nextScheduleRun = (int) ($deleteLogsInfos["lastRun"] + $deleteLogsInfos["config"]["delete_logs_schedule_lowest_interval"] * 24 * 60 * 60); //is the calculated next run in the past? (e.g. plugin was disabled in the meantime or something) -> run ASAP if ($nextScheduleRun - time() <= 0) { $deleteLogsInfos["nextScheduleTime"] = $nextPossibleSchedule; } else { $deleteLogsInfos["nextScheduleTime"] = $nextScheduleRun; } } $deleteLogsInfos["nextRunPretty"] = Piwik::getPrettyTimeFromSeconds($deleteLogsInfos["nextScheduleTime"] - time()); return $deleteLogsInfos; }
/** * Tests that purgeData works correctly when the 'keep segment reports' setting is set to true. * * @group Plugins * @group PrivacyManager */ public function testPurgeDataDeleteReportsKeepSegmentsReports() { Piwik_PrivacyManager::savePurgeDataSettings(array('delete_reports_keep_day_reports' => 1, 'delete_reports_keep_segment_reports' => 1)); // get purge data prediction $prediction = Piwik_PrivacyManager::getPurgeEstimate(); // perform checks on prediction $expectedPrediction = array(Piwik_Common::prefixTable('log_conversion') => 6, Piwik_Common::prefixTable('log_link_visit_action') => 6, Piwik_Common::prefixTable('log_visit') => 3, Piwik_Common::prefixTable('log_conversion_item') => 3, Piwik_Common::prefixTable('archive_numeric_2012_01') => -1, Piwik_Common::prefixTable('archive_blob_2012_01') => 9); $this->assertEquals($expectedPrediction, $prediction); // purge data $this->_setTimeToRun(); $this->instance->deleteLogData(); $this->instance->deleteReportData(); // perform checks $this->checkLogDataPurged(); $this->_checkReportsAndMetricsPurged($janBlobsRemaining = 6); // 1 segmented blob + 5 day blobs }
/** * Returns true if it is likely that the data for this report has been purged and if the * user should be told about that. * * In order for this function to return true, the following must also be true: * - The data table for this report must either be empty or not have been fetched. * - The period of this report is not a multiple period. * - The date of this report must be older than the delete_reports_older_than config option. * @return bool */ public function hasReportBeenPurged() { $strPeriod = Piwik_Common::getRequestVar('period', false); $strDate = Piwik_Common::getRequestVar('date', false); if ($strPeriod !== false && $strDate !== false && (is_null($this->dataTable) || $this->dataTable->getRowsCount() == 0)) { // if range, only look at the first date if ($strPeriod == 'range') { $idSite = Piwik_Common::getRequestVar('idSite', ''); if (intval($idSite) != 0) { $site = new Piwik_Site($idSite); $timezone = $site->getTimezone(); } else { $timezone = 'UTC'; } $period = new Piwik_Period_Range('range', $strDate, $timezone); $reportDate = $period->getDateStart(); } else { if (Piwik_Archive::isMultiplePeriod($strDate, $strPeriod)) { return false; } else { $reportDate = Piwik_Date::factory($strDate); } } $reportYear = $reportDate->toString('Y'); $reportMonth = $reportDate->toString('m'); if (class_exists('Piwik_PrivacyManager') && Piwik_PrivacyManager::shouldReportBePurged($reportYear, $reportMonth)) { return true; } } return false; }