/** * Runs when DG is uninstalled. */ public static function uninstall() { if (!current_user_can('activate_plugins')) { return; } check_admin_referer('bulk-plugins'); $blogs = array(null); if (is_multisite()) { $blogs = DG_Util::getBlogIds(); } foreach ($blogs as $blog) { self::_uninstall($blog); } wp_clear_scheduled_hook(DG_Logger::PurgeLogsAction); }
/** * Truncates all blog logs to the current purge interval. * * TODO: This is a memory hog. Consider switching to stream filter. */ public static function purgeExpiredEntries() { self::writeLog(DG_LogLevel::Detail, 'Beginning scheduled log file purge.'); $blogs = array(null); if (is_multisite()) { $blogs = DG_Util::getBlogIds(); } // truncate each blog's log file $time = time(); foreach ($blogs as $blog) { $blog_num = !is_null($blog) ? $blog : get_current_blog_id(); $options = self::getOptions($blog); $purge_interval = $options['purge_interval'] * DAY_IN_SECONDS; // purging is disabled for this blog if ($purge_interval <= 0) { continue; } // do perge for this blog $file = self::getLogFileName($blog_num); if (file_exists($file)) { $fp = @fopen($file, 'r'); if ($fp !== false) { $truncate = false; $offset = 0; // find the first non-expired entry while (($fields = fgetcsv($fp)) !== false) { if (!is_null($fields) && $time > $fields[0] + $purge_interval) { // we've reached the recent entries -- nothing beyond here will be removed break; } $truncate = true; $offset = @ftell($fp); if (false === $offset) { break; } } @fclose($fp); // if any expired entries exist -- remove them from the file if ($truncate) { self::writeLog(DG_LogLevel::Detail, "Purging log entries for blog #{$blog_num}."); $data = file_get_contents($file, false, null, $offset); file_put_contents($file, $data, LOCK_EX); } } } } }