Jelajahi Sumber

perform housekeeping tasks for plugins loaded in user-context only

Andrew Dolgov 7 tahun lalu
induk
melakukan
5cbd1fe8e4
2 mengubah file dengan 25 tambahan dan 4 penghapusan
  1. 6 3
      include/functions.php
  2. 19 1
      include/rssfuncs.php

+ 6 - 3
include/functions.php

@@ -833,14 +833,17 @@
 		return $csrf_token == $_SESSION['csrf_token'];
 	}
 
-	function load_user_plugins($owner_uid) {
+	function load_user_plugins($owner_uid, $pluginhost = false) {
+
+		if (!$pluginhost) $pluginhost = PluginHost::getInstance();
+
 		if ($owner_uid && SCHEMA_VERSION >= 100) {
 			$plugins = get_pref("_ENABLED_PLUGINS", $owner_uid);
 
-			PluginHost::getInstance()->load($plugins, PluginHost::KIND_USER, $owner_uid);
+			$pluginhost->load($plugins, PluginHost::KIND_USER, $owner_uid);
 
 			if (get_schema_version() > 100) {
-				PluginHost::getInstance()->load_data();
+				$pluginhost->load_data();
 			}
 		}
 	}

+ 19 - 1
include/rssfuncs.php

@@ -179,6 +179,8 @@
 		$nf = 0;
 		$bstarted = microtime(true);
 
+		$batch_owners = array();
+
 		// For each feed, we call the feed update function.
 		foreach ($feeds_to_update as $feed) {
 			if($debug) _debug("Base feed: $feed");
@@ -204,6 +206,9 @@
 				while ($tline = db_fetch_assoc($tmp_result)) {
 					if($debug) _debug(" => " . $tline["last_updated"] . ", " . $tline["id"] . " " . $tline["owner_uid"]);
 
+					if (array_search($tline["owner_uid"], $batch_owners) === FALSE)
+						array_push($batch_owners, $tline["owner_uid"]);
+
 					$fstarted = microtime(true);
 					$rss = update_rss_feed($tline["id"], true, false);
 					_debug_suppress(false);
@@ -220,6 +225,12 @@
 				microtime(true) - $bstarted, (microtime(true) - $bstarted) / $nf));
 		}
 
+		foreach ($batch_owners as $owner_uid) {
+			_debug("Running housekeeping tasks for user $owner_uid...");
+
+			housekeeping_user($owner_uid);
+		}
+
 		require_once "digest.php";
 
 		// Send feed digests by email if needed.
@@ -1502,6 +1513,14 @@
 		_debug("Removed $frows (feeds) $crows (cats) orphaned counter cache entries.");
 	}
 
+	function housekeeping_user($owner_uid) {
+		$tmph = new PluginHost();
+
+		load_user_plugins($owner_uid, $tmph);
+
+		$tmph->run_hooks(PluginHost::HOOK_HOUSE_KEEPING, "hook_house_keeping", "");
+	}
+
 	function housekeeping_common($debug) {
 		expire_cached_files($debug);
 		expire_lock_files($debug);
@@ -1517,6 +1536,5 @@
 		//_debug("Cleaned $rc cached tags.");
 
 		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_HOUSE_KEEPING, "hook_house_keeping", "");
-
 	}
 ?>