Quellcode durchsuchen

Fix extension hook for updated articles (#1932)

* Fix extension hook for updated articles

https://github.com/FreshRSS/FreshRSS/issues/1926

* Enable extensions during PubSubHubbub

* A little array protection

* Changelog 1926

https://github.com/FreshRSS/FreshRSS/issues/1926
https://github.com/FreshRSS/FreshRSS/pull/1932

* Add null check
Alexandre Alapetite vor 7 Jahren
Ursprung
Commit
031acde003
4 geänderte Dateien mit 18 neuen und 1 gelöschten Zeilen
  1. 1 0
      CHANGELOG.md
  2. 8 1
      app/Controllers/feedController.php
  3. 3 0
      lib/Minz/ExtensionManager.php
  4. 6 0
      p/api/pshb.php

+ 1 - 0
CHANGELOG.md

@@ -9,6 +9,7 @@
 	* Built-in extension to fix Tumblr feeds from European Union due to GDPR [#1894](https://github.com/FreshRSS/FreshRSS/issues/1894)
 * Bug fixing
 	* Fix bug in case of bad i18n in extensions [#1797](https://github.com/FreshRSS/FreshRSS/issues/1797)
+	* Fix extension callback for updated articles and PubSubHubbub [#1926](https://github.com/FreshRSS/FreshRSS/issues/1926)
 	* Fix regression in fetching full articles content [#1917](https://github.com/FreshRSS/FreshRSS/issues/1917)
 	* Fix several bugs in the new Fever API [#1930](https://github.com/FreshRSS/FreshRSS/issues/1930)
 	* Updated sharing to Mastodon [#1904](https://github.com/FreshRSS/FreshRSS/issues/1904)

+ 8 - 1
app/Controllers/feedController.php

@@ -351,13 +351,20 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
 							//This entry already exists and is unchanged. TODO: Remove the test with the zero'ed hash in FreshRSS v1.3
 							$oldGuids[] = $entry->guid();
 						} else {	//This entry already exists but has been updated
-							//Minz_Log::debug('Entry with GUID `' . $entry->guid() . '` updated in feed ' . $feed->id() .
+							//Minz_Log::debug('Entry with GUID `' . $entry->guid() . '` updated in feed ' . $feed->url() .
 								//', old hash ' . $existingHash . ', new hash ' . $entry->hash());
 							$mark_updated_article_unread = $feed->attributes('mark_updated_article_unread') !== null ? (
 									$feed->attributes('mark_updated_article_unread')
 								) : FreshRSS_Context::$user_conf->mark_updated_article_unread;
 							$needFeedCacheRefresh = $mark_updated_article_unread;
 							$entry->_isRead(FreshRSS_Context::$user_conf->mark_updated_article_unread ? false : null);	//Change is_read according to policy.
+
+							$entry = Minz_ExtensionManager::callHook('entry_before_insert', $entry);
+							if ($entry === null) {
+								// An extension has returned a null value, there is nothing to insert.
+								continue;
+							}
+
 							if (!$entryDAO->inTransaction()) {
 								$entryDAO->beginTransaction();
 							}

+ 3 - 0
lib/Minz/ExtensionManager.php

@@ -194,6 +194,9 @@ class Minz_ExtensionManager {
 	 * @param string[] $ext_list the names of extensions we want to load.
 	 */
 	public static function enableByList($ext_list) {
+		if (!is_array($ext_list)) {
+			return;
+		}
 		foreach ($ext_list as $ext_name => $ext_status) {
 			if (is_int($ext_name)) {	//Legacy format int=>name
 				self::enable($ext_status);

+ 6 - 0
p/api/pshb.php

@@ -116,6 +116,8 @@ if ($self !== base64url_decode($canonical64)) {
 	$self = base64url_decode($canonical64);
 }
 
+Minz_ExtensionManager::init();
+
 $nb = 0;
 foreach ($users as $userFilename) {
 	$username = basename($userFilename, '.txt');
@@ -132,6 +134,10 @@ foreach ($users as $userFilename) {
 		                             join_path(FRESHRSS_PATH, 'config-user.default.php'));
 		new Minz_ModelPdo($username);	//TODO: FIXME: Quick-fix while waiting for a better FreshRSS() constructor/init
 		FreshRSS_Context::init();
+		if (FreshRSS_Context::$user_conf != null) {
+			Minz_ExtensionManager::enableByList(FreshRSS_Context::$user_conf->extensions_enabled);
+		}
+
 		list($updated_feeds, $feed, $nb_new_articles) = FreshRSS_feed_Controller::actualizeFeed(0, $self, false, $simplePie);
 		if ($updated_feeds > 0 || $feed != false) {
 			$nb++;